版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
存儲(chǔ)系統(tǒng)4.1存儲(chǔ)系統(tǒng)概述4.2主存儲(chǔ)器4.3高速緩沖存儲(chǔ)器4.4虛擬存儲(chǔ)器4.5外部存儲(chǔ)器(輔助存儲(chǔ)器)
4.1存儲(chǔ)系統(tǒng)概述
4.1.1存儲(chǔ)系統(tǒng)的層次結(jié)構(gòu)
一臺(tái)計(jì)算機(jī)中可能會(huì)包括各種存儲(chǔ)器,如CPU內(nèi)部的通用寄存器組、一級(jí)Cache、二級(jí)Cache和三級(jí)Cache,主板上的主存儲(chǔ)器(簡稱主存),主板外的聯(lián)機(jī)(在線)磁盤存儲(chǔ)器以及脫機(jī)(離線)的磁帶、光盤存儲(chǔ)器等。
在計(jì)算機(jī)中,各種存儲(chǔ)器的容量、速度、訪問方式、用途等各不相同,這些存儲(chǔ)器相互配合形成了一種層次結(jié)構(gòu)的存儲(chǔ)系統(tǒng)。在這樣的層次結(jié)構(gòu)中,不同層次上的存儲(chǔ)器發(fā)揮著不同的功能和作用,共同使計(jì)算機(jī)高效地工作。計(jì)算機(jī)存儲(chǔ)系統(tǒng)的層次結(jié)構(gòu)如圖4.1所示。圖4.1存儲(chǔ)系統(tǒng)的層次結(jié)構(gòu)
4.1.2存儲(chǔ)器的分類
由于存儲(chǔ)器的材料、性能及使用方法不同,從不同的角度考慮,就有不同的分類方法。
1.按存儲(chǔ)信息的介質(zhì)分類
目前,在計(jì)算機(jī)中用于存儲(chǔ)信息的介質(zhì)有半導(dǎo)體、磁性或光學(xué)器件及材料,因此就有半導(dǎo)體存儲(chǔ)器、磁盤(磁帶)存儲(chǔ)器、光盤存儲(chǔ)器等。
2.按在計(jì)算機(jī)中的用途分類
在計(jì)算機(jī)中用于存放當(dāng)前正要執(zhí)行或剛執(zhí)行的程序和數(shù)據(jù)的存儲(chǔ)器是主存儲(chǔ)器。用于存放正在執(zhí)行的程序或正在使用的數(shù)據(jù)、用以克服主存儲(chǔ)器速度太慢的存儲(chǔ)器是高速緩沖存儲(chǔ)器Cache。主存儲(chǔ)器和Cache統(tǒng)稱為內(nèi)部存儲(chǔ)器,簡稱內(nèi)存。
在CPU內(nèi)部,用于存放微程序的存儲(chǔ)器是控制存儲(chǔ)器。
用來存放當(dāng)前暫不使用的大量信息的存儲(chǔ)器是外部存儲(chǔ)器,簡稱外存,如磁盤存儲(chǔ)器、光盤存儲(chǔ)器、U盤、MMC(SD)存儲(chǔ)卡、磁帶存儲(chǔ)器等。
3.按存放信息的易失(揮發(fā))性分類
當(dāng)存儲(chǔ)器斷電后,有些存儲(chǔ)器所存信息會(huì)隨之丟失,這類存儲(chǔ)器所存信息是易失的、可揮發(fā)的。例如,半導(dǎo)體隨機(jī)存取存儲(chǔ)器(RandomAccessMemory,RAM)就是信息易于揮發(fā)的易失存儲(chǔ)器。
另有一些存儲(chǔ)器在斷電后所存信息不會(huì)丟失,當(dāng)再次加電后它所存儲(chǔ)的信息依然存在。例如,磁盤存儲(chǔ)器、各種類型的半導(dǎo)體只讀存儲(chǔ)器(Read-OnlyMemory,ROM)等都是非易失存儲(chǔ)器。
4.按存取方式分類
如果存儲(chǔ)器的存取時(shí)間與存儲(chǔ)單元的物理地址無關(guān),隨機(jī)讀寫其任一單元所用的時(shí)間一樣,則稱此類存儲(chǔ)器為RAM。
有些存儲(chǔ)器的存取只能按順序進(jìn)行,則稱此類存儲(chǔ)器為順序讀寫存儲(chǔ)器,如磁帶存儲(chǔ)器。
5.按存儲(chǔ)器的讀寫功能分類
有些存儲(chǔ)器既能讀出又能寫入,稱之為讀寫存儲(chǔ)器。而有些存儲(chǔ)器的內(nèi)容已固定,工作時(shí)只能讀出,則稱之為ROM。
4.1.3存儲(chǔ)器的性能指標(biāo)
存儲(chǔ)器和存儲(chǔ)系統(tǒng)是不同的兩個(gè)概念,這里說明的是存儲(chǔ)器的性能指標(biāo)。存儲(chǔ)器的性能指標(biāo)是用來描述存儲(chǔ)器基本性能的。
1.存儲(chǔ)容量
存儲(chǔ)容量指的是存儲(chǔ)器所能存儲(chǔ)的二進(jìn)制信息的總位數(shù),其表示方式一般為
存儲(chǔ)容量=存儲(chǔ)器總存儲(chǔ)單元數(shù)×每個(gè)存儲(chǔ)單元的位數(shù)
(4.1)
2.存儲(chǔ)器速度
(1)存取時(shí)間又稱訪問時(shí)間,是對(duì)存儲(chǔ)器中某一個(gè)存儲(chǔ)單元的數(shù)據(jù)進(jìn)行一次存(取)所需要的時(shí)間。
(2)存取周期是指連續(xù)對(duì)存儲(chǔ)器進(jìn)行存(取)時(shí),完成一次存(取)所需要的時(shí)間。
(3)存儲(chǔ)器帶寬(MemoryBandwidth)是指單位時(shí)間里存儲(chǔ)器可以讀出(或?qū)懭?的字節(jié)數(shù)。若存儲(chǔ)器的存取周期為tm,且每次可讀出(或?qū)懭?n個(gè)字節(jié),則存儲(chǔ)器的帶寬Bm=n/tm。
3.可靠性
計(jì)算機(jī)要正確地運(yùn)行,必然要求存儲(chǔ)器系統(tǒng)具有很高的可靠性。主存的任何錯(cuò)誤都足以使計(jì)算機(jī)無法正常工作。
對(duì)計(jì)算機(jī)的存儲(chǔ)器來說,有的是不可維修的,如構(gòu)成主存的超大規(guī)模集成存儲(chǔ)器芯片,一旦出現(xiàn)故障就只能更換;而有的存儲(chǔ)器是可維修的,如磁盤存儲(chǔ)器、磁帶存儲(chǔ)器等。
4.功耗
功耗在電池供電的系統(tǒng)中是非常重要的指標(biāo)。使用功耗低的存儲(chǔ)器構(gòu)成存儲(chǔ)系統(tǒng),不僅可以降低對(duì)電源容量的要求,而且還可以提高存儲(chǔ)系統(tǒng)的可靠性。
5.價(jià)格
構(gòu)成存儲(chǔ)系統(tǒng)時(shí),在滿足上述指標(biāo)要求的情況下,應(yīng)盡量降低存儲(chǔ)器的價(jià)格。通常是以每千字節(jié)(KB)或每兆字節(jié)(MB)的價(jià)格來衡量存儲(chǔ)器的成本。隨著技術(shù)的發(fā)展,存儲(chǔ)器的價(jià)格已大大降低。例如,對(duì)于磁盤存儲(chǔ)器,20世紀(jì)80年代初每兆字節(jié)(MB)需幾千元,而今天每吉字節(jié)(GB)只需幾角錢。
4.2主存儲(chǔ)器
計(jì)算機(jī)中的內(nèi)部存儲(chǔ)器,狹義是指主存儲(chǔ)器(MainMemory,MM),廣義是指包括主、高速緩存、虛擬存儲(chǔ)器在內(nèi)的存儲(chǔ)層次。主存是計(jì)算機(jī)存儲(chǔ)體系中最早出現(xiàn)的存儲(chǔ)層次,是從馮·諾依曼計(jì)算機(jī)開始到目前所有計(jì)算機(jī)中不可缺少的功能部件。主存是正在執(zhí)行的程序和所用數(shù)據(jù)的存放地,其容量和速度對(duì)計(jì)算機(jī)性能(速度)有直接影響?,F(xiàn)代計(jì)算機(jī)的主存毫無例外地采用半導(dǎo)體存儲(chǔ)器集成芯片構(gòu)成。
4.2.1主存的結(jié)構(gòu)
1.主存的邏輯結(jié)構(gòu)
主存用來存儲(chǔ)二進(jìn)制的程序和數(shù)據(jù),由許多存儲(chǔ)單元組成,每個(gè)存儲(chǔ)單元可以存儲(chǔ)1個(gè)字節(jié)或1個(gè)字(與計(jì)算機(jī)字長和CPU的數(shù)據(jù)線數(shù)有關(guān)),存儲(chǔ)單元的每1位為二進(jìn)制存儲(chǔ)元,即1個(gè)字節(jié)存儲(chǔ)單元由8個(gè)二進(jìn)制存儲(chǔ)元構(gòu)成。圖4.2為主存的邏輯結(jié)構(gòu),每個(gè)存儲(chǔ)單元用二進(jìn)制編碼的地址標(biāo)識(shí),并依據(jù)地址尋址訪問,對(duì)每個(gè)存儲(chǔ)單元可進(jìn)行隨機(jī)讀、寫操作。計(jì)算機(jī)的最小存儲(chǔ)單元為字節(jié)單元(8位)。
主存的地址空間大小由CPU提供的地址線數(shù)決定。主存的規(guī)模即主存的容量可表示為
主存存儲(chǔ)容量=存儲(chǔ)單元數(shù)×存儲(chǔ)單元的位數(shù)=2n×m位
(4.2)
其中,n為存儲(chǔ)單元地址位數(shù)(即CPU的地址線數(shù)),m為每個(gè)存儲(chǔ)單元可存儲(chǔ)的位數(shù)。主存容量中特定數(shù)據(jù)的常用表示有:210=1K,220=1M,230=1G,240=1T,220×8bit=1M×8b=1MB。圖4.2主存的邏輯結(jié)構(gòu)
2.主存的物理結(jié)構(gòu)
主存的物理結(jié)構(gòu)如圖4.3所示,每個(gè)存儲(chǔ)元由存儲(chǔ)1個(gè)二進(jìn)制位的電路(部件)構(gòu)成,若干個(gè)存儲(chǔ)元電路組成存儲(chǔ)單元,許多存儲(chǔ)單元電路以行列矩陣組成存儲(chǔ)器芯片,通過芯片內(nèi)一維或二維地址譯碼選擇某個(gè)存儲(chǔ)元(存儲(chǔ)單元),多個(gè)存儲(chǔ)器芯片也按行列矩陣(即字、位擴(kuò)展)組成主存,通過芯片外的部分地址或全地址譯碼選擇某個(gè)存儲(chǔ)器芯片。圖4.3主存的物理結(jié)構(gòu)
為了能對(duì)芯片內(nèi)部的存儲(chǔ)單元進(jìn)行尋址訪問,需要在芯片內(nèi)部對(duì)地址信號(hào)進(jìn)行譯碼,以便選中地址所對(duì)應(yīng)的存儲(chǔ)單元。芯片內(nèi)部的地址譯碼有兩種方式:一維譯碼和二維譯碼。
1)一維譯碼
對(duì)于容量很小的芯片,如容量在幾百個(gè)存儲(chǔ)單元以內(nèi)的芯片,多用一維譯碼。芯片內(nèi)部只用一個(gè)地址譯碼器,其譯碼輸出可選中相對(duì)應(yīng)的存儲(chǔ)單元。其示意圖如圖4.4所示。圖4.4芯片內(nèi)部的一維譯碼
2)二維譯碼
當(dāng)芯片容量在幾百個(gè)存儲(chǔ)單元以上時(shí),用一維譯碼會(huì)使譯碼器過于復(fù)雜,因此多采用二維譯碼。此時(shí)芯片內(nèi)部用行地址譯碼器和列地址譯碼器分別對(duì)地址譯碼,行譯碼輸出可選中相對(duì)應(yīng)的一行存儲(chǔ)單元,列譯碼輸出可選中相對(duì)應(yīng)的一列存儲(chǔ)單元,而行列交叉點(diǎn)上的存儲(chǔ)單元就是最終所選中的存儲(chǔ)單元。其示意圖如圖4.5所示。圖4.5芯片內(nèi)部的二維譯碼
4.2.2隨機(jī)讀寫存儲(chǔ)器RAM
1.靜態(tài)讀寫存儲(chǔ)器SRAM
靜態(tài)讀寫存儲(chǔ)器SRAM是構(gòu)成小容量高速存儲(chǔ)器最常用的部件,如高速緩沖存儲(chǔ)器Cache采用的就是SRAM。
常規(guī)RAM芯片的外部有地址線、數(shù)據(jù)線和控制信號(hào)線。地址線在芯片內(nèi)部譯碼,可選中芯片內(nèi)部的相應(yīng)存儲(chǔ)單元。例如,某SRAM芯片上有n條地址線,這些地址線所能表示的地址編碼有2n種,這意味著該芯片內(nèi)部有2n個(gè)存儲(chǔ)單元。
1)SRAM存儲(chǔ)元電路
SRAM可有多種結(jié)構(gòu),圖4.6是典型的1位SRAM的存儲(chǔ)元電路。圖4.6SRAM存儲(chǔ)元電路
從1位SRAM存儲(chǔ)元電路可以看到:
(1)用n個(gè)1位存儲(chǔ)元電路同時(shí)工作可構(gòu)成n位存儲(chǔ)單元。
(2)數(shù)據(jù)一旦寫入,其信息就穩(wěn)定地保存在電路中并等待讀出。無論讀出多少次,只要不斷電,此信息會(huì)一直保持下去,這也許就是“靜態(tài)”一詞的由來。
(3)SRAM初始加電時(shí),其狀態(tài)是隨機(jī)的。寫入新的狀態(tài),原來的舊狀態(tài)就消失了。新狀態(tài)一直維持到寫入更新的狀態(tài)為止。
(4)在電路工作時(shí),即使不進(jìn)行讀寫操作,只是保持在加電狀態(tài)下,電路中就一定有晶體管導(dǎo)通,也就一定有電流流過,從而一定會(huì)有功率消耗;每存儲(chǔ)一個(gè)二進(jìn)制位,平均需要用到6個(gè)晶體管(V7、V8為每列共享)。因此,與DRAM比較,SRAM的功耗大,集成度不能做得很高。
2)典型SRAM芯片
現(xiàn)以典型的8K×8bit的CMOSSRAM6264芯片為例,說明典型SRAM芯片的外部特性及工作過程。
6264芯片的引腳如圖4.7所示,它有28條引出線,包括:
A0~A12為地址信號(hào)線。這13條地址線經(jīng)過芯片內(nèi)部譯碼,決定了該芯片有8K(8192)個(gè)存儲(chǔ)單元。
D0~D7為雙向數(shù)據(jù)線。數(shù)據(jù)線的數(shù)目決定了芯片中每個(gè)存儲(chǔ)單元存儲(chǔ)二進(jìn)制位的個(gè)數(shù),8條數(shù)據(jù)線說明該芯片的每個(gè)存儲(chǔ)單元存放一個(gè)字節(jié)。當(dāng)CPU寫某存儲(chǔ)單元時(shí),數(shù)據(jù)由D0~D7傳送到該芯片內(nèi)部譯碼指定的單元中。當(dāng)CPU讀某存儲(chǔ)單元時(shí),被選中的指定單元內(nèi)的數(shù)據(jù)由D0~D7傳送給CPU。圖4.76264引腳圖
2.動(dòng)態(tài)讀寫存儲(chǔ)器DRAM
動(dòng)態(tài)讀寫存儲(chǔ)器(DRAM)速度快(僅次于SRAM)、集成度高、功耗小、單位容量的價(jià)格低,在計(jì)算機(jī)中得到了極其廣泛的應(yīng)用,計(jì)算機(jī)中的內(nèi)存條無一例外地采用了動(dòng)態(tài)存儲(chǔ)器?,F(xiàn)在的嵌入式計(jì)算機(jī)系統(tǒng)中如果需要大容量主存,也會(huì)采用DRAM。
1)DRAM存儲(chǔ)元電路
動(dòng)態(tài)存儲(chǔ)器(DRAM)有多種結(jié)構(gòu)形式,如果減少每個(gè)存儲(chǔ)元電路需要的元件個(gè)數(shù),就可以進(jìn)一步提高存儲(chǔ)器芯片的集成度。
圖4.8(a)為單管DRAM存儲(chǔ)元電路。每個(gè)存儲(chǔ)元僅由一個(gè)電容CS和一個(gè)作為開關(guān)的晶體管V構(gòu)成。將很多這樣的存儲(chǔ)元構(gòu)成陣列,如圖4.8(b)所示,即可構(gòu)成大容量、高集成度的DRAM芯片。實(shí)際上,DRAM芯片至少擁有數(shù)千根字線和位線。圖4.8單管DRAM存儲(chǔ)結(jié)構(gòu)
數(shù)據(jù)讀出的過程也是刷新的過程。單管DRAM存儲(chǔ)元讀操作的步驟如下:
(1)位線預(yù)充電,使位線分布電容CB上的電壓達(dá)到參考電壓UR;預(yù)充電完成后,預(yù)充電控制電路斷開。由于位線較長,位線分布電容CB較大,其預(yù)充電的電壓會(huì)保持一個(gè)短暫的時(shí)間。
(2)置字線為高電平,晶體管V導(dǎo)通,電容CS經(jīng)過晶體管V連接到位線上。如果電容CS原來有電荷,則位線電壓略有升高;如果電容CS原來沒有電荷,則位線電壓略有降低。
(3)開啟靈敏讀出/恢復(fù)放大器。該電路主要由靈敏比較器構(gòu)成,位線電壓與參考電壓UR之間的電位差被比較器中的正反饋電路放大。如果位線電壓高于參考電壓UR,則放大電路置位線為高電平UDD;如果位線電壓低于參考電壓UR,則放大電路置位線為低電平0V。
(4)采樣位線電壓,讀出數(shù)據(jù)。如果位線為高電平UDD,則讀出數(shù)據(jù)為“1”,同時(shí)位線上的高電平為電容CS充電;如果位線為低電平0V,則讀出數(shù)據(jù)為“0”,同時(shí)電容CS通過位線放電。
(5)置字線為低電平,關(guān)閉靈敏讀出/恢復(fù)放大器。此時(shí),電容CS已恢復(fù)為數(shù)據(jù)讀出之前的狀態(tài),所存儲(chǔ)的內(nèi)容得到刷新,而數(shù)據(jù)已被讀出。
可見,使用了靈敏讀出/恢復(fù)放大器后,在每次讀出數(shù)據(jù)的同時(shí)也完成了對(duì)存儲(chǔ)元原來所存數(shù)據(jù)的刷新。因此這類DRAM的刷新操作可以通過按行依次執(zhí)行一次讀操作來實(shí)現(xiàn)。在刷新時(shí),數(shù)據(jù)輸出應(yīng)被置為高阻(數(shù)據(jù)是通過三態(tài)門輸出的)。通常,DRAM芯片需要每隔最多64ms刷新一遍。
2)典型DRAM芯片
DDRSDRAM也經(jīng)歷了幾代的發(fā)展。下面以典型的DDR4SDRAM芯片為例,介紹DDRSDRAM的引腳、功能及工作過程。
DDR4SDRAM芯片核心頻率通常為200~400MHz,內(nèi)部采用8通道并行預(yù)取結(jié)構(gòu),可以在時(shí)鐘信號(hào)的上升沿和下降沿各傳輸一個(gè)數(shù)據(jù),所以接口總線時(shí)鐘頻率可以達(dá)到核心頻率的4倍,而理想情況下的數(shù)據(jù)傳輸率(每秒鐘可以傳輸數(shù)據(jù)的次數(shù))可達(dá)到核心頻率的8倍。與DDR3SDRAM相比,DDR4SDRAM的性能更好,容量更大,數(shù)據(jù)完整性更強(qiáng),能耗更低。
H5AN8G6NAFR芯片的封裝形式為有96個(gè)引腳(焊球)的FBGA封裝,如圖4.9所示,其各引腳定義如圖4.10所示。可見,DRAM芯片的引腳與SRAM差別非常大,因而讀寫方式也與SRAM大不相同。圖4.9H5AN8G6NAFR芯片96引腳FBGA封裝圖圖4.10H5AN8G6NAFR引腳定義
在圖4.10中,引腳信號(hào)名稱后綴為“_t”和“_c”的是差分信號(hào)(差分對(duì));引腳信號(hào)名稱后綴為“_n”的是低電平有效的信號(hào)。下面介紹H5AN8G6NAFR各引腳的功能:
CK_t、CK_c(輸入)為差分時(shí)鐘輸入信號(hào)引腳。
CS_n(輸入)是片選信號(hào)引腳。
ODT(輸入)是DDR4SDRAM內(nèi)部終結(jié)電阻的使能信號(hào)引腳。
ACT_n(輸入)是激活命令輸入信號(hào)引腳。
RAS_n/A16、CAS_n/A15、WE_n/A14(輸入)是雙功能復(fù)用的輸入引腳。
DMU_n/DBIU_n、DML_n/DBIL_n是雙功能復(fù)用的引腳,其功能可通過模式寄存器MR5進(jìn)行設(shè)置。
BG0(輸入)為模組選擇信號(hào)引腳。
BA0、BA1(輸入)為存儲(chǔ)體選擇信號(hào)引腳。
A0~A15(輸入)為地址信號(hào)引腳。
A10/AP(輸入)是雙功能復(fù)用的輸入引腳。
A12/BC_n(輸入)是雙功能復(fù)用的輸入引腳。
RESET_n(輸入)是異步復(fù)位信號(hào)引腳。
DQU0~DQU7、DQL0~DQL7(雙向)分別為高8位和低8位數(shù)據(jù)信號(hào)線。
DQSU_t、DQSU_c、DQSL_t、DQSL_c(雙向)為數(shù)據(jù)選通信號(hào)引腳。
PAR(輸入)是命令與地址奇偶校驗(yàn)輸入。
ALERT_n(輸出)是錯(cuò)誤警示信號(hào)引腳。
TEN(輸入)是連通性測試允許信號(hào)引腳。
NC是空腳。
VDDQ是數(shù)據(jù)信號(hào)DQ電源(1.2V±0.06V)引腳,VSSQ是數(shù)據(jù)信號(hào)DQ地引腳。
VDD是核心電源(1.2V±0.06V)引腳,VSS是核心地引腳。
VPP是SDRAM激活供電(2.5V)引腳,最低2.375V,最高2.75V。
VREFCA是CA參考電壓;ZQ是校準(zhǔn)參考電壓。
3)DRAM的工作過程
在芯片被選中(CS_n輸入引腳為低電平)的情況下,輸入引腳ACT_n、RAS_n/A16、CAS_n/A15、WE_n/A14的不同組合,配合相應(yīng)的地址信號(hào),可以表示多種不同的SDRAM命令。表4.2列出了幾種常用的DDR4SDRAM命令,命令縮寫與命令全稱之間的對(duì)應(yīng)關(guān)系如下:
圖4.11為DDR4SDRAM讀時(shí)序,其中各參數(shù)的含義如下:
·BL(BurstLength)為突發(fā)長度,即發(fā)送一次讀(或?qū)?命令后,可連續(xù)讀出(或?qū)懭?的數(shù)據(jù)個(gè)數(shù)。
·AL(AdditiveLatency)為附加延遲,以時(shí)鐘周期數(shù)為單位。
·CL(CASLatency)為CAS延遲,即發(fā)送讀命令到讀出第一個(gè)數(shù)據(jù)之間的時(shí)間間隔,以時(shí)鐘周期數(shù)為單位,該參數(shù)在模式寄存器MR0中設(shè)置。
·tRCD(TimeRAS-to-CASdelay)為激活命令到讀(或?qū)?命令之間的時(shí)間間隔(圖中未專門標(biāo)出)。圖4.11DDR4SDRAM讀時(shí)序(BL=8,AL=0,CL=11)
圖4.12為DDR4SDRAM寫時(shí)序,參數(shù)CWL(CASWriteLatency,CAS寫延遲)是發(fā)送寫命令到寫入第一個(gè)數(shù)據(jù)之間的時(shí)間間隔,以時(shí)鐘周期數(shù)為單位。圖4.12DDR4SDRAM寫時(shí)序(BL=8,AL=0,CWL=9)
4.2.3只讀存儲(chǔ)器ROM
1.概述
只讀存儲(chǔ)器ROM的重要特性是其存儲(chǔ)信息的非易失性,即存放在ROM中的信息不會(huì)因去掉供電電源而丟失,當(dāng)再次加電時(shí),其存儲(chǔ)的信息依然存在。
(1)掩膜工藝ROM。
(2)可一次編程ROM(PROM)。
(3)可擦去重寫的PROM。
2.紫外線擦除可編程只讀存儲(chǔ)器(EPROM)
EPROM是一種用紫外線擦除可多次重寫的只讀存儲(chǔ)器。
1)單元電路
EPROM內(nèi)部結(jié)構(gòu)及單元電路如圖4.13所示,它由存儲(chǔ)一個(gè)二進(jìn)制位的基本單元電路(主要元件為浮置柵場效應(yīng)管)組成的存儲(chǔ)陣列構(gòu)成。陣列中的行線為地址(一維或二維)譯碼信號(hào)選擇的字線(即芯片的存儲(chǔ)單元);列線為位線(即數(shù)據(jù)線),用來讀出EPROM中存儲(chǔ)的信息。圖4.13EPROM內(nèi)部結(jié)構(gòu)及單元電路
(1)寫入數(shù)據(jù)(編程)。
對(duì)EPROM基本單元電路寫入數(shù)據(jù)是通過在浮置柵場效應(yīng)管的浮置柵極上注入或不注入電荷來實(shí)現(xiàn)的。當(dāng)要在某單元電路存儲(chǔ)邏輯0時(shí),則在該單元電路中場效應(yīng)管的浮置柵上注入足夠的電荷;當(dāng)要在某單元電路存儲(chǔ)邏輯1時(shí),則在該單元電路中場效應(yīng)管的浮置柵上不注入電荷(即處于原始狀態(tài))
(2)讀出數(shù)據(jù)。
一個(gè)未使用過的EPROM,其內(nèi)部所有場效應(yīng)管的浮置柵極上都沒有電荷,此時(shí)無論行線是高電平還是低電平,場效應(yīng)管的柵源電壓都達(dá)不到開啟電壓,場效應(yīng)管處于截止?fàn)顟B(tài),位線呈現(xiàn)高電平(邏輯1),即芯片每個(gè)單元讀出的數(shù)據(jù)都是1。
(3)擦除。
EPROM擦除是利用紫外光源通過EPROM芯片上的石英窗口照射場效應(yīng)管的浮置柵極來實(shí)現(xiàn)的。若某場效應(yīng)管的浮置柵極上有電荷,則電荷在紫外光線照射下會(huì)形成光電流,經(jīng)過一段時(shí)間(一般為十幾分鐘)照射后,光電流會(huì)將電荷泄漏干凈,達(dá)到擦除的目的。擦除干凈的EPROM又可以重新編程。
2)典型EPROM芯片
2764是一塊8K×8bit的EPROM芯片,其引線如圖4.14所示。圖4.14EPROM2764引線圖
3.電擦除可編程只讀存儲(chǔ)器(EEPROM)
1)單元電路
EEPROM或Flash存儲(chǔ)器(閃存)內(nèi)部每個(gè)存儲(chǔ)元電路也是由浮置柵場效應(yīng)管構(gòu)成的,且組織成陣列結(jié)構(gòu)。EEPROM與EPROM的主要不同是浮置柵場效應(yīng)管有所不同。EEPROM中的場效應(yīng)管浮置柵極較薄,且外加了控制柵極。這種改造使得電荷注入浮置柵的速度更快,且不需額外的高編程電壓,擦除時(shí)用電信號(hào)控制就可以實(shí)現(xiàn),所以對(duì)EEPROM可以進(jìn)行在線擦除和在線編程。
2)典型EEPROM芯片
EEPROM因其制造工藝及芯片容量的不同而有多種型號(hào)。下面僅以8K×8bit的EEPROM98C64A為例來加以說明。其引線如圖4.15所示。圖4.15EEPROM98C64A引線圖
3)閃速存儲(chǔ)器
閃速(Flash)存儲(chǔ)器也是一種電可擦除可多次編程的存儲(chǔ)器。與EEPROM不同之處在于其擦除寫入的速度比較快,為強(qiáng)調(diào)其寫入速度快而稱之為閃速存儲(chǔ)器。閃速存儲(chǔ)器在制造工藝上主要有兩類:或非(NOR)型陣列和與非(NAND)型陣列。
當(dāng)選擇存儲(chǔ)解決方案時(shí),必須權(quán)衡以下各項(xiàng)因素:
(1)NOR的讀速度比NAND稍快一些。
(2)NAND的寫入速度比NOR快很多。
(3)NAND的擦除速度遠(yuǎn)比NOR的快。
(4)大多數(shù)寫入操作需要先進(jìn)行擦除。
4.2.4相聯(lián)存儲(chǔ)器
RAM和ROM存儲(chǔ)器都是按地址進(jìn)行訪問的,也就是說這些存儲(chǔ)器都是依照地址去尋找存儲(chǔ)單元中的內(nèi)容。而相聯(lián)存儲(chǔ)器是依據(jù)內(nèi)容確定內(nèi)容對(duì)應(yīng)的地址或者是依據(jù)內(nèi)容去尋找與其相關(guān)的內(nèi)容。
相聯(lián)存儲(chǔ)器的構(gòu)成如圖4.16所示。其組成主要包括如下部件:
(1)檢索寄存器,用于存放要檢索的內(nèi)容,其長度為n位二進(jìn)制編碼。
(2)屏蔽寄存器,用于將不進(jìn)行檢索的某些位屏蔽掉,只留下需要檢索的各位參與比較。通常,若屏蔽寄存器中某位置1,則將相應(yīng)的檢索位屏蔽掉;若置0,則保留檢索位。
(3)存儲(chǔ)體,用于存放信息。假定存儲(chǔ)體的容量為2m×n,即它具有2m個(gè)存儲(chǔ)單元,每個(gè)存儲(chǔ)單元存儲(chǔ)n位二進(jìn)制信息。
(4)比較電路,是由2m個(gè)n位數(shù)字比較器構(gòu)成的,用來將存儲(chǔ)體中所有存儲(chǔ)單元的內(nèi)容與經(jīng)屏蔽后的檢索字進(jìn)行同時(shí)比較。采用如此眾多的硬件比較器進(jìn)行同時(shí)比較,為的就是提高比較的速度。
(5)匹配寄存器,用于記錄比較器的比較結(jié)果。該寄存器有2m位,剛好對(duì)應(yīng)存儲(chǔ)體的2m個(gè)存儲(chǔ)單元。當(dāng)某一存儲(chǔ)單元存儲(chǔ)的信息與屏蔽后的檢索字相同(匹配)時(shí),與該單元對(duì)應(yīng)的寄存器相應(yīng)位置1;未匹配存儲(chǔ)單元的相應(yīng)位置0。
(6)數(shù)據(jù)寄存器,用來存放比較過程中發(fā)現(xiàn)的匹配存儲(chǔ)單元的內(nèi)容。加電后,其內(nèi)容為隨機(jī)數(shù)。圖4.16相聯(lián)存儲(chǔ)器的構(gòu)成
在圖4.16的左側(cè)畫出了地址寄存器和地址譯碼器,為的是使相聯(lián)存儲(chǔ)器具有按地址訪問的功能。
相聯(lián)存儲(chǔ)器中使用了數(shù)字比較器,用來比較經(jīng)屏蔽后的檢索字與存儲(chǔ)單元的內(nèi)容是否相等。如果數(shù)字比較器還可以進(jìn)行大于、小于等功能的比較,那么相聯(lián)存儲(chǔ)器就可以具有大于、小于等功能的檢索。
上述相聯(lián)存儲(chǔ)器是一種比較完備的實(shí)現(xiàn)方式,實(shí)現(xiàn)起來非常復(fù)雜。在實(shí)際應(yīng)用中,可以根據(jù)具體的需求實(shí)現(xiàn)需要的功能即可。圖4.17為一種讀相聯(lián)存儲(chǔ)器的實(shí)現(xiàn)。圖4.17四個(gè)存儲(chǔ)單元的讀相聯(lián)存儲(chǔ)器
4.2.5主存儲(chǔ)器設(shè)計(jì)方法
某些嵌入式計(jì)算機(jī),比如家用電器、儀器儀表中的計(jì)算機(jī)系統(tǒng),處理器一般為低成本、低性能的單片機(jī),所需主存容量很小(幾千字節(jié)到幾百千字節(jié))。這種情況下,主存可用SRAM實(shí)現(xiàn)。SRAM有獨(dú)立的地址線、數(shù)據(jù)線、片選、讀信號(hào)、寫信號(hào),可以隨機(jī)訪問,控制方式簡單,很容易用來構(gòu)成主存。
1.存儲(chǔ)器芯片的連接方式
單個(gè)存儲(chǔ)器芯片的容量有限,存儲(chǔ)單元的個(gè)數(shù)(即字?jǐn)?shù))和每個(gè)存儲(chǔ)單元的字長(即位數(shù))兩方面都有可能不滿足實(shí)際需要。這種情況下,必須將多塊存儲(chǔ)器芯片連接起來,在字?jǐn)?shù)和位數(shù)兩方面進(jìn)行擴(kuò)展,構(gòu)成一個(gè)滿足實(shí)際需求的大容量存儲(chǔ)器。下面以8K×8b的SRAM芯片6264為例,說明存儲(chǔ)器芯片的常用連接方式。
1)字?jǐn)?shù)的擴(kuò)展(字?jǐn)U展)
用兩片8K×8b的SRAM芯片6264構(gòu)成一個(gè)16K×8b的存儲(chǔ)器,這是典型的字?jǐn)U展方式,其連接電路如圖4.18所示。圖4.18兩片6264SRAM存儲(chǔ)器字?jǐn)U展
2)位數(shù)的擴(kuò)展(位擴(kuò)展)
用兩片8K×8b的SRAM芯片6264構(gòu)成一個(gè)8K×16b的存儲(chǔ)器,這是典型的位擴(kuò)展方式,其連接電路如圖4.19所示。圖4.19兩片6264SRAM存儲(chǔ)器位擴(kuò)展
3)位數(shù)和字?jǐn)?shù)同時(shí)擴(kuò)展(位擴(kuò)展和字?jǐn)U展)
若使用8K×8b的6264SRAM芯片構(gòu)成16K×16b的存儲(chǔ)器,則需要在位數(shù)和字?jǐn)?shù)兩個(gè)方面同時(shí)擴(kuò)展,如圖4.20所示。圖4.20四片6264SRAM存儲(chǔ)器同時(shí)位擴(kuò)展和字?jǐn)U展
2.用存儲(chǔ)器芯片構(gòu)成主存模塊
從高性價(jià)比出發(fā),計(jì)算機(jī)系統(tǒng)的實(shí)際主存容量往往小于其允許的最大主存空間。根據(jù)需要的容量,主存設(shè)計(jì)可能只需要設(shè)計(jì)幾個(gè)主存模塊;根據(jù)讀寫要求,不同的主存模塊可以選用不同類型的存儲(chǔ)器芯片,比如,存放程序的主存模塊可以用RAM或ROM芯片構(gòu)成,存放數(shù)據(jù)的主存模塊應(yīng)該用RAM芯片構(gòu)成。所以,主存設(shè)計(jì)既要用RAM芯片,也要用ROM芯片。
1)用SRAM芯片構(gòu)成主存模塊
在早期Intel處理器構(gòu)成的計(jì)算機(jī)系統(tǒng)中,主存空間不大,所以通常用SRAM構(gòu)成主存模塊。
例4.1在8086處理器構(gòu)成的微機(jī)系統(tǒng)中,用6264SRAM存儲(chǔ)器芯片設(shè)計(jì)16KB的主存模塊,使其地址范圍為A0000H~A3FFFH。
解16KB的主存模塊需要用兩片6264芯片構(gòu)成,利用圖4.19的等效存儲(chǔ)器2與8086系統(tǒng)總線連接,字地址的低13位(A1~A13)用來選擇16位存儲(chǔ)器內(nèi)部的某個(gè)字,字地址的高6位(A14~A19)作為地址譯碼電路的輸入,用來生成存儲(chǔ)器芯片的片選信號(hào)。圖4.21中的連接及譯碼電路實(shí)現(xiàn)了等效存儲(chǔ)器2占用主存地址范圍A0000H~A3FFFH的要求,其中地址為偶數(shù)的字節(jié)單元在IC3中,地址為奇數(shù)的字節(jié)單元在IC4中。圖4.21SRAM存儲(chǔ)器(等效存儲(chǔ)器2)與6位8086系統(tǒng)總線連接電路
2)用EPROM芯片構(gòu)成主存模塊
Intel8088處理器與8086處理器的主要差別在于對(duì)外的數(shù)據(jù)線僅為8根,對(duì)應(yīng)系統(tǒng)的主存結(jié)構(gòu)也僅為單一存儲(chǔ)體,所以設(shè)計(jì)主存時(shí)除了不需要存儲(chǔ)體選擇信號(hào)之外,其他方面的設(shè)計(jì)與8086系統(tǒng)的主存一致。
例4.2在Intel8088處理器構(gòu)成的系統(tǒng)中,使用EPROM2764芯片與8位ISA總線連接,構(gòu)成8088系統(tǒng)的引導(dǎo)程序存儲(chǔ)區(qū),使其地址范圍為FE000H~FFFFFH(8086/88處理器的啟動(dòng)地址為FFFF0H)。
解2764是ROM芯片,在使用2764芯片時(shí),僅用于將其存儲(chǔ)的內(nèi)容讀出。其讀出過程與RAM類似,即加載要讀出單元的地址,然后使CE和OE均有效(低電平),則在芯片的D0~D7上就可以輸出要讀出的數(shù)據(jù)。2764芯片與8位ISA總線的連接如圖4.22所示,圖中譯碼使該芯片構(gòu)成的主存模塊地址范圍為FE000H~FFFFFH。圖4.22用EPROM構(gòu)成主存模塊的電路
3)用EEPROM芯片構(gòu)成主存模塊
在RISC-V的64位體系結(jié)構(gòu)中,主存的總地址空間為264個(gè)字節(jié)單元。RISC-V系統(tǒng)的主存分配如圖4.23所示。圖4.23RISC-V系統(tǒng)的主存分配
例4.3用EEPROM98C64A構(gòu)成RISC-V系統(tǒng)中從0000000000400000H開始的32KB指令存儲(chǔ)器。
解假設(shè)系統(tǒng)工作前程序已存入指令存儲(chǔ)器,計(jì)算機(jī)系統(tǒng)運(yùn)行時(shí)程序是不被修改的,所以指令存儲(chǔ)器可以用ROM芯片構(gòu)成。指令在指令存儲(chǔ)器中的單元地址由程序計(jì)數(shù)器PC提供,欲設(shè)計(jì)的主存模塊起始地址0000000000400000H為4字節(jié)對(duì)齊地址,所以尋址32位指令字使用字地址(不用主存地址的低2位)即可。98C64A為8KB容量,構(gòu)成32KB指令存儲(chǔ)器需要4個(gè)芯片,4個(gè)芯片同時(shí)工作,一次讀出32位指令I(lǐng)。圖4.24是在RISC-V系統(tǒng)中用98C64A構(gòu)成的32KB指令存儲(chǔ)器的連接圖。圖4.24用EEPROM構(gòu)成主存模塊的電路
4)內(nèi)存條(用DRAM芯片構(gòu)成主存)
內(nèi)存條是個(gè)人計(jì)算機(jī)和高性能工作站、服務(wù)器的重要組成部分。由于個(gè)人計(jì)算機(jī)和高性能工作站、服務(wù)器的主存要求容量大、速度快(相對(duì)于外存)、功耗低且造價(jià)低廉,而動(dòng)態(tài)隨機(jī)訪問存儲(chǔ)器(DRAM)恰恰具備這些特點(diǎn),因此這些計(jì)算機(jī)的主存無一例外地采用了DRAM存儲(chǔ)器。將多片雙倍數(shù)據(jù)率同步DRAM(DDRSDRAM)存儲(chǔ)器芯片采用位擴(kuò)展(單個(gè)Rank)或位擴(kuò)展+字?jǐn)U展(多個(gè)Rank)的方式連接在一起,并焊在一小條印刷電路板上,稱之為內(nèi)存條。使用時(shí),將內(nèi)存條插在計(jì)算機(jī)主板的內(nèi)存條插槽上。
常見的內(nèi)存條通常分為以下幾種類型:
(1)RDIMM(RegisteredDual-Inline-Memory-Modules,帶寄存器緩沖的雙列直插式存儲(chǔ)模塊)主要用于服務(wù)器。
(2)LRDIMM(Load-ReducedDual-Inline-Memory-Modules,低負(fù)載雙列直插式存儲(chǔ)模塊)主要用于服務(wù)器。
(3)UDIMM(UnregisteredDual-Inline-Memory-Modules,無緩沖雙列直插式存儲(chǔ)模塊)主要用于臺(tái)式機(jī)(個(gè)人計(jì)算機(jī))。
(4)SODIMM(SmallOutlineDual-Inline-Memory-Modules,小型雙列直插式存儲(chǔ)模塊)外形尺寸更小,其他特點(diǎn)與UDIMM相同,用于筆記本電腦
(5)ECCUDIMM(ErrorCorrectingCodeUDIMM,帶檢錯(cuò)和糾錯(cuò)編碼的無緩沖雙列直插式存儲(chǔ)模塊)和ECCSODIMM(ErrorCorrectingCodeSODIMM,帶檢錯(cuò)和糾錯(cuò)編碼的小型雙列直插式存儲(chǔ)模塊)分別在UDIMM和SODIMM的基礎(chǔ)上,增加了對(duì)8位檢錯(cuò)和糾錯(cuò)編碼的支持,主要用于高端臺(tái)式機(jī)、高端筆記本電腦和服務(wù)器。
圖4.25為某4GB(512M×64b)DDR4SDRAMUDIMM內(nèi)存條電路,該內(nèi)存條電路板的外形及尺寸如圖4.26所示。
UDIMM內(nèi)存條要求數(shù)據(jù)線寬度為64位,且讀寫的每個(gè)數(shù)據(jù)必須是64位的,因此該內(nèi)存條使用了4片512M×16b的DDR4SDRAM芯片H5AN8G6NAFR進(jìn)行“位擴(kuò)展”連接,得到了一個(gè)512M×64b的存儲(chǔ)器,如圖4.25所示。圖4.25某4GB(512M×64b)DDR4SDRAMUDIMM內(nèi)存條電路圖4.26DDR4SDRAMUDIMM內(nèi)存條電路板的外形及尺寸(單位:mm)
圖4.25所示的電路連接方式符合存儲(chǔ)器“位擴(kuò)展”的特點(diǎn):
(1)各芯片的數(shù)據(jù)線(DQL0~DQL7、DQU0~DQU7)單獨(dú)引出,作為64位數(shù)據(jù)線的一部分。
(2)64位數(shù)據(jù)中的每8位都有自己的數(shù)據(jù)選通信號(hào)(差分對(duì)DQS0~DQS7,信號(hào)名后綴分別為“_t”和“_c”),以及寫數(shù)據(jù)掩碼信號(hào)(DM0_n/DBI0_n~DM7_n/DBI7_n),這些信號(hào)也是單獨(dú)引出的。
(3)時(shí)鐘、片選、地址以及其他命令信號(hào),都采用并聯(lián)連接方式,即每個(gè)芯片功能相同的引腳連接到一起,統(tǒng)一引出,用來同時(shí)控制4個(gè)存儲(chǔ)器芯片(IC1~IC4)。
(4)在訪問該內(nèi)存條時(shí),4個(gè)DDR4SDRAM存儲(chǔ)器芯片(IC1~IC4)同時(shí)被選中。
3.存儲(chǔ)器與CPU的速度協(xié)調(diào)
對(duì)于簡單的計(jì)算機(jī),只要將半導(dǎo)體存儲(chǔ)器芯片接在計(jì)算機(jī)的系統(tǒng)總線上便可以構(gòu)成主存儲(chǔ)器,在構(gòu)成主存時(shí)必須注意存儲(chǔ)器與CPU速度上的協(xié)調(diào)。
CPU讀(或?qū)?主存時(shí),由CPU內(nèi)部的時(shí)序電路形成CPU讀(或?qū)?主存的機(jī)器周期(即總線周期或CPU周期),由CPU內(nèi)部的控制器產(chǎn)生讀(或?qū)?主存的控制信號(hào),其寫主存時(shí)序如圖4.27(a)所示。圖4.27CPU寫主存與存儲(chǔ)器寫操作的時(shí)序
4.多體交叉存儲(chǔ)器
若要提高計(jì)算機(jī)主存系統(tǒng)的讀寫速度,除了改進(jìn)主存儲(chǔ)器芯片的實(shí)現(xiàn)方式和制造工藝、引入Cache等方法之外,還可以考慮引入并行主存系統(tǒng),即將主存分為多個(gè)存儲(chǔ)體(模塊),使多個(gè)存儲(chǔ)體輪流交叉或并行工作,從而提高主存系統(tǒng)整體的讀寫速度。這樣的存儲(chǔ)器稱為多體交叉存儲(chǔ)器。
1)多體并行訪問
的,因此,32位的數(shù)據(jù)要占四個(gè)主存地址單元。由圖4.28可以看到,一個(gè)32位的數(shù)據(jù)分別放在四個(gè)不同的存儲(chǔ)體中。為了增加訪問主存的靈活性,四個(gè)存儲(chǔ)體可以同時(shí)被選中,傳輸32位數(shù)據(jù);也可以只選中兩個(gè)存儲(chǔ)體(同時(shí)選中存儲(chǔ)體0和存儲(chǔ)體1,或者同時(shí)選中存儲(chǔ)體2和存儲(chǔ)體3),傳輸16位數(shù)據(jù);也可以只選中任意一個(gè)存儲(chǔ)體,傳輸8位數(shù)據(jù)。圖4.2880386、80486系統(tǒng)主存的分體組織結(jié)構(gòu)
2)多體交叉訪問
為提高主存的訪問速度,多體交叉存儲(chǔ)器還有另一種訪問方式,即多個(gè)模塊順序輪流進(jìn)行訪問,也稱為交叉訪問。
多體存儲(chǔ)器中的體數(shù)一般是2的冪指數(shù),如2個(gè)、4個(gè)、8個(gè)或更多。圖4.29是4個(gè)體的多體存儲(chǔ)器簡化框圖,其存儲(chǔ)器地址與80x86存儲(chǔ)系統(tǒng)一樣采用交叉編址。四個(gè)存儲(chǔ)體是完全獨(dú)立的,各自有自己的地址寄存器、地址譯碼器和數(shù)據(jù)寄存器DR。數(shù)據(jù)總線的寬度僅為每個(gè)存儲(chǔ)單元的數(shù)據(jù)寬度。圖4.29四體交叉訪問存儲(chǔ)器簡化框圖
假定每個(gè)存儲(chǔ)體的訪問時(shí)間為T,如果串行訪問四個(gè)連續(xù)地址(分布在4個(gè)存儲(chǔ)體上)則需要4T?,F(xiàn)將該存儲(chǔ)器的訪問過程改為交叉進(jìn)行,如圖4.30所示,控制部件每隔Δt啟動(dòng)一個(gè)存儲(chǔ)體,且4×Δt=T。應(yīng)保證T/Δt小于等于存儲(chǔ)體的數(shù)量N(即Δt·N≥T),這樣才能保證連續(xù)訪問時(shí)存取數(shù)據(jù)的正確性。
圖4.30四體存儲(chǔ)器交叉訪問示意圖
從以上分析可見,采用多體交叉存儲(chǔ)器可以有效地提高存儲(chǔ)器的存取速度。目前,構(gòu)成計(jì)算機(jī)主存的DDR4SDRAM芯片內(nèi)部都是由多個(gè)存儲(chǔ)體(Bank)構(gòu)成的。如4.2.2節(jié)中提到的H5AN8G6NAFR芯片內(nèi)部由兩個(gè)模組(BankGroup)共8個(gè)存儲(chǔ)體(Bank)構(gòu)成。如果SDRAM控制器能夠充分利用這8個(gè)存儲(chǔ)體輪流交叉工作,可大幅度提高主存的整體訪問速度。由此可見,SDRAM控制器內(nèi)部控制算法的優(yōu)劣也會(huì)影響主存速度。
現(xiàn)在主流的高性能處理器內(nèi)部通常集成了內(nèi)存控制器,而內(nèi)存控制器中的多個(gè)SDRAM控制器可以包含多個(gè)控制單元(比如兩個(gè)、三個(gè)或四個(gè)),由此形成兩通道、三通道或四通道的主存結(jié)構(gòu),每個(gè)SDRAM控制單元(通道)可連接一個(gè)或多個(gè)內(nèi)存條,多個(gè)通道交叉或并行工作,可進(jìn)一步提升主存的速度。所以,無論是多通道主存系統(tǒng),還是構(gòu)成主存的DDR4SDRAM芯片內(nèi)部,都采用了多體交叉存儲(chǔ)器的形式。
4.3高速緩沖存儲(chǔ)器
4.3.1工作原理
高速緩沖存儲(chǔ)器的工作建立在程序及數(shù)據(jù)訪問的局部性原理之上。對(duì)大量程序執(zhí)行情況的分析表明:在一段較短的時(shí)間間隔內(nèi),程序集中在某一較小的主存地址空間上執(zhí)行,這就是程序執(zhí)行的局部性原理。同樣,對(duì)數(shù)據(jù)的訪問也存在局部性現(xiàn)象
引入Cache后,Cache和主存構(gòu)成了具有兩級(jí)存儲(chǔ)層次的Cache-主存系統(tǒng),Cache所處位置如圖4.31所示。Cache的構(gòu)成主要包括替換/更新管理模塊、地址映射與變換模塊以及小容量高速緩存Cache,如圖4.32所示。圖4.31Cache所處位置圖4.32Cache的構(gòu)成
當(dāng)CPU執(zhí)行程序時(shí)需從主存讀指令或讀/寫數(shù)據(jù),此時(shí)主存地址從地址線上被加載至主存的同時(shí)也加載到地址映射與變換模塊上。若在地址映射表中檢索到要讀/寫的信息在高速Cache中,則通過地址映射表將地址轉(zhuǎn)換為Cache地址,CPU依據(jù)Cache地址在Cache中讀/寫信息,這種情況稱為“命中”。若在地址映射表中檢索到要讀/寫的信息不在Cache中,則稱“未命中”,此時(shí),CPU在主存中讀出指令或讀/寫數(shù)據(jù),同時(shí)將包括讀/寫信息在內(nèi)的一個(gè)主存塊讀出加載或替換Cache中的某一存儲(chǔ)塊。由于主存到Cache的加載或替換是以塊為單位的,一旦某主存塊被放置在Cache中,對(duì)其塊內(nèi)相鄰地址的訪問必定可以在Cache中進(jìn)行。
利用程序執(zhí)行的局部性原理合理設(shè)計(jì)Cache,使得程序執(zhí)行過程中大量訪存操作實(shí)際在Cache而非主存中,這樣就可以提高CPU的訪存速度,加快程序的執(zhí)行。值得注意的是,Cache中存儲(chǔ)的內(nèi)容與主存的相應(yīng)存儲(chǔ)塊的內(nèi)容是完全一樣的,僅是主存內(nèi)容的拷貝,只是為了提高運(yùn)行速度而將其放在Cache中的。同時(shí),為了提高速度,整個(gè)Cache系統(tǒng)都是由硬件實(shí)現(xiàn)的。
4.3.2地址映射與變換
在Cache工作過程中,需要將主存的信息拷貝到Cache中,這就需要建立主存地址與Cache地址之間的映射關(guān)系,并將該關(guān)系存于地址映射表中,這就是主存地址到Cache地址的地址映射。在程序執(zhí)行中,如果命中,CPU就從Cache中存取信息,此時(shí)需要將主存地址轉(zhuǎn)換為Cache地址,才能對(duì)Cache進(jìn)行訪問。將主存地址轉(zhuǎn)換為Cache地址稱為地址變換。地址映射與變換有如下三種基本方式。
1.全相聯(lián)地址映射方式
為了充分利用程序執(zhí)行的局部性原理,提高效率,通常將Cache和主存分成若干容量相等的存儲(chǔ)塊。例如,主存為64MB,Cache為32KB,若以4KB大小分塊,Cache被分為塊號(hào)為0~7的8個(gè)塊,塊號(hào)可用3位二進(jìn)制編碼表示;而主存分為16K個(gè)塊,塊號(hào)為0~16383,塊號(hào)需要用14位二進(jìn)制編碼表示。分塊情況如圖4.33所示。圖4.33全相聯(lián)地址映射示意圖
全相聯(lián)地址映射關(guān)系如圖4.33所示。這時(shí),采用相聯(lián)存儲(chǔ)器構(gòu)成地址映射表,且使相聯(lián)存儲(chǔ)器單元數(shù)與Cache塊數(shù)相同(本例為8),這樣,Cache塊號(hào)就可以作為地址映射表的表項(xiàng)地址(即相聯(lián)存儲(chǔ)器單元地址),然后在相聯(lián)存儲(chǔ)器的存儲(chǔ)單元中記錄裝入Cache的主存塊的塊號(hào)(即標(biāo)記)。本例中,相聯(lián)存儲(chǔ)器每個(gè)單元的位數(shù)應(yīng)為圖4.34全相聯(lián)地址變換
2.直接地址映射方式
下面仍以前面給出的數(shù)據(jù)為例說明直接地址映射。在直接映射方式下,要將主存先以Cache的容量(32KB)分區(qū),則64MB的主存就被分成0~2047個(gè)區(qū),即2K個(gè)區(qū),而后Cache和主存的每個(gè)區(qū)再以4KB分塊,如圖4.35所示。圖4.35直接地址映射示意圖
直接地址映射規(guī)則為:主存各區(qū)中塊號(hào)相同的存儲(chǔ)塊只能裝入Cache中相同塊號(hào)的存儲(chǔ)塊中。
例如,主存所有區(qū)中的0號(hào)塊只能裝入Cache的0號(hào)塊中,主存所有區(qū)中的1號(hào)塊只能裝入Cache的1號(hào)塊中,以此類推,如圖4.35所示。這種映射使主存塊號(hào)與Cache塊號(hào)保持一致。
下面分析直接映射的地址變換過程。同樣假定某一時(shí)刻CPU欲訪問的主存地址為28B57A4H。此時(shí)該主存地址由區(qū)號(hào)、區(qū)內(nèi)塊號(hào)、塊內(nèi)地址三部分組成,如圖4.36所示。在本例中,主存地址的低12位是塊內(nèi)地址,中間3位表示區(qū)內(nèi)塊號(hào),最高11位用來表示區(qū)號(hào)。圖4.36直接映射方式下主存地址結(jié)構(gòu)圖4.37直接地址變換
3.組相聯(lián)地址映射方式與實(shí)現(xiàn)
全相聯(lián)地址映射和直接地址映射方式各有優(yōu)缺點(diǎn),組相聯(lián)地址映射方式就是將兩者的優(yōu)點(diǎn)結(jié)合而盡可能減小兩者的缺點(diǎn)。組相聯(lián)地址映射的存儲(chǔ)結(jié)構(gòu)是將Cache先分組,組內(nèi)再分塊。而主存結(jié)構(gòu)是先以Cache的總?cè)萘糠謪^(qū),區(qū)內(nèi)按Cache的方法分組,組內(nèi)再分塊。所以Cache和主存的地址結(jié)構(gòu)如圖4.38所示。圖4.38Cache和主存地址結(jié)構(gòu)
組相聯(lián)地址映射規(guī)則為:主存與Cache間的地址映射是組間直接映射而組內(nèi)全相聯(lián)映射,也就是說主存某組中的塊只能裝入Cache的同號(hào)組中,但可以裝入Cache同號(hào)組中的任意一塊內(nèi)。這就要求在地址映射表中記錄的標(biāo)記為主存區(qū)號(hào)和(組內(nèi))塊號(hào)。
1)2路組相聯(lián)地址映射
假設(shè)某計(jì)算機(jī)主存的最大尋址空間為2K,按字節(jié)編址,Cache共有512個(gè)字節(jié),塊大小為64個(gè)字節(jié)。因此,主存共32塊(2KB/64B),Cache共8塊(512B/64B)。若Cache采用2路組相聯(lián)結(jié)構(gòu),則主存與Cache之間的地址映射方式如圖4.39所示。圖4.392路組相聯(lián)地址映射
2路組相聯(lián)的地址映射規(guī)則為:主存某區(qū)的一塊,如果要裝入Cache,可以裝入Cache任何一路相同塊號(hào)的位置。比如,CPU讀主存,給出的11位主存地址為“01110011000B”,說明CPU要訪問的是主存第3區(qū)、第2塊的第24個(gè)字節(jié)(主存地址劃分見圖4.39左下角)。假設(shè)Cache未命中,則Cache管理硬件會(huì)試圖把主存第3區(qū)的第“2”塊裝入Cache,按照2路組相聯(lián)的地址映射規(guī)則,其可裝入Cache的位置有2個(gè)選擇:第1路的第“2”塊,或者第2路的第“2”塊,如圖4.39所示。
上述2路組相聯(lián)的地址映射規(guī)則,如果按照“組”的概念來解釋,可以理解為Cache按照組的數(shù)量分路,主存按照組的數(shù)量分區(qū)。例如,如果Cache共4組,則Cache每4塊為一路,主存每4塊為一個(gè)區(qū)。所以Cache的路內(nèi)塊號(hào)、主存的區(qū)內(nèi)塊號(hào),都可以理解為組號(hào)。具體到本例,解釋如下(參考圖4.39):
(1)2路組相聯(lián),即每組2塊。
(2)Cache每路4塊,則Cache共4組。
(3)Cache“組”和“路”的對(duì)應(yīng)關(guān)系是:
①第0組的兩塊由Cache上下兩路的第0塊構(gòu)成;
②第1組的兩塊由Cache上下兩路的第1塊構(gòu)成;
③第2組的兩塊由Cache上下兩路的第2塊構(gòu)成;
④第3組的兩塊由Cache上下兩路的第3塊構(gòu)成。
(4)主存地址劃分中的索引(Index)字段,其含義是主存的區(qū)內(nèi)塊號(hào),或者Cache的路內(nèi)塊號(hào)(因?yàn)橹鞔媸前凑誄ache每一路的容量分區(qū)的,即主存每一區(qū)和Cache每一路在容量和內(nèi)部分塊規(guī)則上是一樣的)。因?yàn)镃ache的路內(nèi)塊號(hào)、主存的區(qū)內(nèi)塊號(hào)都可以理解為組號(hào),所以主存地址的索引字段即為組號(hào)。
(5)在進(jìn)行主存Cache地址映射時(shí),如果要把主存第3區(qū)的第2塊(即第2組)裝入Cache,可以裝入Cache第2組(由上下兩路的第2塊構(gòu)成)的任何一塊中,即組間直接映射、組內(nèi)全相聯(lián)映射,符合組相聯(lián)地址映射的一般規(guī)則。
上述解釋只是為了說明本例中的Cache結(jié)構(gòu)和組相聯(lián)地址映射之間的關(guān)系。為了便于理解,下文仍以“路”的概念來說明Cache地址映射和地址變換的過程。
2)2路組相聯(lián)地址變換
圖4.40是2路組相聯(lián)地址變換的過程,描述了CPU讀主存時(shí)Cache命中的情況。圖4.402路組相聯(lián)地址變換
假設(shè)CPU讀地址為“01110011000B”的主存單元數(shù)據(jù)(該數(shù)據(jù)是主存第3區(qū)、第2塊的第24個(gè)字節(jié),主存地址劃分見圖4.40左下部),Cache管理硬件負(fù)責(zé)查找地址映射表,看CPU訪問的主存地址是否命中Cache,如果命中Cache,則從Cache中讀取該數(shù)據(jù);如果未命中Cache,則讀主存,將包含該數(shù)據(jù)的主存塊裝入Cache(如果按照當(dāng)前地址映射規(guī)則,Cache沒有空閑塊,還需進(jìn)行塊替換操作)。如圖4.40所示,如果CPU讀主存數(shù)據(jù)時(shí)命中Cache,只需以下三步,即可從Cache中得到所需數(shù)據(jù):
(1)根據(jù)主存地址中的索引字段(即主存區(qū)內(nèi)塊號(hào),或Cache的路內(nèi)塊號(hào)),按地址訪問,讀取地址映射表上、下兩路的第2行;同時(shí),根據(jù)主存地址的索引、塊內(nèi)地址字段按地址訪問,讀取Cache上、下兩路第2塊內(nèi)部地址為24的字節(jié)數(shù)據(jù)。
(2)地址映射表上、下兩路第2行的內(nèi)容被讀出,分別作為兩個(gè)數(shù)字比較器的輸入(有效位和標(biāo)記字段分別連接數(shù)字比較器的G、B兩個(gè)輸入端),數(shù)字比較器A輸入端的數(shù)據(jù)由主存地址的標(biāo)記(Tag)字段(即主存區(qū)號(hào))提供;同時(shí),Cache上、下兩路第2塊內(nèi)部地址為24的字節(jié)數(shù)據(jù)被讀出,作為二選一選擇器的左右兩路輸入。
(3)經(jīng)過比較,第1路數(shù)字比較器的輸出為假(Cache第1路的第2塊“不是”主存第3區(qū)第2塊的內(nèi)容),第2路數(shù)字比較器的輸出為真(Cache第2路的第2塊“是”主存第3區(qū)第2塊的內(nèi)容)。兩個(gè)數(shù)字比較器的輸出信號(hào)控制二選一選擇器,使左側(cè)的輸入(即Cache第2路第2塊內(nèi)部地址為24的字節(jié)數(shù)據(jù))到達(dá)輸出,送至CPU。
通過以上三個(gè)步驟,CPU從Cache中得到了地址為“01110011000B”的主存數(shù)據(jù)。
由圖4.40可知,Cache和地址映射表都由按地址訪問的SRAM構(gòu)成。要實(shí)現(xiàn)“2”路組相聯(lián),則需要“2”個(gè)數(shù)字比較器,以及一個(gè)“二”選一的選擇器??梢哉J(rèn)為,構(gòu)成地址映射表的兩路SRAM,再加上兩個(gè)數(shù)字比較器,即組成了具有兩個(gè)單元的相聯(lián)存儲(chǔ)器,可實(shí)現(xiàn)按內(nèi)容快速查找。查兩路地址映射表和讀取兩路Cache數(shù)據(jù)是并行執(zhí)行的,引入多路選擇器的目的就是為了配合Cache命中時(shí)數(shù)據(jù)的快速讀出。
3)4路組相聯(lián)地址映射與變換
在其他參數(shù)不變的情況下,將Cache的組織結(jié)構(gòu)改為4路組相聯(lián),主存與Cache之間的地址映射方式如圖4.41所示。
圖4.42是4路組相聯(lián)地址變換的過程。
圖4.414路組相聯(lián)地址映射
圖4.424路組相聯(lián)地址變換
假設(shè)CPU讀地址為“01110011000B”的主存數(shù)據(jù)(主存第7區(qū)、第0塊的第24個(gè)字節(jié)),命中Cache,CPU從Cache取得數(shù)據(jù)也只需要以下三個(gè)步驟:
(1)根據(jù)主存地址中的索引字段,按地址訪問,讀取全部4路地址映射表的第0行;同時(shí),根據(jù)主存地址的索引、塊內(nèi)地址字段按地址訪問,讀取全部4路Cache第0塊內(nèi)部地址為24的字節(jié)數(shù)據(jù)。
(2)4路地址映射表的第0行被讀出,分別作為四個(gè)數(shù)字比較器的輸入(有效位和標(biāo)志字段分別連接數(shù)字比較器的G、B兩個(gè)輸入端),數(shù)字比較器A輸入端的數(shù)據(jù)由主存地址的標(biāo)記(Tag)字段提供;同時(shí),4路Cache第0塊內(nèi)部地址為24的字節(jié)數(shù)據(jù)被讀出,作為四選一選擇器的輸入。
(3)經(jīng)過比較,只有第3路數(shù)字比較器的輸出為真。4個(gè)數(shù)字比較器的輸出信號(hào)控制四選一選擇器,使第3路的輸入到達(dá)輸出,送至CPU。至此,CPU從Cache得到要讀取的主存數(shù)據(jù)。
由圖4.42可知,要實(shí)現(xiàn)“4”路組相聯(lián),則需要“4”個(gè)數(shù)字比較器,以及一個(gè)“四”選一的選擇器。
4)8路組相聯(lián)地址映射與變換
同理,在其他參數(shù)不變的情況下,將Cache的組織結(jié)構(gòu)改為8路組相聯(lián),主存與Cache之間的地址映射方式如圖4.43所示。因?yàn)镃ache共8塊,路數(shù)與Cache的總塊數(shù)已相同,則每路只有一塊,Cache每一路的內(nèi)部、主存每一區(qū)的內(nèi)部也就無須塊尋址,主存地址劃分(如圖4.43左下角所示)無須索引字段。顯然,如果主存的某塊要裝入Cache,可以裝入Cache的任何一塊,這就是全相聯(lián)映射方式。本例中,為了實(shí)現(xiàn)地址變換,需要8個(gè)數(shù)字比較器,以及一個(gè)八選一的選擇器。圖4.438路組相聯(lián)地址映射(全相聯(lián))
5)1路組相聯(lián)地址映射(直接映射)
如果將Cache的組織結(jié)構(gòu)改為1路組相聯(lián)(其他參數(shù)不變),主存與Cache之間的地址映射方式如圖4.44所示。很顯然,主存的某塊要裝入Cache,只有一個(gè)位置可供選擇(區(qū)內(nèi)塊號(hào)必須與Cache塊號(hào)對(duì)應(yīng)),這就是直接映射方式。如果Cache采用1路組相聯(lián)(直接映射)的組織方式,為了實(shí)現(xiàn)地址變換,只需一個(gè)數(shù)字比較器,無須多路選擇器,用比較器的輸出控制Cache輸出數(shù)據(jù)的三態(tài)門即可。圖4.441路組相聯(lián)地址映射(直接映射)
4.3.3替換算法
當(dāng)要訪問的主存塊不在Cache中,即未命中時(shí),就需要將主存塊調(diào)入Cache。在采用全相聯(lián)地址映射和組相聯(lián)地址映射時(shí),如果當(dāng)前Cache中沒有空閑塊,則需要在Cache中選擇一個(gè)替換塊,用于放置新調(diào)入的主存塊。
主要的替換算法有如下幾種:
(1)隨機(jī)替換(RAND)算法。
(2)先進(jìn)先出(FirstInFirstOut,FIFO)算法。
(3)近期最少使用(LeastRecentlyUsed,LRU)算法。
(4)最不經(jīng)常使用(LeastFrequentlyUsed,LFU)算法。
(5)最優(yōu)替換(OptionalReplacement,OPT)算法。
例4.4假定程序在主存中占用了5個(gè)存儲(chǔ)塊,Cache容量為3個(gè)存儲(chǔ)塊,采用全相聯(lián)映射。CPU執(zhí)行程序的順序?yàn)镻2、P3、P2、P1、P5、P2、P4、P5、P3、P2、P5、P2。試分析采用FIFO算法、LRU算法和OPT三種算法的Cache命中情況。
解采用FIFO算法、LRU算法和OPT三種算法的Cache命中情況如表4.3所示。
4.3.4更新策略
從前述內(nèi)容可知,Cache的內(nèi)容是主存部分內(nèi)容的拷貝,其內(nèi)容應(yīng)當(dāng)與主存的內(nèi)容保持一致。很顯然,只是從Cache中讀出指令或數(shù)據(jù)是不會(huì)改變Cache中的內(nèi)容的,而CPU對(duì)Cache單元的寫就會(huì)改變其內(nèi)容。為了保證主存與Cache內(nèi)容的一致性,主存的內(nèi)容必須隨著Cache內(nèi)容的改變而更新。由于程序Cache是只讀的,不存在一致性問題,所以該問題只發(fā)生在數(shù)據(jù)Cache中。在數(shù)據(jù)Cache被改寫后,如何更新主存的內(nèi)容,也即如何保持主存與Cache內(nèi)容的一致性,可采取下述的更新策略(也稱為寫策略)。
1.寫回法
寫回法是當(dāng)CPU寫Cache命中時(shí),只將數(shù)據(jù)寫入Cache而不立即寫入主存。只有當(dāng)由CPU改寫過的塊被替換出去時(shí)該塊才寫回到主存中。
2.寫直達(dá)法
寫直達(dá)法也稱作全寫法,是當(dāng)CPU寫Cache命中時(shí),在將數(shù)據(jù)寫入Cache的同時(shí)也寫入主存,從而較好地保證了主存與Cache內(nèi)容的一致性。
4.3.5Cache性能測量
Cache的性能直接影響Cache主存系統(tǒng)的性能,進(jìn)一步影響計(jì)算機(jī)系統(tǒng)的性能。Cache設(shè)計(jì)的好壞可以用性能指標(biāo)衡量,常用的性能指標(biāo)有命中率、平均訪問時(shí)間、加速比、成本等。
1.命中率(HitRate)
命中率h定義為
2.平均訪問時(shí)間(AverageAccessTime)
假設(shè)Cache的訪問時(shí)間為TC,主存的訪問時(shí)間為TM,Cache的命中率為h,則兩層結(jié)構(gòu)的Cache主存系統(tǒng)的平均訪問時(shí)間T可表示為
例4.5若某計(jì)算機(jī)中的Cache以1個(gè)字為一塊,CPU從主存0地址開始順序讀10個(gè)字,重復(fù)100次,Cache命中率為99%,TM為100ns,TC為10ns。Cache主存系統(tǒng)的平均訪問時(shí)間為多少?若主存采用多體交叉結(jié)構(gòu),10個(gè)字的塊可以用TM時(shí)間調(diào)入/替換Cache,則Cache主存系統(tǒng)的平均訪問時(shí)間又為多少?
解(1)在1個(gè)字為一塊的情況下,利用公式(4.5)可得Cache主存系統(tǒng)的平均訪問時(shí)間T為
(2)在10個(gè)字為一塊的情況下,利用公式(4.5)可得Cache主存系統(tǒng)的平均訪問時(shí)間T為
可見,增大塊的尺寸,并采用高速的塊傳輸技術(shù)(如本例的主存多體交叉結(jié)構(gòu)),可以減少調(diào)入/替換開銷。
3.加速比(SpeedupRatio)
在計(jì)算機(jī)中設(shè)置Cache的主要目的在于提高存儲(chǔ)系統(tǒng)的速度,降低存儲(chǔ)系統(tǒng)的價(jià)格。尤其是速度,它是計(jì)算機(jī)設(shè)計(jì)與發(fā)展中永恒的主題。因此,Cache設(shè)計(jì)中人們最關(guān)心的性能指標(biāo)就是加速比。
根據(jù)Amdahl定律,Cache主存系統(tǒng)的加速比SP定義為
例4.6在例4.5(1)的情況下,Cache主存系統(tǒng)的加速比為多少?
解根據(jù)公式(4.6)可得
對(duì)于本例,只有命中率為100%時(shí)才能達(dá)到加速比的極限10,而實(shí)際上這是做不到的,只是希望加速比盡可能大。
4.成本
Cache的出現(xiàn)是為了提高CPU訪問主存儲(chǔ)器的速度,同時(shí)又可以降低成本。假設(shè)計(jì)算機(jī)中的主存與Cache的容量分別為S1和S2,顯然S1?S2;主存與Cache的單位價(jià)格分別為C1和C2,且C1是價(jià)格較低的。那么Cache-主存系統(tǒng)的平均價(jià)格C為
盡管Cache的價(jià)格比主存高,但是當(dāng)S1?S2時(shí),Cache-主存系統(tǒng)的平均價(jià)格接近于主存的價(jià)格。
4.3.6Cache性能提高
為了克服CPU與主存間的速度差距,使兩者在速度上更好地匹配,Cache應(yīng)運(yùn)而生。但隨著技術(shù)的發(fā)展,一級(jí)Cache的加入已不足以彌補(bǔ)CPU與主存間較大的速度差,所以兩級(jí)、三級(jí)甚至四級(jí)Cache已出現(xiàn)。這種多級(jí)Cache系統(tǒng)通過增加存儲(chǔ)層數(shù),使得CPU與主存間較大的速度鴻溝可以得到有效的彌合。一個(gè)四級(jí)Cache結(jié)構(gòu)從上到下的每一層級(jí)分別用L1Cache(最靠近CPU)、L2Cache、L3Cache和L4Cache(最靠近主存)表示。
兩級(jí)Cache的總未命中率(或稱總?cè)笔?是由兩級(jí)Cache各級(jí)缺失率來決定的,即
總?cè)笔?L1缺失率×L2缺失率
例4.7在10000次的內(nèi)存訪問中,L1Cache缺失400次,L2Cache缺失40次,則兩級(jí)Cache的總?cè)笔蕿槎嗌?
解L1Cache的缺失率m1為
L2Cache的缺失率m2為
利用公式(4.8)得到兩級(jí)Cache的總?cè)笔蕀為
顯然,兩級(jí)Cache有更低的缺失率。本例的缺失率從一級(jí)的4%或10%降為兩級(jí)的4‰。
例4.8為主存創(chuàng)建的兩級(jí)Cache性能參數(shù)如表4.4所示。
假設(shè)Cache命中時(shí)的訪問時(shí)間為1ns,問:
(1)Cache系統(tǒng)的平均訪問時(shí)間是多少?總?cè)笔适嵌嗌?
(2)Cache主存系統(tǒng)的平均訪問時(shí)間是多少?.
2.降低Cache的缺失率
1)Cache缺失類型
Cache缺失有三類:強(qiáng)制缺失(CompulsoryMisses)、容量缺失(CapacityMisses)和沖突缺失(ConflictMisses)。
(1)強(qiáng)制缺失。程序執(zhí)行時(shí)第一次訪問的主存塊,因其一定不在Cache中而造成缺失,此為強(qiáng)制缺失。強(qiáng)制缺失大多是不可避免的。
(2)容量缺失。Cache容量有限,不能包含程序執(zhí)行時(shí)欲訪問的所有主存塊。當(dāng)Cache已滿且又遇到程序欲訪問的主存塊未在Cache中時(shí),容量缺失出現(xiàn)。容量缺失是常見的Cache缺失。
(3)沖突缺失。Cache中有空閑塊,但地址映射方案將有用的Cache塊替換掉,使得未來可能因再次使用被替換掉的有用塊而產(chǎn)生缺失,此為沖突缺失。沖突缺失主要發(fā)生在采用直接地址映射方案的Cache系統(tǒng)中。
例4.9某系統(tǒng)中Cache由4塊組成,程序執(zhí)行涉及的主存塊地址(十進(jìn)制表示)依次如表4.5所示。
表4.5例4.9主存塊地址
試分析:
(1)采用直接地址映射時(shí),Cache的命中情況。
(2)采用全相聯(lián)地址映射和近期最少使用(LRU)替換算法時(shí),Cache的命中情況。
2)合理設(shè)計(jì)Cache塊尺寸根據(jù)程序執(zhí)行的局部性,Cache塊越大,缺失率會(huì)越小。但在Cache容量一定的情況下,Cache塊的尺寸增加較多,會(huì)使塊的數(shù)量減少,使塊的替換更加頻繁,反而會(huì)提高缺失率。因此,在Cache容量一定的情況下,需要尋找使缺失率達(dá)到最低點(diǎn)的塊尺寸B最佳,如圖4.45所示??梢?要合理設(shè)計(jì)Cache塊尺寸,而不是越大越好;另外,增加塊尺寸也會(huì)增加未命中的開銷。
3)合理增加Cache容量
增加Cache容量是降低容量缺失最直接的方法。如圖4.46所示,在Cache容量比較小的時(shí)候,隨著容量的增加,缺失率快速下降。隨著Cache容量進(jìn)一步變大,缺失率下降變得比較緩慢。當(dāng)Cache的容量能裝下CPU要執(zhí)行的所有程序和數(shù)據(jù)時(shí),命中率就達(dá)到了100%。另外,Cache容量越大,圖4.45中的B最佳也會(huì)越大,缺失率的最低點(diǎn)也會(huì)更低。圖4.46缺失率m與容量S大小的關(guān)系
4)合理設(shè)置相聯(lián)度
在Cache容量一定的前提下,采用直接地址映射方式的Cache具有較低的命中率,采用全相聯(lián)地址映射方式的Cache具有較高的命中率,而采用組相聯(lián)地址映射方式的Cache具有高命中率和低復(fù)雜度較理想的平衡,所以在實(shí)際計(jì)算機(jī)系統(tǒng)中均采用組相聯(lián)地址映射方式。
5)硬件預(yù)取
在Cache之外增加專門的硬件,通過一定的算法判斷哪些指令和數(shù)據(jù)在近期極有可能會(huì)被訪問到,在主存空閑時(shí),提前將這些指令和數(shù)據(jù)裝入Cache,這是解決強(qiáng)制缺失的有效方法。注意,如果預(yù)取影響了對(duì)正常未命中的處理,會(huì)降低性能。
6)編譯優(yōu)化
通過編譯器優(yōu)化輸出代碼,無須修改硬件。編譯器可以在不影響程序運(yùn)行結(jié)果的情況下,改變程序中模塊或指令的位置,改善指令和數(shù)據(jù)訪問的時(shí)間和空間局部性,從而降低缺失率。
3.減少Cache開銷
減少Cache命中與未命中時(shí)的開銷,有助于Cache性能的提高。可以從Cache設(shè)計(jì)的多處細(xì)節(jié)入手,例如:(1)Cache訪問流水化。把對(duì)L1Cache的訪問過程改造成流水線方式,可以提高時(shí)鐘頻率及訪問Cache的帶寬。
(2)非阻塞Cache技術(shù)。在Cache未命中、啟動(dòng)主存裝入新塊時(shí),Cache仍允許CPU訪問其他命中的數(shù)據(jù)。對(duì)于采用流水線方式、允許指令亂序執(zhí)行的計(jì)算機(jī),使用非阻塞Cache可以使性能得到明顯提升。但非阻塞Cache大大增加了Cache控制器的復(fù)雜度。
(3)使讀未命中優(yōu)先于寫。如果Cache讀未命中,且Cache被替換的塊需要寫回主存,可以先將被替換的塊存入寫緩沖器,然后從主存把需要的塊裝入Cache,最后再把替換的塊從寫緩沖器寫入主存。
4.4虛擬存儲(chǔ)器
4.4.1虛擬存儲(chǔ)器概述在虛擬存儲(chǔ)器(VirtualMemory,VM)出現(xiàn)之前,計(jì)算機(jī)系統(tǒng)的所有程序共享一個(gè)主存物理地址空間,為了防止沖突,每個(gè)機(jī)器語言程序必須十分清楚計(jì)算機(jī)的系統(tǒng)結(jié)構(gòu),這造成了沒有辦法阻止用戶程序訪問任何計(jì)算機(jī)資源,從而可能給系統(tǒng)運(yùn)行帶來災(zāi)難性的后果。
虛擬存儲(chǔ)器的結(jié)構(gòu)及在存儲(chǔ)體系中的位置如圖4.47所示,它是在操作系統(tǒng)及輔助硬件的管理下,由主存和大容量外存(目前主要用硬盤)所構(gòu)成的一個(gè)單一的、可直接訪問的超大容量的主存儲(chǔ)器。圖4.47虛擬存儲(chǔ)器的構(gòu)成
實(shí)際上,虛擬存儲(chǔ)器就是主存與硬盤間的虛擬橋梁,用戶與系統(tǒng)實(shí)體資源的真實(shí)屏障。這個(gè)中間存儲(chǔ)層的引入,使主存容量延伸到硬盤,解決了主存容量與成本的矛盾,同時(shí)其屏障效應(yīng)還帶來了其硬件支持現(xiàn)代操作系統(tǒng)三大特征(轉(zhuǎn)換、保護(hù)、共享)的好處。
(1)轉(zhuǎn)換(Translation)。無論實(shí)際主存被誰占用,所有程序的主存空間是一致的;多線程已成為可能,且已大量使用;僅程序中最重要(正在執(zhí)行)的部分在主存中。
(2)保護(hù)(Protection)。不同的線程(或進(jìn)程)互相保護(hù);不同的頁(或段)可以給予特定的行為(只讀、對(duì)用戶程序不可見等);保護(hù)內(nèi)核數(shù)據(jù)免受用戶程序干擾,最重要的是免受惡意程序干擾。
(3)共享(Sharing)??梢詫⑼恢鞔骓撚成涞蕉鄠€(gè)用戶,即共享主存。
4.4.2虛擬存儲(chǔ)器管理
1.頁式虛擬存儲(chǔ)器
在頁式虛擬存儲(chǔ)系統(tǒng)中,虛擬地址空間被分成許多固定大小的頁,稱為虛頁或邏輯頁。主存地址空間也被分成若干同樣大小的頁,稱為實(shí)頁或物理頁。頁的大小為2的冪指數(shù)字節(jié)或字,從幾千字節(jié)到十幾兆字節(jié)不等。所以,虛存地址(也稱虛擬地址或邏輯地址)和主存地址(也稱實(shí)地址或物理地址)都包含兩個(gè)字段,如圖4.48所示。圖4.48頁式虛擬存儲(chǔ)器的虛存地址和主存地址
1)地址變換
在管理頁式虛擬存儲(chǔ)器時(shí),需要完成虛擬地址到物理地址的變換,該變換是基于全相聯(lián)地址映射并通過頁表來實(shí)現(xiàn)的。在頁表中每一條記錄都包含虛頁號(hào)所對(duì)應(yīng)的實(shí)頁號(hào)。如圖4.49所示,頁表通常設(shè)置在主存中,表的起始地址可通過頁表基址寄存器來設(shè)定。在頁式虛擬存儲(chǔ)器的地址變換中,當(dāng)程序給出虛擬地址后,CPU以虛頁號(hào)為偏移地址查頁表,從而獲得相應(yīng)的實(shí)頁號(hào)。將實(shí)頁號(hào)與虛擬頁內(nèi)地址連接到一起,便構(gòu)成了主存的物理地址。圖4.49頁式虛擬存儲(chǔ)器的地址變換
2)快表與慢表
由于頁表設(shè)置在主存中,頁式虛擬存儲(chǔ)器工作時(shí),首先要訪問主存中的頁表,進(jìn)行地址變換,獲得主存地址。然后,再利用主存地址訪問主存,獲得指令/數(shù)據(jù)。顯然,即使主存命中,也需要兩次訪問主存才能獲得主存信息。前面已提到主存速度比較慢,這必然會(huì)降低CPU的速度。若是被訪問的頁不在主存中,那速度就更慢。
為了提高速度,可借鑒Cache的思路,將頁表中最活躍的部分放在Cache存儲(chǔ)器中,構(gòu)成快表,對(duì)快表的查找及管理全用硬件來實(shí)現(xiàn)。快表一般很小,它僅是主存中頁表(相對(duì)快表可稱其為慢表)的一小部分。只有在快表中找不到要訪問的頁時(shí),才去訪問慢表,以達(dá)到快的目的。利用快表的工作思路如圖4.50所示。圖4.50頁式虛擬存儲(chǔ)器快表工作思路
頁式虛擬存儲(chǔ)器的主要優(yōu)點(diǎn):
(1)主存的利用率高。由于頁的容量較小,每一用戶程序只有不到一頁的浪費(fèi),故形成的主存碎片小。
(2)頁表的內(nèi)容比較簡單。
(3)地址映射與地址變換速度比較快。
頁式虛擬存儲(chǔ)器的主要缺點(diǎn):
(1)程序的模塊性差。因?yàn)轫摰拇笮∈枪潭ǖ?無法與程序模塊保持一致。
(2)頁表很長。如前述例子中頁表長達(dá)16M。
2.段式虛擬存儲(chǔ)器
在段式虛擬存儲(chǔ)器中,將完成某種獨(dú)立功能的程序模塊定義為一段,例如,主程序、子程序、數(shù)據(jù)塊、表格等均可定義成一段。程序員在編程時(shí),每一段都可從虛擬地址的0地址開始,并且每一段的長度是不一樣的。
在進(jìn)行段式虛擬存儲(chǔ)器管理中,應(yīng)為每一段程序規(guī)定一個(gè)段號(hào)(也可以定義為某一段名),最方便的辦法是各段段號(hào)順序排列(這樣在段表中可省略此項(xiàng)),確定每段的長度,然后在主存中建立一個(gè)段表。
段式虛擬存儲(chǔ)器管理地址映射的方法也是基于全相聯(lián)映射,即程序段可裝入主存中的任何位置,裝入順序隨意。當(dāng)主存基本被占滿,所??臻g不足以存放需裝入的段時(shí),就需依據(jù)某種替換算法進(jìn)行替換。段式虛擬存儲(chǔ)器的地址變換如圖4.51所示。圖4.51段式虛擬存儲(chǔ)器的地址變換
段式虛擬存儲(chǔ)器的優(yōu)點(diǎn)是:
(1)很適合模塊化程序設(shè)計(jì)。將每一功能獨(dú)立的程序模塊定義為一段,既便于程序的開發(fā),又便于虛擬存儲(chǔ)器的管理。
(2)便于程序和數(shù)據(jù)的共享。此方式能將整段獨(dú)立的程序和數(shù)據(jù)裝入主存,起始地址、段長度均已知,很容易實(shí)現(xiàn)共享。
(3)便于信息保護(hù)。對(duì)裝入段的屬性進(jìn)行設(shè)置,很容易實(shí)現(xiàn)對(duì)段的保護(hù)。段式虛擬存儲(chǔ)器的缺點(diǎn)主要有:由于各段的長度不一樣,在裝入主存時(shí)分配地址空間比較麻煩,段與段之間可能會(huì)產(chǎn)生比較大的空隙(段間的主存碎片),降低了主存儲(chǔ)器的利用率。
3.段頁式虛擬存儲(chǔ)器
頁式虛擬存儲(chǔ)器和段式虛擬存儲(chǔ)器各有優(yōu)缺點(diǎn),段頁式虛擬存儲(chǔ)器則結(jié)合了兩者的優(yōu)點(diǎn)。
段頁式虛擬存儲(chǔ)器是將程序首先分段(段的概念同前),然后將每段分成大小相同的若干頁。對(duì)段來說,要用段表來管理所有各段,段表中存放對(duì)應(yīng)該段的頁表基地址等有關(guān)信息,如圖4.52所示。每一段有自己的頁表,用于存放對(duì)應(yīng)本段每一頁的實(shí)頁號(hào)。顯然,在裝入某一段的各頁時(shí),這些頁在主存中并不一定連
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 家電產(chǎn)品保險(xiǎn)合同
- 房屋買賣合同的合同履行與監(jiān)督
- 貨品倉儲(chǔ)合同模板
- 標(biāo)準(zhǔn)廠房租賃合同
- 版育嬰師服務(wù)合同解析
- 企業(yè)人力資源管理體系建設(shè)方案設(shè)計(jì)
- 心理學(xué)效應(yīng)與行為學(xué)作業(yè)指導(dǎo)書
- 稅務(wù)籌劃與避稅指南
- 《7 合成之法-為錄音添加背景音樂》教學(xué)實(shí)錄-2023-2024學(xué)年清華版(2012)信息技術(shù)六年級(jí)上冊
- 消防設(shè)計(jì)及技術(shù)咨詢驗(yàn)收服務(wù)合同
- 2024年重慶市安全員C證考試(專職安全員)題庫及答案
- 2024年四川省成都市公開招聘警務(wù)輔助人員(輔警)筆試必刷測試卷(1)含答案
- 中建塔樓幕墻屋面環(huán)軌拆卸專項(xiàng)施工方案
- 2024年四川省高三語文第一次聯(lián)合診斷性考試作文題目解析及范文:青春的選擇
- 場地道路施工方案
- 《工業(yè)互聯(lián)網(wǎng)平臺(tái)規(guī)劃設(shè)計(jì)方案》
- 八上道法知識(shí)點(diǎn)默寫+答案
- 大學(xué)生心理健康智慧樹知到期末考試答案章節(jié)答案2024年上海杉達(dá)學(xué)院
- 《中國心力衰竭診斷和治療指南2024》解讀(總)
- 知道智慧網(wǎng)課《會(huì)計(jì)學(xué)原理》章節(jié)測試答案
- 《道德經(jīng)》的智慧啟示智慧樹知到期末考試答案2024年
評(píng)論
0/150
提交評(píng)論