计算机组成原理第3章-存储系统
寫在前面:本文參考王道論壇主編的 計(jì)算機(jī)組成原理單科教材。
文章目錄
- 3.1 存儲(chǔ)器概述
- 3.1.1 存儲(chǔ)器的分類
- 1 按照在計(jì)算機(jī)的作用(層次)分類
- 2 按照存儲(chǔ)介質(zhì)分類
- 3 按照存取方式分類
- 4 按照信息的可保存性分類
- 3.1.2 存儲(chǔ)器的性能指標(biāo)
- 王道題目精選
- 3.2 存儲(chǔ)器的層次化結(jié)構(gòu)
- 3.3 半導(dǎo)體隨機(jī)存儲(chǔ)器
- 3.3.1 SRAM和DRAM
- 1 SRAM的工作原理
- 2 DRAM的工作原理
- 3.3.2 只讀存儲(chǔ)器
- 1 只讀存儲(chǔ)器的特點(diǎn)
- 2 ROM的類型
- 3.4 主存儲(chǔ)器與CPU的連接
- 3.4.2 主存容量的擴(kuò)展
- 1.位擴(kuò)展法
- 2.字?jǐn)U展法
- 3.字位同時(shí)擴(kuò)展法
- 王道習(xí)題
- 3.5 雙端口RAM和多模塊存儲(chǔ)器
- 3.5.1 雙端口RAM
- 3.5.2 多模塊存儲(chǔ)器
- 1 單體多字存儲(chǔ)器
- 2 多體并行存儲(chǔ)器
- 王道題目
- 3.6 高速緩沖存儲(chǔ)器(cache)
- 3.6.1 程序訪問的局部性原理
- 3.6.2 cache的基本工作原理
- 3.6.3 Cache和主存的映射方式
- 1 直接映射
- 2 全相聯(lián)映射
- 3組相聯(lián)映射
- 王道書上Cache例題
- 3.6.4 Cache中主存塊的替換算法
- 3.6.5 Cache寫策略
- 王道習(xí)題
- 2010年408統(tǒng)考真題--兩段for循環(huán)程序
- 全相聯(lián)映射-塊表
- 四路組相聯(lián)-標(biāo)記陣列和LRU替換
- 2013年408統(tǒng)考真題(undone)
- 2016年408統(tǒng)考真題(undone)
- 3.7虛擬存儲(chǔ)器
- 3.7.1 虛擬存儲(chǔ)器的基本概念
- 3.7.2 頁式虛擬存儲(chǔ)器
- 3.7.3 加快地址轉(zhuǎn)換:快表(TLB)
- 3.7.4 段式虛擬存儲(chǔ)器
- 3.7.5 段頁式虛擬存儲(chǔ)器
3.1 存儲(chǔ)器概述
3.1.1 存儲(chǔ)器的分類
1 按照在計(jì)算機(jī)的作用(層次)分類
1)主存儲(chǔ)器。 簡稱主存,又稱內(nèi)存,用來存放計(jì)算機(jī)運(yùn)行期間所需的大量程序和數(shù)據(jù),CPU可以直接隨機(jī)地對其進(jìn)行訪問,也可以和高速緩沖存儲(chǔ)器(Cache)及輔助寄存器交換數(shù)據(jù)。
特點(diǎn)是:容量較小、存儲(chǔ)速度較快、每位價(jià)格較高。
2)輔助存儲(chǔ)器。簡稱輔存,又稱外存, 是主存儲(chǔ)器的外援存儲(chǔ)器,用來存放當(dāng)前暫時(shí)不用的程序和數(shù)據(jù),以及一些需要永久性保存的信息,它不能與CPU直接交換信息。
特點(diǎn)是:容量極大、存儲(chǔ)速度較慢、單位成本低。
3) 高速緩沖存儲(chǔ)器。簡稱Cache,位于主存和CPU之間,用來存放正在執(zhí)行的程序段和數(shù)據(jù),以便CPU能高速地使用它們。
特點(diǎn)是:存取速度可與CPU的速度相匹配,但存儲(chǔ)容量小、價(jià)格高。
目前的高檔計(jì)算機(jī)通常將Cache制作在CPU中。
2 按照存儲(chǔ)介質(zhì)分類
按照存儲(chǔ)介質(zhì)分類,存儲(chǔ)器可分為磁表面存儲(chǔ)器(磁盤、磁帶)、磁心存儲(chǔ)器半導(dǎo)體存儲(chǔ)器(MOS型存儲(chǔ)器、雙極型存儲(chǔ)器)和光存儲(chǔ)器(光盤)。
3 按照存取方式分類
1)隨機(jī)存儲(chǔ)器(RAM)。存儲(chǔ)器的任何一個(gè)存儲(chǔ)單元的內(nèi)容都可以隨機(jī)存取,而且存儲(chǔ)時(shí)間與存儲(chǔ)單元的物理位置無關(guān)。其優(yōu)點(diǎn)是讀寫方便、使用靈活,主要用作主存或者cache。RAM又分為靜態(tài)RAM(以觸發(fā)器原理寄存信息)和動(dòng)態(tài)RAM(以電容充電原理寄存信息).
2)只讀存儲(chǔ)器(ROM)。 存儲(chǔ)器的內(nèi)容只能隨機(jī)地讀出而不能寫入。 信息一旦寫入存儲(chǔ)器就固定不變,即使斷電,內(nèi)容也不會(huì)丟失。 因此,通常用它存放固定不變的程序、常數(shù)和漢字字庫,甚至用于操作系統(tǒng)的固化。它與隨機(jī)存儲(chǔ)器可共同作為主存的一部分,同一構(gòu)成主存的地址域。
3)串行訪問存儲(chǔ)器。 對存儲(chǔ)單元進(jìn)行讀寫操作時(shí),需按照物理位置的先后順序?qū)ぶ?#xff0c;包括順序存取存儲(chǔ)器(如磁帶)和直接存取存儲(chǔ)器(如磁盤)。
直接存取存儲(chǔ)器既不像RAM那樣隨機(jī)地訪問任何一個(gè)存儲(chǔ)單元,又不像順序存取存儲(chǔ)器那樣完全按順序存取,而是介于兩者之間。存取信息通常先尋找整個(gè)存儲(chǔ)器的某個(gè)小區(qū)域(比如磁盤上的某個(gè)磁道),再在小區(qū)域內(nèi)順序查找。
4 按照信息的可保存性分類
斷電后存儲(chǔ)信息立刻消失的存儲(chǔ)器,稱為易失性存儲(chǔ)器,比如RAM。
斷電后存儲(chǔ)信息仍然保持的存儲(chǔ)器,稱為非易失性存儲(chǔ)器,比如ROM、磁表面存儲(chǔ)器和光存儲(chǔ)器。
若某個(gè)存儲(chǔ)單元所存儲(chǔ)的信息被讀出時(shí),原存儲(chǔ)信息被破壞,則稱為破壞性讀出(比如DRAM);若讀出時(shí),被讀單元原存儲(chǔ)信息不被破壞,稱為非破壞性讀出。
3.1.2 存儲(chǔ)器的性能指標(biāo)
存儲(chǔ)器有3個(gè)主要性能指標(biāo),即存儲(chǔ)容量、單位成本和存儲(chǔ)速度。 這三個(gè)指標(biāo)相互制約,設(shè)計(jì)存儲(chǔ)器系統(tǒng)所追求的目標(biāo)就是大容量、低成本和高速度。
1) 存儲(chǔ)容量 =存儲(chǔ)字?jǐn)?shù)× 字長 (比如 1M × 8位,又比如 1M × 32位)
存儲(chǔ)字?jǐn)?shù)表示存儲(chǔ)器的地址空間大小,字長表示一次存取操作的數(shù)據(jù)量。
2)單位成本:每位價(jià)格=總成本/總?cè)萘?/p>
3) 存儲(chǔ)速度:數(shù)據(jù)傳輸率=數(shù)據(jù)的寬度/ 存儲(chǔ)周期
存取時(shí)間(TaT_aTa?):存取時(shí)間是指從啟動(dòng)一次存儲(chǔ)器操作到完成該操作所經(jīng)歷的時(shí)間,分為讀出時(shí)間和寫入時(shí)間。
存取時(shí)間是指從存儲(chǔ)器讀出或?qū)懭胍淮涡畔⑺枰钠骄鶗r(shí)間。
存取周期(TmT_mTm?):存取周期又稱為讀寫周期或訪問周期。它是指存儲(chǔ)器進(jìn)行一次完整的讀寫操作所需的全部時(shí)間,即連續(xù)兩次獨(dú)立訪問存儲(chǔ)器操作(讀或?qū)懖僮?#xff09;之間所需的最小時(shí)間間隔。 通常包括存取時(shí)間+恢復(fù)時(shí)間。
主存帶寬(BmB_mBm?):主存帶寬又稱為數(shù)據(jù)傳輸率,表示每秒從主存進(jìn)出信息的最大數(shù)量。
存取時(shí)間不等于存儲(chǔ)周期,通常存儲(chǔ)周期大于存取時(shí)間。這是因?yàn)閷θ魏我环N存儲(chǔ)器,在讀寫操作之后,總要有一段回復(fù)內(nèi)部狀態(tài)的復(fù)原時(shí)間。對于破壞性讀出的存儲(chǔ)器,存取周期往往比存取時(shí)間大得多。
王道題目精選
3.2 存儲(chǔ)器的層次化結(jié)構(gòu)
為了解決存儲(chǔ)系統(tǒng)大容量、高速度和低成本三個(gè)相互制約的矛盾,在計(jì)算機(jī)系統(tǒng)中,通常采用多級存儲(chǔ)器結(jié)構(gòu),如下圖所示。 在圖中,從上到下, 價(jià)位越來越低,速度越來越慢,容量越來越大, CPU訪問的頻率越來越低。
實(shí)際上, 存儲(chǔ)系統(tǒng)層次結(jié)構(gòu)主要體現(xiàn)在“cache-主存”層次和“主存-輔存”層次。前者主要解決CPU和主存速度不匹配的問題,后者主要解決存儲(chǔ)系統(tǒng)的容量問題。在存儲(chǔ)體系中,cache、主存能和CPU直接交換信息, 輔存則許喲啊通過主存與CPU交換信息;主存與CPU、cache和輔存都能夠交換信息。
存儲(chǔ)器層次結(jié)構(gòu)的主要思想是上一層的存儲(chǔ)器作為低一層存儲(chǔ)器的高速緩存。從CPU和角度看, cache-主存 層次速度接近于cache,而容量和價(jià)格卻接近于主存; 從主存-輔存層次看,其速度接近于主存,而價(jià)格和容量卻接近于輔存。
需要注意的是,主存和cache之間的數(shù)據(jù)調(diào)動(dòng)是由硬件自動(dòng)完成的,對所有程序員透明; 而主存和輔存之間的數(shù)據(jù)調(diào)動(dòng)是硬件和操作系統(tǒng)共同完成的,對應(yīng)用程序員透明。
3.3 半導(dǎo)體隨機(jī)存儲(chǔ)器
主存儲(chǔ)器由DRAM實(shí)現(xiàn),cache由SRAM實(shí)現(xiàn),它們都是易失性存儲(chǔ)器,只要電源被切斷,原來保存的信息就會(huì)丟失。 DRAM的每比特成本低于SRAM,速度也慢于SRAM,價(jià)格差異主要是因?yàn)镾RAM集成度較低,同樣面積的硅片可以做出更大容量的DRAM,而只能做出很少的SRAM,所以SRAM更貴。【價(jià)格差異的原因】 而ROM則屬于非易失性存儲(chǔ)器。
3.3.1 SRAM和DRAM
DRAM SRAM
為什么 SRAM 和DRAM都是易失性存儲(chǔ)器?
答: 因?yàn)閮烧叨际?strong>以電信號的形式儲(chǔ)存0/1 ,所以斷電之后就丟失信息。
為什么 SRAM 不需要刷新,而DRAM需要刷新?
答: 因?yàn)镈RAM存儲(chǔ)信息的元件是電容,電容上的電荷只能維持2ms左右(即使不斷電),為了防止電荷自動(dòng)丟失,所以需要刷新,恢復(fù)電荷量(即恢復(fù)信息);而SRAM存儲(chǔ)信息所用的是雙穩(wěn)態(tài)觸發(fā)器,它有兩種穩(wěn)定的狀態(tài),不需要刷新。
SRAM和DRAM讀寫的原理是什么呢?以及為什么DRAM是破壞性讀?
DRAM使用電容,【1】讀取數(shù)據(jù)的時(shí)候需要?jiǎng)e的電路連接電容,檢測電流的變化,所以會(huì)改變電容中儲(chǔ)存的電荷,因而會(huì)改變存儲(chǔ)的信息,也就是破壞性讀。 【2】寫數(shù)據(jù)的時(shí)候要給電容充放電
SRAM使用觸發(fā)器,有兩種穩(wěn)定的狀態(tài),【1】讀取數(shù)據(jù)僅需要查看觸發(fā)器的狀態(tài);【2】寫數(shù)據(jù)需要修改觸發(fā)器的狀態(tài)。
1 SRAM的工作原理
通常把存放一個(gè)二進(jìn)制位的物理器件稱為存儲(chǔ)元,它是存儲(chǔ)器的最基本的構(gòu)件。地址碼相同的多個(gè)存儲(chǔ)元構(gòu)成一個(gè)存儲(chǔ)單元。 若干存儲(chǔ)單元的集合構(gòu)成存儲(chǔ)體。
靜態(tài)RAM的存儲(chǔ)元是用雙穩(wěn)態(tài)觸發(fā)器實(shí)現(xiàn)的,因此即時(shí)信息被讀出后,它仍保持其原狀態(tài)而不需要再生。
2 DRAM的工作原理
與SRAM不同,動(dòng)態(tài)隨機(jī)存儲(chǔ)器(DRAM)是利用存儲(chǔ)元電路中柵極電容上的電荷來存儲(chǔ)信息的,DRAM的基本存儲(chǔ)元通常只使用一個(gè)晶體管,所以它比SRAM的密度更高。DRAM采用地址復(fù)用技術(shù),地址信號分行列兩次傳送。
DRAM電容上的電荷一般只能維持1~2ms,因此即使電源不斷電,信息也會(huì)自動(dòng)消失。 為此,每隔一定時(shí)間必須刷新,通常取2ms,這個(gè)時(shí)間稱為刷新周期。 常用的刷新方式有三種:集中刷新、分散刷新和異步刷新。
1)集中刷新。指在一個(gè)刷新周期內(nèi),利用一端固定的時(shí)間,依次對存儲(chǔ)器的所有行進(jìn)行逐一再生(讀出一行信息后重新寫入),在此期間停止對存儲(chǔ)器的讀寫操作,稱為"死時(shí)間",又稱訪存“死區(qū)”。
集中刷新的優(yōu)點(diǎn)是讀寫操作時(shí)不受刷新工作的影響,因此系統(tǒng)的存取速度較高;缺點(diǎn)是在集中刷新期間(死區(qū))不能訪問存儲(chǔ)器。
2)分散刷新。 把對每行的刷新分散到各個(gè)工作周期中。這樣,一個(gè)存儲(chǔ)器的系統(tǒng)工作周期分為兩部分:前半部分用于正常讀、寫或保持;后半部分用于刷新某一行。 這種刷新方式增加了系統(tǒng)的存取周期, 如存儲(chǔ)芯片的存取周期為0.5 us,則系統(tǒng)存取周期為1us。
存取周期,它是指存儲(chǔ)器進(jìn)行一次完整的讀寫操作所需的全部時(shí)間,即連續(xù)兩次獨(dú)立訪問存儲(chǔ)器操作(讀或?qū)懖僮?#xff09;之間所需的最小時(shí)間間隔。 通常包括存取時(shí)間+恢復(fù)時(shí)間。
分散刷新的優(yōu)點(diǎn)是沒有死區(qū);缺點(diǎn)是加長了系統(tǒng)的存取周期,降低了整機(jī)的速度。
3)異步刷新。
異步刷新是前兩種方法的結(jié)合,它既可以縮短“死時(shí)間”,又能充分利用最大刷新間隔為2ms的特點(diǎn)。 具體做法是將刷新周期除以行數(shù), 得到兩次刷新操作之間的時(shí)間間隔t,利用邏輯電路每個(gè)時(shí)間t產(chǎn)生一次刷新請求。這樣可以避免使CPU連續(xù)等待過長的時(shí)間,而且減少了刷新次數(shù)。
若將刷新安排在不需要訪問存儲(chǔ)器的譯碼階段, 則既不會(huì)加長存取周期,也不會(huì)產(chǎn)生“死時(shí)間”,這是分散刷新方式的發(fā)展,也稱為“透明刷新”。
3.3.2 只讀存儲(chǔ)器
1 只讀存儲(chǔ)器的特點(diǎn)
ROM和RAM都是支持隨機(jī)存取的存儲(chǔ)器,其中DRAM和SRAM都是易失性存儲(chǔ)器;而ROM中一旦有了信息,就不能輕易改變,即使掉電也不會(huì)丟失,也在計(jì)算機(jī)系統(tǒng)中是只供讀出的存儲(chǔ)器。 ROM器件有兩個(gè)顯著的優(yōu)點(diǎn):
1)結(jié)構(gòu)簡單,所以位密度比可讀寫存儲(chǔ)器的高;
2)具有非易失性,所以可靠性高;
2 ROM的類型
U盤屬于閃存(flash)!!!
3.4 主存儲(chǔ)器與CPU的連接
3.4.2 主存容量的擴(kuò)展
由于單個(gè)存儲(chǔ)芯片的容量是有限的,它在字?jǐn)?shù)或者字長方面與實(shí)際存儲(chǔ)器的要求有差別,因此需要在字和位兩方面進(jìn)行擴(kuò)充才能滿足實(shí)際存儲(chǔ)器的容量要求。 通常采用位擴(kuò)展法、字?jǐn)U展法和字位同時(shí)擴(kuò)展法來擴(kuò)展主存容量。
1.位擴(kuò)展法
CPU的數(shù)據(jù)線數(shù)和存儲(chǔ)芯片的數(shù)據(jù)位數(shù)不一定相等,此時(shí)必須對存儲(chǔ)芯片擴(kuò)位(即進(jìn)行位擴(kuò)展,用多個(gè)存儲(chǔ)器對字長進(jìn)行擴(kuò)充,增加存儲(chǔ)字長),使其數(shù)據(jù)位數(shù)與CPU的數(shù)據(jù)線數(shù)相等。
位擴(kuò)展的連接方式是將多個(gè)存儲(chǔ)芯片的地址端、片選端和讀寫控制端相應(yīng)并聯(lián), 數(shù)據(jù)端分別引出。
注意: 僅采用位擴(kuò)展時(shí),各芯片連接地址線的方式相同,但連接數(shù)據(jù)線的方式不同,在某一時(shí)刻選中所有的芯片,所以片選信號要連接到所有芯片。
2.字?jǐn)U展法
字?jǐn)U展是指增加存儲(chǔ)器中字的數(shù)量,而位數(shù)不變。 字?jǐn)U展將芯片的地址線、數(shù)據(jù)線、讀寫控制線相應(yīng)并聯(lián),而由片選信號來區(qū)分各個(gè)芯片的地址范圍。
3.字位同時(shí)擴(kuò)展法
王道習(xí)題
解答:
解答:
解答:
解答:
解答:
3.5 雙端口RAM和多模塊存儲(chǔ)器
為提高CPU訪問存儲(chǔ)器的速度,可以采用雙端口存儲(chǔ)器、多模塊存儲(chǔ)器等技術(shù),它們同屬于并行技術(shù),前者為空間并行,后者為時(shí)間并行。
3.5.1 雙端口RAM
雙端口RAM是指同一個(gè)存儲(chǔ)器有左右兩個(gè)獨(dú)立的端口,分別具有兩組相互獨(dú)立的地址線、數(shù)據(jù)線和讀寫控制線,允許兩個(gè)獨(dú)立的控制器同時(shí)異步地訪問存儲(chǔ)單元。 當(dāng)兩個(gè)端口的地址不相同時(shí),在兩個(gè)端口上進(jìn)行讀寫操作一定不會(huì)發(fā)生沖突。
3.5.2 多模塊存儲(chǔ)器
1 單體多字存儲(chǔ)器
單體多字系統(tǒng)的特點(diǎn)是存儲(chǔ)器中只有一個(gè)存儲(chǔ)體,每個(gè)存儲(chǔ)單元存儲(chǔ)m個(gè)字,總線寬度也是m個(gè)字。一次并行讀出m個(gè)字,地址必須順序排列并處于同一存儲(chǔ)單元。
單體多字系統(tǒng)在一個(gè)存取周期內(nèi),從同一地址取出m條指令,然后將指令逐跳送至CPU執(zhí)行,即每隔1/m存取周期,CPU向主存取一條指令。這增大了存儲(chǔ)器的帶寬,提高了單體存儲(chǔ)器的工作速度。
缺點(diǎn): 指令和數(shù)據(jù)在主存內(nèi)必須是連續(xù)存放的,一旦遇到轉(zhuǎn)移指令,或操作數(shù)不能連續(xù)存放,這種方法的效果就不明顯。
2 多體并行存儲(chǔ)器
多體并行存儲(chǔ)器由多體模塊組成。每個(gè)模塊都有相同的存儲(chǔ)容量和存取速度,各個(gè)模塊都有獨(dú)立的讀寫控制電路,地址寄存器和數(shù)據(jù)寄存器。它們既能并行工作,又能交叉工作。
多體并行存儲(chǔ)器分為高位交叉編址(順序方式)和低位交叉編址(交叉方式)兩種。
1)高位交叉編址
高位地址表示體號,低位地址為體內(nèi)地址。
2 ) 低位交叉編址
低位地址是體號,高位地址是體內(nèi)地址。
程序連續(xù)存放在相鄰模塊中,因此稱為交叉存儲(chǔ)器。采用低位交叉編址后,可以在不改變每個(gè)模塊存取周期的前提下,采用流水線的方式進(jìn)行并行存取,提高存儲(chǔ)器的帶寬。
模塊數(shù)為4的流水線方式存取示意圖。
王道題目
3.6 高速緩沖存儲(chǔ)器(cache)
3.6.1 程序訪問的局部性原理
程序訪問的局部性原理包括時(shí)間局部性和空間局部性。
時(shí)間局部性是指在最近的未來要用到的信息,很可能是現(xiàn)在正在使用的信息,因?yàn)槌绦蛑写嬖谘h(huán);
空間局部性是指在最近的未來要用的信息,很可能與現(xiàn)在真在使用的信息在存儲(chǔ)空間上是鄰近的,因?yàn)橹噶钔ǔJ琼樞虼娣拧㈨樞驁?zhí)行的。
高速緩沖技術(shù)就是利用程序訪問的局部性原理,把程序中正在使用的部分存放在一個(gè)高速的、容量較小的cache中,使CPU的訪存操作大多數(shù)針對cache行進(jìn)行,從而大大提高程序的執(zhí)行速度。
3.6.2 cache的基本工作原理
Cache位于存儲(chǔ)器層次結(jié)構(gòu)的頂層,通常由SRAM構(gòu)成。
為便于Cache和主存之間交換信息,Cache和主存都被劃分為相等的塊,Cache塊又稱為Cache行,每塊由若干字節(jié)構(gòu)成,塊的長度稱為塊長(Cache行長)。由于Cache的容量遠(yuǎn)遠(yuǎn)小于內(nèi)存的容量,所以Cache中的塊數(shù)要遠(yuǎn)少于主存中塊數(shù),它僅保存主存中最活躍的若干塊的副本。因此Cache按照某種策略,預(yù)測CPU在未來一段時(shí)間內(nèi)欲訪存的數(shù)據(jù),將其裝入Cache.
當(dāng)CPU發(fā)出讀請求時(shí),若訪存地址在Cache中命中,就將此地址轉(zhuǎn)換成Cache地址,直接對Cache進(jìn)行讀操作,與主存無關(guān)。
如果Cache不命中,則仍然需要訪問主存, 并把此字所在的塊一次性地從主存調(diào)入Cache。如果此時(shí)Cache已滿,需要按照某種替換算法,用這個(gè)塊替換Cache中原來的那塊信息。
CPU與Cache之間的數(shù)據(jù)交換以字為單位,而Cache與主存之間的數(shù)據(jù)交換以Cache塊為單位。
3.6.3 Cache和主存的映射方式
Cache行中的信息是主存中某個(gè)塊的副本,地址映射是指把主存地址空間映射到Cache地址空間,即把存放在主存中的信息按照某種規(guī)則裝入Cache。
由于Cache行數(shù)比主存塊數(shù)要少得多,因此主存中只有一部分塊的信息可放在Cache中,因此在Cache中要為每塊加一個(gè)標(biāo)記,指明它是主存中哪一塊的副本。 該標(biāo)記的內(nèi)容相當(dāng)于主存塊的編號。 為了說明Cache行中的信息是否有效,每個(gè)cache行需要一個(gè)有效位。
1 直接映射
主存中的每一塊只能裝入Cache中的唯一位置。 若這個(gè)位置已經(jīng)有內(nèi)容,則產(chǎn)生塊沖突,原來的塊將被無條件替換出去(無需使用替換算法)。直接映射實(shí)現(xiàn)簡單,但不夠靈活,即使Cache的其他許多地址空著也不能占用,這使得直接映射的塊沖突概率最高,空間利用率最低。
直接映射的關(guān)系可定義為
j=imod2cj= i \,mod\, 2^c\,j=imod2c
其中j是Cache的塊號,i是主存的塊號,2c2^c2c是Cache中的總塊數(shù)
直接映射的地址結(jié)構(gòu)是
由映射函數(shù)可以看出,主存塊號的低C位正好是它要裝入的Cache行號。給每個(gè)Cache行設(shè)置一個(gè)長度為t=m?ct=m-ct=m?c的標(biāo)記(tag),當(dāng)主存某塊調(diào)入Cache后,就將其某塊號的高t位設(shè)置在對應(yīng)Cache行的標(biāo)記中。
2 全相聯(lián)映射
主存中的每一塊可以裝入Cache中的任何位置,每行的標(biāo)記用于指出該行取自主存的哪一塊,所以CPU訪存時(shí)需要與所有Cache行的標(biāo)記進(jìn)行比較。全相聯(lián)映射方式的優(yōu)點(diǎn)是比較靈活,Cache塊的沖突概率低,空間利用率高,命中率也高;缺點(diǎn)是標(biāo)記的比較速度較慢,實(shí)現(xiàn)成本較高,通常需要采用昂貴的按內(nèi)容尋址的相聯(lián)存儲(chǔ)器進(jìn)行地址映射。
全相聯(lián)映射方式的地址結(jié)構(gòu)
3組相聯(lián)映射
將Cache空間分成大小相同的組,主存的一個(gè)數(shù)據(jù)塊可以裝入一組內(nèi)的任何一個(gè)位置,即組間采用直接映射,而組內(nèi)采用全相聯(lián)映射。
組相聯(lián)映射是對直接映射和全相聯(lián)映射方式的一種折中,當(dāng)Q=1時(shí),變成全相聯(lián)映射,當(dāng)Q=Cache塊數(shù)時(shí)變成直接映射。 假設(shè)每組有r個(gè)Cache行,則稱之為r路組相聯(lián)。 上圖中每組有兩個(gè)cache行,所以稱為2路組相聯(lián)。
組相聯(lián)映射的關(guān)系可以定義為:
j=imodQj= i\, mod\, Qj=imodQ
其中,j是Cache行的組號,i是主存的塊號, Q是cache 的組數(shù)。
路數(shù)越多,即每組Cache行的數(shù)量越大,發(fā)生塊沖突的概率越低, 但相聯(lián)比較電路也越復(fù)雜。 選定適當(dāng)?shù)臄?shù)量, 可使得組相聯(lián)電路的成本接近直接映射,而性能上接近于全相聯(lián)映射。
組相聯(lián)映射的地址結(jié)構(gòu)為
CPU訪存過程如下:
首先根據(jù)訪存地址中間的組號,找到對應(yīng)的Cache組;
將對應(yīng)的Cache組中每個(gè)行的標(biāo)記與主存地址的高位標(biāo)記進(jìn)行比較:
1)若有一個(gè)相等且有效位是1,則訪問,Cache命中,此時(shí)根據(jù)主存地址中的塊內(nèi)地址,在對應(yīng)Cache行上存取信息;
2)若都不相等或雖相等但有效位為0,則不命中,此時(shí)CPU從主存中讀出該地址所在的一塊信息送到對應(yīng)的Cache組的任意一個(gè)空閑行中,將有效位置1,并設(shè)置標(biāo)志,同時(shí)將該地址中的內(nèi)容送CPU。
來源于:王道課件
王道書上Cache例題
注意:
【1】 這里計(jì)算每個(gè)Cache行的容量 : 數(shù)據(jù)容量(64B=64 * 8位=512位)+ 有效位1位+標(biāo)記字段位數(shù) 。然后再乘以Cache行的行數(shù)。
【2】主存地址3200(十進(jìn)制)如何使用? 別忘了按照字節(jié)編址,則為3200B,然后除以每個(gè)Cache行長(Cache塊大小)64B,得到對應(yīng)的塊號(3200B/ 64B=50,塊號是50)。然后看Cache有幾行? 8行 ,則 50 mod 8 = 2 ,即對應(yīng)的Cache行號為2.(注意:Cache行號從0開始)。
第一問答案:
第二問答案
第三問答案:
需要把地址0123456H寫成二進(jìn)制,并且分清楚每部分的功能。
3.6.4 Cache中主存塊的替換算法
在采用全相聯(lián)映射方式或組相聯(lián)映射方式時(shí),從主存向Cache傳送一個(gè)新塊,當(dāng)Cache或Cache組中的空間已被占滿時(shí),就需要使用替換算法置換Cache行。 而采用直接映射時(shí),一個(gè)給定的主存塊只能放到唯一的固定的Cache行中,所以在對應(yīng)Cache行已有一個(gè)主存塊的情況下,新的主存塊毫無選擇地把原先已有的那個(gè)主存塊替換掉,因而無需考慮替換算法。
常用的替換算法有隨機(jī)(RAND)算法,先進(jìn)先出(FIFO)算法、近期最少使用(LRU,Least Recently Used)算法和最不經(jīng)常使用(LFU)算法。其中最長考察的是LRU算法。
近期最少使用算法:依據(jù)程序訪問的局部性原理,選擇近期內(nèi)未訪問過的Cache行作為替換的行,平均命中率要比FIFO高,是堆棧類算法。
3.6.5 Cache寫策略
因?yàn)镃ache中的內(nèi)容是主存塊副本,當(dāng)對Cache中的內(nèi)容進(jìn)行更新時(shí),就需要選用寫操作策略使cache內(nèi)容和主存內(nèi)容保持一致。 此時(shí)分為兩種情況。
1)全寫法(寫直通法、write-through)。當(dāng)CPU對Cache寫命中時(shí),必須把數(shù)據(jù)同時(shí)寫入Cache和主存。當(dāng)某一塊需要替換時(shí),不比把這一塊寫回主存,用新調(diào)入的塊直接覆蓋即可。這種方法實(shí)現(xiàn)簡單,能隨時(shí)保持主存數(shù)據(jù)的正確性。 缺點(diǎn)是增加了訪存次數(shù),降低了cache的效率。
寫緩沖:為減少全寫法直接寫入主存的時(shí)間損耗,在cache和主存之間加一個(gè)寫緩沖(Write Buffer)。 CPU同時(shí)寫數(shù)據(jù)到Cache和寫緩沖中,寫緩沖再控制將內(nèi)容寫入主存。 寫緩沖是一個(gè)FIFO隊(duì)列,寫緩沖可以解決速度不匹配的問題。 但如果出現(xiàn)頻繁寫時(shí),會(huì)使得寫緩沖飽和溢出。
2)寫回法(write-back).當(dāng)CPU對Cache寫命中時(shí),只修改Cache 的內(nèi)容,而不立即寫入主存,只有當(dāng)此塊被換出時(shí)才寫回主存,這種方法減少了訪存次數(shù),但存在不一致的隱患。 采用這種策略時(shí),每個(gè)cache行必須設(shè)置一個(gè)標(biāo)志位(臟位),以反映此位是否被CPU修改過。
對于寫不命中的情況,也有兩種方式處理。
1) 寫分配法(Write-allocate).加載主存中的塊到cache中,然后更新這個(gè)cache塊。
2 ) 非寫分配法(not-write-allocate)。只寫入主存,不進(jìn)行調(diào)塊。
王道習(xí)題
2010年408統(tǒng)考真題–兩段for循環(huán)程序
第一問解答
第二問解答
第三問解答
全相聯(lián)映射-塊表
題目
第一問解答
第二問解答
第三問解答
四路組相聯(lián)-標(biāo)記陣列和LRU替換
注:
【1】 cache 的標(biāo)記陣列只與Cache行數(shù)有關(guān)!!!,不管是直接映射,還是全相聯(lián)映射、組相聯(lián)映射。
【2】寫直達(dá)式cache每個(gè)標(biāo)記項(xiàng)包含啥? 寫回式cache每個(gè)標(biāo)記項(xiàng)又包含什么?
寫直達(dá)式cache每個(gè)標(biāo)記項(xiàng)= 標(biāo)記+替換控制位+有效位1位
寫回式cache每個(gè)標(biāo)記項(xiàng)=標(biāo)記+替換控制位+有效位1位+臟位1位
解答
2013年408統(tǒng)考真題(undone)
2016年408統(tǒng)考真題(undone)
3.7虛擬存儲(chǔ)器
主存和輔存共同構(gòu)成了虛擬存儲(chǔ)器,二者在硬件和軟件的共同管理下工作。 對于應(yīng)用程序員而言,虛擬存儲(chǔ)器是透明的。 虛擬存儲(chǔ)器具有主存的速度和輔存的容量,提高了存儲(chǔ)系統(tǒng)的性價(jià)比。
3.7.1 虛擬存儲(chǔ)器的基本概念
虛擬存儲(chǔ)器將主存或輔存的地址空間統(tǒng)一編址,形成一個(gè)龐大的地址空間,在這個(gè)空間中,用戶可以自由編程,而不用考慮實(shí)際的主存容量和程序在主存中實(shí)際的存放位置。
用戶編程允許的地址稱為虛地址或邏輯地址,虛地址對應(yīng)的存儲(chǔ)空間稱為虛擬空間或程序空間。 實(shí)際的主存單元地址稱為實(shí)地址或物理地址,實(shí)地址對應(yīng)的是主存地址空間,也稱實(shí)地址空間。 虛地址比實(shí)地址要大得多。
CPU使用虛地址時(shí),由輔助硬件找出虛地址和實(shí)地址之間的對應(yīng)關(guān)系,并判斷這個(gè)虛地址對應(yīng)的存儲(chǔ)單元內(nèi)容是否已經(jīng)裝入主存。
如果已經(jīng)在主存,則通過地址變換,CPU可直接訪問主存指示的實(shí)際單元;
若不在主存中,則把包含這個(gè)字的一頁或一段調(diào)入主存后再由CPU訪問。如果主存已滿,則采用替換算法置換主存中的一頁或一段。
3.7.2 頁式虛擬存儲(chǔ)器
以頁為基本單位的虛擬存儲(chǔ)器稱為頁式虛擬存儲(chǔ)器。
虛擬空間與主存空間都被劃分為同樣大小的頁,主存的頁稱為實(shí)頁,虛存的頁稱為虛頁。
把虛擬地址分為兩個(gè)字段:虛頁號和頁內(nèi)地址。 虛擬地址到物理地址的轉(zhuǎn)換是由頁表實(shí)現(xiàn)的。頁表是一張存放在主存中的虛頁號和實(shí)頁號的對照表,它記錄程序的虛頁調(diào)入內(nèi)存時(shí)被安排在主存中的位置。 頁表一般長久地保存在內(nèi)存中。
下圖是一個(gè)頁表示例。
有效位也稱為裝入位,用來表示對應(yīng)頁面是否在主存中,若為1,表示該虛擬頁已經(jīng)從外存調(diào)入主存,此時(shí)頁表項(xiàng)存放該頁的物理頁號;若為0,則表示沒有調(diào)入內(nèi)存,此時(shí)頁表項(xiàng)可以存放該頁的磁盤地址。
臟位也稱修改位,用來表示頁面是否被修改過,虛擬機(jī)制中采用回寫策略,利用臟位可判斷替換時(shí)是否需要寫回磁盤。
引用位也稱使用位,用來配合替換策略進(jìn)行設(shè)置,例如是否實(shí)現(xiàn)最先調(diào)入(FIFO位)或最近最少使用(LRU位)策略等。
CPU執(zhí)行指令時(shí),需要先將虛擬地址轉(zhuǎn)化為主存的物理地址。每個(gè)進(jìn)程都有一個(gè)頁表基址寄存器,存放該進(jìn)程的頁表首地址,然后根據(jù)虛擬地址高位部分的虛擬頁號找到對應(yīng)的頁表項(xiàng),若裝入位為1,則取出物理頁號,和虛擬地址低位部分的頁內(nèi)地址拼接,形成實(shí)際物理地址。若裝入位為0,則說明缺頁,需要操作系統(tǒng)進(jìn)行缺頁處理。地址變換過程如下圖所示。
頁式虛擬存儲(chǔ)器的優(yōu)點(diǎn):頁面的長度固定,頁表簡單,調(diào)入方便。
頁式虛擬存儲(chǔ)器的缺點(diǎn):由于程序不可能是頁面的整數(shù)倍,最后一頁的零頭將無法利用而造成浪費(fèi),并且頁也不是邏輯上獨(dú)立的實(shí)體,所以處理、保護(hù)和共享都不及段式虛擬存儲(chǔ)器方便。
3.7.3 加快地址轉(zhuǎn)換:快表(TLB)
由地址轉(zhuǎn)換過程可知,訪存時(shí)先訪問一次主存去查頁表,再訪問主存才能得到數(shù)據(jù)。如果缺頁,還要進(jìn)行頁面替換、頁面修改等,因此采用虛擬存儲(chǔ)機(jī)制后,訪問主存的次數(shù)更多了。
依據(jù)程序執(zhí)行的局部性原理,在一段時(shí)間內(nèi)總是經(jīng)常訪問某些頁時(shí),若把這些頁對應(yīng)的頁表項(xiàng)存放在高速緩沖器組成的快表(TLB)中,則可以明顯提高效率。相應(yīng)地把放在主存中的頁表稱為慢表(Page)。在地址轉(zhuǎn)換時(shí),首先查找快表,若命中,則無需訪問主存中的頁表。
3.7.4 段式虛擬存儲(chǔ)器
段式虛擬存儲(chǔ)器中的段是按程序的邏輯結(jié)構(gòu)劃分的,各個(gè)段的長度因程序而異。把虛擬地址分為兩部分,段號和段內(nèi)地址。虛擬地址到實(shí)地址之間的變換是由段表來實(shí)現(xiàn)的。段表是程序的邏輯段和在主存中存放位置的對照表。段表的每行記錄與某個(gè)段對應(yīng)的段號、裝入位、段起點(diǎn)和段長等信息。 由于段的長度可變,所以段表中要給出各段的起始地址與段的長度。
CPU根據(jù)虛擬地址訪存時(shí),首先根據(jù)段號與段表基地址拼接成對應(yīng)的段表行,然后根據(jù)該段表行的裝入位判斷該段是否已調(diào)入主存(裝入位為1,表示該段已經(jīng)調(diào)入主存;;裝入位為0,表示該段不在主存中)。已調(diào)入主存時(shí),從段表讀出該段在主存中的起始地址,與段內(nèi)地址(偏移量)相加,得到相應(yīng)的主存實(shí)地址。
段式虛擬存儲(chǔ)器的優(yōu)點(diǎn):段的分界與程序的自然分界相對應(yīng),因而具有邏輯獨(dú)立性,便于編譯、管理、修改和保護(hù),也便于多道程序的共享。
段式虛擬存儲(chǔ)器的缺點(diǎn):段長度可變,分配空間不便,容易在段間留下碎片,不好利用,造成浪費(fèi)。
3.7.5 段頁式虛擬存儲(chǔ)器
把程序按照邏輯結(jié)構(gòu)分段,每段再劃分為固定大小的頁,主存空間也劃分為大小相等的頁,程序?qū)χ鞔娴恼{(diào)入、調(diào)出仍以頁為基本傳送單位,這樣的虛擬存儲(chǔ)器稱為段頁式虛擬存儲(chǔ)器。在段頁式虛擬存儲(chǔ)器中,每個(gè)程序?qū)?yīng)一個(gè)段表,每段對應(yīng)一個(gè)頁表,段的長度必須是頁長的整數(shù)倍,段的起點(diǎn)必須是某一頁的起點(diǎn)。
虛地址分為段號、段內(nèi)頁號、頁內(nèi)地址三部分。 CPU根據(jù)虛地址訪存時(shí),首先根據(jù)段號得到段表地址;然后從段表中取出該段的頁表起始地址,與虛地址段內(nèi)頁號合成,得到頁表地址;最后從頁表中取出實(shí)頁號,與頁內(nèi)地址拼接形成主存實(shí)地址。
段頁式虛擬存儲(chǔ)器的優(yōu)點(diǎn):兼具頁式和段式虛擬存儲(chǔ)器的優(yōu)點(diǎn),可以按段實(shí)現(xiàn)共享和保護(hù);
段頁式虛擬存儲(chǔ)器的缺點(diǎn):在地址變換過程中需要兩次查表,系統(tǒng)開銷較大。
總結(jié)
以上是生活随笔為你收集整理的计算机组成原理第3章-存储系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机组成原理第7章-输入/输出系统
- 下一篇: 考研数学早年真题整理20题(很有可能重考