眾所周知,計算機硬件主要由CPU(運算器和控制器)、存儲器(內存和外存)、外部設備(輸入/輸出設備)等構成。那這幾個部件之間是如何協同工作的?下面逐一介紹這幾部件,以及這幾個部件之間協同工作方式。
一、CPU:Central Processing Unit
中央處理器,俗稱“計算機的大腦”。
1.1 CPU的組成
傳統上,CPU由控制器和運算器這兩個主要部件組成。
隨著集成電路技術的不斷發展和進步,新型CPU紛紛集成了一些原先置于CPU之外的分立功能部件,如浮點處理器、高速緩存(Cache)等,在大大提高CPU性能指標的同時,也使得CPU的內部組成日益復雜化。
1.1.1控制器
控制器是整個計算機系統的指揮中心。在控制器的指揮控制下,運算器、存儲器和輸入/輸出設備等部件協同工作,構成了一臺完整的通用計算機。
控制器根據程序預定的指令執行順序,從主存取出一條指令,按該指令的功能,用硬件產生所需的帶有時序標志的一系列微操作控制信號,控制計算機內各功能部件的操作,協調和指揮整個計算機完成指令的功能。
控制器通常由程序計數器(PC)、指令寄存器(IR)、指令譯碼器(ID)、時序發生器和操作控制器組成。其主要功能包括:
- 從主存中取出一條指令,并指出下一條指令在主存中的位置;
- 對指令進行譯碼,并產生相應的操作控制信號,以便啟動規定的動作;
- 指揮并控制CPU、主存和輸入/輸出設備之間數據流動的方向。
1.1.2運算器
運算器是計算機中用于實現數據加工處理等功能的部件,它接受控制器的命令,負責完成對操作數據的加工處理任務,其核心部件是算術邏輯單元(Arithmetic Logic Unit,ALU)。
相對控制器而言,運算器接受控制器的命令而進行動作,即運算器所進行的全部操作都是由控制器發出的控制信號來指揮的,所以它是執行部件。
運算器由算術邏輯單元(ALU)、累加寄存器(AC)、數據寄存器(DR)和程序狀態字寄存器(PSW)組成。它有兩個主要功能:
- 執行所有的算術運算;
- 執行所有的邏輯運算,并進行邏輯測試。
1.2 CPU中的主要寄存器
在CPU中至少要有六類寄存器:指令寄存器(IR)、程序計數器(PC)、地址寄存器(AR)、數據寄存器(DR)、累加寄存器(AC)、程序狀態字寄存器(PSW)。
這些寄存器用來暫存一個計算機字,其數目可以根據需要進行擴充。
下面詳細介紹這些寄存器的功能與結構。
1.2.1 數據寄存器(DR)
數據寄存器(Data Register,DR)主要作為CPU和主存、外設之間信息傳輸的中轉站,用以彌補CPU和主存、外設之間操作速度上的差異。
數據寄存器用來暫時存放由主存儲器讀出的一條指令或一個數據字;反之,當向主存存入一個數據字時,也暫時將它們存放在數據寄存器中。
數據寄存器的作用是 :
- 作為CPU和主存、外圍設備之間信息傳送的中轉站;
- 彌補CPU和主存、外圍設備之間在操作速度上的差別;
- 在單累加器結構的運算器中,數據寄存器還可兼作操作數寄存器。
1.2.2 指令寄存器
指令寄存器(Instruction Register,IR)用來保存當前正在執行的一條指令。
當執行一條指令時,先把該指令從主存讀取到數據寄存器中,然后再傳送至指令寄存器。
一條指令被劃分為操作碼和地址碼2個字段。為了執行任何給定的指令,必須對操作碼進行測試,以便識別所要求的操作。指令譯碼器(Instruction Decoder,ID)就是完成這項工作的。
指令譯碼器對來自指令寄存器的操作碼部分進行譯碼,以產生操作性質的控制電位,并將其送到微操作控制線路上,在時序部件定時信號作用下,產生具體的操作控制信號。
指令寄存器中操作碼字段的輸出就是指令譯碼器的輸入。操作碼一經譯碼后,即可向操作控制器發出具體操作的特定信號。
1.2.3 程序計數器
程序計數器(Program Counter,PC)用來指出下一條指令在主存儲器中的單元地址。
在程序執行之前,首先必須將程序的首地址,即程序的第一條指令所在的主存單元地址送入PC。因此PC的內容即是從主存提取的第一條指令的地址。
當執行指令時,CPU能自動遞增PC的內容,使其始終保持將要執行的下一條指令的主存地址,為取下一條指令做好準備。若為單字長指令,則(PC)+1?PC,若為雙字長指令,則(PC)+2?PC,以此類推。
但是,當遇到轉移指令時,下一條指令的地址將由轉移指令的地址碼字段指定,而不是像通常那樣通過順序遞增PC的內容來取得。
因此,程序計數器的結構應當是具有寄存信息和計數兩種功能的結構。
1.2.4 地址寄存器
地址寄存器(Address Register,AR)用來保存CPU當前所訪問的主存單元的地址。
由于在主存和CPU之間存在操作速度上的差異,所以必須使用地址寄存器來暫時保存主存的地址信息,直到主存的存取操作完成為止。
當CPU和主存進行信息交換,即CPU向主存存入/取出數據時,或者CPU從主存中讀出指令時,都要使用地址寄存器和數據寄存器。
同樣,如果我們把外圍設備的設備地址作為像主存的地址單元那樣來看待,那么,當CPU和外圍設備交換信息時,我們同樣要使用地址寄存器和數據寄存器。
1.2.5 累加寄存器
累加寄存器通常簡稱累加器(Accumulator,AC),是一個通用寄存器。
累加器的功能是:當運算器的算術邏輯單元(ALU)執行算術或邏輯運算時,為ALU提供一個工作區,可以為ALU暫時保存一個操作數或運算結果。
顯然,運算器中至少要有一個累加寄存器。
1.2.6 程序狀態字寄存器
程序狀態字(Program Status Word,PSW)用來表征當前運算的狀態及程序的工作方式。
程序狀態字寄存器保存由算術指令和邏輯指令運行或測試的結果所建立起來的各種條件碼內容,如運算結果進/借位標志(C)、運算結果溢出標志(O)、運算結果為零標志(Z)、運算結果為負標志(N)、運算結果符號標志(S)等,這些標志位通常分別用1位觸發器來保存。
除此之外,程序狀態字寄存器還保存中斷和系統工作狀態等信息,以便CPU和系統及時了解機器運行狀態和程序運行狀態。
因此,程序狀態字寄存器是一個保存各種狀態條件標志的寄存器。
二、存儲器
存儲器由內存儲器和外存儲器構成,內存儲器通常指的是內存,外存儲器通常指的是硬盤等。
2.1 內存
內存是計算機中重要的部件之一,它是與CPU進行溝通的橋梁。計算機中所有程序的運行都是在內存中進行的,因此內存的性能對計算機的影響非常大。內存也被稱為內存儲器,其作用是用于暫時存放CPU中的運算數據,以及與硬盤等外部存儲器交換的數據。只要計算機在運行中,CPU就會把需要運算的數據調到內存中進行運算,當運算完成后CPU再將結果傳送出來,內存的運行也決定了計算機的穩定運行。
2.2 硬盤
硬盤(英語:Hard Disk Drive,簡稱HDD)是電腦上使用堅硬的旋轉盤片為基礎的非揮發性存儲設備,它在平整的磁性表面存儲和檢索數字數據,信息通過離磁性表面很近的磁頭,由電磁流來改變極性方式被電磁流寫到磁盤上,信息可以通過相反的方式讀取,例如讀頭經過紀錄數據的上方時磁場導致線圈中電氣信號的改變。硬盤的讀寫是采用隨機存取的方式,因此可以以任意順序讀取硬盤中的數據。硬盤包括一至數片高速轉動的磁盤以及放在執行器懸臂上的磁頭。
三、指令
指令是計算機硬件能夠識別并直接執行操作的命令,一臺計算機中所有指令的集合構成了該計算機的指令系統。指令系統是表征一臺計算機性能的重要因素,其格式與功能不僅直接影響到機器的硬件結構,也直接影響到系統軟件,影響到機器的適用范圍。因此,設計一個合理有效、功能齊全、通用性強并且豐富的指令系統是至關重要的。
從計算機組成的層次結構來說,計算機的指令分為微指令、機器指令和宏指令三類。微指令是微程序級的命令,屬于硬件;宏指令是由若干條機器指令組成的軟件指令,屬于軟件;機器指令,也就是我們通常所說的指令,介于微指令與宏指令之間,每條指令可完成一個獨立的算術運算或邏輯運算。
3.1 指令系統的發展
回顧計算機的發展歷史,指令系統的發展經歷了從簡單到復雜的演變過程。早在1950-1960年代,計算機大多數采用分立元件的晶體管或電子管組成,其體積龐大,價格也很昂貴,因此計算機的硬件結構比較簡單,所支持的指令系統也只有十幾至幾十條最基本的指令,而且尋址方式簡單。到1960年代中期,隨著集成電路的出現,計算機的功耗、體積、價格等不斷下降,硬件功能不斷增強,指令系統也越來越豐富。1960年代后期,開始出現系列計算機,即基本指令系統相同、基本體系結構相同的一系列計算機。
在1970年代,高級語言已成為大、中、小型機的主要程序設計語言,計算機應用日益普及。計算機設計者們利用當時已經成熟的微程序技術和飛速發展的VLSI技術,增設各種各樣復雜的、面向高級語言的指令,使指令系統越來越龐大,按這種方法設計的計算機系統稱為復雜指令系統計算機(Complex Instruction Set Computer),簡稱CISC。如此龐大的指令系統不僅使計算機的研制周期變長,難以保證正確性,不易調試維護,而且采用了大量使用頻率很低的復雜指令而造成硬件資源的浪費。為此,人們又提出了便于VLSI技術實現的精簡指令系統計算機(Reduced Instruction Set Computer),簡稱RISC,它是一種計算機體系結構的設計思想,是近代計算機體系結構發展史中的一個里程碑。1990年代初,IEEE的Michael Slater對于RISC的定義做了如下描述: RISC處理器所設計的指令系統應使流水線處理能高效率執行,并使優化編譯器能生成優化代碼。
3.2 指令系統的性能要求
指令系統的性能決定了計算機的基本功能,其設計是計算機系統設計的一個核心問題,不僅關系到計算機的硬件結構,同時關系到用戶的使用需要。一個完善的指令系統應滿足以下四個方面的要求:
1. 完備性
指令系統的完備性是指用匯編語言編寫各種程序時,指令系統直接提供的指令足夠使用,而不必用軟件來實現。一臺計算機中最基本和必不可少的指令構成了指令系統的完備性。而其他一些指令可以通過基本的指令來實現,或者直接通過硬件來實現,兩者只是在執行時間和編寫程序的難易程度上有差別。在指令系統中采用硬件指令,是為了提高程序執行的速度以及便于用戶編寫程序。
2. 有效性
有效性是指利用該指令系統所提供的指令編寫的程序能夠高效率的運行。高效率主要表現在程序占據存儲空間小、執行速度快。通常,一個功能完善的指令系統必定有很好的有效性。
3. 規整性
規整性是指指令系統的對稱性、勻齊性、指令格式和數據格式的一致性。
指令的對稱性是指在指令系統中所有的寄存器和存儲器單元都可同等對待,所有的指令都可使用各種尋址方式,這對提高程序的可讀性和簡化程序設計帶來了便利之處。
指令的勻齊性是指一種操作性質的指令可以支持各種數據類型,例如算術運算指令可支持字節、字和雙字整數運算、十進制數運算和單、雙精度浮點運算等。因此程序設計者無須考慮數據類型而選用指令,提高了編程效率。
指令的格式和數據格式的一致性是指指令長度和數據長度有一定的關系,以方便處理和存取。
4. 兼容性
兼容性是指計算機的體系結構設計基本相同,計算機之間具有相同的基本結構、數據表示和共同的基本指令集合,因此指令系統是兼容的,即同一個軟件可以不加修改就在其他系統結構相同的機器上使用。目前,除了系列計算機的指令系統兼容之外,新推出機種的指令系統包含所有舊機種的全部指令,實現了 “向上兼容”,即低檔機上運行的軟件不需任何修改便可在高檔機上運行。
四、相互之間的關系
可以用一幅圖來概括他們之間是如何協作使得計算機能夠正常工作,如圖所示: