第一章 計(jì)算機(jī)組成與體系結(jié)構(gòu)
1.1 計(jì)算機(jī)系統(tǒng)組成
1.1.1 計(jì)算機(jī)硬件的組成
- 控制器。控制器是分析和執(zhí)行指令的部件,也是統(tǒng)一指揮并控制計(jì)算機(jī)各部件協(xié)調(diào)工作的中心部件,所依據(jù)的是機(jī)器指令。控制器的組成包含如下:
- 程序計(jì)數(shù)器PC:存儲(chǔ)下一條要執(zhí)行指令的地址;
- 指令寄存器IR:存儲(chǔ)即將執(zhí)行的指令;
- 指令譯碼器ID:對(duì)指令中的操作碼字段進(jìn)行分析解釋;
- 時(shí)序部件:提供時(shí)序控制信號(hào)。
- 運(yùn)算器。也成算數(shù)邏輯單元(ALU),主要功能是在控制器的控制下完成各種算術(shù)運(yùn)算和邏輯運(yùn)算。運(yùn)算器的組成包含如下:
- 算數(shù)邏輯單元ALU:數(shù)據(jù)的算數(shù)運(yùn)算和邏輯運(yùn)算;
- 累加計(jì)數(shù)器AC:通用寄存器,為ALU提供一個(gè)工作區(qū),用在暫存數(shù)據(jù);
- 數(shù)據(jù)緩沖寄存器DR:寫內(nèi)存時(shí),暫存指令或數(shù)據(jù);
- 狀態(tài)條件寄存器PSW:存狀態(tài)標(biāo)志與控制標(biāo)志。
- 主存儲(chǔ)器。也稱為內(nèi)存儲(chǔ)器(通常簡(jiǎn)稱主存或內(nèi)存),存儲(chǔ)現(xiàn)場(chǎng)操作的信息于中間結(jié)果,包括機(jī)器指令和數(shù)據(jù)。
- 輔助存儲(chǔ)器。也稱外存儲(chǔ)器,通常簡(jiǎn)稱外存或輔存。存儲(chǔ)需要長(zhǎng)期保存的各種信息。
- 輸入設(shè)備。
- 輸出設(shè)備。
1.1.2 計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)的分類
1. 存儲(chǔ)程序的概念
2. Flynn分類
根據(jù)指令流、數(shù)據(jù)流的多倍性特征對(duì)計(jì)算機(jī)系統(tǒng)進(jìn)行分類。根據(jù)不同的指令流-數(shù)據(jù)流組織方式,將計(jì)算機(jī)系統(tǒng)分為以下四類:
- 單指令流單數(shù)據(jù)流SISD
- 單指令流多數(shù)據(jù)流SIMD
- 多指令流單數(shù)據(jù)流MISD
- 多指令流多數(shù)據(jù)流MIMD
1.1.3 復(fù)雜指令集系統(tǒng)于精簡(jiǎn)指令集系統(tǒng)
1. 復(fù)雜指令系統(tǒng)計(jì)算機(jī)CISC指令系統(tǒng)的特點(diǎn)
- 指令數(shù)量眾多,通常有100-250條
- 指令使用頻率相差懸殊
- 支持很多種尋址方式。通常為5-20種
- 變長(zhǎng)的指令。指令長(zhǎng)度不固定
- 指令可以對(duì)于主存單元中的數(shù)據(jù)直接進(jìn)行處理。執(zhí)行速度較慢
- 以微程序控制為主
2. 精簡(jiǎn)指令系統(tǒng)RISC的特點(diǎn)
- 指令數(shù)量少。
- 指令的尋址方式少。通常只支持寄存器、立即數(shù)、相對(duì)尋址方式等。
- 指令長(zhǎng)度固定。
- 以硬布線邏輯控制為主。
- 單周期指令執(zhí)行,采用流水線技術(shù)。
- 優(yōu)化的編譯器。
- CPU中通用寄存器數(shù)量多,一般在32個(gè)以上,有的可達(dá)上千個(gè)。
大多數(shù)RISC采用了Cache方案,使用Cache來(lái)提高取指令的速度。而且,有的RISC使用兩個(gè)獨(dú)立的Cache來(lái)改善性能,一個(gè)稱為指令Cache,另一個(gè)稱為數(shù)據(jù)Cache。這樣,取指令和取數(shù)據(jù)可以同時(shí)進(jìn)行,互不干擾。
1.1.4 總線
是一組能為多個(gè)部件分時(shí)共享的公共信息傳輸線路。共享是指總線上可以掛接多個(gè)部件,各個(gè)部件之間相互交換的信息都可以通過(guò)這組公共線路傳送;分時(shí)是指同一時(shí)刻只允許有一個(gè)部件向總線發(fā)送信息,如果出現(xiàn)兩個(gè)或兩個(gè)以上部件同時(shí)向總線發(fā)送信息,勢(shì)必導(dǎo)致信號(hào)沖突。當(dāng)然,在同一時(shí)刻,允許多個(gè)部件同時(shí)從總線上接收相同的信息。
按總線相對(duì)于CPU或其他芯片的位置可以分為內(nèi)部總線和外部總線兩種。在CPU內(nèi)部,寄存器之間和算數(shù)邏輯部件ALU與控制部件之間傳輸數(shù)據(jù)所用的總線稱為內(nèi)部總線;外部總線是指CPU與內(nèi)存RAM、ROM和輸入/輸出設(shè)備接口之間進(jìn)行通信的線路。由于CPU通過(guò)總線實(shí)現(xiàn)程序取指令、內(nèi)存/外設(shè)的數(shù)據(jù)交換,在CPU與外設(shè)一定的情況下,總線速度是制約計(jì)算機(jī)整體性能的最大因素。
按總線功能來(lái)劃分,又可以分為地址總線、數(shù)據(jù)總線、控制總線三類,人們通常所說(shuō)的總線都包括這三個(gè)組成部分,地址總線用來(lái)傳送地址信息,數(shù)據(jù)總線用來(lái)傳送數(shù)據(jù)信息,控制總線用來(lái)傳送各種控制信號(hào)。
1.2 存儲(chǔ)器系統(tǒng)
用來(lái)存放程序和數(shù)據(jù)的部件。
傳統(tǒng)的存儲(chǔ)器系統(tǒng)一般分為高速緩沖存儲(chǔ)器(Cache)、主存、輔存三級(jí)。
- 主存可由CPU直接訪問(wèn),存儲(chǔ)速度快,但是容量較小,一般用來(lái)存放當(dāng)前正在執(zhí)行的程序和數(shù)據(jù)。
- 輔存直接設(shè)置在主機(jī)外部,存儲(chǔ)容量大,價(jià)格較低,但存取速度較慢,一般用來(lái)存放暫時(shí)不參與運(yùn)行的程序和數(shù)據(jù),CPU不可以直接訪問(wèn)輔存,輔存中的程序和數(shù)據(jù)在需要時(shí)才傳送到主存。
- 當(dāng)CPU速度很高時(shí),為了使訪問(wèn)存儲(chǔ)器的速度能與CPU的速度相匹配,又在主存和CPU間增設(shè)了一級(jí)Cache。Cache的存取速度比主存速度更快,但是容量更小,用來(lái)存放當(dāng)前最急需處理的程序和數(shù)據(jù),以便更快速的向CPU提供指令和數(shù)據(jù)。
多層級(jí)的存儲(chǔ)體系之所以能用低投入換來(lái)較高的存取速率,得益于局部性原理。局部性原理是指程序在執(zhí)行時(shí)呈現(xiàn)出局部性規(guī)律,即在一較短的時(shí)間內(nèi),程序的執(zhí)行僅局限于某個(gè)部分。相應(yīng)的,它所訪問(wèn)的存儲(chǔ)空間也僅局限于某個(gè)區(qū)域。程序局限性包括時(shí)間局部性和空間局部性,時(shí)間局部性是指程序中的某條指令一旦執(zhí)行,不久以后該指令可能再次執(zhí)行。產(chǎn)生時(shí)間局部性的典型原因是由于程序中存在著大量的循環(huán)操作;空間局部性是指一旦程序訪問(wèn)了某個(gè)存儲(chǔ)單元,不久以后,其附近的存儲(chǔ)單元也將被訪問(wèn),即程序在一段時(shí)間內(nèi)所訪問(wèn)的地址可能集中在一定的范圍內(nèi),其典型情況是程序順序執(zhí)行。
存儲(chǔ)器中常用的存儲(chǔ)方式:
- 順序存取:存儲(chǔ)的數(shù)據(jù)以記錄的形式進(jìn)行組織。對(duì)數(shù)據(jù)的訪問(wèn)必須按特定的順序進(jìn)行。磁帶存儲(chǔ)器
- 直接存取:與順序存儲(chǔ)相似。直接存儲(chǔ)使用一個(gè)共享的讀寫裝置對(duì)所有的數(shù)據(jù)進(jìn)行訪問(wèn)。但是,每個(gè)數(shù)據(jù)塊都有唯一的地址標(biāo)識(shí),讀寫裝置可以直接移動(dòng)到目的數(shù)據(jù)塊所在位置進(jìn)行訪問(wèn),存取時(shí)間也是可變的。硬盤存儲(chǔ)器。
- 隨機(jī)存取:存儲(chǔ)器的每一個(gè)可尋址單元都具有自己唯一的地址和讀寫裝置,系統(tǒng)可以在相同的時(shí)間內(nèi)對(duì)任意一個(gè)存儲(chǔ)單元的數(shù)據(jù)進(jìn)行訪問(wèn),而與先前的訪問(wèn)序列無(wú)關(guān)。主存儲(chǔ)器。
- 相聯(lián)存取:是隨機(jī)存取的一種形式,但是選擇某一單元進(jìn)行讀寫時(shí)取決于其內(nèi)容而不是其地址。每個(gè)單元都有自己的讀寫裝置,讀寫時(shí)間也是一個(gè)常數(shù),使用相聯(lián)存取方式,可以對(duì)所有的存儲(chǔ)單元的特定位進(jìn)行比較,選擇符合條件的單元進(jìn)行訪問(wèn)。Cache。
1.2.1 主存儲(chǔ)器
用來(lái)存放計(jì)算機(jī)運(yùn)行期間所需要的程序和數(shù)據(jù),CPU可以直接隨機(jī)的進(jìn)行讀/寫。主存具有一定容量,存取速度較高。由于CPU要頻繁的訪問(wèn)主存,所以主存的性能在很大程度上影響了整個(gè)計(jì)算機(jī)系統(tǒng)的性能。主存可以分為隨機(jī)存取存儲(chǔ)器和只讀存儲(chǔ)器。
- 隨機(jī)存取存儲(chǔ)器
RAM,可寫入讀出,但斷電后信息無(wú)法保存,因此只能用于暫時(shí)存儲(chǔ)數(shù)據(jù)。可分為DRAM動(dòng)態(tài)存儲(chǔ)和SRAM靜態(tài)存儲(chǔ)兩種。DRAM的信息會(huì)隨時(shí)間逐漸消失,因此需要定時(shí)對(duì)其刷新維持信息不丟失;SRAM在不斷電的情況下信息能夠一直保持而不會(huì)丟失。DRAM密度大于SRAM且更加便宜,但SRAM速度快,電路簡(jiǎn)單,容量小,價(jià)格高。 - 只讀存儲(chǔ)器
ROM,可以看作RAM的特殊形式,特點(diǎn)是:存儲(chǔ)器的內(nèi)容只能隨即讀出而不能寫入。一旦寫入,固定不變,即使斷電,寫入的內(nèi)容也不會(huì)丟失,又稱固定存儲(chǔ)器。用來(lái)存放系統(tǒng)程序BIOS - 主存編址方法
計(jì)算機(jī)系統(tǒng)中,存儲(chǔ)器中每個(gè)單元的位數(shù)時(shí)相同且固定的,成為存儲(chǔ)器編址單位。主要分為字編址和字節(jié)編址
1.2.2 輔助存儲(chǔ)器
用于存放當(dāng)前不需要立即使用的信息,一旦需要,再和主機(jī)成批交換數(shù)據(jù)。主機(jī)的外部設(shè)備,稱為外存儲(chǔ)器。存儲(chǔ)容量大、可靠性高、價(jià)格低。
1. 磁帶存儲(chǔ)器
順序存取的設(shè)備,特點(diǎn)為:存取時(shí)間較長(zhǎng),但存儲(chǔ)容量大,便于攜帶,價(jià)格便宜。
2. 磁盤存儲(chǔ)器
在磁盤上進(jìn)行信息的讀寫時(shí),首先要定位到目標(biāo)磁道,這個(gè)過(guò)程稱之為尋道,尋道所消耗的時(shí)間成為尋道時(shí)間,定位到目標(biāo)磁道后,需要定位到目標(biāo)扇區(qū),此過(guò)程通過(guò)旋轉(zhuǎn)盤片完成,平均旋轉(zhuǎn)半圈可到目標(biāo)位置,故磁盤訪問(wèn)時(shí)間為:
$$磁盤訪問(wèn)時(shí)間(存取時(shí)間)=尋道時(shí)間+旋轉(zhuǎn)延遲時(shí)間$$
1.2.3 Cache存儲(chǔ)器
功能是為了提高CPU數(shù)據(jù)輸入輸出的速率,即CPU與存儲(chǔ)系統(tǒng)間數(shù)據(jù)傳送帶寬限制。通常在CPU和內(nèi)存之間設(shè)置小容量的Cache。
Cache采用相聯(lián)存儲(chǔ)器CAM,是一種基于數(shù)據(jù)內(nèi)容進(jìn)行訪問(wèn)的存儲(chǔ)設(shè)備。對(duì)其寫入數(shù)據(jù)時(shí),CAM能夠自動(dòng)選擇一個(gè)未用的空單元進(jìn)行存儲(chǔ);當(dāng)需要讀出數(shù)據(jù)時(shí),而是直接給出該數(shù)據(jù)或該數(shù)據(jù)的一部分內(nèi)容。CAM通過(guò)對(duì)所有存儲(chǔ)單元中的數(shù)據(jù)同時(shí)進(jìn)行比較,并標(biāo)記符合條件的所有數(shù)據(jù)以供提取。比較是同時(shí)、并行進(jìn)行的。
1. Cache基本原理
使用Cache改善性能的依據(jù)是程序的局部性原理。
根據(jù)局部性原理,可以爸目前常用或?qū)⒁玫降男畔㈩A(yù)先放到Cache中,當(dāng)CPU需要讀取數(shù)據(jù)時(shí),首先在Cache中查找是否有所需內(nèi)容,如果有,則直接從Cache中讀取;若沒有,再?gòu)膬?nèi)存中讀取該數(shù)據(jù),然后同時(shí)送往CPU和Cache。如果CPU需要訪問(wèn)的內(nèi)容大多都能在Cache中找到(稱為訪問(wèn)命中),則可以大大提高系統(tǒng)性能。
如果以$h$代表對(duì)Cache的訪問(wèn)命中率($1-h$稱為失效率,或未命中率),$t_1$表示Cache的周期時(shí)間,$t_2$表示內(nèi)存的周期時(shí)間,以讀操作為例,使用“Cache+主存儲(chǔ)器”的系統(tǒng)的平均周期為$t_3$,則:
$$t_3=t_1\times h+t_2\times (1-h)$$
系統(tǒng)的平均存儲(chǔ)周期與命中率有很密切的關(guān)系,命中率的提高即使很小也能導(dǎo)致性能的極大改善。
例如:設(shè)某計(jì)算機(jī)主存的讀/寫時(shí)間為100ns,有一個(gè)指令和數(shù)據(jù)合一的Cache,已知該Cache的讀/寫時(shí)間為10ns,取指令的命中率為98%,取數(shù)的命中率為95%,在執(zhí)行某類程序時(shí),約有$1/5$指令需要存/取一個(gè)操作數(shù)。假設(shè)指令流水線再任何時(shí)候都不阻塞,則設(shè)置Cache后,每條指令的平均訪存時(shí)間約為:
$$(2%\times 100ns+98%\times 10ns)+1/5\times (5%\times 100ns+95%\times 10ns)=14.7ns$$
2. 映射機(jī)制
當(dāng)CPU發(fā)出訪存請(qǐng)求后,存儲(chǔ)器地址先被送到Cache控制器以確定所需數(shù)據(jù)是否已在Cache中,若命中則直接對(duì)Cache進(jìn)行訪問(wèn)。這個(gè)過(guò)程稱為Cache的地址映射(映像)。在Cache的地址映射中,主存和Cache將均分成容量相同的塊(頁(yè))。常見的映射方法有直接映射、全相聯(lián)映射和組相聯(lián)映射。
1) 直接映射
以隨機(jī)存儲(chǔ)器作為Cache存儲(chǔ)器,硬件電路較簡(jiǎn)單。在進(jìn)行映射時(shí),主存地址被分成三個(gè)部分,從高到低一次為:區(qū)號(hào)、頁(yè)號(hào)、頁(yè)內(nèi)地址。
區(qū)號(hào) | 頁(yè)號(hào) | 頁(yè)內(nèi)地址 |
---|---|---|
7位 | 4位 | 19位 |
- | Cache地址 | Cache地址 |
例如:內(nèi)存容量為1GB,Cache容量為8MB,頁(yè)大小為512KB。直接映像中,先分區(qū),再分頁(yè)。一個(gè)區(qū)的大小就是Cache容量的大小,所以一共分:1GB/8MB=128個(gè)區(qū),所以區(qū)號(hào)為7位。每個(gè)區(qū)分:8MB/512KB=16個(gè)頁(yè),所以頁(yè)號(hào)為4位。
直接映射方式中,沒個(gè)內(nèi)存也只能復(fù)制到某一固定的Cache頁(yè)中。映射規(guī)律為:主存中每個(gè)區(qū)的第0頁(yè),只能進(jìn)入Cache的第0頁(yè)。若當(dāng)前時(shí)刻Cache中0號(hào)頁(yè)已被占據(jù),而1-15號(hào)頁(yè)空閑,現(xiàn)在要將1區(qū)的第0頁(yè)(即內(nèi)存的16頁(yè))調(diào)入Cache是會(huì)發(fā)生沖突的。所以直接映射的塊沖突率非常高。
在Cache中,為每一個(gè)頁(yè)設(shè)立一個(gè)Cache標(biāo)記,該標(biāo)記用于識(shí)別當(dāng)前的Cache塊來(lái)自于哪個(gè)內(nèi)存頁(yè)。直接映像中,由于每個(gè)區(qū)的N號(hào)頁(yè),都必須進(jìn)入到Cache的N號(hào)頁(yè),所以只需要記錄區(qū)號(hào)即可。所以此時(shí)標(biāo)記位的長(zhǎng)度為7位。
直接映射方式的優(yōu)點(diǎn)是比較容易實(shí)現(xiàn),缺點(diǎn)是不夠靈活,有可能使Cache的存儲(chǔ)空間得不到充分利用。
2) 全相聯(lián)映像
使用相聯(lián)存儲(chǔ)器組成的Cache存儲(chǔ)器。該方式中,主存中的每一頁(yè)可以映射到Cache的任一頁(yè)。如果淘汰Cache中某一頁(yè)的內(nèi)容,則可調(diào)入任一主存頁(yè)的內(nèi)容,因此比直接映射方式更為靈活。
在全相聯(lián)映射方式中,主存地址分為兩個(gè)部分,分別為地址部分(主存頁(yè)標(biāo)記)和數(shù)據(jù)部分(頁(yè)內(nèi)地址)。數(shù)據(jù)部分用來(lái)存放數(shù)據(jù),而地址部分則存放該數(shù)據(jù)的存儲(chǔ)器地址。
頁(yè)號(hào) | 頁(yè)內(nèi)地址 |
---|---|
11位 | 19位 |
主存頁(yè)號(hào) |
因?yàn)镃ache中某一頁(yè)的內(nèi)容都可以在主存中的任一頁(yè)中存儲(chǔ),所以在Cache中也需要存儲(chǔ)該頁(yè)所對(duì)應(yīng)的主存頁(yè)號(hào),所以,Cache標(biāo)記信息位數(shù)增加,比較邏輯成本隨之增加。
在全相聯(lián)映射方式中,主存地址不能直接提取Cache頁(yè)號(hào),而是需要將主存頁(yè)標(biāo)記于Cache各頁(yè)的標(biāo)記諸葛比較,直到找到符合標(biāo)記的頁(yè)(訪問(wèn)Cache命中),或者全部比較完成仍無(wú)符合的標(biāo)記(訪問(wèn)Cache失敗)。因此這種映射方式速度很慢,是掉了高速緩存的作用,也是該方式的最大缺點(diǎn)。因此只適用于小容量Cache。
3) 組相聯(lián)映射
也稱頁(yè)組映射,介于直接映射和全相聯(lián)映射之間,是這兩種映射的折衷方案。全相聯(lián)映射以頁(yè)為單位,可自由映射,沒有固定的對(duì)應(yīng)關(guān)系,直接映射方式中,主存分組,主存組內(nèi)的各頁(yè)與Cache的頁(yè)之間采取的是固定的映射關(guān)系,但各組均可映射到Cache中。在組相聯(lián)映射中就,主存和Cache都分組,主存中的一個(gè)組內(nèi)的頁(yè)數(shù)與Cache的分組數(shù)相同。
區(qū)號(hào) | 組號(hào) | 組內(nèi)頁(yè)號(hào) | 頁(yè)內(nèi)地址 |
---|---|---|---|
7位 | 3位 | 1位 | 19位 |
- | Cache地址 | Cache地址 | Cache地址 |
組關(guān)聯(lián)映射的規(guī)則為:主存中的組于Cache中的組形成直接映射關(guān)系,而每個(gè)組內(nèi)的頁(yè)是全相聯(lián)映射關(guān)系。如主存中1區(qū)0頁(yè),它在0組中,所以只能進(jìn)入Cache中的0組中,至于進(jìn)入到Cache中的0組0頁(yè)還是0組1頁(yè),并無(wú)強(qiáng)制要求,可以任意放置。
如果Cache中每組只有一頁(yè),則組相聯(lián)映射方式就變成了直接映射方式,如果Cache中每組頁(yè)數(shù)為16頁(yè)(即Cache只分一組),那就是全相聯(lián)映射。
在組相聯(lián)映射中,由于Cache中每組有若干可以選擇的頁(yè),因而它在映射定位方面較直接映射方式靈活;每組頁(yè)數(shù)有限,因此付出的代價(jià)不是很大,可以根據(jù)設(shè)計(jì)目標(biāo)選擇組內(nèi)頁(yè)數(shù)。
3. 替換算法
當(dāng)Cache中產(chǎn)生了一次訪問(wèn)未命中之后,相應(yīng)的數(shù)據(jù)應(yīng)同時(shí)讀入CPU和Cache。但是當(dāng)Cache已存滿數(shù)據(jù)后,新數(shù)據(jù)必須替換(淘汰)Cache中的某些舊數(shù)據(jù)。
1) 隨機(jī)算法
最簡(jiǎn)單的替換算法。完全不管Cache塊過(guò)去、現(xiàn)在及將來(lái)的使用情況,簡(jiǎn)單的根據(jù)一個(gè)隨機(jī)數(shù),選擇一塊替換掉。
2) 先進(jìn)先出算法FIFO
按照調(diào)入Cache中的先后順序決定淘汰的順序,即在需要更新時(shí),將最先進(jìn)入Cache中的塊最為被替換的塊。該方法要求為每塊做一記錄,記下他們進(jìn)入Cache的先后順序。這種方法容易實(shí)現(xiàn),而且系統(tǒng)開銷小,缺點(diǎn)是可能會(huì)把一些需要經(jīng)常使用的程序塊(如循環(huán)程序)替換掉。
3) 近期最少使用原則LRU
LRU算法是把CPU近期最少使用的塊作為被替換的塊。這種替換方法需要隨時(shí)記錄Cache中各塊的使用情況,以便確定哪個(gè)塊時(shí)近期最少使用的塊。LRU算法相對(duì)合理,但實(shí)現(xiàn)起來(lái)比較復(fù)雜,系統(tǒng)開銷較大。通常需要對(duì)每一塊設(shè)置一個(gè)稱為“年齡計(jì)數(shù)器”的硬件或軟件計(jì)數(shù)器,用以記錄其被使用的情況。
4. 寫操作
因?yàn)樾枰WC緩存在Cache中的數(shù)據(jù)與內(nèi)存中的內(nèi)容一致,相對(duì)讀操作而言,Cache的寫操作比較復(fù)雜。
1) 寫直達(dá)
當(dāng)要寫Cache時(shí),數(shù)據(jù)同時(shí)寫回內(nèi)存,有時(shí)也稱為寫通。當(dāng)某一塊需要替換時(shí),也不必把這一塊寫回到主存中去,新調(diào)入的塊可以立即把這一塊覆蓋掉。這種方法實(shí)現(xiàn)簡(jiǎn)單,而且能隨時(shí)保持主存數(shù)據(jù)的正確性,但可能增加多次不必要的主存寫入,會(huì)降低存取速度。
2) 寫回
CPU修改Cache中的某一塊之后,相應(yīng)的數(shù)據(jù)并不立即寫回內(nèi)存單元,而是當(dāng)該塊從Cache中被淘汰時(shí),才把數(shù)據(jù)寫回到內(nèi)存中。在采用這種更新策略的Cache塊表中,一般有一個(gè)標(biāo)志位,當(dāng)一塊中的任何一個(gè)單元被修改時(shí),標(biāo)志位被置“1”。當(dāng)需要替換掉這一塊時(shí),如果標(biāo)志位為“1”,則必須先把這一塊寫回到主存中去之后,才能再掉入新的塊;如果標(biāo)識(shí)為“0”,則這一塊不必寫回內(nèi)存,只要用新調(diào)入的塊覆蓋掉這一塊即可。這種方法的優(yōu)點(diǎn)是操作速度塊,缺點(diǎn)是因主存中的字塊會(huì)隨時(shí)修改而有可能出錯(cuò)。
3) 標(biāo)記法
對(duì)Cache中的每一個(gè)數(shù)據(jù)設(shè)置一個(gè)有效位。當(dāng)數(shù)據(jù)進(jìn)入Cache后,有效位置“1”;而當(dāng)CPU要對(duì)該數(shù)據(jù)進(jìn)行修改時(shí),數(shù)據(jù)只需要寫入內(nèi)存并同時(shí)將該有效位置“0“。當(dāng)要從Cache中讀取數(shù)據(jù)時(shí)需要測(cè)試其有效位,若為”1“則直接從Cache中取數(shù),否則,從內(nèi)存中取數(shù)。
1.3 流水線
流水線技術(shù)吧一個(gè)任務(wù)分解為若干順序執(zhí)行的子任務(wù),不同的子任務(wù)由不同的執(zhí)行機(jī)構(gòu)負(fù)責(zé)執(zhí)行,而這些機(jī)構(gòu)可以同時(shí)并行工作。在任一時(shí)刻,任一任務(wù)只占用其中一個(gè)執(zhí)行機(jī)構(gòu),這樣就可以實(shí)現(xiàn)多個(gè)任務(wù)的重疊執(zhí)行,以提高效率。
1.3.1 流水線周期
流水線應(yīng)用過(guò)程中,會(huì)將需要處理的工作分為N個(gè)階段,最耗時(shí)的那一段所消耗的時(shí)間為流水線周期。如:使用流水線技術(shù)執(zhí)行100條指令,每條指令取指2ms,分析4ms,執(zhí)行1ms,則流水線周期為4ms。
1.3.2 計(jì)算流水線執(zhí)行時(shí)間
延續(xù)上面的場(chǎng)景,將一個(gè)任務(wù)的執(zhí)行過(guò)程可以分為N個(gè)階段,假設(shè)每個(gè)階段的完成時(shí)間為t,則完成該任務(wù)所需的時(shí)間即為Nt。若以傳統(tǒng)的形式,則完成k個(gè)任務(wù)所需的時(shí)間為kNt;而使用流水線技術(shù)執(zhí)行,則花費(fèi)的時(shí)間是Nt+(k-1)t。也就是說(shuō),除了第1個(gè)任務(wù)需要完整的時(shí)間外,其他都通過(guò)并行,節(jié)省下了大量的時(shí)間。所以流水線的執(zhí)行時(shí)間可以通俗的表達(dá)為:
流水線執(zhí)行時(shí)間=第1條指令的執(zhí)行時(shí)間+(n-1)X流水線周期
n代表需要處理的任務(wù)數(shù)量。
在考試時(shí),需要特別注意一個(gè)細(xì)節(jié)問(wèn)題,流水線的執(zhí)行時(shí)間計(jì)算,其實(shí)進(jìn)一步可以分理論情況和實(shí)踐情況兩種不同的處理方式。下面以實(shí)例進(jìn)行說(shuō)明。
例:某計(jì)算機(jī)系統(tǒng),一條指令的執(zhí)行需要經(jīng)歷取指2ms,分析4ms,執(zhí)行1ms三個(gè)階段,現(xiàn)需要執(zhí)行100條指令,利用流水線技術(shù)需要多長(zhǎng)時(shí)間?
理論上來(lái)說(shuō),一條指令的執(zhí)行時(shí)間為:2ms+4ms+1ms=7ms
所以理論上流水線的執(zhí)行時(shí)間為:2ms+4ms+1ms+(100-1)X4ms=403ms
而實(shí)際上,真正做流水線處理時(shí)考慮到處理的復(fù)雜性,會(huì)將執(zhí)行的每個(gè)階段的時(shí)間都統(tǒng)一為流水線周期,即1條指令的執(zhí)行周期為4ms+4ms+4ms=12ms。
所以,實(shí)際流水線的執(zhí)行時(shí)間為4ms+4ms+4ms+(100-1)X4ms=408ms。考試時(shí),80%以上的概率采用理論公式計(jì)算,所以考試時(shí)需要以理論公式計(jì)算,若計(jì)算的結(jié)果無(wú)正確選項(xiàng),才考慮使用實(shí)際公式計(jì)算。
1.3.3 流水線的吞吐率
流水線的吞吐率(Though Put Rate,TP)是指在單位時(shí)間內(nèi)流水線所完成的任務(wù)數(shù)量或輸出的結(jié)果數(shù)量。計(jì)算流水線吞吐率的最基本公示如下:
$$TP=\frac{n}{T_k}$$
$n$為任務(wù)數(shù),${T_k}$是處理完成$n$個(gè)任務(wù)所用的時(shí)間。
流水線的最大吞吐率為:
$$TP_{max}=\operatorname*{Lim}_{n\to \infty}\frac{n}{(k+n-1)\Delta t}=\frac{1}{\Delta t}$$
1.3.4 流水線的加速比
完成同樣一批任務(wù),使用流水線所用的時(shí)間與不使用流水線所用的時(shí)間之比成為流水線的加速比(speedup radio)。如果不使用流水線,則順序執(zhí)行所用的時(shí)間為$T_0$,使用流水線的執(zhí)行時(shí)間為$T_k$,則計(jì)算流水線加速比的基本公式如下:
$$S=\frac{T_0}{T_k}$$
如果流水線各個(gè)流水段的執(zhí)行時(shí)間都相等(設(shè)為$\Delta t$),則一條$k$段流水線完成$n$個(gè)連續(xù)任務(wù)所需要的時(shí)間為$(k+n-1)\Delta t$。如果不使用流水線,即順序執(zhí)行這$n$個(gè)任務(wù),則所需的時(shí)間為$nk\Delta t$。因此,各個(gè)流水段執(zhí)行時(shí)間均相等的一條$k$段流水線完成$n$個(gè)連續(xù)任務(wù)的實(shí)際加速比為:
$$S=\frac{nk\Delta t}{(k+n-1)\Delta t}=\frac{nk}{k+n-1}$$
這種情況下的最大加速比為:
$$S_{max}=\operatorname*{Lim}_{n\to \infty}\frac{nk}{k+n-1}=k$$