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