第1章計算機(jī)組成與體系結(jié)構(gòu)
1. 計算機(jī)系統(tǒng)組成
計算機(jī)系統(tǒng)是一個硬件和軟件的綜合體,可以把它看成按功能劃分的多級層次結(jié)構(gòu)。
系統(tǒng)軟件支持應(yīng)用軟件的運(yùn)行,為用戶開發(fā)應(yīng)用軟件提供平臺,用戶可以使用它,但不能隨意修改它。常用的系統(tǒng)軟件有操作系統(tǒng)、語言處理程序、連接程序、診斷程序和數(shù)據(jù)庫管理系統(tǒng)等。
1.1. 計算機(jī)硬件的組成
硬件通常是指一切看得見,摸得到的設(shè)備實體。原始的馮?諾依曼(VonNeumann)計算機(jī)在結(jié)構(gòu)上是以運(yùn)算器為中心的,而發(fā)展到現(xiàn)在,已轉(zhuǎn)向以存儲器為中心了。圖1-1所示為計算機(jī)最基本的組成框圖。
- 控制器。控制器是分析和執(zhí)行指令的部件,也是統(tǒng)一指揮并控制計算機(jī)各部件協(xié)調(diào)工作的中心部件,所依據(jù)的是機(jī)器指令??刂破鞯慕M成包含如下。
- 程序計數(shù)器PC:存儲下一條要執(zhí)行指令的地址;
- 指令寄存器IR:存儲即將執(zhí)行的指令;
- 指令譯碼器ID:對指令中的操作碼字段進(jìn)行分析解釋;
- 時序部件:提供時序控制信號。
- 運(yùn)算器。運(yùn)算器也稱為算術(shù)邏輯單元(ArithmeticandLogicUnit,ALU),其主要功能是在控制器的控制下完成各種算術(shù)運(yùn)算和邏輯運(yùn)算。運(yùn)算器的組成包含如下。
- 算術(shù)邏輯單元ALU:數(shù)據(jù)的算術(shù)運(yùn)算和邏輯運(yùn)算;
- 累加寄存器AC:通用寄存器,為ALU提供一個工作區(qū),用在暫存數(shù)據(jù);
- 數(shù)據(jù)緩沖寄存器DR:寫內(nèi)存時,暫存指令或數(shù)據(jù);
- 狀態(tài)條件寄存器PSW:存狀態(tài)標(biāo)志與控制標(biāo)志(爭議點:也有將其歸為控制器的)。
- 主存儲器。主存儲器也稱為內(nèi)存儲器(通常簡稱為“內(nèi)存”或“主存”)。存儲現(xiàn)場操作的信息與中間結(jié)果,包括機(jī)器指令和數(shù)據(jù)。
- 輔助存儲器。輔助存儲器也稱為外存儲器,通常簡稱為外存或輔存。存儲需要長期保存的各種信息。
- 輸入設(shè)備。輸入設(shè)備的任務(wù)是把人們編好的程序和原始數(shù)據(jù)送到計算機(jī)中去,并且將它們轉(zhuǎn)換成計算機(jī)內(nèi)部所能識別和接受的信息方式。按輸入信息的形態(tài)可分為字符(包括漢字)輸入、圖形輸入、圖像輸入及語音輸入等。目前,常見的輸入設(shè)備有鍵盤、鼠標(biāo)、掃描儀等。
- 輸出設(shè)備。輸出設(shè)備的任務(wù)是將計算機(jī)的處理結(jié)果以人或其他設(shè)備所能接受的形式送出計算機(jī)。目前,最常用的輸出設(shè)備是打印機(jī)和顯示器。有些設(shè)備既可以是輸入設(shè)備,同時也可以是輸出設(shè)備,例如,輔助存儲器、自動控制和檢測系統(tǒng)中使用的數(shù)模轉(zhuǎn)換裝置等。
1.2. 計算機(jī)系統(tǒng)結(jié)構(gòu)的分類
計算機(jī)的發(fā)展經(jīng)歷了電子管和晶體管時代、集成電路時代(中小規(guī)模、大規(guī)模、超大規(guī)模、甚大規(guī)模、極大規(guī)模)。目前,世界最高水平的單片集成電路芯片上所容納的元器件數(shù)量已經(jīng)達(dá)到80多億個。
- 存儲程序的概念
- “存儲程序”的概念是馮?諾依曼等人于1946年6月首先提出來的,它可以簡要地概括為以下幾點:
- 計算機(jī)(指硬件)應(yīng)由運(yùn)算器、存儲器、控制器、輸入設(shè)備和輸出設(shè)備五大基本部件組成。
- 計算機(jī)內(nèi)部采用二進(jìn)制來表示指令和數(shù)據(jù)。
- 將編好的程序和原始數(shù)據(jù)事先存入存儲器中,然后再啟動計算機(jī)工作。這就是存儲程序的基本含義。馮?諾依曼對計算機(jī)世界的最大貢獻(xiàn)在于“存儲程序控制”概念的提出和實現(xiàn)。六十多年來,雖然計算機(jī)的發(fā)展速度驚人,但就其結(jié)構(gòu)原理來說,目前絕大多數(shù)計算機(jī)仍建立在存儲程序概念的基礎(chǔ)上。通常把符合存儲程序概念的計算機(jī)統(tǒng)稱為馮?諾依曼型計算機(jī)。當(dāng)然,現(xiàn)代計算機(jī)與早期計算機(jī)相比,在結(jié)構(gòu)上還是有許多改進(jìn)的。隨著計算機(jī)技術(shù)的不斷發(fā)展,也暴露出了馮?諾依曼型計算機(jī)的主要弱點:存儲器訪問會成為瓶頸。目前,已出現(xiàn)了一些突破存儲程序控制的計算機(jī),統(tǒng)稱為非馮?諾依曼型計算機(jī),例如,數(shù)據(jù)驅(qū)動的數(shù)據(jù)流計算機(jī)、需求驅(qū)動的歸約計算機(jī)和模式匹配驅(qū)動的智能計算機(jī)等。
- Flynn分類
1966年,Michael.J.Flynn提出根據(jù)指令流、數(shù)據(jù)流的多倍性特征對計算機(jī)系統(tǒng)進(jìn)行分類(通常稱為Flynn分類法),有關(guān)定義如下。- 指令流:指機(jī)器執(zhí)行的指令序列;
- 數(shù)據(jù)流:指由指令流調(diào)用的數(shù)據(jù)序列,包括輸入數(shù)據(jù)和中間結(jié)果,但不包括輸出數(shù)據(jù)。
- Flynn根據(jù)不同的指令流-數(shù)據(jù)流組織方式,把計算機(jī)系統(tǒng)分成以下四類:
- 單指令流單數(shù)據(jù)流(SingleInstructionstreamandSingleDatastream,SISD):SISD其實就是傳統(tǒng)的順序執(zhí)行的單處理器計算機(jī),其指令部件每次只對一條指令進(jìn)行譯碼,并只對一個操作部件分配數(shù)據(jù)。
- 單指令流多數(shù)據(jù)流(SingleInstructionstreamandMultipleDatastream,SIMD):SIMD以并行處理機(jī)(矩陣處理機(jī))為代表,并行處理機(jī)包括多個重復(fù)的處理單元,由單一指令部件控制,按照同一指令流的要求為它們分配各自所需的不同數(shù)據(jù)。
- 多指令流單數(shù)據(jù)流(MultipleInstructionstreamandSingleDatastream,MISD):MISD具有n個處理單元,按n條不同指令的要求對同一數(shù)據(jù)流及其中間結(jié)果進(jìn)行不同的處理。一個處理單元的輸出又作為另一個處理單元的輸入。這類系統(tǒng)實際上很少見到。有文獻(xiàn)把流水線看作多個指令部件,稱流水線計算機(jī)是MISD。
- 多指令流多數(shù)據(jù)流(MultipleInstructionstreamandMultipleDatastream,MIMD):MIMD是指能實現(xiàn)作業(yè)、任務(wù)、指令等各級全面并行的多機(jī)系統(tǒng)。如多核處理器、多處理機(jī)屬于MIMD。
1.3. 復(fù)雜指令集系統(tǒng)與精簡指令集系統(tǒng)
在計算機(jī)系統(tǒng)結(jié)構(gòu)發(fā)展的過程中,指令系統(tǒng)的優(yōu)化設(shè)計有兩個截然相反的方向,一個是增強(qiáng)指令的功能,設(shè)置一些功能復(fù)雜的指令,把一些原來由軟件實現(xiàn)的、常用的功能改用硬件的指令系統(tǒng)來實現(xiàn),這種計算機(jī)系統(tǒng)稱為復(fù)雜指令系統(tǒng)計算機(jī)(ComplexInstructionSetComputer,CISC);另一個是盡量簡化指令功能,只保留那些功能簡單,能在一個節(jié)拍內(nèi)執(zhí)行完成指令,較復(fù)雜的功能用一段子程序來實現(xiàn),這種計算機(jī)系統(tǒng)稱為精簡指令系統(tǒng)計算機(jī)(ReducedInstructionSetComputer,RISC)。
-
CISC指令系統(tǒng)的特點
CISC指令系統(tǒng)的主要特點如下:- 指令數(shù)量眾多。指令系統(tǒng)擁有大量的指令,通常有100~250條。
- 指令使用頻率相差懸殊。最常使用的是一些比較簡單的指令,僅占指令總數(shù)的20%,但在程序中出現(xiàn)的頻率卻占80%。而大部分復(fù)雜指令卻很少使用。
- 支持很多種尋址方式。支持的尋址方式通常為5~20種。
- 變長的指令。指令長度不是固定的,變長的指令增加指令譯碼電路的復(fù)雜性。
- 指令可以對主存單元中的數(shù)據(jù)直接進(jìn)行處理。典型的CISC通常都有指令能夠直接對主存單元中的數(shù)據(jù)進(jìn)行處理,其執(zhí)行速度較慢。
- 以微程序控制為主。CISC的指令系統(tǒng)很復(fù)雜,難以用硬布線邏輯(組合邏輯)電路實現(xiàn)控制器,通常采用微程序控制。
-
RISC指令系統(tǒng)的特點
RISC要求指令系統(tǒng)簡化,操作在單周期內(nèi)完成,指令格式力求一致,尋址方式盡可能減少,并提高編譯的效率,最終到加快機(jī)器處理速度的目的。RISC指令系統(tǒng)的主要特點
如下。- 指令數(shù)量少。優(yōu)先選取使用頻率最高的一些簡單指令和一些常用指令,避免使用復(fù)雜指令。只提供了LOAD(從存儲器中讀數(shù))和STORE(把數(shù)據(jù)寫入存儲器)兩條指令對存儲器操作,其余所有的操作都在CPU的寄存器之間進(jìn)行。
- 指令的尋址方式少。通常只支持寄存器尋址方式、立即數(shù)尋址方式和相對尋址方式。
- 指令長度固定,指令格式種類少。因為RISC指令數(shù)量少、格式少、相對簡單,其指令長度固定,指令之間各字段的劃分比較一致,譯碼相對容易。
- 以硬布線邏輯控制為主。為了提高操作的執(zhí)行速度,通常采用硬布線邏輯(組合邏輯)來構(gòu)建控制器。
- 單周期指令執(zhí)行,采用流水線技術(shù)。因為簡化了指令系統(tǒng),很容易利用流水線技術(shù),使得大部分指令都能在一個機(jī)器周期內(nèi)完成。少數(shù)指令可能會需要多周期,例如,LOAD/STORE指令因為需要訪問存儲器,其執(zhí)行時間就會長一些。
- 優(yōu)化的編譯器:RISC的精簡指令集使編譯工作簡單化。因為指令長度固定、格式少、尋址方式少,編譯時不必在具有相似功能的許多指令中進(jìn)行選擇,也不必為尋址方式的選擇而費(fèi)心,同時易于實現(xiàn)優(yōu)化,從而可以生成高效率執(zhí)行的機(jī)器代碼。
- CPU中的通用寄存器數(shù)量多,一般在32個以上,有的可達(dá)上千個。大多數(shù)RISC采用了Cache方案,使用Cache來提高取指令的速度。而且,有的RISC使用兩個獨(dú)立的Cache來改善性能。一個稱為指令Cache,另一個稱為數(shù)據(jù)Cache。這樣,取指令和取數(shù)據(jù)可以同時進(jìn)行,互不干擾。
1.4. 總線
總線是一組能為多個部件分時共享的公共信息傳送線路。共享是指總線上可以掛接多個部件,各個部件之間相互交換的信息都可以通過這組公共線路傳送;分時是指同一時刻只允許有一個部件向總線發(fā)送信息,如果出現(xiàn)兩個或兩個以上部件同時向總線發(fā)送信息,勢必導(dǎo)致信號沖突。當(dāng)然,在同一時刻,允許多個部件同時從總線上接收相同的信息。
按總線相對于CPU或其他芯片的位置可分為內(nèi)部總線和外部總線兩種。在CPU內(nèi)部,寄存器之間和算術(shù)邏輯部件ALU與控制部件之間傳輸數(shù)據(jù)所用的總線稱為內(nèi)部總線;外部總線是指CPU與內(nèi)存RAM、ROM和輸入/輸出設(shè)備接口之間進(jìn)行通信的通路。由于CPU通過總線實現(xiàn)程序取指令、內(nèi)存/外設(shè)的數(shù)據(jù)交換,在CPU與外設(shè)一定的情況下,總線速度是制約計算機(jī)整體性能的最大因素。
按總線功能來劃分,又可分為地址總線、數(shù)據(jù)總線、控制總線三類,人們通常所說的總線都包括這三個組成部分,地址總線用來傳送地址信息,數(shù)據(jù)總線用來傳送數(shù)據(jù)信息,控制
總線用來傳送各種控制信號。
2. 存儲器系統(tǒng)
存儲器是用來存放程序和數(shù)據(jù)的部件,它是一個記憶裝置,也是計算機(jī)能夠?qū)崿F(xiàn)“存儲程序控制”的基礎(chǔ)。在計算機(jī)系統(tǒng)中,規(guī)模較大的存儲器往往分成若干級,稱為存儲器系統(tǒng)。
傳統(tǒng)的存儲器系統(tǒng)一般分為高速緩沖存儲器(Cache)、主存、輔存三級。主存可由CPU直接訪問,存取速度快,但容量較小,一般用來存放當(dāng)前正在執(zhí)行的程序和數(shù)據(jù)。輔存設(shè)置在主機(jī)外部,它的存儲容量大,價格較低,但存取速度較慢,一般用來存放暫時不參與運(yùn)行的程序和數(shù)據(jù),CPU不可以直接訪問輔存,輔存中的程序和數(shù)據(jù)在需要時才傳送到主存,因此它是主存的補(bǔ)充和后援。當(dāng)CPU速度很高時,為了使訪問存儲器的速度能與CPU的速度相匹配,又在主存和CPU間增設(shè)了一級Cache。Cache的存取速度比主存更快,但容量更小,用來存放當(dāng)前最急需處理的程序和數(shù)據(jù),以便快速地向CPU提供指令和數(shù)據(jù)。因此,計算機(jī)采用多級存儲器體系,確保能夠獲得盡可能高的存取速率,同時保持較低的成本。
多層級的存儲體系之所以能用低投入換來較高的存取速率,得益于局部性原理。局部性原理是指程序在執(zhí)行時呈現(xiàn)出局部性規(guī)律,即在一較短的時間內(nèi),程序的執(zhí)行僅局限于某個部分。相應(yīng)地,它所訪問的存儲空間也僅局限于某個區(qū)域。程序局部性包括時間局部性和空間局部性,時間局部性是指程序中的某條指令一旦執(zhí)行,不久以后該指令可能再次執(zhí)行。產(chǎn)生時間局部性的典型原因是由于程序中存在著大量的循環(huán)操作;空間局部性是指一旦程序訪問了某個存儲單元,不久以后,其附近的存儲單元也將被訪問,即程序在一段時間內(nèi)所訪問的地址可能集中在一定的范圍內(nèi),其典型情況是程序順序執(zhí)行。
存儲器中數(shù)據(jù)常用的存取方式有順序存取、直接存取、隨機(jī)存取和相聯(lián)存取四種。
- 順序存取:存儲器的數(shù)據(jù)以記錄的形式進(jìn)行組織。對數(shù)據(jù)的訪問必須按特定的線性順序進(jìn)行。磁帶存儲器采用順序存取的方式。
- 直接存取:與順序存取相似,直接存取也使用一個共享的讀寫裝置對所有的數(shù)據(jù)進(jìn)行訪問。但是,每個數(shù)據(jù)塊都擁有唯一的地址標(biāo)識,讀寫裝置可以直接移動到目的數(shù)據(jù)塊所在位置進(jìn)行訪問。存取時間也是可變的。磁盤存儲器采用直接存取的方式。
- 隨機(jī)存?。捍鎯ζ鞯拿恳粋€可尋址單元都具有自己唯一的地址和讀寫裝置,系統(tǒng)可以在相同的時間內(nèi)對任意一個存儲單元的數(shù)據(jù)進(jìn)行訪問,而與先前的訪問序列無關(guān)。主存儲器采用隨機(jī)存取的方式。
- 相聯(lián)存?。合嗦?lián)存取也是一種隨機(jī)存取的形式,但是選擇某一單元進(jìn)行讀寫是取決于其內(nèi)容而不是其地址。與普通的隨機(jī)存取方式一樣,每個單元都有自己的讀寫裝置,讀寫時間也是一個常數(shù)。使用相聯(lián)存取方式,可以對所有的存儲單元的特定位進(jìn)行比較,選擇符合條件的單元進(jìn)行訪問。為了提高地址映射的速度,Cache采取相聯(lián)存取的方式。
2.1. 主存儲器
主存用來存放計算機(jī)運(yùn)行期間所需要的程序和數(shù)據(jù),CPU可直接隨機(jī)地進(jìn)行讀/寫。主存具有一定容量,存取速度較高。由于CPU要頻繁地訪問主存,所以主存的性能在很大程度上影響了整個計算機(jī)系統(tǒng)的性能。根據(jù)工藝和技術(shù)不同,主存可分為隨機(jī)存取存儲器和只讀存儲器。
-
隨機(jī)存取存儲器
隨機(jī)存取存儲器(RandomAccessMemory,RAM)既可以寫入也可以讀出,但斷電后信息無法保存,因此只能用于暫存數(shù)據(jù)。RAM又可分為DRAM(DynamicRAM,動態(tài)RAM)和SRAM(StaticRAM,靜態(tài)RAM)兩種,DRAM的信息會隨時間逐漸消失,因此需要定時對其進(jìn)行刷新維持信息不丟失;SRAM在不斷電的情況下信息能夠一直保持而不會丟失。DRAM的密度大于SRAM且更加便宜,但SRAM速度快,電路簡單(不需要刷新電路),然而容量小,價格高。
-
只讀存儲器
只讀存儲器(ReadOnlyMemory,ROM)可以看作RAM的一種特殊形式,其特點是:存儲器的內(nèi)容只能隨機(jī)讀出而不能寫入。這類存儲器常用來存放那些不需要改變的信息。由于信息一旦寫入存儲器就固定不變了,即使斷電,寫入的內(nèi)容也不會丟失,所以又稱為固定存儲器。ROM一般用于存放系統(tǒng)程序BIOS(BasicInputOutputSystem,基本輸入輸出系統(tǒng))。
-
內(nèi)存編址方法在計算機(jī)系統(tǒng)中,存儲器中每個單元的位數(shù)是相同且固定的,稱為存儲器編址單位。
不同的計算機(jī),存儲器編址的方式不同,主要有字編址和字節(jié)編址。
內(nèi)存一般以字節(jié)(8位)為單位,或者以字為單位(字的長度可大可小,例如16位或者32位等,在這類試題中,一般會給出字的大?。?。
例如,內(nèi)存地址從AC000H到C7FFFH,則共有C7FFFFH-AC000H=1BFFFH個地址單元(轉(zhuǎn)換為十進(jìn)制后,為112KB)。如果該內(nèi)存地址按字(16bit)編址,則共有112KB - 16位。假設(shè)該內(nèi)存由28片存儲器芯片構(gòu)成,已知構(gòu)成此內(nèi)存的芯片每片有16KB個存儲單元,則該芯片每個存儲單元存儲(112KB-16)/(28-16KB)=4位。
2.2. 輔助存儲器
-
磁帶存儲器磁帶存儲器是一種順序存取的設(shè)備,其特點包括:存取時間較長,但存儲容量大,便于攜帶,價格便宜。磁帶應(yīng)用的場景越來越少,目前主要用于資料的歸檔保存。
-
硬盤存儲器在硬盤中,信息分布呈以下層次:記錄面、圓柱面、磁道和扇區(qū),如圖1-2所示。
一臺硬盤驅(qū)動器中有多個磁盤片,每個盤片有兩個記錄面,每個記錄面對應(yīng)一個磁頭,所以記錄面號就是磁頭號,如圖1-2(a)所示。所有的磁頭安裝在一個公用的傳動設(shè)備或支架上,磁頭一致地沿盤面徑向移動,單個磁頭不能單獨(dú)地移動。在記錄面上,一條條磁道形成一組同心圓,最外圈的磁道為0號,往內(nèi)則磁道號逐步增加,如圖1-2(b)所示。在一個盤組中,各記錄面上相同編號(位置)的各磁道構(gòu)成一個柱面,如圖1-2(c)所示。
若每個磁盤片有m個磁道,則該硬盤共有m個柱面。引入柱面的概念是為了提高硬盤的存儲速度。當(dāng)主機(jī)要存入一個較大的文件時,若一條磁道存不完,就需要存放在幾條磁道上。這時,應(yīng)首先將一個文件盡可能地存放在同一柱面中。如果仍存放不完,再存入相鄰的柱面內(nèi)。
通常將一條磁道劃分為若干個段,每個段稱為一個扇區(qū)或扇段,每個扇區(qū)存放一個定長信息塊(例如,512個字節(jié)),如圖1-2(b)所示。一條磁道劃分多少扇區(qū),每個扇區(qū)可存放多少字節(jié),一般由操作系統(tǒng)決定。磁道上的扇區(qū)編號從1開始,不像磁頭或柱面編號從0開始。
在磁盤上進(jìn)行信息的讀寫時,首先需要定位到目標(biāo)磁道,這個過程稱之為尋道,尋道所消耗的時間稱為尋道時間,定位到目標(biāo)磁道后,需要定位到目標(biāo)扇區(qū),此過程通過旋轉(zhuǎn)盤片完成,平均旋轉(zhuǎn)半圈可到目標(biāo)位置。故磁盤訪問時間為:
磁盤訪問時間(存取時間)=尋道時間+旋轉(zhuǎn)延遲時間
2.3. Cache存儲器
Cache的功能是提高CPU數(shù)據(jù)輸入輸出的速率,突破所謂的“馮?諾依曼瓶頸”,即CPU與存儲系統(tǒng)間數(shù)據(jù)傳送帶寬限制。高速存儲器能以極高的速率進(jìn)行數(shù)據(jù)訪問,但因其價格高昂,如果計算機(jī)的內(nèi)存完全由這種高速存儲器組成,則會大大增加計算機(jī)的成本。通常在CPU和內(nèi)存之間設(shè)置小容量的Cache。Cache容量小但速度快,內(nèi)存速度較低但容量大,通過優(yōu)化調(diào)度算法,系統(tǒng)的性能會大大改善,仿佛其存儲系統(tǒng)容量與內(nèi)存相當(dāng)而訪問速度近似Cache。
Cache通常采用相聯(lián)存儲器(ContentAddressableMemory,CAM)。CAM是一種基于數(shù)據(jù)內(nèi)容進(jìn)行訪問的存儲設(shè)備。當(dāng)對其寫入數(shù)據(jù)時,CAM能夠自動選擇一個未用的空單元進(jìn)行存儲;當(dāng)要讀出數(shù)據(jù)時,不是給出其存儲單元的地址,而是直接給出該數(shù)據(jù)或者該數(shù)據(jù)的一部分內(nèi)容,CAM對所有存儲單元中的數(shù)據(jù)同時進(jìn)行比較,并標(biāo)記符合條件的所有數(shù)據(jù)以供讀取。由于比較是同時、并行進(jìn)行的,所以,這種基于數(shù)據(jù)內(nèi)容進(jìn)行讀寫的機(jī)制,其速度比基于地址進(jìn)行讀寫的方式要快很多。
-
Cache基本原理
使用Cache改善系統(tǒng)性能的依據(jù)是程序的局部性原理。根據(jù)程序的局部性原理,最近的、未來要用的指令和數(shù)據(jù)大多局限于正在用的指令和數(shù)據(jù),或是存放在與這些指令和數(shù)據(jù)位置上鄰近的單元中。這樣,就可以把目前常用或?qū)⒁玫降男畔㈩A(yù)先放在Cache中。當(dāng)CPU需要讀取數(shù)據(jù)時,首先在Cache中查找是否有所需內(nèi)容,如果有,則直接從Cache中讀??;若沒有,再從內(nèi)存中讀取該數(shù)據(jù),然后同時送往CPU和Cache。如果CPU需要訪問的內(nèi)容大多都能在Cache中找到(稱為訪問命中),則可以大大提高系統(tǒng)性能。
如果以h代表對Cache的訪問命中率(“1-h”稱為失效率,或者稱為未命中率),t1表示cache的周期時間,t2表示內(nèi)存的周期時間,以讀操作為例,使用“Cache+主存儲器”的系統(tǒng)的平均周期為t3。則:t3=t1′h+t2′(1-h)
系統(tǒng)的平均存儲周期與命中率有很密切的關(guān)系,命中率的提高即使很小也能導(dǎo)致性能上的較大改善。
例如,設(shè)某計算機(jī)主存的讀/寫時間為l00ns,有一個指令和數(shù)據(jù)合一的Cache,已知該Cache的讀/寫時間為10ns,取指令的命中率為98%,取數(shù)的命中率為95%。在執(zhí)行某類程序時,約有1/5指令需要存/取一個操作數(shù)。假設(shè)指令流水線在任何時候都不阻塞,則設(shè)置Cache后,每條指令的平均訪存時間約為:(2%′100ns+98%′10ns)+1/5′(5%′100ns+95%′10ns)=14.7ns
-
映射機(jī)制
當(dāng)CPU發(fā)出訪存請求后,存儲器地址先被送到Cache控制器以確定所需數(shù)據(jù)是否已在Cache中,若命中則直接對Cache進(jìn)行訪問。這個過程稱為Cache的地址映射(映像)。在Cache的地址映射中,主存和Cache將均分成容量相同的塊(頁)。常見的映射方法有直接映射、全相聯(lián)映射和組相聯(lián)映射。
-
直接映像
直接映像方式以隨機(jī)存取存儲器作為Cache存儲器,硬件電路較簡單。在進(jìn)行映像時,主存地址被分成三個部分,從高到低依次為:區(qū)號、頁號以及頁內(nèi)地址,如圖1-3所示。
在本例中,內(nèi)存容量為1GB,Cache容量為8MB,頁面的大小為512KB。直接映像中,先分區(qū),再分頁。一個區(qū)的大小就是Cache容量的大小,所以一共分:1GB/8MB=128個區(qū),區(qū)號7位。每個區(qū)分:8MB/512KB=16個頁,所以頁號為4位。
在直接映像方式中,每個主存頁只能復(fù)制到某一固定的Cache頁中,如圖1-4所示。直接映像方式的映像規(guī)律是:主存中每個區(qū)的第0頁,只能進(jìn)入到Cache的第0頁。即:若當(dāng)前時刻Cache中0號頁已被占據(jù),而1-15號頁空閑,現(xiàn)在要將1區(qū)第0頁(即內(nèi)存的16頁)調(diào)入Cache是會發(fā)生沖突的。所以直接映像的塊沖突率非常高。
在Cache中,為每一個頁設(shè)立一個Cache標(biāo)記,該標(biāo)記用于識別當(dāng)前的Cache塊來自于哪個內(nèi)存頁。直接映像中,由于每個區(qū)的N號頁,都必須進(jìn)入到Cache的N號頁,所以只需要記錄區(qū)號即可。所以此時標(biāo)記位的長度是7位。
直接映像方式的優(yōu)點是比較容易實現(xiàn),缺點是不夠靈活,有可能使Cache的存儲空間得不到充分利用。
-
全相聯(lián)映像
全相聯(lián)映像使用相聯(lián)存儲器組成的Cache存儲器。在全相聯(lián)映像方式中,主存的每一頁可以映像到Cache的任一頁。如果淘汰Cache中某一頁的內(nèi)容,則可調(diào)入任一主存頁的內(nèi)容,因而較直接映像方式靈活。
在全相聯(lián)映像方式中,主存地址分為兩個部分,分別為地址部分(主存頁標(biāo)記)和數(shù)據(jù)部分(頁內(nèi)地址)。數(shù)據(jù)部分用于存放數(shù)據(jù),而地址部分則存放該數(shù)據(jù)的存儲器地址。如圖1-5所示。
全相聯(lián)映像方式的Cache組織如圖1-6所示。
當(dāng)進(jìn)行映像時,在我們給定的例子中,當(dāng)程序訪存時,則高11位給出主存頁號,低19位給出頁內(nèi)地址。因為每個Cache頁可映像到2048個主存頁中的任一頁,所以每頁的Cache標(biāo)記也需要11位,以表明它現(xiàn)在所映像的主存頁號。因此,Cache標(biāo)記信息位數(shù)增加,比較邏輯成本隨之增加。
在全相聯(lián)映像方式中,主存地址不能直接提取Cache頁號,而是需要將主存頁標(biāo)記與Cache各頁的標(biāo)記逐個比較,直到找到標(biāo)記符合的頁(訪問Cache命中),或者全部比較完后仍無符合的標(biāo)記(訪問Cache失?。R虼诉@種映像方式速度很慢,失掉了高速緩存的作用,這是全相聯(lián)映像方式的最大缺點。如果讓主存頁標(biāo)記與各Cache標(biāo)記同時比較,則成本又太高。全相聯(lián)映像方式因比較器電路難于設(shè)計和實現(xiàn),只適用于小容量Cache。
-
組相聯(lián)映
組相聯(lián)映像(頁組映像)介于直接映像和全相聯(lián)映像之間,是這兩種映像的一種折衷方案。全相聯(lián)映像方式以頁為單位,可自由映像,沒有固定的對應(yīng)關(guān)系。直接映像方式中,主存分組,主存組內(nèi)的各頁與Cache的頁之間采取的是固定的映像關(guān)系,但各組均可映像到
Cache中。在組相聯(lián)映像方式中,主存與Cache都分組,主存中一個組內(nèi)的頁數(shù)與Cache的分組數(shù)相同,如圖1-7所示。
在圖1-7給出的例子中,主存分128個區(qū),每個區(qū)8個組,每個組2個頁。組相聯(lián)映像方式的主存地址組織如圖1-8所示。
組相聯(lián)映像的規(guī)則是:主存中的組與Cache的組形成直接映像關(guān)系,而每個組內(nèi)的頁是全相聯(lián)映像關(guān)系。如主存1區(qū)0頁,他在0組中,所以只能進(jìn)入Cache的0組中,至于進(jìn)入到Cache的0組0頁,還是0組1頁,并無強(qiáng)制要求,可任意放置。
在組相聯(lián)映像中,Cache中每一頁的標(biāo)記位長度為8位,因為此時除了要記錄區(qū)號,還得記錄組號,即區(qū)號7位加組號1位等于8位。
容易看出,如果Cache中每組只有一頁,則組相聯(lián)映像方式就變成了直接映像方式。如果Cache中每組頁數(shù)為16頁(即Cache只分一組),則就是全相聯(lián)映像。因此,在具體設(shè)計組相聯(lián)映像時,可以根據(jù)設(shè)計目標(biāo)選取某一折衷值。
在組相聯(lián)映像中,由于Cache中每組有若干可供選擇的頁,因而它在映像定位方面較直接映像方式靈活;每組頁數(shù)有限,因此付出的代價不是很大,可以根據(jù)設(shè)計目標(biāo)選擇組內(nèi)頁數(shù)。
-
-
替換算法
當(dāng)Cache產(chǎn)生了一次訪問未命中之后,相應(yīng)的數(shù)據(jù)應(yīng)同時讀入CPU和Cache。但是當(dāng)Cache已存滿數(shù)據(jù)后,新數(shù)據(jù)必須替換(淘汰)Cache中的某些舊數(shù)據(jù)。最常用的替換算法有以下三種:
- 隨機(jī)算法。這是最簡單的替換算法。隨機(jī)法完全不管Cache塊過去、現(xiàn)在及將來的使用情況,簡單地根據(jù)一個隨機(jī)數(shù),選擇一塊替換掉。
- 先進(jìn)先出(FirstInandFirstOut,F(xiàn)IFO)算法。按調(diào)入Cache的先后決定淘汰的順序,即在需要更新時,將最先進(jìn)入Cache的塊作為被替換的塊。這種方法要求為每塊做一記錄,記下它們進(jìn)入Cache的先后次序。這種方法容易實現(xiàn),而且系統(tǒng)開銷小。其缺點是可能會把一些需要經(jīng)常使用的程序塊(如循環(huán)程序)替換掉。
- 近期最少使用(LeastRecentlyUsed,LRU)算法。LRU算法是把CPU近期最少使用的塊作為被替換的塊。這種替換方法需要隨時記錄Cache中各塊的使用情況,以便確定哪個塊是近期最少使用的塊。LRU算法相對合理,但實現(xiàn)起來比較復(fù)雜,系統(tǒng)開銷較大。通常需要對每一塊設(shè)置一個稱為“年齡計數(shù)器”的硬件或軟件計數(shù)器,用以記錄其被使用的情況。
-
寫操作
因為需要保證緩存在Cache中的數(shù)據(jù)與內(nèi)存中的內(nèi)容一致,相對讀操作而言,Cache的寫操作比較復(fù)雜,常用的有以下幾種方法。
- 寫直達(dá)(writethrough)。當(dāng)要寫Cache時,數(shù)據(jù)同時寫回內(nèi)存,有時也稱為寫通。當(dāng)某一塊需要替換時,也不必把這一塊寫回到主存中去,新調(diào)入的塊可以立即把這一塊覆蓋掉。這種方法實現(xiàn)簡單,而且能隨時保持主存數(shù)據(jù)的正確性,但可能增加多次不必要的主存寫入,會降低存取速度。
- 寫回(writeback)。CPU修改Cache的某一塊后,相應(yīng)的數(shù)據(jù)并不立即寫入內(nèi)存單元,而是當(dāng)該塊從cache中被淘汰時,才把數(shù)據(jù)寫回到內(nèi)存中。在采用這種更新策略的cache塊表中,一般有一個標(biāo)志位,當(dāng)一塊中的任何一個單元被修改時,標(biāo)志位被置“1”。在需要替換掉這一塊時,如果標(biāo)志位為“1”,則必須先把這一塊寫回到主存中去之后,才能再調(diào)入新的塊;如果標(biāo)志位為“0”,則這一塊不必寫回主存,只要用新調(diào)入的塊覆蓋掉這一塊即可。這種方法的優(yōu)點是操作速度快,缺點是因主存中的字塊未隨時修改而有可能出錯。
- 標(biāo)記法。對Cache中的每一個數(shù)據(jù)設(shè)置一個有效位。當(dāng)數(shù)據(jù)進(jìn)入Cache后,有效位置“1”;而當(dāng)CPU要對該數(shù)據(jù)進(jìn)行修改時,數(shù)據(jù)只需寫入內(nèi)存并同時將該有效位置“0”。當(dāng)要從Cache中讀取數(shù)據(jù)時需要測試其有效位,若為“l(fā)”則直接從Cache中取數(shù),否則,從內(nèi)存中取數(shù)。
3. 流水線
流水線技術(shù)把一個任務(wù)分解為若干順序執(zhí)行的子任務(wù),不同的子任務(wù)由不同的執(zhí)行機(jī)構(gòu) 負(fù)責(zé)執(zhí)行,而這些機(jī)構(gòu)可以同時并行工作。在任一時刻,任一任務(wù)只占用其中一個執(zhí)行機(jī)構(gòu),這樣就可以實現(xiàn)多個任務(wù)的重疊執(zhí)行,以提高工作效率。
3.1. 流水線周期
流水線應(yīng)用過程中,會將需要處理的工作分為 N 個階段,最耗時的那一段所消耗的時 間為流水線周期。如:使用流水線技術(shù)執(zhí)行 100 條指令,每條指令取指 2ms,分析 4ms,執(zhí)行 1ms,則流水線周期為 4ms。
3.2. 計算流水線執(zhí)行時間
延續(xù)上面的場景,將 1 個任務(wù)的執(zhí)行過程可分成 N 個階段, 假設(shè)每個階段完成時間 為 t,則完成該任務(wù)所需的時間即為 Nt。若以傳統(tǒng)的方式,則完成 k 個任務(wù)所需的時間是 kNt;而使用流水線技術(shù)執(zhí)行, 且花費(fèi)的時間是 Nt+(k-1)t。也就是說, 除了第 1 個任務(wù)需要 完整的時間外,其他都通過并行,節(jié)省下了大量的時間。所以流水線的執(zhí)行時間可通俗的表達(dá)為:流水線執(zhí)行時間=第 1 條指令的執(zhí)行時間+(n-1)流水線周期
注:n代表需要處理的任務(wù)數(shù)量。
在考試時,又需要特別注意一個細(xì)節(jié)問題,流水線的執(zhí)行時間計算,其實進(jìn)一步可以分理論情況與實踐情況兩種不同的處理方式。下面以實例進(jìn)行說明。
例:某計算機(jī)系統(tǒng), 一條指令的執(zhí)行需要經(jīng)歷取指(2ms)、分析(4ms)、執(zhí)行(1ms)三個階段, 現(xiàn)要執(zhí)行 100 條指令,利用流水線技術(shù)需要多長時間?
理論上來說,1 條指令的執(zhí)行時間為:2ms+4ms+1ms=7ms。所以: 理論流水線執(zhí)行時間=2ms+4ms+1ms+(100-1)4=403ms。
而實際上,真正做流水線處理時,考慮到處理的復(fù)雜性,會將指令的每個執(zhí)行階段的時 間都統(tǒng)一為流水線周期, 即 1 條指令的執(zhí)行時間為:4ms+4ms+4ms=12ms 。 所以: 實際流水線執(zhí)行時間=4ms+4ms+4ms+(100-1)-4=408ms。
3.3. 流水線的吞吐率
流水線的吞吐率(Though Put rate ,TP)是指在單位時間內(nèi)流水線所完成的任務(wù)數(shù)量或 輸出的結(jié)果數(shù)量。有些文獻(xiàn)也稱為平均吞吐率、實際吞吐率。計算流水線吞吐率的最基本的公式如下:
3.4. 流水線的加速比
在流水線中,因為在同一時刻,有多個任務(wù)在重疊地執(zhí)行,雖然完成一個任務(wù)的時間與單獨(dú)執(zhí)行該任務(wù)相近(甚至由于分段的緣故,可能更多一些),但是從整體上看完成多個任務(wù)所需的時間則大大減少。
完成同樣一批任務(wù),不使用流水線所用的時間與使用流水線所用的時間之比稱為流水線 的加速比(speedup ratio)。如果不使用流水線,即順序執(zhí)行所用的時間為T0,使用流水線的執(zhí)行時間為Tk,則計算流水線加速比的基本公式如下:
如果流水線各個流水段的執(zhí)行時間都相等(設(shè)為Dt),則一條k段流水線完成n個連續(xù)任務(wù)所需要的時間為(k+n-1)Dt。如果不使用流水線,即順序執(zhí)行這n個任務(wù),則所需要的時間為nkDt。因此,各個流水段執(zhí)行時間均相等的一條k段流水線完成n個連續(xù)任務(wù)時的實際加速比為文章來源:http://www.zghlxwxcb.cn/news/detail-779200.html
源文來自:https://daimajiangxin.cn/文章來源地址http://www.zghlxwxcb.cn/news/detail-779200.html
到了這里,關(guān)于系統(tǒng)架構(gòu)設(shè)計師-第1章計算機(jī)組成與體系結(jié)構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!