電子計算機自問世以來,其體系結構經曆了長足的發展,到今天為止,計算機體系結構設計已發展成為計算機科學體系中的重要組成部分。
從本質上講,計算機體系結構是一門設計計算機的學科,包括計算機的指令系統設計、結構設計、實作技術,以及與系統軟體作業系統和編譯器相關的一系列技術。處理器技術是計算機體系結構的核心。處理器體系結構按照指令系統結構可分為複雜指令集計算機(complex instruction set computer,cisc)和精簡指令集計算機(reduced instruction set computer, risc)兩類。
指令是指控制計算機執行某種操作的指令,也稱為機器指令。指令的作用是協調各硬體部件之間的工作關系,它反映了計算機所擁有的基本功能,是計算機運作的最小功能機關。一台計算機中所有機器指令的集合,稱為這台計算機的指令集或者指令系統。
指令系統的設計是計算機體系結構設計中的一個核心問題。體系結構是計算機設計者所面對的計算機屬性,它們首先看到的是計算機的主要結構——指令系統。指令系統是傳統計算機體系結構設計的任務,即程式員面對的(看得見的)指令系統的設計。一般說來,一個完善的指令系統應具有完備性、有效性、規整性和相容性四個方面的特性。
計算機指令系統的特征一般包括以下幾個方面:
1)指令格式。指令通常由操作碼(也稱機器字)字段和位址碼字段組成。操作碼的長度可以是固定的,也可能是可變長的。
2)指令長度。一個指令字中包含二進制代碼的位數,稱為該指令字的長度。而機器字長是指計算機能直接處理的二進制資料的位數,它決定了計算機的運算精度,它與處理器内的寄存器長度是等價的。指令字長和機器字長是兩個不同的概念,指令字長可以等于機器字長,也可以是機器字長的1.5倍或2倍等。
3)指令操作碼在處理器内的存儲形式。一般存放于存儲器或通用寄存器中。
4)指令周期。計算機完成的基本功能是執行程式,要執行的程式由一串指令組成,并且存放在存儲器中,處理器通過執行程式指定的指令來完成實際的工作。一般可以将指令的執行過程分為兩步完成:第一步,從記憶體中讀出指令并送入處理器,這個階段稱為取指階段;第二步,對指令的操作碼進行解釋并完成指定的操作,這個階段稱為執行階段。完成指令的這兩個階段所需要的時間,就構成了指令的一個指令周期。
5)指令類型。一台計算機指令系統的指令一般從幾十條到幾百條不等。不同類型的計算機,其硬體的功能差異很大,相應地其指令系統的差别也很大。但無論其規模大小,一般都包含有如下的一些基本功能類型的指令:
資料傳送類指令。
算術運算類指令。
邏輯運算指令。
移位操作指令。
i/o類指令。
串操作指令。
程式控制轉移類指令。
處理機控制類指令。
6)指令系統支援的尋址方式。所謂指令系統的尋址方式,就是形成操作數有效位址的方法。一般在指令的位址碼字段中存放的并不是操作數所在記憶體的實際位址,一般被稱為“形式位址”或“邏輯位址”。存放操作數的記憶體儲器的位址,才是操作數的實際位址,一般稱為“有效位址”。每種機器的指令系統都有自己的一套尋址方式。不同計算機的尋址方式的意義和名稱并不統一,但基本上可以歸結為以下幾種:立即尋址、直接尋址、間接尋址、寄存器尋址、基址尋址、變址尋址、相對尋址和堆棧尋址以及它們的變形與組合。在指令中,一般需要設定一位或幾位用作方式字段,用來确定目前指令使用的是何種尋址方式。
以上特征構成了一台計算機指令系統最基本的特點,根據指令系統不同的特點,計算機體系結構呈現出不同的形式。目前,根據指令系統功能結構的不同,計算機體系結構發展趨勢呈現兩種截然不同的方向:
複雜指令集計算技術(cisc):強化指令功能,實作軟體功能向硬體功能轉移。
精簡指令集計算技術(risc):盡可能地降低指令集結構的複雜性,以達到簡化實作、提高性能的目的。
相同的指令系統可以通過“硬體布線”或“微程式”的方法來實作,前者通過處理器的硬體電路來實作,後者通過“微程式”來實作。如果指令集以硬連接配接的形式實作,那麼對于複雜指令來說,電路設計就非常困難;反之,若用微程式來實作指令集,則可以實作複雜指令。現代處理器一般都使用微碼(即微程式)來實作。
在使用微碼技術的處理器中,實際存在着兩套不同層次的指令:一套是面向程式員的高層的指令;一套是面向硬體實作的底層的微碼。在指令與微碼之間存在着一個“解釋器”,它将指令翻譯成對應的微碼序列。由此可以想象,指令與微碼之間的關系實際上是“子程式調用”思想的推廣。
微碼相對于指令的特點:
1)微碼代表的是簡單的基本操作,而指令可能非常複雜。
2)微碼具備快速取指操作能力:所有的微碼都位于rom中,而指令位于記憶體中。
3)微碼的格式規則、簡單,易于譯碼。
4)微碼的執行速度快,而指令相對較慢。
現代cisc處理器均采用微碼實作。
2.4.2 cisc結構
cisc是早期計算機體系結構設計的主流思想,突出特點是指令系統龐大,指令格式、指令長度不統一,指令系統功能豐富強大。
cisc設計思想
cisc的設計思想興盛于20世紀六七十年代,主要設計原則是:
1)指令越豐富功能越強,編譯程式越好寫,指令效率越高。
2)指令系統越豐富,越可減輕軟體危機。
3)指令系統豐富,尤其是存儲器操作指令的增多,可以改善系統結構的品質。
4)以微程式控制器為核心,指令存儲器與資料存儲器共享同一個實體存儲空間。
如圖2-7所示是一個典型的cisc處理器結構。
cisc追求的目标是:強化指令功能,減少程式的指令條數,以達到提高性能的目的。
作業系統的實作在很大程度上取決于中央處理器體系結構的支援。主要表現在對以下方面的支援:
中斷處理。
程序管理。
存儲管理和保護。
系統工作狀态的建立與切換。
美國intel公司設計的奔騰(pentium)處理器是cisc體系結構的優秀典範,它有191種指令和9種尋址方式。
cisc的缺陷
大量豐富的指令、可變的指令長度、多樣的尋址方式是cisc的特點,但當其發展提高到一定程度後,指令系統的複雜性便成為其進一步提高功能的包袱,也就是cisc缺點所在。1979 年,以美國人david patterson為首的一批科學家對複雜指令系統結構的合理性進行了深入研究,研究結果表明cisc結構存在下列主要問題:
指令使用率不均衡。在cisc結構的指令系統中,各種指令的使用頻率相差懸殊。據統計,約有20%的指令使用頻率最大,占運作時間的80%。也就是說,有80%的指令隻在20%的運作時間内才會用到,即所謂的“二八定律”。
結構複雜不利于vlsi實作。cisc結構指令系統的複雜性導緻整個計算機系統結構的複雜性,不僅增加了研制時間和成本,而且還容易造成設計錯誤。另外,cisc結構指令系統的複雜性還給vlsi設計帶來了很大負擔,大量的複雜指令必然增加譯碼的難度,不利于提高運作速度,且容易導緻晶片工作不穩定。
不利于采用先進結構提高性能。在cisc結構的指令系統中,由于各條指令的功能不均衡,不利于采用先進的計算機體系結構技術(如流水線技術)來提高系統的性能,阻礙了計算機整體能力的進一步提高。
針對上述問題,人們提出了risc結構設想。
二八定律,也叫巴萊多定律,是19世紀末20世紀初意大利經濟學家巴萊多發明的。他認為,在任何一組東西中,最重要的隻占其中一小部分,約20%,其餘80%的盡管是多數,卻是次要的,是以又稱二八法則。人類的社會實踐活動證明,二八法則具有廣泛的适用性,不僅适用于經濟學、管理學、心理學等社會科學,在計算機領域也普遍适用。
相對于cisc,risc的指令系統相對簡單,隻要求硬體執行很有限且最常用的那部分指令,大部分複雜的操作則使用成熟的編譯技術,由簡單指令合成。
risc設計思想
根據1979 年對複雜指令系統結構的合理性研究的成果,正式提出了risc的概念。risc 并非隻是簡單地減少指令,而是把着眼點放在了如何使計算機的結構更加簡單合理及提高運算速度上。通過優先選取使用頻率最高的簡單指令,避免複雜指令;将指令長度固定,指令格式和尋址方式種類減少;以控制邏輯為主,不用或少用微碼控制等措施來達到上述目的。
risc思想的核心是:risc技術是一種新的計算機體系結構設計思想,它包括一切能簡單有效地提高計算機性能的思想和方法。從現代計算機系統設計和應用統計得出的兩個規律:“simple is fast”和“small is fast”,即:簡單事件可以更快速處理;小規模器件的速度可以做得更快,展現了risc思想的精髓。概括地說,risc指令集設計時根據阿姆達爾(amdahl)定律選擇使用機率高的指令構成指令集,這些大機率指令一般是簡單指令,是以控制器可以設計得簡單、高速,且占處理器電路晶片的面積少,空出較多的內建電路晶片面積用來增加寄存器數量。在編譯的配合下減少訪存次數,減少指令間的各種相關和競争,盡可能得到最佳指令序列,進而提高計算機系統的整體性能。
阿姆達爾(amdahi)定律
系統優化某部件所獲得的系統性能的改善程度,取決于該部件被使用的頻率,或所占總執行時間的比例。
提出risc設計的目标主要是為進一步提高處理器性能,我們首先了解一下處理器性能的計算機公式:
處理器執行時間 = ic×cpi×cc
處理器執行時間:執行一般代碼所需的處理器時間(通常用時鐘周期的個數計算)。
ic:代碼的指令條數(instruction count),與指令集設計編譯器的優化有關。
cpi:平均執行每條指令的時鐘周期數,與指令集設計、體系結構等技術有關。
cc:時鐘周期(clock cycle),與計算機組成、ic工藝等技術有關。
處理器執行時間決定了處理器的性能,處理器執行時間越短,表示處理器性能越卓越。根據性能公式,要縮短處理器執行時間,可以通過減小ic、cpi或者cc,由于精簡ic、cc的技術手段有限,是以,縮短cpi成為縮短處理器執行時間的主要技術途徑。risc對比cisc最大的優勢就是對cpi的精簡能力。
risc結構特征
從指令系統結構上看,risc 體系結構一般具有如下特點:
1)精簡指令系統。可以通過對過去大量的機器語言程式進行指令使用頻度的統計,來選取其中常用的基本指令,并根據對作業系統、進階語言和應用環境等的支援增設一些最常用的指令。
2)減少指令系統可采用的尋址方式種類,一般限制在2或3種。
3)在指令的功能、格式和編碼設計上盡可能地簡化和規整,讓所有指令盡可能等長。
4)單機器周期指令,即大多數的指令都可以在一個機器周期内完成,并且允許處理器在同一時間内執行一系列的指令。
risc結構在使用相同的晶片技術和相同運作時鐘下,其運作速度将是cisc的2 ~ 4 倍。由于risc處理器的指令系統是精簡的,是以它的記憶體管理單元、浮點單元等都能設計在同一塊晶片上。risc處理器比相對應的cisc處理器設計更簡單,所需要的時間将變得更短,并可以應用更多先進的技術,開發更快的下一代處理器。但是risc 結構的多指令操作使得程式開發者必須小心地選用合适的編譯器,而且編寫的代碼量會變得非常大。另外,risc體系結構的處理器需要更快的記憶體,為解決此問題通常在處理器内部內建一級高速緩存。
如圖2-8所示是一個典型的risc處理器結構。
risc計算機具備結構簡單、易于設計和程式執行效率高的特點,是以得到了廣泛應用。當今unix領域64位處理器大多采用了risc技術,代表産品有:ibm、apple和motorola三個公司聯合開發的powerpc系列處理器、sun公司的sparc處理器和sgi公司的mips處理器等。另外在嵌入式系統領域risc技術也有廣泛應用。
與cisc 結構相比較,盡管risc 結構有上述的優點,但并不能認為risc 結構就可以取代cisc 結構。事實上,risc 和cisc 各有優勢,而且兩者正在逐漸融合,現代的cpu 往往采用cisc 的外圍,内部加入了risc 的特性,出現了所為謂的crip(cisc-risc processor)技術,pentium 的後期産品和以後的pentium pro、amd的k5等處理器都運用了crip技術,它們的核心都是基于risc體系結構的,接收cisc指令後将其分解成risc指令以便在同一時間内能夠執行多條指令。可見,處理器融合cisc與risc兩種技術,從軟體與硬體兩方面取長補短,将成為未來的發展方向之一。
從20世紀40年代開始,現代計算機發展曆程可以分為兩個明顯的發展時代:串行計算時代和并行計算時代。每一個計算時代都從體系結構發展開始,接着是系統軟體(特别是編譯器與作業系統)、應用軟體,最後随着問題求解環境的發展而達到頂峰。
自20世紀80年代以來,單處理器的性能一直以最高速度增長。但由于計算機電路的操作速度最終取決于光速,而現在的許多電路已運作在納秒級上,是以單處理器體系結構的發展正在接近極限。為了超越單處理器的性能,一種合乎邏輯的方法就是把多個微處理器聯結起來,形成并行計算機。
并行計算機是由一組處理單元組成的。這組處理單元通過互相之間的通信與協作,以更快的速度共同完成一項大規模的計算任務。是以,并行計算機的兩個最主要的組成部分是計算節點和節點間的通信與協作機制。并行計算機體系結構的發展也主要展現在計算節點性能的提高以及節點間通信技術的改進兩方面。
并行處理概念
隻要在同一時刻或是在同一時間間隔内完成兩種或兩種以上性質相同或不同的工作,它們在時間上能互相重疊,就稱為并行處理。并行處理有兩個不同特征:
同時性(simultaneity):兩個或多個事件在同一時刻發生。
并發性(concurrency):兩個或多個事件在同一時間間隔内發生。
對于計算機而言,并行處理可以從3個方面了解:
1)從計算機系統中執行程式的角度。包括指令内部的并行處理,一條指令内部各個微操作之間的并行;指令之間的并行,多條指令的并行執行;任務或程序之間的并行,多個任務或程式段的并行執行;以及作業或程式之間的并行,多個作業或多道程式的并行。
2)從計算機系統中資料處理的角度。主要是字元位串和二進制位之間的并行處理。
3)計算機資訊加工的各個步驟和階段。包括存儲器操作并行、處理器操作步驟并行(流水線技術)、處理器操作并行(多處理器系統)和網絡節點操作并行等。
并行處理系統
并行處理計算機結構通常包括以下3種形式:
流水線計算機:主要通過時間重疊,讓多個部件在時間上交錯重疊地并行執行運算和處理,以實作時間上的并行。
陣列處理機:主要通過資源重複,設定大量算術邏輯單元,在同一控制部件作用下同時運算和處理,以實作空間上的并行。
多處理器系統:主要通過資源共享,讓共享輸入/輸出子系統、資料庫資源及共享或不共享存儲的一組處理機在統一的作業系統全盤控制下,實作軟體和硬體各級上互相作用,達到時間和空間上的異步并行。
流水線技術在下一節介紹,陣列處理機屬于并行處理結構的特例,不具有普遍意義。是以,我們着重介紹多處理器系統。
按照著名的弗林(flynn)計算機分類模型,根據計算機的指令和資料流的并行性,把所有的計算機分為以下4類。
(1)sisd
sisd?(single instruction stream single data stream,單指令流單資料流)指計算機的指令部件每次隻對一條指令進行譯碼和處理,并隻對一個操作部分配置設定資料,是按照排序的方式進行順序處理,也就是說通常由一個處理器和一個存儲器組成。它通過執行單一的指令流對單一的資料流進行操作,指令按順序讀取,資料在每一時刻也隻能讀取一個,傳統的馮?諾依曼機均屬此類。弱點是單片處理器處理能力有限,同時,這種結構也沒有發揮資料進行中的并行性潛力,在實時系統或高速系統中很少采用sisd結構。
(2)simd
simd(single instruction stream multiple data stream,單指令流多資料流)屬于并行運算計算機,計算機有多個處理單元,由單一的指令部件控制,按照同一指令流的要求為它們配置設定各不相同的資料并進行處理。系統結構為由一個控制器、多個處理器、多個存儲子產品和一個互連總線(網絡)組成。所有“活動的”處理器在同一時刻執行同一條指令,但每個處理器執行這條指令時所用的資料是從它本身的存儲子產品中讀取的。對操作種類多的算法,當要求存取全局資料或對于不同的資料要求做不同的處理時,它是無法獨立勝任的。另外,simd?一般都要求有較多的處理單元和極高的i/o吞吐率,如果系統中沒有足夠多的适合simd?處理的任務,采用simd?是不合算的,如陣列處理機、聯機處理。
(3)misd
misd(multiple instruction stream single data stream,多指令流單資料流)用于流水線處理計算機:計算機具有多個處理單元,按照多條不同的指令要求同時對同一資料流及其處理輸出的結果進行不同的處理,是把一個單元的輸出作為另一個單元的輸入。這種結構在目前常見的計算機系統中很少見,但是如果把早期的自動控制系統也作為計算機來看待的話,則在早期的自動控制系統中比較常見。
(4)mimd
mimd(multiple instruction stream multiple data stream,多指令流多資料流)又稱為多處理器系統:是指能實作指令、資料作業、任務等各級全面并行計算的多機處理系統,典型的mimd系統由多個處理器、多個存儲子產品和一個網際網路絡組成,每個處理器執行自己的指令,操作數也是各取各的。mimd結構中每個處理器都可以單獨程式設計,因而這種結構的可程式設計能力是最強的。但由于要用大量的硬體資源解決可程式設計問題,硬體使用率不高。常見的有mpp(massively parallel processor)系統、目前科研機構中的分布式計算系統。
多核cpu
科技使得越來越多的電路可以放置在一個矽片上,以緻計算機部件之間的實體差别逐漸變小,單獨的一個晶片就可以包括一個cpu和主存儲器,使得在單獨的裝置中提供一個完整的系統,并在更高的設計層面被用作一個抽象工具。在今天的技術程度下,單獨的晶片可以存放不止一個完整的cpu。這就是稱為多核cpu設
備的基礎體系結構:在同一晶片上存在兩個(或4個、8個等)cpu以及共用的高速緩沖存儲器。這種裝置簡化了mimd系統的建構,并已迅速應用于家用計算機。
這是對于計算機體系結構從處理器和資料流角度的一種分類模型,目前許多機器是這些類型的混合體,然而,這個模型作為體系結構設計架構還是有一定指導意義的。
許多早期的多處理器計算機屬于simd型,到了20世紀80年代,這種模型又重新引起人們的注意。然而最近幾年,mimd開始作為一種通用多處理器體系結構出現。mimd機器的崛起源于兩個因素:
1)具有較高的靈活性。在合适的軟硬體支援下,mimd可以作為高性能單使用者機使用,也能同時運作多個任務,或者是高性能多任務的組合。
2)可由具有成本效益優勢的微處理器建成。
流水線技術
提高計算機執行速度并不是改進計算機性能的唯一途徑,還可以通過改進機器的吞吐量,即機器在給定時間内可以完成的工作總量。
在不要求提高執行速度的前提下,增加計算機吞吐量的一個例子是流水線技術,該技術允許一個機器周期内的各步驟重疊進行。特别是當執行一條指令時,可以讀取下一條指令,也就意味着,在任何一個時刻可以有不止一條指令在“流水線”上,每條指令處在不同的執行階段。這樣,即便讀取和執行每條指令的時間保持不變,計算機總的吞吐量卻提高了。
流水線(pipeline)技術是提高處理器性能的最重要設計之一,是現代計算機系統結構中普遍使用的一種提高處理器性能的方式。
流水線技術的基本思想在馮?諾依曼歸納的第一台存儲程式計算機中已經提出,但限于目前的技術條件而沒有實作。1946年,burks等人提出的運算與輸入/輸出重疊操作是當今計算機中流水線技術的原始雛形。計算機的流水處理過程和工廠中的流水裝配線類似,其要點是在一個任務完成以前就開始另一個新的任務。為了實作流水,首先必須把輸入的任務分割為一系列子任務,使各子任務能在流水線的各個階段并發地同時執行。将任務連續不斷地輸入流水線,進而實作子任務級的并行。流水處理大幅度地改善了計算機系統的性能,是用并行處理方式來改善性能的一種經濟有效的方法。計算機發展到現在,流水線技術已經成為各類機器普遍采用的、用來改善性能的基本手段。