![計(jì)算機(jī)體系結(jié)構(gòu)第5章存儲(chǔ)層次_第1頁](http://file4.renrendoc.com/view/909d508e0b2d419841398e040c4a9009/909d508e0b2d419841398e040c4a90091.gif)
![計(jì)算機(jī)體系結(jié)構(gòu)第5章存儲(chǔ)層次_第2頁](http://file4.renrendoc.com/view/909d508e0b2d419841398e040c4a9009/909d508e0b2d419841398e040c4a90092.gif)
![計(jì)算機(jī)體系結(jié)構(gòu)第5章存儲(chǔ)層次_第3頁](http://file4.renrendoc.com/view/909d508e0b2d419841398e040c4a9009/909d508e0b2d419841398e040c4a90093.gif)
![計(jì)算機(jī)體系結(jié)構(gòu)第5章存儲(chǔ)層次_第4頁](http://file4.renrendoc.com/view/909d508e0b2d419841398e040c4a9009/909d508e0b2d419841398e040c4a90094.gif)
![計(jì)算機(jī)體系結(jié)構(gòu)第5章存儲(chǔ)層次_第5頁](http://file4.renrendoc.com/view/909d508e0b2d419841398e040c4a9009/909d508e0b2d419841398e040c4a90095.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第五章存儲(chǔ)層次本章要點(diǎn):?存儲(chǔ)系統(tǒng)?存儲(chǔ)層次?存儲(chǔ)系統(tǒng)的性能參數(shù)?Cache存儲(chǔ)器工作原理?Cache地址映象與變換算法?Cache替換算法及其實(shí)現(xiàn)?Cache寫操作1?Cache系統(tǒng)性能的改進(jìn)方法?主存系統(tǒng)?低位交叉訪問存儲(chǔ)器?高位交叉訪問存儲(chǔ)器?虛擬存儲(chǔ)器工作原理?段式、頁式、段頁式存儲(chǔ)管理?虛擬存儲(chǔ)器地址映象與變換算法?頁面替換算法及其實(shí)現(xiàn)?緩沖對(duì)虛擬存儲(chǔ)系統(tǒng)性能的影響?Cache、主存、虛擬存儲(chǔ)器的比較2本章的主要應(yīng)用問題?Cache性能分析
?層次存儲(chǔ)器性能分析?Cache地址流分析?虛擬存儲(chǔ)器地址流分析?存儲(chǔ)器系統(tǒng)設(shè)計(jì)35.1存儲(chǔ)器的層次結(jié)構(gòu)存儲(chǔ)器是計(jì)算機(jī)的核心部件之一,其性能直接關(guān)系到整個(gè)計(jì)算機(jī)系統(tǒng)性能的高低。存儲(chǔ)器的三個(gè)主要指標(biāo)是:速度、容量和價(jià)格(即每位價(jià)格)。如何以合理的價(jià)格,設(shè)計(jì)容量和速度滿足計(jì)算機(jī)系統(tǒng)需求的存儲(chǔ)器系統(tǒng),始終是計(jì)算機(jī)體系結(jié)構(gòu)設(shè)計(jì)中的關(guān)鍵問題之一。5.1.1從單級(jí)存儲(chǔ)器到多級(jí)存儲(chǔ)器計(jì)算機(jī)軟件設(shè)計(jì)者和計(jì)算機(jī)用戶總是希望存儲(chǔ)器的容量越大越好,而且速度要快,價(jià)格也不能太昂貴。而實(shí)際情況卻是:速度越快,每位價(jià)格越高;容量越大,每位價(jià)格越低;容量越大,速度越慢。人們對(duì)存儲(chǔ)器設(shè)計(jì)的三個(gè)指標(biāo)要求是互相矛盾的。4解決問題的辦法必須切合實(shí)際地綜合考慮:從實(shí)現(xiàn)“容量大、價(jià)格”的要去來看,應(yīng)采用能提供大容量技術(shù)的存儲(chǔ)器技術(shù);但從滿足性能需求的角度來看,又應(yīng)采用昂貴且容量較小的快速存儲(chǔ)器。走出這種困境的唯一方法,就是采用多種存儲(chǔ)技術(shù),構(gòu)成存儲(chǔ)器的層次結(jié)構(gòu),如圖5.1所示。5在多級(jí)存儲(chǔ)層次中,最靠近CPU的M1速度最快、容量最小、價(jià)格最高;而遠(yuǎn)離CPU的Mn則是速度最慢、容量最大、價(jià)格最低。存儲(chǔ)系統(tǒng)的設(shè)計(jì)目標(biāo)是:M1的速度,Mn的容量和價(jià)格。層次存儲(chǔ)器設(shè)計(jì)的依據(jù):程序局部性原理。在層次存儲(chǔ)中,靠近CPU的存儲(chǔ)器中的數(shù)據(jù)一般都是其下一層存儲(chǔ)器中數(shù)據(jù)的子集。
CPU訪存時(shí)的基本原則:有近及遠(yuǎn),首先是訪問M1,若在M1中找不到所要的數(shù)據(jù),就要訪問M2,將包含所需數(shù)據(jù)的塊或頁面調(diào)入M1。若在M2中還找不到,就要訪問M3,依此類推。如果所有層次中都沒有,就出現(xiàn)錯(cuò)誤。。65.1.2存儲(chǔ)層次的性能參數(shù)研究方法:層次存儲(chǔ)器基本問題通過兩層存儲(chǔ)器結(jié)構(gòu)進(jìn)行研究。對(duì)于由M1和M2構(gòu)成的兩級(jí)存儲(chǔ)層次結(jié)構(gòu),假設(shè)M1、M2的容量、訪問時(shí)間和每位價(jià)格分別為S1、TA1、C1和S2、TA2、C2。 1.存儲(chǔ)層次的平均每位價(jià)格顯然,當(dāng)S1<<S2時(shí),CC2。2.命中率H
命中率為CPU訪問存儲(chǔ)系統(tǒng)時(shí),在M1中找到所需信息的概率。訪問M1和M2的次數(shù)為N1和N2。7不命中率或失效率F是指CPU訪存時(shí)在M1找不到所需信息的概率。3.平均訪問時(shí)間TA
分兩種情況來考慮CPU的一次訪存:(1)當(dāng)命中時(shí),訪問時(shí)間即為TA1。TA1常稱為命中時(shí)間(hit-time)。(2)大多數(shù)二級(jí)存儲(chǔ)層次結(jié)構(gòu)下,當(dāng)不命中M1時(shí),就必須從M2中訪問這個(gè)字,并把包含所請(qǐng)求的字的信息塊傳送到M1,之后CPU才能訪問這個(gè)字。假設(shè)傳送一個(gè)信息塊所需的時(shí)間為TB,則不命中時(shí)的訪問時(shí)間為:TA2+TB=TA1+TM其中TM=TA2+TB,它為從向M2發(fā)出訪問請(qǐng)求到把整個(gè)數(shù)據(jù)塊調(diào)入M1中所需的時(shí)間。TM常稱為失效開銷。8根據(jù)以上分析可知:TA=HTA1+(1-H)(TA1+TM)=TA1+(1-H)TM或TA=TA1+FTM5.1.3“Cache-主存”和“主存-輔存”層次1.“Cache-主存”層次CPU和主存之間在性能上的差距越來越大,如圖5.2所示?,F(xiàn)代計(jì)算機(jī)都采用Cache來解決這個(gè)問題。9“Cache-主存”層次的工作幾乎完全由硬件實(shí)現(xiàn),因此它不但對(duì)應(yīng)用程序員是透明的,而且對(duì)系統(tǒng)程序員幾乎也是透明的。2.“主存-輔存”層次為了彌補(bǔ)主存容量,在主存外面增加一個(gè)容量更大、每位價(jià)格更低、但速度更慢的存儲(chǔ)器(稱為輔存,一般是硬盤)?!八鼈円揽枯o助軟硬件的作用,構(gòu)成一個(gè)整體,如圖5.3所示。主存-輔存”層次常被用來實(shí)現(xiàn)虛擬存儲(chǔ)器,向編程人員提供大量的程序空間。3.“Cache-主存”層和“主存-輔存”層的簡單比較
表5.1對(duì)“Cache-主存”層和“主存-輔存”層做了一個(gè)簡單的比較。105.1.4兩級(jí)存儲(chǔ)層次之間的四個(gè)基本問題對(duì)于具體存儲(chǔ)層次而言,將研究一下四個(gè)問題:1.當(dāng)把一個(gè)塊調(diào)入高一層(靠近CPU)存儲(chǔ)器時(shí),可以放到哪些位置上?(映象規(guī)則)2.當(dāng)要訪問的塊在高一層存儲(chǔ)器時(shí),如何找到該塊?(查找算法)3.當(dāng)發(fā)生失效時(shí),應(yīng)替換哪一塊?(替換算法)4.當(dāng)進(jìn)行寫訪問時(shí),應(yīng)進(jìn)行哪些操作?(寫策略)5.2Cache基本知識(shí)
Cache用于解決上述四個(gè)基本問題,即映象規(guī)則、查找算法、替換算法以及寫策略。11
Cache是按塊進(jìn)行管理的,Cache和主存均被分割成大小不同的塊,信息以塊為單位調(diào)入Cache。CPU的訪存地址被分割成塊地址和塊內(nèi)地址兩部分:
主存地址:塊地址塊內(nèi)位移主存塊地址用于查找在Cache中的位置,塊內(nèi)位移用于確定所訪問的數(shù)據(jù)在該塊中的位置。5.2.1映象規(guī)則 三種映象規(guī)則如圖5.4所示。1.全相聯(lián):主存中的任一塊可以被放置到Cache中的任何一個(gè)位置的方法。2.直接映象:主存中的每一個(gè)塊只能被放置到Cache中唯一的一個(gè)位置。3.組相聯(lián)映象:主存中的每一個(gè)塊可以被放置到Cache中唯一的一個(gè)組中的任一個(gè)位置。12
全相聯(lián)映象時(shí),主存中的任一塊可以放置到Cache中的任一位置,如圖5.4(a)所示,主存中的第9塊可以放入Cache中的任意一個(gè)位置(帶陰影)。圖示中畫出了Cache大小為8塊、主存大小為16塊的情況。
直接映象情況下,對(duì)于主存的第i塊(塊地址為i),設(shè)它映象到Cache中的第j塊,則j=imod(M)其中,M為Cache的塊數(shù)。若M=2m,則當(dāng)?shù)刂繁硎緸槎M(jìn)制數(shù)時(shí),Cache的塊號(hào)j實(shí)際上就是主存地址i的m位,如下圖所示。因此,可以直接用主存地址的低m位去選擇直接映象Cache中的相應(yīng)塊。13組相聯(lián)映象是直接映象和全相聯(lián)映象的一種折衷:首先是映象到唯一的一個(gè)組上(直接映象的特征),然后這個(gè)塊可以被放入這個(gè)組中的任何一個(gè)位置(全相聯(lián)的特征)。
若主存第i塊映象到Cache的第k組,則
k=imod(G)其中,G為Cache的組數(shù)。設(shè)G=2g,則當(dāng)表示為二進(jìn)制數(shù)時(shí),k實(shí)際上就是i的低g位,如圖所示。因此,可以直接用主存塊地址的低g位去選擇Cache中的相應(yīng)組。這里的低g位以及上述直接映象中的低m位通常稱為索引。14如果每組中有n個(gè)塊(n=M/G),則稱該映象規(guī)則為n路組相聯(lián)。n的值為相聯(lián)度。直接相聯(lián)和全相聯(lián)是組相聯(lián)的兩種極端情況。表5.2給出了路數(shù)n和組數(shù)G的取值。表中M為Cache的塊數(shù)。下面是一般性分析1.相聯(lián)度越高(即n的值越大),Cache空間的利用率越高,塊沖突(一個(gè)主存塊要進(jìn)入已被占用的Cache位置)概率越低,因而Cache的失效率就越低;2.全相聯(lián)的失效率最低,直接相聯(lián)的失效率最高;3.增大n值并不一定使整個(gè)計(jì)算機(jī)系統(tǒng)的性能提高,而且還會(huì)使Cache的實(shí)現(xiàn)復(fù)雜度和代價(jià)增大。因此,絕大多數(shù)計(jì)算機(jī)都采用直接相聯(lián)、兩路相聯(lián)或四路相聯(lián)。特別是直接相聯(lián),采用最多。155.2.2查找方法當(dāng)CPU訪問Cache時(shí),有兩個(gè)問題要解決:(1)當(dāng)CPU訪問Cache時(shí),如何確定Cache中是否有要訪問的塊?(2)若有的話,如何確定其位置?這是通過查找目錄表來實(shí)現(xiàn)的。Cache中設(shè)有一個(gè)目錄表,該表共有m項(xiàng),每一項(xiàng)對(duì)應(yīng)于Cache中的一個(gè)塊,稱為標(biāo)識(shí)(tag)。
在目錄表中給每一項(xiàng)設(shè)置一個(gè)有效位,記錄Cache中相應(yīng)塊所包含的信息有效。一個(gè)主存塊被調(diào)入Cache中某一個(gè)塊位置時(shí),它的標(biāo)識(shí)就被填入目錄表中與該Cache塊相對(duì)應(yīng)的項(xiàng)中,并且該項(xiàng)的有效位被置“1”,否則置“0”。16根據(jù)映象規(guī)則不同,一個(gè)主存塊可能映象到Cache中的一個(gè)或多個(gè)Cache塊位置。我們稱之為候選位置。當(dāng)CPU訪問該主存塊時(shí),必須且只需查找它的候選位所對(duì)應(yīng)的目錄表項(xiàng)(標(biāo)識(shí))。如果有與所訪問的主存塊相同的標(biāo)識(shí),且其有效值為“1”,則它所對(duì)應(yīng)的Cache塊就是所要找的塊。為了保證速度,對(duì)各候選位置的標(biāo)識(shí)的檢查比較應(yīng)并行進(jìn)行。直接映象Cache的候選位置只有1個(gè);全相聯(lián)Cache的候選位置為m個(gè);n路組相聯(lián)則介于兩者之間,為n個(gè)。一般采用單體多字存儲(chǔ)器和比較器來實(shí)現(xiàn)并行查找。n越大,實(shí)現(xiàn)查找的機(jī)制就越復(fù)雜,代價(jià)就越高。無論是直接映象還是組相聯(lián)映象,查找時(shí),只需比較tag。Index無需參加比較。17如果Cache的容量不變,提高相聯(lián)度會(huì)增加每一組中的塊數(shù),從而會(huì)減少index的位數(shù)和增加tag的位數(shù)。圖5.5給出了4路組相聯(lián)并行標(biāo)識(shí)比較。5.2.3替換算法當(dāng)要從主存調(diào)入一塊到Cache中時(shí),會(huì)出現(xiàn)該塊所映象的一組(或一個(gè))Cache塊已被占用的情況。這時(shí),必須強(qiáng)迫騰出其中的某一塊,已接納新調(diào)入的塊。騰出哪一塊?這就是替換算法所要解決的問題。
直接映象:Cache中的替換很簡單,因?yàn)橹挥幸粋€(gè)塊可選擇;組相聯(lián)和全相聯(lián):Cache中有多個(gè)塊選擇,替換算法有隨機(jī)法、FIFO和LRU三種。評(píng)價(jià)替換算法的標(biāo)準(zhǔn):盡可能避免替換馬上就要用到的信息。181.隨機(jī)法隨機(jī)地選擇被替換的塊。優(yōu)點(diǎn):簡單、易于用硬件實(shí)現(xiàn),且對(duì)調(diào)試硬件很有幫助。不足:沒有考慮Cache塊被使用的情況,反映不了程序的局部性。2.先進(jìn)先出FIFO(First-First-Out)
最先裝入相應(yīng)組的塊作為被替換的塊。優(yōu)點(diǎn):容易實(shí)現(xiàn)。不足:雖然利用了各塊進(jìn)入Cache的順序這段“歷史”信息,但還是不能正確反映程序的局部性。因?yàn)樽钕冗M(jìn)入的塊,很可能是經(jīng)常要用到的塊。3.最近最少使用法LRU(LeastRecentlyUsed)
選擇近期最少被訪問的塊作為被替換的塊。優(yōu)點(diǎn):反映程序的局部性原理,因而其失效在上述三種方法中是最低的。不足:LRU比較復(fù)雜,硬件實(shí)現(xiàn)比較困難,特別是當(dāng)組的大小增加時(shí),LRU的實(shí)現(xiàn)19代價(jià)會(huì)越來越高,而且經(jīng)常只是近似地實(shí)現(xiàn)(選擇最久沒有被訪問過塊作為被替換的塊)。LRU實(shí)際上是依據(jù)程序局部性原理的一個(gè)推論:如果最近剛用過的塊很可能就是馬上要再用到的塊,而最久沒用過的塊就是最佳的被替換者。
表5.3給出了LRU與隨機(jī)法在失效率方面的比較。20表中的數(shù)據(jù)是對(duì)于一個(gè)VAX地址流(包括用戶程序和操作系統(tǒng)程序),塊大小為16B的情況下統(tǒng)計(jì)的。在這個(gè)例子中,對(duì)于大容量Cache,LRU和隨機(jī)法的失效率幾乎沒有什么差別。顯然,n越大,Cache容量越大,時(shí)效率越低。此外,表中雖然沒有列出,但是FIFO法的失效率比隨機(jī)法和LRU都高。5.2.4寫策略寫需要對(duì)存儲(chǔ)器和Cache兩部分進(jìn)行操作。寫與讀的比較:(1)檢查標(biāo)識(shí)并不能與寫入Cache塊并行進(jìn)行,“寫”一般比“讀”化肥更多的時(shí)間。(2)處理器要寫入的數(shù)據(jù)的寬度不是定長的。(通常為1~8字節(jié)),寫入時(shí),只能修改Cache塊中相應(yīng)的21部分,不能夠多修改。而“讀”則可以多讀出幾個(gè)字節(jié)也沒關(guān)系。Cache與主存內(nèi)容一致性問題:Cache內(nèi)容是主存部分內(nèi)容的一個(gè)副本。“寫”訪問卻可能導(dǎo)致它們內(nèi)容的不一致。顯然,為了保證正確性,主存的內(nèi)容也必須更新。何時(shí)更新主存,是寫策略所要解決的問題。寫策略是區(qū)分不同Cache設(shè)計(jì)方案的一個(gè)重要標(biāo)志。寫策略主要有寫直達(dá)法和寫回法兩種。1.寫直達(dá)法該法也稱為存直達(dá)法。在執(zhí)行“寫”操作中,不僅把信息寫入Cache中相應(yīng)的塊,而且也寫入下一級(jí)存儲(chǔ)器中相應(yīng)的塊。22優(yōu)點(diǎn):易于實(shí)現(xiàn)。下一級(jí)存儲(chǔ)器中的數(shù)據(jù)總是最新的。這一個(gè)優(yōu)點(diǎn)對(duì)于I/O和多處理機(jī)是重要的。問題:寫直達(dá)法在進(jìn)行“寫”操作的過程中CPU必須等待,直到“寫”操作結(jié)束,稱為CPU寫停頓(writestall)。
常用的優(yōu)化技術(shù):寫緩沖器(writebuffer)。CPU一旦把數(shù)據(jù)寫入該緩沖器,就可以繼續(xù)執(zhí)行,使下一級(jí)存儲(chǔ)器的更新和CPU的執(zhí)行重疊起來。2.寫回法(writeback)該法也稱為拷回法(copyback)。只把信息寫入Cache中相應(yīng)的塊。該塊只有在被替換時(shí),才被寫回主存。為了減少在替換時(shí)塊的寫回,在Cache中的每一塊設(shè)置一個(gè)“污染位”,用于指出該塊是“臟的”,23即沒被修改過(被修改過)還是干凈的(沒被修改過)。替換時(shí),若被替換的塊石干凈的,則不必寫回下一級(jí)存儲(chǔ)器。只有被修改過的塊寫回。寫回法的優(yōu)點(diǎn):速度快,“寫”操作能以Cache存儲(chǔ)器的速度進(jìn)行。對(duì)于同一單元的多個(gè)寫只需最后一次寫回下一級(jí)存儲(chǔ)器。有些“寫”只到達(dá)Cache,不到達(dá)主存,所使用的存儲(chǔ)器頻帶較低。這使得寫回法對(duì)于多處理機(jī)很有吸引力。寫訪問失效時(shí)的內(nèi)存分配。當(dāng)發(fā)生寫失效時(shí),是否調(diào)入相應(yīng)的塊,有兩種選擇:(1)按寫分配法(Writeallocate)
寫失效時(shí),先把所寫單元所在的塊調(diào)入Cache,然后再進(jìn)行寫入。與讀失效類似,此法也稱為寫時(shí)取。24(2)不按寫分配法(no-writeallocate)
寫失效時(shí),直接寫入下一級(jí)存儲(chǔ)器而不將相應(yīng)的塊調(diào)入Cache。這種方法也稱為繞寫法(writearound)。
寫回法Cache一般采用按寫分配法(這樣以后對(duì)那個(gè)塊的“寫”就能被Cache捕獲)。寫直達(dá)法一般采用不按寫分配法(因?yàn)橐院髮?duì)那個(gè)塊的“寫”仍然還要到達(dá)下一級(jí)存儲(chǔ)器)。5.2.5Cache的結(jié)構(gòu)下面以DEC的AlphaAXP21064為例進(jìn)一步說明。該Cache的結(jié)構(gòu)如圖5.6所示。容量為8KB,塊大小為32字節(jié),共有256個(gè)塊;直接相聯(lián)映象;采用寫直達(dá)法,寫緩沖的大小為4個(gè)塊,并且在寫失效時(shí)不按寫分配。25四選一的多路選擇器:數(shù)據(jù)RAM為8各字節(jié)寬;索引加上塊內(nèi)偏移量的高兩位作為RAM的地址,就選取了相應(yīng)的8個(gè)字節(jié),多路選擇器僅僅是塊內(nèi)偏移量高兩位的譯碼示意。(1)21064讀數(shù)據(jù)Cache·第一步:地址的分割。21064微處理器傳送給Cache的物理地址為34位。這個(gè)地址被分為兩部分:塊地址(29位)和塊內(nèi)偏移地址(5位)。塊地址進(jìn)一步被分為地址標(biāo)識(shí)(21位)和Cache索引(8位);索引從256個(gè)Cache塊中選擇一塊,讀出數(shù)據(jù)和標(biāo)識(shí);標(biāo)識(shí)用于判斷要訪問的塊是否在Cache中(是否命中);索引的位數(shù)由Cache容量、塊大小、相聯(lián)度決定。2621064的Cache是直接映象的,所以相聯(lián)度為1,索引所需的位數(shù)滿足:
索引的為8位,標(biāo)識(shí)為29-8=21位。·第二步:按索引選擇標(biāo)識(shí)
在直接映象的Cache中,讀出數(shù)據(jù)并送往CPU與讀出標(biāo)識(shí)并進(jìn)行匹配這兩個(gè)過程可以并行進(jìn)行。·第三步:標(biāo)識(shí)比較。標(biāo)識(shí)從Cache中讀出來以后,就去和CPU送來的物理地址中的標(biāo)識(shí)部分進(jìn)行比較。為了保證標(biāo)識(shí)信息有效,其相應(yīng)的有效位必須為“1”,否則比較的結(jié)果就是無效的。27·第四步:CPU從Cache中取數(shù)據(jù)。如果標(biāo)識(shí)比較的結(jié)果匹配,且有效位為“1”,那么最后一步就是發(fā)信號(hào)通知CPU從Cache中取走數(shù)據(jù)。其它說明:21064完成這4步需要2個(gè)時(shí)鐘周期;如果這兩個(gè)周期中均按,指令需要用到本次“讀”的結(jié)果,這條指令就只好等待。(2)21064寫數(shù)據(jù)Cache
寫命中:前三步跟上面是一樣的。在確定標(biāo)識(shí)比較為匹配之后,才把數(shù)據(jù)寫入。因?yàn)?1064使用寫直達(dá)Cache,所以到此寫過程還未結(jié)束,還應(yīng)將數(shù)據(jù)送往緩沖器。21064的寫緩沖器含有四個(gè)塊,每塊大小為4個(gè)字,緩沖器是按字尋址(21064中每個(gè)字為8字節(jié))。28寫緩沖為空,就把數(shù)據(jù)和完整的地址寫入緩沖器。對(duì)CPU而言,本次“寫”訪問已完成,可以繼續(xù)工作,而寫緩沖器將負(fù)責(zé)把該數(shù)據(jù)寫入主存。(3)21064數(shù)據(jù)Cache的寫合并緩沖器內(nèi)還有其他被修改過的塊,就與緩沖器內(nèi)有效塊的地址進(jìn)行匹配;如果匹配,就把新數(shù)據(jù)與該塊合并。這叫寫合并(writemerging)。
沒有這種優(yōu)化措施,按順序地址連續(xù)“寫”四次,就可能會(huì)填滿整個(gè)緩沖器。采用寫合并,就可以很容易地將這四個(gè)字放入緩沖器的同一塊中。每個(gè)緩沖器有4項(xiàng),每項(xiàng)能放4個(gè)字(32字節(jié)),各項(xiàng)的地址標(biāo)在左邊,有效位V用于指出其后的4各字節(jié)是否已被占用。29緩沖器滿:緩沖器一旦滿,并且沒有地址相匹配的塊,Cache和CPU就需要等待到緩沖器有空閑項(xiàng)。沒有時(shí),的值為100、104、108和112的四次寫,占據(jù)了緩沖器的全部四個(gè)項(xiàng);有寫合并時(shí),這四個(gè)字被合并為一項(xiàng),如圖5.7所示。(4)21064的Cache失效讀失效:Cache向CPU發(fā)出一個(gè)暫停信號(hào),通知它等待;從下一級(jí)存儲(chǔ)器中讀入32字節(jié)數(shù)據(jù);21064的Cache和它的下一級(jí)存儲(chǔ)器之間的數(shù)據(jù)通路(21064微處理器總線的數(shù)據(jù)通道)為16字節(jié)(128位)。21064的數(shù)據(jù)Cache是直接映象的,所以被替換塊只有一個(gè);替換一個(gè)塊意味著更新該塊的數(shù)據(jù)、標(biāo)識(shí)和有效位。30寫失效:21064采用不按寫分配原則,也就是說,CPU將數(shù)據(jù)“繞過”Cache,直接寫入主存。(5)指令Cache和數(shù)據(jù)Cache的設(shè)置使用指令數(shù)據(jù)混合Cache(稱為統(tǒng)一Cache或混合Cache)來同時(shí)提供數(shù)據(jù)和指令,但它有可能會(huì)成為瓶頸。例如,當(dāng)流水方式工作的處理器執(zhí)行l(wèi)oad或store指令時(shí),可能會(huì)同時(shí)請(qǐng)求一個(gè)數(shù)據(jù)字和一個(gè)指令字,導(dǎo)致CPU等待。分離的Cache:將單一的Cache分為兩個(gè)Cache,一個(gè)專門放指令,另一個(gè)專門存放數(shù)據(jù)。21064有一個(gè)8KB的指令Cache,其結(jié)構(gòu)和8KB數(shù)據(jù)Cache幾乎一樣。提高了系統(tǒng)對(duì)存儲(chǔ)系統(tǒng)和CPU之間數(shù)據(jù)通道帶寬的要求;能分別對(duì)它們進(jìn)行優(yōu)化。31結(jié)果:指令Cache的失效率比數(shù)據(jù)Cache的低;消除了Cache中的指令塊和數(shù)據(jù)塊互相沖突而引起的失效。325.2.6Cache性能分析5.2.7改進(jìn)Cache性能根據(jù)平均訪存時(shí)間公式:
平均訪存時(shí)間=命中時(shí)間+失效率×失效開銷可知,可以從以下三個(gè)方面改進(jìn)Cache的性能:(1)降低失效率;(2)減少失效時(shí)間;(3)減少Cache命中時(shí)間。下面將介紹15種Cache優(yōu)化技術(shù),其中,·7種用于降低失效率;·5種用于減少失效開銷;·3種用于減少命中時(shí)間。335.3降低Cache失效率的方法三類失效(簡稱為“3C”)(1)強(qiáng)制性失效(Compulsorymiss):當(dāng)?shù)谝淮卧L問一個(gè)塊時(shí),該塊需從下一級(jí)存儲(chǔ)器中調(diào)入Cache。也稱為冷啟動(dòng)失效或首次訪問失效。(2)容量失效(Capacitymiss):如果程序執(zhí)行時(shí)所需的塊不能全部調(diào)入Cache中,則當(dāng)某些塊被替換后,若又重新被訪問,就會(huì)發(fā)生失效。(3)沖突失效(Conflictmiss):在組相聯(lián)或直接映射中,若太多的塊映射到同一組(塊)中,則會(huì)出現(xiàn)該組中某個(gè)塊被別的塊替換(即使別的組或塊有空閑位置),然后又被重新訪問的情況下。這種失效也稱為碰撞失效(collision)或干擾失效(interference)。34
表5.5針對(duì)三種SPEC92典型程序給出了上述三種失效所占的比例。可以看出:(1)相聯(lián)度越高,沖突失效就越少;(2)強(qiáng)制性失效和容量失效不受相聯(lián)度的影響;(3)強(qiáng)制性失效不受Cache容量的影響,但容量失效隨著容量的增加而減少;(4)表中的數(shù)據(jù)符合2:1的Cache經(jīng)驗(yàn)規(guī)則,即大小為N的直接映象Cache的失效率約等于大小為N/2的兩路組相聯(lián)Cache的失效率。相聯(lián)度越高,沖突失效就越少;全相聯(lián)不會(huì)發(fā)生沖突失效。用硬件實(shí)現(xiàn)全相聯(lián)根昂貴,而且可能降低處理器的時(shí)鐘頻率,導(dǎo)致整體性能的下降。35相聯(lián)失效隨著容量的增加而減少,除了增大Cache以外,沒有別的辦法。但是它不受相聯(lián)度的影響。
圖5.9是表5.5中數(shù)據(jù)的圖示。表5.6為各塊大小情況下Cache的失效率。降低Cache失效率的7種方法:·增加Cache塊大小·提高相聯(lián)度·設(shè)置Cache替換緩沖·偽相聯(lián)映象·預(yù)取技術(shù)·由編譯器控制的預(yù)取·編譯器優(yōu)化許多降低失效率的方法會(huì)增加命中時(shí)間(hittime)或失效開銷(misspenalty)。365.3.1增加Cache塊的大小“U”形曲線:降低失效率最簡單的方法是增加塊大小。Cache容量越大,使失效率達(dá)到最低的塊大小就越大。如圖5.10所示。37增加塊大小有雙重作用:(1)利用了時(shí)間局部性,減少了強(qiáng)制性失效;(2)減少Cache中塊的數(shù)目,所以有可能會(huì)增加沖突失效。在Cache容量較小時(shí),甚至還會(huì)增加容量失效。剛開始增加塊大小時(shí),由于塊還不是很大,上述第一種作用超過第二種作用,從而使失效下降。但到塊較大時(shí),第二種作用超過第一種作用,故使失效率上升。385.3.2提高相聯(lián)度提高相聯(lián)度會(huì)使失效率下降。由此我們得出兩條經(jīng)驗(yàn)規(guī)則:(1)8路組相聯(lián)在降低失效率方面的作用與全相聯(lián)一樣有效。也就是說,采用相聯(lián)度超過8的實(shí)際意義不大。(2)2:1Cache經(jīng)驗(yàn)規(guī)則:容量為N的直接映象Cache的失效率和容量為N/2的兩路組相聯(lián)Cache差不多相同。改進(jìn)平均訪存時(shí)間某一方面是以損失另一方面為代價(jià)的:增加塊大小在降低失效率的同時(shí)增加失效開銷(原因:塊的調(diào)入時(shí)間加大)為減少失效開銷,有要求提高相聯(lián)度提高相聯(lián)度則是以增加命中時(shí)間為代價(jià)的。395.3.3VictimCache
一種能減少?zèng)_突失效而又不影響時(shí)鐘頻率的方法是:在Cache中存放因失效而被丟棄(替換)的那些塊(即犧牲Victim),每當(dāng)發(fā)生失效時(shí),在訪問下一級(jí)存儲(chǔ)器之前,先檢查VictimCache中是否含有所需的塊,如果有,就將該塊與Cache中某個(gè)塊做交換。效果:Jouppi發(fā)現(xiàn),含1到5項(xiàng)的VictimCache對(duì)減少?zèng)_突失效很有效,尤其是對(duì)于那些小型的、直接映象數(shù)據(jù)Cache更是如此。對(duì)于不同的程序,一個(gè)項(xiàng)數(shù)為4的VictimCache能使一個(gè)4KB直接映象數(shù)據(jù)Cache的沖突失效減少20%~90%。從Cache的層次來看,VictimCache可以看成位于Cache和存儲(chǔ)器之間的又一級(jí)Cache,采用命中率較高的全相聯(lián)映象,容量小,且僅僅在替換時(shí)起作用。40圖5.11描述了VictimCache在存儲(chǔ)層次中的位置。415.3.4偽相連Cache偽相聯(lián)(pseudo-associate)或列相聯(lián)(columnassociate):既能獲得多路組相聯(lián)Cache的低失效率,又能保持直接映象Cache的命中速度。工作過程:采用這種方法時(shí),在命中情況下,訪問Cache的過程和直接映象Cache中的情況相同;而發(fā)生失效時(shí),在訪問下一級(jí)存儲(chǔ)器之前,會(huì)先檢查Cache另一個(gè)位置,看是否匹配。如果這一塊的標(biāo)識(shí)匹配,則稱發(fā)生了“偽命中”。否則,就只好訪問下一級(jí)存儲(chǔ)器。第二個(gè)位置的選擇:一種簡單的確定另一塊位置的方法是將索引字段的高位取反,然后按照新索引去尋找“偽相聯(lián)”中的對(duì)應(yīng)塊。42如果直接映象Cache里的許多快速命中在偽相聯(lián)Cache中變成慢速命中,那么這種優(yōu)化措施反而會(huì)降低整體性能。解決方案之一:交換兩個(gè)塊的內(nèi)容:問題:多種命中時(shí)間會(huì)使CPU流水線的設(shè)計(jì)復(fù)雜化。
圖5.12給出了正常命中時(shí)間、偽命中時(shí)間和失效開銷之間的關(guān)系。43采用直接映象和兩路組相聯(lián)時(shí),命中時(shí)間相差2%~10%。一般情況:很高的處理器時(shí)鐘頻率,需要結(jié)構(gòu)簡單的Cache;單時(shí)鐘頻率越高,失效開銷越大(時(shí)鐘周期數(shù)越多)。445.3.5硬件預(yù)取技術(shù)預(yù)取技術(shù):預(yù)取內(nèi)容可以直接放入Cache,也可以放在一個(gè)訪問速度比主存快的外部緩沖器中。指令和數(shù)據(jù)都可以在處理器提出訪問請(qǐng)求之前進(jìn)行預(yù)取。指令預(yù)取通常由Cache之外的硬件完成。工作方式:被請(qǐng)求指令塊返回時(shí)放入Cache,而預(yù)取指令塊則放在緩沖器中;如果某次被請(qǐng)求的指令塊正好在緩沖器里,則取消對(duì)該塊的訪存請(qǐng)求,直接從緩沖器中讀出這一塊,同時(shí)發(fā)出對(duì)下一指令塊的預(yù)取訪存請(qǐng)求。優(yōu)點(diǎn):預(yù)取技術(shù)、VictimCache和偽相聯(lián)都能在不影響處理器時(shí)鐘頻率的前提下降低時(shí)效率。45
Jouppi的研究結(jié)果表明:對(duì)于塊大小為16B,容量為4KB的直接映象指令Cache,一個(gè)塊的指令緩沖器就可以捕獲15%~25%的失效,4個(gè)塊的指令緩沖器可以捕獲大約50%的失效,而16個(gè)塊的緩沖器則可以捕獲72%的失效。一個(gè)數(shù)據(jù)緩沖器大約可以捕獲4KB直接映象Cache25%的失效。對(duì)數(shù)據(jù)Cache,可以采用多個(gè)數(shù)據(jù)緩沖器,分別從不同的地址預(yù)取數(shù)據(jù)。用4個(gè)數(shù)據(jù)緩沖器可以將命中率提高到43%。465.3.6由編譯器控制的預(yù)取基本思想:由編譯時(shí)加入預(yù)取指令,在數(shù)據(jù)被用到之前發(fā)出預(yù)取請(qǐng)求。預(yù)取有以下幾種類型:·寄存器預(yù)取:把數(shù)據(jù)取道寄存器中?!ache預(yù)取:只將數(shù)據(jù)取到Cache中,而不放入寄存器。故障性預(yù)取是指在預(yù)取時(shí),若出現(xiàn)虛地址故障或違反保護(hù)權(quán)限,則會(huì)發(fā)生異常。而非故障性預(yù)取,也叫做非綁定預(yù)取,在遇到相應(yīng)情況時(shí)則不會(huì)發(fā)生異常。預(yù)取指令需要花費(fèi)一條指令的開銷,要注意保證這種開銷不超過預(yù)取所帶來的收益。475.3.7編譯器優(yōu)化通過對(duì)軟件的優(yōu)化來降低失效率。特點(diǎn):無需對(duì)硬件做任何改動(dòng)就可以降低失效率。前提:重新組織程序而不影響程序的正確性。目的:改善數(shù)據(jù)的空間局部性和時(shí)間局部性。優(yōu)化的四個(gè)例子(四種技術(shù),如圖所示):數(shù)組合并、互換循環(huán)、循環(huán)融合、分塊。485.4減少Cache失效開銷以往對(duì)Cache的研究一直把重點(diǎn)放在減少失效次數(shù)上,但是Cache性能公式卻告訴我們,家少Cache失效開銷可以跟降低Cache失效率一樣帶來性能上的提高。由圖5.2可以看出,隨著技術(shù)的發(fā)展,處理器速度的提高要快于DRAM速度的提高,這使得Cache失效開銷的相對(duì)代價(jià)隨時(shí)間不斷增加。下面將給出解決這一問題的5種優(yōu)化措施。其中最后一種是通過增加另一級(jí)Cache來減少失效開銷,這也許是最令人感興趣的方法。5.4.1讀失效優(yōu)先于寫提高寫直達(dá)Cache性能最重要的方法是使用一個(gè)大小適中的寫緩沖器。但是寫緩沖器卻導(dǎo)致對(duì)存儲(chǔ)器的訪問復(fù)雜化。下面通過例子進(jìn)一步說明。49
問題分析:在執(zhí)行SW指令之后,R3中的數(shù)據(jù)被放入寫緩沖器。接下來的第一條LW指令使用相同的Cache索引,因而產(chǎn)生一次失效。第二條LW指令欲把的值為512的存儲(chǔ)單元的值讀入寄存器R2中,這也會(huì)造成一次失效。如果此時(shí)寫緩沖器還微將數(shù)據(jù)寫入存儲(chǔ)單元512中,那么第二條LW指令將把錯(cuò)誤的舊值讀入Cache和寄存器R2。如果不采取適當(dāng)?shù)念A(yù)防措施,R2的值就不會(huì)等于R3的值。50解決方法(寫直達(dá)):推遲對(duì)讀失效的處理,直至寫緩沖器清空。新問題:Cache中有一個(gè)大小只有幾個(gè)字的寫緩沖器在發(fā)生讀失效時(shí)幾乎總有數(shù)據(jù),這就增加了讀失效的開銷。改進(jìn)方法:讀失效時(shí)檢查寫緩沖器的內(nèi)容,如果沒有沖突而且存儲(chǔ)器可訪問,就可以繼續(xù)處理讀失效。在寫回法:假定讀失效將替換一個(gè)“臟”的存儲(chǔ)塊。我們可以不像往常那樣先把“臟”塊寫回存儲(chǔ)器,然后再讀存儲(chǔ)器,而是先把被替換的“臟”塊拷入一個(gè)緩沖器,然后讀存儲(chǔ)器,最后再寫存儲(chǔ)器。這樣CPU的“讀”訪問就能更快地完成。發(fā)生讀失效時(shí),處理器既可以采用等待緩沖區(qū)清空的方法,也可以采用檢查緩沖區(qū)中各字的地址是否有沖突的方法。515.4.2子塊放置技術(shù)子塊放置技術(shù)把一個(gè)Cache塊劃分成若干個(gè)小塊,稱之為子塊。為每一個(gè)子塊賦予一位有效位,用于說明該子塊中的數(shù)據(jù)是否有效。因此,標(biāo)識(shí)匹配并不意味著這個(gè)字一定在Cache中,只有當(dāng)與該字對(duì)應(yīng)的有效位也為“1”時(shí)才是。失效時(shí)只需從下一級(jí)存儲(chǔ)器調(diào)入一個(gè)子塊。這樣,一個(gè)Cache中就有可能有的子塊有效,有的子塊無效。顯然子塊的失效開銷小于完整Cache塊的失效開銷。子塊可以被看成是地址標(biāo)識(shí)之外的又一級(jí)尋址。
圖5.15給出了一個(gè)例子。顯然,使用子塊可以減少標(biāo)識(shí)所占的存儲(chǔ)空間。如果圖中的有效位都用完整的標(biāo)識(shí)來替代,標(biāo)識(shí)所占用的空間將大得多。這正是采用子塊放置法的原因。525.4.3請(qǐng)求字處理技術(shù)當(dāng)從存儲(chǔ)器向CPU調(diào)入一塊時(shí),塊中往往只有一個(gè)字是CPU立即需要的,這個(gè)字稱為請(qǐng)求字。請(qǐng)求字處理技術(shù)指當(dāng)CPU所請(qǐng)求的字到達(dá)后,不等整個(gè)塊都調(diào)入Cache,就可把改字發(fā)送給CPU病重新啟動(dòng)CPU。有兩種具體的方案:(1)盡早重啟動(dòng)(earlyrestart)在請(qǐng)求字沒有到達(dá)時(shí),CPU處于等待狀態(tài)。一旦請(qǐng)求字到達(dá),就立即發(fā)送給CPU,并啟動(dòng)。(2)請(qǐng)求字優(yōu)先(requestwordfirst)調(diào)塊時(shí),首先向存儲(chǔ)器請(qǐng)求CPU所要的請(qǐng)求字,再從存儲(chǔ)器調(diào)入該塊的其余部分。請(qǐng)求字優(yōu)先也稱為回繞讀取(wrappedfetch)或關(guān)鍵字優(yōu)先(critical)。535.4.4非阻塞Cache技術(shù)基本出發(fā)點(diǎn):一個(gè)Cache請(qǐng)求失效時(shí)可以發(fā)出后續(xù)請(qǐng)求。這種“失效下命中”(hitundermiss)的優(yōu)化措施在Cache失效時(shí),不是完全拒絕CPU的訪問,而是能處理部分訪問,從而減少了實(shí)際失效開銷。這就是非阻塞(nonblocking)Cache或非鎖定Cache技術(shù)。如果Cache允許多個(gè)失效重疊,即支持“多重失效下的命中”(hitundermultiplemiss)和“失效下失效”(missundermiss),則可進(jìn)一步減少實(shí)際失效開銷?!笆旅小贝胧┐蟠笤黾恿薈ache控制器的復(fù)雜度,因?yàn)檫@時(shí)可能有多個(gè)訪存同時(shí)進(jìn)行。理論上可以同時(shí)處理的失效個(gè)數(shù)越多,所能帶來的性能上的提高就越大。54對(duì)于SPEC92典型程序,圖5.16給出了對(duì)于不同的重疊失效數(shù),數(shù)據(jù)Cache的平均失效開銷(以周期為單位)與阻塞Cache平均失效開銷的比值。所考慮的Cache采用直接映象,容量為8KB,塊大小為32字節(jié)。測試程序?yàn)?8個(gè)SPEC92程序。前14個(gè)測試程序?yàn)楦↑c(diǎn)程序,后4個(gè)為整數(shù)程序。在重疊失效個(gè)數(shù)為1、2和64的情況下,浮點(diǎn)程序的平均比值分別為:76%、51%和39%,而整數(shù)程序的平均比值分別為:81%、78%和78%。從圖中可以看出,對(duì)于浮點(diǎn)程序來說,重疊失效次數(shù)越多,性能提高越多;但對(duì)于整數(shù)程序來說,重疊次數(shù)對(duì)性能提高影響不大,簡單的“一次失效命中”就可以了,幾乎得到了所有的好處。另外,“失效下命中”方法有一個(gè)潛在優(yōu)點(diǎn):它不會(huì)影響命中時(shí)間,而組相聯(lián)卻會(huì)。555.4.5采用兩級(jí)Cache
二級(jí)Cache技術(shù)的著眼點(diǎn):Cache和主存的接口。為了克服CPU和主存之間越來越大的性能差距,使存儲(chǔ)器和CPU的性能匹配,我們是應(yīng)該把Cache做得更快,還是應(yīng)該把Cache做得更大?一種答案是:二者兼顧。通過在原有Cache和存儲(chǔ)器之間增加另一級(jí)Cache,構(gòu)成兩級(jí)Cache,我們可以把第一級(jí)Cache做得足夠小,使其速度和快速CPU的時(shí)鐘周期相匹配,而把第二級(jí)Cache做得足夠大,使它能捕獲更多本來需要到主存去的訪問,從而降低實(shí)際失效開銷。性能公式用下標(biāo)L1和L2分別表示第一級(jí)和第二級(jí)Cache,則:56平均訪存時(shí)間=命中時(shí)間L1+失效率L1×失效開銷L1失效開銷L1=命中時(shí)間L2+失效率L2×失效開銷L2所以,平均訪存時(shí)間=命中時(shí)間L1+失效率L1×(命中時(shí)間L2+失效率L2×失效開銷L2)二級(jí)Cache系統(tǒng)采用以下術(shù)語(1)局部失效率對(duì)于某一級(jí)Cache來說,局部失效率=該級(jí)Cache的失效次數(shù)/到達(dá)該級(jí)Cache的訪存次數(shù)對(duì)于第二級(jí)Cache來說,就是上面的失效率。(2)全局失效率對(duì)于某一級(jí)Cache來說,全局失效率=該級(jí)Cache的失效次數(shù)/CPU發(fā)出的訪存總次數(shù)使用上面公式中的變量,第二級(jí)Cache的全局失效率全局失效率L2=失效率L1×失效率L257對(duì)于第二級(jí)Cache,有以下兩點(diǎn)結(jié)論:(1)在第二級(jí)Cache比第一級(jí)Cache大得多的情況下,兩級(jí)Cache的全局失效率和容量與第二級(jí)Cache相同的單級(jí)Cache的失效率非常接近。這時(shí)可以利用前面關(guān)于單級(jí)Cache的分析和知識(shí)。(2)局部失效率不是衡量第二級(jí)Cache的一個(gè)好指標(biāo),因?yàn)樗堑谝患?jí)Cache失效率的函數(shù),可以通過改變第一級(jí)Cache而使之變化,而且不能全面反映兩級(jí)Cache體系的性能。因此,在評(píng)價(jià)第二級(jí)Cache時(shí),應(yīng)用全局失效率這個(gè)指標(biāo)。第二級(jí)Cache的設(shè)計(jì)只有兩個(gè)問題需要權(quán)衡:它能否降低CPU中的平均訪存時(shí)間部分?它的成本是多少?58第二級(jí)Cache的容量一般很大,和過去計(jì)算機(jī)的主存一樣大!大容量意味著第二級(jí)Cache可能實(shí)際上沒有容量失效,只剩下一些強(qiáng)制性失效和沖突失效。我們可以利用前面幾節(jié)介紹的技術(shù)來減少第二級(jí)Cache的失效率,從而達(dá)到減少失效開銷的目的綜合上述考慮,Cache設(shè)計(jì)的本質(zhì)是在快速命中和失效次數(shù)少這兩方面進(jìn)行權(quán)衡。大部分優(yōu)化措施都是在提高一方的同時(shí)降低另一方。對(duì)于第二級(jí)Cache而言,它的命中次數(shù)比第一級(jí)Cache少得多,所以重點(diǎn)就轉(zhuǎn)移到了減少失效次數(shù)上。這就導(dǎo)致了大容量、更高相聯(lián)度和更大塊大小的Cache的出現(xiàn)。
圖5.17給出了相對(duì)執(zhí)行時(shí)間和第二級(jí)Cache塊大小的關(guān)系。595.5減少命中時(shí)間命中時(shí)間是平均訪存時(shí)間的三個(gè)組成部分之一。命中時(shí)間的重要性在于它影響到處理器的時(shí)鐘頻率。本節(jié)先討論減少命中時(shí)間的通用技術(shù),然后論述一個(gè)適用寫命中的優(yōu)化措施。5.5.1容量小、結(jié)構(gòu)簡單的Cache
采用容量小而且結(jié)構(gòu)簡單的Cache,可以有效地提高Cache的訪存速度。如果Cache容量小得合理,就可以與處理器做在同一芯片上,避免因芯片外訪問而增加時(shí)間開銷。一種折衷方案:把Cache的標(biāo)識(shí)放在片內(nèi),而把Cache的數(shù)據(jù)存儲(chǔ)在片外。保持Cache結(jié)構(gòu)簡單:例如采用直接映象Cache。直接映象Cache的主要優(yōu)點(diǎn),是設(shè)計(jì)者可以讓標(biāo)識(shí)檢測和數(shù)據(jù)傳送重疊進(jìn)行,這樣可以有效地減少命中時(shí)間。605.5.2虛擬Cache
問題:在采用虛擬存儲(chǔ)器的機(jī)器中,每次訪存都必須進(jìn)行虛地址到實(shí)地址變換,即將CPU發(fā)出的虛地址轉(zhuǎn)換為物理地址。解決方法:在Cache中直接使用虛擬地址。這樣的Cache稱為虛擬Cache,而物理Cache則是指那些使用物理地址的傳統(tǒng)Cache。
直接使用虛擬地址訪問Cache,在命中時(shí)消除了用于地址轉(zhuǎn)換的時(shí)間。虛擬Cache問題之一:進(jìn)程切換時(shí),由于新進(jìn)程的虛擬地址所指向的空間與原進(jìn)程的不同,故需要清空Cache。61解決這個(gè)問題的一種辦法:地址標(biāo)識(shí)中增加一個(gè)進(jìn)程表示符字段(PID),這樣多個(gè)進(jìn)程的數(shù)據(jù)是屬于哪個(gè)程序的。進(jìn)程切換時(shí),僅當(dāng)某個(gè)PID被重用(即該P(yáng)ID以前已被分配了某個(gè)進(jìn)程,現(xiàn)又把它分配給另一個(gè)進(jìn)程)時(shí),才需清空Cache。
虛擬Cache沒有流行起來的一個(gè)原因是操作系統(tǒng)和用戶程序?qū)τ谕粋€(gè)物理地址可能采用兩種以上不同形式的虛擬地址來訪問,它們可能會(huì)導(dǎo)致同一個(gè)數(shù)據(jù)在虛擬Cache中存在兩個(gè)副本。另外,I/O通常使用物理地址,為了與虛擬Cache打交道,需要把物理地址映象為虛擬地址。625.5.3寫操作流水化寫命中通常比讀命中花費(fèi)更多的時(shí)間,因?yàn)樵趯懭霐?shù)據(jù)之前必須先檢測標(biāo)識(shí),否則就有可能將數(shù)據(jù)寫到錯(cuò)誤的單元中。我們可以通過把寫操作流水化來提高寫命中的速度。AlphaAPX21064和其他一些機(jī)器采用了這種技術(shù)。
圖5.18為對(duì)于三種方式,虛地址Cache在不同容量下的失效率。圖5.19為流水化寫的硬件組織結(jié)構(gòu)。
635.5.4Cache優(yōu)化技術(shù)小結(jié)上述5.3到5.5節(jié)中敘述的減少失效率,失效開銷和命中時(shí)間的技術(shù)通常會(huì)影響平均訪存時(shí)間公式的其他組成部分,而且會(huì)影響存儲(chǔ)層次的復(fù)雜性。表5.9對(duì)這些技術(shù)作了小結(jié),并估計(jì)了它們對(duì)復(fù)雜性的影響。表中“+”號(hào)表示這一技術(shù)改進(jìn)了相應(yīng)指標(biāo),“-”號(hào)表示它使該指標(biāo)變差,而空格欄則表示它對(duì)該指標(biāo)無影響。從表中可以看出,沒有什么技術(shù)能同時(shí)改進(jìn)兩項(xiàng)或三項(xiàng)指標(biāo)。表中關(guān)于復(fù)雜性的衡量是主觀化的,0表示最容易,3表示最復(fù)雜。645.6主存主存是存儲(chǔ)層次中緊接著Cache下面的一個(gè)層次。主存是數(shù)據(jù)輸入的目的地,也是數(shù)據(jù)輸出的發(fā)源地,它既被用作滿足Cache的請(qǐng)求,也被用作I/O接口。主存的性能主要用延遲和帶寬來衡量。以往,Cache主要關(guān)心的是主存的延遲(它影響Cache的失效開銷),而I/O則主要關(guān)心主存的帶寬。隨著第二級(jí)Cache的廣泛使用,主存帶寬對(duì)于Cache來說也變得重要了,這是因?yàn)榈诙?jí)Cache的塊大小較大的緣故。實(shí)際上,Cache設(shè)計(jì)者可以通過增加Cache塊的大小來利用高存儲(chǔ)帶寬。655.6.1存儲(chǔ)器技術(shù)訪存時(shí)間:從發(fā)出讀請(qǐng)求到所需的數(shù)據(jù)到達(dá)為止所須的時(shí)間。存儲(chǔ)周期:兩次相鄰訪存請(qǐng)求之間的最小時(shí)間間隔。DRAM地址復(fù)用:這樣可將芯片的地址引腳數(shù)減少一半。每次訪存時(shí),先發(fā)送一半的地址,稱為行選通(rowaccessstrobe或RAS);接著發(fā)送另一半地址,稱為列選通(columnaccessstore或CAS)。存儲(chǔ)單元被組織成一個(gè)按行或按列尋址的矩形陣列。
DRAM的特別要求:刷新。DRAM只用一個(gè)晶體管(其中的電容)來存儲(chǔ)一位信息,但讀取這一位時(shí),會(huì)破壞其中的信息;電容中的電荷也會(huì)隨時(shí)間流失。66為防止信息丟失,存儲(chǔ)系統(tǒng)中每個(gè)DRAM在一定的時(shí)間窗口(例如8微秒)內(nèi),都必須把它的每一行都訪問一遍,這個(gè)過程稱為刷新。存儲(chǔ)控制器中包含定期刷新DRAM的硬件。刷新時(shí),存儲(chǔ)系統(tǒng)是不可以訪問的。DRAM設(shè)計(jì)者們努力把用于刷新的時(shí)間控制在總時(shí)間的5%以內(nèi)。與DRAM相反,SRAM不需要刷新。SRAM中每位使用4到6個(gè)晶體管構(gòu)成觸發(fā)器。SRAM訪問時(shí)和存儲(chǔ)器沒有差別。
DRAM設(shè)計(jì)的重點(diǎn)是大容量。SRAM設(shè)計(jì)既關(guān)心速度也關(guān)心容量。這是因?yàn)檫@樣,SRAM的地址線不能被復(fù)用。當(dāng)采用同一制造技術(shù)工藝時(shí),DRAM的容量大約是SRAM容量的4到8倍,SRAM的存儲(chǔ)周期比DRAM的快8到16倍,但價(jià)格也貴8到16倍。67幾乎所有自1975年以來售出的計(jì)算機(jī)的主存都采用DRAM做成的,而幾乎所有的Cache都是SRAM。不過Cary系列巨型機(jī)是個(gè)例外,如C-90采用SRAM作主存。Amdahl經(jīng)驗(yàn)規(guī)則:為了操持系統(tǒng)平衡,存儲(chǔ)容量應(yīng)隨CPU速度的提高而線性增加。
表5.10給出DRAM的典型時(shí)間參數(shù)。685.6.2提高主存性能的存儲(chǔ)器組織結(jié)構(gòu)和減少延遲相比,采用新型的組織結(jié)構(gòu)來提高存儲(chǔ)帶寬更容易。Cache可以通過增加Cache塊的大小來利用主存帶寬的增加,因?yàn)樵诟邘挼那闆r下,塊大小增大并不會(huì)使失效開銷增加多少。下面以處理Cache失效為例來說明各種存儲(chǔ)器組織結(jié)構(gòu)。假設(shè)基本存儲(chǔ)器為:·送地址需4個(gè)時(shí)鐘周期;·每個(gè)字的訪問時(shí)間為24個(gè)時(shí)鐘周期;·傳送一個(gè)字的數(shù)據(jù)需4個(gè)時(shí)鐘周期。如果Cache塊大小為4個(gè)字,則失效開銷為:4×(4+24+4)=128個(gè)時(shí)鐘周期存儲(chǔ)器的帶寬為每個(gè)時(shí)鐘周期1/8(16/128)字節(jié)。69
圖5.21畫出了幾種提高存儲(chǔ)帶寬的方案。方案a中所有部件的寬度都是一個(gè)字;方案b采用了寬度較大的存儲(chǔ)器總線和Cache;方案c是多體交叉存儲(chǔ)器。70采用新型的組織結(jié)構(gòu)提高存儲(chǔ)帶寬的技術(shù)有:1.增加存儲(chǔ)器的寬度。這是提高存儲(chǔ)器帶寬的最簡單的方法。不足之處:(1)它會(huì)增加CPU和存儲(chǔ)器之間的連接通路(通常稱為存儲(chǔ)器總線)的寬度,使其實(shí)現(xiàn)代價(jià)提高;(2)當(dāng)主存寬度增加后,用戶擴(kuò)充主存時(shí)的最小增量也增加了相應(yīng)的倍數(shù);(3)在具有糾錯(cuò)功能的存儲(chǔ)器中,實(shí)現(xiàn)對(duì)一行(一次可并行讀出的數(shù)據(jù))中部分?jǐn)?shù)據(jù)的寫入比較復(fù)雜。712.采用簡單的多體交叉存儲(chǔ)器存儲(chǔ)系統(tǒng)采用DRAM,把存儲(chǔ)芯片組織為多個(gè)體(bank),并讓它們并行工作,從而能一次讀或?qū)懚鄠€(gè)字(而不是一個(gè)字)。圖5.22為4路多體交叉存儲(chǔ)器。存儲(chǔ)系統(tǒng)的設(shè)計(jì)目標(biāo):對(duì)于順序訪問,每個(gè)時(shí)鐘周期都能從一個(gè)存儲(chǔ)體中送出一個(gè)數(shù)據(jù)。72
3.獨(dú)立存儲(chǔ)體交叉訪問的進(jìn)一步推廣,就能同時(shí)進(jìn)行多個(gè)獨(dú)立的訪存。這時(shí)應(yīng)有多個(gè)存儲(chǔ)控制器,以允許多個(gè)體(或多組按字交叉的存儲(chǔ)體)能獨(dú)立操作。在這個(gè)存儲(chǔ)器中,每個(gè)體需要有獨(dú)立的地址線,而且也許還需要有獨(dú)立的數(shù)據(jù)總線。
圖5.23是一個(gè)含有獨(dú)立存儲(chǔ)體的示意圖。73在多體存儲(chǔ)器中,非阻塞Cache允許CPU在Cache失效時(shí)繼續(xù)運(yùn)行,這就潛在地允許多個(gè)Cache失效被同時(shí)處理。這種設(shè)計(jì)僅在采用多體結(jié)構(gòu)時(shí)有意義,否則多個(gè)讀操作只能通過一個(gè)存儲(chǔ)端口進(jìn)行,所能得到的好處不大:只能將訪存操作和數(shù)據(jù)傳送重疊進(jìn)行。采用多體結(jié)構(gòu)的另一個(gè)原因,是共享公共存儲(chǔ)器多處理機(jī)系統(tǒng)的需求。獨(dú)立存儲(chǔ)體可以和上述按字交叉的多體結(jié)合起來使用,即將存儲(chǔ)器分為若干個(gè)獨(dú)立的存儲(chǔ)體,而每個(gè)獨(dú)立存儲(chǔ)體內(nèi)部又劃分為若干個(gè)按字交叉方式工作的體,有時(shí)稱獨(dú)立存儲(chǔ)體為超體,而稱超體內(nèi)按字交叉的部分為體。744.避免存儲(chǔ)體沖突體沖突指的是兩個(gè)請(qǐng)求要訪問同一個(gè)體。在傳統(tǒng)的多體交叉結(jié)構(gòu)中,順序訪問被處理得很好,不會(huì)發(fā)生體沖突。地址相差奇數(shù)值的訪問也是如此。問題是當(dāng)?shù)刂废嗖顬榕紨?shù)值時(shí),沖突的頻度就增加了。解決該問題的一種方法,是采用許多體去減少體沖突的次數(shù)。這種方法只有在較大規(guī)模的機(jī)器中才采用,例如NECSX/3最多使用了128個(gè)體。體沖突問題既可以用軟件方法,也可以用硬件方法解決。編譯器可以通過循環(huán)交換優(yōu)化來避免對(duì)同一個(gè)體的訪問。更簡單的一種方法是讓程序員或編譯器來擴(kuò)展數(shù)組的大小,使之不是2的冪,從而強(qiáng)制使上述地址落在不同的體內(nèi)。75減少體沖突的一種硬件解決方案是使體數(shù)為素?cái)?shù)!采用素?cái)?shù)看起來似乎會(huì)需要更多的硬件來完成復(fù)雜的計(jì)算:上述取模和除法運(yùn)算。而且這些復(fù)雜的計(jì)算會(huì)延長每次訪存的時(shí)間。幸運(yùn)的是,有幾種硬件方法能快速地完成取模運(yùn)算,尤其是當(dāng)存儲(chǔ)體數(shù)為素?cái)?shù),且為2的冪減1時(shí),我們可以用下面的簡單計(jì)算來代替除法運(yùn)算:體內(nèi)地址=地址MOD存儲(chǔ)體中的字?jǐn)?shù)因?yàn)橐粋€(gè)存儲(chǔ)體中包含的字?jǐn)?shù)一般是2的冪,所以可以用位選擇方法替代上述除數(shù)為素?cái)?shù)的除法。76
表5.11列出了兩種方法對(duì)三個(gè)存儲(chǔ)模塊地址映象的結(jié)果:當(dāng)尋址一個(gè)字時(shí),前一種方法中需要進(jìn)行除法運(yùn)算,后一方法中只需對(duì)2的冪進(jìn)行取模運(yùn)算。775.DRAM專用交叉結(jié)構(gòu)對(duì)DRAM進(jìn)行列訪問時(shí),DRAM必須能將行訪問所得到的一行信息暫存在其內(nèi)部的緩沖器中。為了改進(jìn)性能,所有DRAM的時(shí)序信號(hào)都能做到允許反復(fù)訪問緩沖器的內(nèi)容,無需進(jìn)行另外的行訪問。這種優(yōu)化有以下三種方式:·Nibble方式:每次進(jìn)行行訪問時(shí),DRAM除能夠給出所需的位以外,還能給出其后的3位?!age方式:緩沖器以SRAM的方式工作。通過改變列地址,可以隨機(jī)地訪問緩沖器內(nèi)的任一位。這種訪問可以反復(fù)進(jìn)行,直到下一次行訪問或刷新。·Staticcolumn方式:和Page方式類似,只是在列地址改變時(shí),無需觸發(fā)列訪問選通線。78從1Mb的DRAM開始,絕大多數(shù)DRAM能夠完成上述三種方式中的任一種。具體選擇哪一種是在進(jìn)行封裝時(shí)確定的(通過選擇接觸點(diǎn))。這些優(yōu)化改變了DRAM存儲(chǔ)周期的定義。表5.12為優(yōu)化后DRAM的訪問周期。79這些優(yōu)化措施的好處在于它們是利用了DRAM本身就有的電路,只需稍微增加控制復(fù)雜度,系統(tǒng)的成本只增加一點(diǎn),就幾乎能使帶寬成倍增加。大多數(shù)主存系統(tǒng)采用Page方式等技術(shù)來減少CPU和DRAM之間性能的差距。和傳統(tǒng)的多體交叉存儲(chǔ)器不同,當(dāng)DRAM容量增加時(shí),采用這種技術(shù)也不會(huì)由什么缺點(diǎn)了。對(duì)于新型的DRAM,如RAMBUS則可能要用一定的代價(jià)來換取更高的帶寬。805.7虛擬存儲(chǔ)器早在1961年,英國曼徹斯特大學(xué)的Kilbum等人就已提出了虛擬存儲(chǔ)器的概念。經(jīng)過60年代初到70年代初的發(fā)展完善,虛擬存儲(chǔ)器已廣泛應(yīng)用于大中型計(jì)算機(jī)系統(tǒng)。目前幾乎所有的計(jì)算機(jī)都采用了虛擬存儲(chǔ)器基本原理:虛擬存儲(chǔ)器是“主存-輔存”層次進(jìn)一步發(fā)展的結(jié)果。它由價(jià)格昂貴、速度較快、容量較小的主存儲(chǔ)器M1和一個(gè)價(jià)格低廉、速度較慢、容量很大的輔助存儲(chǔ)器M2(通常是硬盤)。應(yīng)用程序員可以用機(jī)器指令的地址碼對(duì)整個(gè)程序統(tǒng)一編址,就如同應(yīng)用程序具有對(duì)應(yīng)于這個(gè)地址碼寬度的存儲(chǔ)空間(稱為程序空間)一樣,而不必考慮實(shí)際主存空間的大小。81下面的圖示描述了一個(gè)程序從虛擬存儲(chǔ)器到物理存儲(chǔ)器的映象。82虛擬存儲(chǔ)器具有以下特點(diǎn):(1)多個(gè)進(jìn)程可以共享主存空間。虛擬存儲(chǔ)器把主存空間劃分為較小的塊(頁面或段),并以塊為單位分配各進(jìn)程。這樣,多個(gè)進(jìn)程可以共享一個(gè)較小的主存空間。此外,大多數(shù)虛擬存儲(chǔ)器還可以減少程序的啟動(dòng)時(shí)間,因?yàn)檫@時(shí)程序不像以往那樣要等到全部程序的數(shù)據(jù)調(diào)入主存后才能開始執(zhí)行。(2)程序員不必做存儲(chǔ)管理工作。在非虛擬存儲(chǔ)器中,程序員必須完成所謂的程序覆蓋技術(shù)。虛擬存儲(chǔ)器解決了這個(gè)問題,它自動(dòng)地對(duì)存儲(chǔ)層次進(jìn)行管理,免除了程序員的負(fù)擔(dān)。這正是當(dāng)時(shí)發(fā)明虛擬存儲(chǔ)器的初衷。(3)采用動(dòng)態(tài)再定位,簡化了程序的裝入。83程序定位,是指將程序空間中給出的邏輯地址映象到主存的物理地址。程序再定位有靜態(tài)再定位和動(dòng)態(tài)再定位之分。靜態(tài)再定位是指在程序執(zhí)行之前,在裝入或再裝入該程序的過程中,通過修改程序中的地址而完成在地址空間的變換。而在程序的執(zhí)行過程中,其在主存空間中的位置就不能再改變。動(dòng)態(tài)再定位是指只有在程序的執(zhí)行過程中,真正訪問指令和數(shù)據(jù)時(shí),才進(jìn)行地址變換,產(chǎn)生物理地址。動(dòng)態(tài)再定位使得同一程序可以很方便地裝入主存中的任意一個(gè)位置執(zhí)行。84虛擬存儲(chǔ)器可以分為頁式和段式兩類。頁式虛存把空間劃分為大小相同的塊,稱為頁面;而段式虛存則把空間劃分成可變長的塊,稱為段。頁面是對(duì)空間的機(jī)械劃分,而段則往往是按程序的邏輯意義進(jìn)行劃分。表5.13給出了這兩種存儲(chǔ)器的比較。85虛擬存儲(chǔ)器解決存儲(chǔ)層次四個(gè)問題的方案:(1)映象規(guī)則:所有操作系統(tǒng)均采用全相聯(lián)映象。(2)查找算法:頁式和段式管理都要使用一個(gè)由頁號(hào)或段號(hào)作為索引的數(shù)據(jù)結(jié)構(gòu),這個(gè)數(shù)據(jù)結(jié)構(gòu)中含有所要查找的塊的物理地址。對(duì)于段式系統(tǒng),段內(nèi)位移加上段的物理地址就是最終的物理地址。而對(duì)于頁式系統(tǒng),只需簡單地將頁內(nèi)位移拼接在相應(yīng)頁面的物理地址之后即可。如圖5.24所示。86(3)替換算法操作系統(tǒng)的主要指導(dǎo)思想是盡可能減少頁故障。與此對(duì)應(yīng),幾乎所有的操作系統(tǒng)都設(shè)法替換最近最少使用(LRU)的頁,因?yàn)檫@個(gè)頁可能是最沒有用的。為此,許多機(jī)器為主存中的每個(gè)頁面設(shè)置了一個(gè)使用位,也稱為訪問位。通過這種方法,操作系統(tǒng)就能選擇一個(gè)最近最少使用的頁。(4)寫策略由于訪問下一級(jí)存儲(chǔ)器的開銷非常大,虛擬存儲(chǔ)器總是采用寫回策略。虛擬存儲(chǔ)器通常使用“臟”位(dirty)來保證只有被修改過了的塊才被寫回磁盤,避免對(duì)下一級(jí)存儲(chǔ)器的不必要的訪問。875.7.2快表(TLB):實(shí)現(xiàn)快速地址變換的技術(shù)
TLB用于存放近期經(jīng)常使用的頁表項(xiàng),其內(nèi)容是頁表部分內(nèi)容的一個(gè)副本。進(jìn)行地址變換時(shí),一般直接查TLB,只有在TLB不命中時(shí),才需要去訪問內(nèi)存中的頁表。
TLB也利用了局部性原理:如果訪存具有局部性,則這些訪存中的地址變換也具有局部性,即所使用的頁表項(xiàng)是相對(duì)聚集的。TLB也常稱為快表或地址變換器。TLB中的項(xiàng)與Cache中的項(xiàng)類似,也是由兩部分構(gòu)成:標(biāo)識(shí)和數(shù)據(jù)。標(biāo)識(shí)中存放的是虛地址的一部分,而數(shù)據(jù)部分中則存放物理頁幀號(hào)、有效位、存儲(chǔ)保護(hù)信息以及其它一些輔助信息。88地址變換處在確定處理器時(shí)鐘周期的關(guān)鍵路徑上,因?yàn)榧词故遣捎米詈唵蔚腃ache,也需要讀取TLB中的值并對(duì)其進(jìn)行比較。所以,一般TLB比Cache的標(biāo)識(shí)存儲(chǔ)器更小而且更快,這樣才能保證TLB的讀出操作不會(huì)使Cache的命中時(shí)間延長。由于TLB的速度至關(guān)重要,所以有時(shí)TLB的訪問按流水方式實(shí)現(xiàn)。
AlphaAPX21064地址變換的步驟:TLB采用全相聯(lián)映象,所以當(dāng)進(jìn)行地址變換時(shí),把虛擬地址送往各個(gè)標(biāo)識(shí),進(jìn)行比較。如圖5.25(①和②)所示。與此同時(shí),根據(jù)TLB中的存儲(chǔ)保護(hù)信息對(duì)本次訪存的類型進(jìn)行檢查,看是否越權(quán)(②)。若存在匹配的標(biāo)識(shí),則多路選擇器把相應(yīng)TLB項(xiàng)中的物理地址選出(③)。該地址與頁內(nèi)位移拼接成完整的34位物理地址(④)。89在這種方案中,Cache索引用的是虛地址,而標(biāo)識(shí)用的是物理地址。一般TLB比Cache的標(biāo)識(shí)存儲(chǔ)器更小,而且更快,這樣才能保證TLB的讀出操作不會(huì)使Cache的命中時(shí)間延長。905.7.3頁面大小的選擇頁面大小是虛擬存儲(chǔ)器的主要參數(shù)之一。大頁面和小頁面各有優(yōu)點(diǎn),所以選擇頁面大小是一個(gè)如何進(jìn)行權(quán)衡的問題。較大頁面的好處:(1)頁表的大小與頁面大小成正比。較大的頁面可以節(jié)省實(shí)現(xiàn)地址映象所需的存儲(chǔ)空間及其它資源;(2)較大的頁面使快速Cache命中的實(shí)現(xiàn)更簡單;(3)在主存和輔存之間(也許還通過網(wǎng)絡(luò))傳送較大的頁面比傳送較小的頁面更為有效。(4)TLB的項(xiàng)數(shù)有限,對(duì)于給定數(shù)目的項(xiàng)數(shù),較大的頁面意味著可以高效地實(shí)現(xiàn)更多存儲(chǔ)空間的地址變換,從而減小TLB失效的次數(shù)。91正是由于最后這個(gè)原因,近期的微處理器對(duì)多種頁面大小提供了支持。對(duì)于有些程序來說,TLB失效對(duì)CPI的影響可能會(huì)和Cache失效的影響一樣大。采用較小頁面的主要好處是:(1)節(jié)省存儲(chǔ)空間;(2)節(jié)省進(jìn)程的啟動(dòng)時(shí)間,許多進(jìn)程都比較小,所以采用小頁面可加快進(jìn)程調(diào)用。最后一點(diǎn)是進(jìn)程的啟動(dòng)時(shí)間。許多進(jìn)程都比較小,所以采用較大的頁面會(huì)增加調(diào)用進(jìn)程的時(shí)間。925.8進(jìn)程保護(hù)和虛存實(shí)例 ·多道程序的出現(xiàn)對(duì)程序間的保護(hù)和共享提出了新的要求;·進(jìn)程的概念以及進(jìn)程切換或關(guān)聯(lián)切換935.8.1進(jìn)程保護(hù)最簡單的保護(hù)機(jī)制是用一對(duì)寄存器來檢查每一個(gè)地址,以確保地址在兩個(gè)界限之間。傳統(tǒng)上這兩個(gè)界限分別叫做基地址和上界地址。一個(gè)地址若滿足:基地址地址上界地址則該地址是有效的。有些系統(tǒng)則把地址看成是無符號(hào)的整數(shù),這時(shí),地址界限檢測條件就變成:(基地址+地址)上界地址如果用戶進(jìn)程有權(quán)改變基地址寄存器和上界地址寄存器的內(nèi)容,那么就不能保證用戶進(jìn)程不被其他進(jìn)程所破壞,所以用戶進(jìn)程不能改變它們。然而操作系統(tǒng)必須能改變這兩個(gè)寄存器,這樣它才能夠進(jìn)行進(jìn)程切換。為保護(hù)進(jìn)程仍須完成下述三項(xiàng)工作:941.提供至少兩種模式,以區(qū)分正在運(yùn)行的進(jìn)程是用戶進(jìn)程還是操作系統(tǒng)進(jìn)程。有時(shí)稱后者為內(nèi)核進(jìn)程、超級(jí)用戶進(jìn)程或管理進(jìn)程。2.使CPU狀態(tài)的一部分成為用戶進(jìn)程可讀但不可寫。這包括基地址/上界地址寄存器、用戶/管理模式位和異常許可/禁止位。用戶進(jìn)程無權(quán)修改這些狀態(tài),因?yàn)槿绻脩暨M(jìn)程能改變地址界限檢查、賦給自己管理特權(quán)或禁止異常出現(xiàn),操作系統(tǒng)就無法控制它們了。3.提供一種機(jī)制,使得CPU能從用戶模式進(jìn)入管理模式和從管理模式進(jìn)入用戶模式。前一種模式變換一般是通過系統(tǒng)調(diào)用來完成。還可以將保護(hù)進(jìn)一步升級(jí),如環(huán)形保護(hù)結(jié)構(gòu)等。955.8.2頁式虛存舉例AlphaAXP的存儲(chǔ)管理和21064的LIBAlphaAXP體系結(jié)構(gòu)采用段頁相結(jié)合的方式,既提供了存儲(chǔ)保護(hù),又將頁表大小減少到最小。96
圖5.27說明了AlphaAXP的地址變換過程。975.9AlphaAXP21064存儲(chǔ)層次98995.10小結(jié)由于主存和CPU是用不同的材料制成的,所以難以設(shè)計(jì)和生產(chǎn)出在速度上和快速CPU相匹配的存儲(chǔ)器。我們是依靠局部性原理來解決這個(gè)問題的。局部性原理的正確性和實(shí)用性在現(xiàn)代計(jì)算機(jī)存儲(chǔ)層次中的各層(包括從磁盤到TLB)都已得到了驗(yàn)證。
表5.15對(duì)本章所介紹的各級(jí)存儲(chǔ)層次的屬性做了一個(gè)總結(jié)。100101各級(jí)存儲(chǔ)層次的設(shè)計(jì)決策是相互影響的,體系結(jié)構(gòu)設(shè)計(jì)者必須從整個(gè)系統(tǒng)的角度出發(fā),才能作出明智的決策。對(duì)存儲(chǔ)層次設(shè)計(jì)者來說,最主要和最困難的問題是如何選擇各層的參數(shù),使它們能很好地互相配合,達(dá)到良好的整體性能,而不是去發(fā)明什么新技術(shù)。CPU的速度在不斷提高,但它們花在等待存儲(chǔ)器上的時(shí)間也越來越多。為解決這一問題,人們不斷提出新的設(shè)計(jì)方案以便更多的選擇,例如可變頁大小、偽相聯(lián)Cache以及能面向Cache優(yōu)化的編譯器等。幸運(yùn)的是,在平衡價(jià)格、性能和復(fù)雜度這三項(xiàng)指標(biāo)方面經(jīng)常存在一個(gè)技術(shù)上的“優(yōu)化點(diǎn)”。在設(shè)計(jì)時(shí)如果不能找到該優(yōu)化點(diǎn),就會(huì)損失性能和浪費(fèi)硬件、設(shè)計(jì)時(shí)間及調(diào)試時(shí)間。體系結(jié)構(gòu)設(shè)計(jì)者們通過仔細(xì)的量化分析是可以找到該優(yōu)化點(diǎn)的。102習(xí)題與思考103104105106107108安全閥基本知識(shí)如果壓力容器(設(shè)備/管線等)壓力超過設(shè)計(jì)壓力…1.盡可能避免超壓現(xiàn)象堵塞(BLOCKED)火災(zāi)(FIRE)熱泄放(THERMALRELIEF)如何避免事故的發(fā)生?2.使用安全泄壓設(shè)施爆破片安全閥如何避免事故的發(fā)生?01安全閥的作用就是過壓保護(hù)!一切有過壓可能的設(shè)施都需要安全閥的保護(hù)!這里的壓力可以在200KG以上,也可以在1KG以下!設(shè)定壓力(setpressure)安全閥起跳壓力背壓(backpressure)安全閥出口壓力超壓(overpressure)表示安全閥開啟后至全開期間入口積聚的壓力.幾個(gè)壓力概念彈簧式先導(dǎo)式重力板式先導(dǎo)+重力板典型應(yīng)用電站鍋爐典型應(yīng)用長輸管線典型應(yīng)用罐區(qū)安全閥的主要類型02不同類型安全閥的優(yōu)缺點(diǎn)結(jié)構(gòu)簡單,可靠性高適用范圍廣價(jià)格經(jīng)濟(jì)對(duì)介質(zhì)不過分挑剔彈簧式安全閥的優(yōu)點(diǎn)預(yù)漏--由于閥座密封力隨介質(zhì)壓力的升高而降低,所以會(huì)有預(yù)漏現(xiàn)象--在未達(dá)到安全閥設(shè)定點(diǎn)前,就有少量介質(zhì)泄出.100%SEATINGFORCE75502505075100%SETPRESSURE彈簧式安全閥的缺點(diǎn)過大的入口壓力降會(huì)造成閥門的頻跳,縮短閥門使用壽命.ChatterDiscGuideDiscHolderNozzle彈簧式安全閥的缺點(diǎn)彈簧式安全閥的缺點(diǎn)=10090807060500102030405010%OVERPRESSURE%BUILT-UPBACKPRESSURE%RATEDCAPACITY普通產(chǎn)品平衡背壓能力差.在普通產(chǎn)品基礎(chǔ)上加裝波紋管,使其平衡背壓的能力有所增強(qiáng).能夠使閥芯內(nèi)件與高溫/腐蝕性介質(zhì)相隔離.平衡波紋管彈簧式安全閥的優(yōu)點(diǎn)優(yōu)異的閥座密封性能,閥座密封力隨介質(zhì)操作壓力的升高而升高,可使系統(tǒng)在較高運(yùn)行壓力下高效能地工作.ResilientSeatP1P1P2先導(dǎo)式安全閥的優(yōu)點(diǎn)平衡背壓能力優(yōu)秀有突開型/調(diào)節(jié)型兩種動(dòng)作特性可遠(yuǎn)傳取壓先導(dǎo)式安全閥的優(yōu)點(diǎn)對(duì)介質(zhì)比較挑剃,不適用于較臟/較粘稠的介質(zhì),此類介質(zhì)會(huì)堵塞引壓管及導(dǎo)閥內(nèi)腔.成本較高.先導(dǎo)式安全閥的缺點(diǎn)重力板式產(chǎn)品的優(yōu)點(diǎn)目前低壓儲(chǔ)罐呼吸閥/緊急泄放閥的主力產(chǎn)品.結(jié)構(gòu)簡單.價(jià)格經(jīng)濟(jì).重力板式產(chǎn)品的缺點(diǎn)不可現(xiàn)場調(diào)節(jié)設(shè)定值.閥座密封性差,并有較嚴(yán)重的預(yù)漏.受背壓影響大.需要很高的超壓以達(dá)到全開.不適用于深冷/粘稠工況.幾個(gè)常用規(guī)范ASMEsectionI-動(dòng)力鍋爐(FiredVessel)ASMEsectionVIII-非受火容器(UnfiredVessel)API2000-低壓安全閥設(shè)計(jì)(LowpressurePRV)API520-火災(zāi)工況計(jì)算與選型(FireSizing)API526-閥門尺寸(ValveDimension)API527-閥座密封(SeatTightness)介質(zhì)狀態(tài)(氣/液/氣液雙相).氣態(tài)介質(zhì)的分子量&Cp/Cv值.液態(tài)介質(zhì)的比重/黏度.安全閥泄放量要求.設(shè)定壓力.背壓.泄放溫度安全閥不以連接尺寸作為選型報(bào)價(jià)依據(jù)!如何提供高質(zhì)量的詢價(jià)?彈簧安全閥的結(jié)構(gòu)彈簧安全閥起跳曲線彈簧安全閥結(jié)構(gòu)彈簧安全閥結(jié)構(gòu)導(dǎo)壓管活塞密封活塞導(dǎo)向不平衡移動(dòng)副(活塞)導(dǎo)管導(dǎo)閥彈性閥座P1P1P2先導(dǎo)式安全閥結(jié)構(gòu)先導(dǎo)式安全閥的工作原理頻跳安全閥的頻跳是一種閥門高頻反復(fù)開啟關(guān)閉的現(xiàn)象。安全閥頻跳時(shí),一般來說密封面只打開其全啟高度的幾分只一或十幾分之一,然后迅速回座并再次起跳。頻跳時(shí),閥瓣和噴嘴的密封面不斷高頻撞擊會(huì)造成密封面的嚴(yán)重?fù)p傷。如果頻跳現(xiàn)象進(jìn)一步加劇還有可能造成閥體內(nèi)部其他部分甚至系統(tǒng)的損傷。安全閥工作不正常的因素頻跳后果1、導(dǎo)向平面由于反復(fù)高頻磨擦造成表面劃傷或局部材料疲勞實(shí)效。2、密封面由于高頻碰撞造成損
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- racemic-6-7-Dihydroxy-cannabichromene-生命科學(xué)試劑-MCE-9913
- 2-Isopropyl-5-methylanisole-生命科學(xué)試劑-MCE-4177
- 2025年度解除租賃合同簡易協(xié)議書(體育場館)
- 二零二五年度城市商業(yè)圈門市房租賃與商業(yè)資源整合合同
- 二零二五年度電子租房合同附租客租賃滿意度調(diào)查
- 2025年度員工離職補(bǔ)償及保密協(xié)議
- 二零二五年度社區(qū)車位使用權(quán)共有管理協(xié)議書
- 施工現(xiàn)場施工防火制度
- 教育機(jī)構(gòu)電力供應(yīng)的未來趨勢(shì)-分布式變電站
- 音樂學(xué)院師資隊(duì)伍的音樂教育與創(chuàng)新發(fā)展
- 2022版義務(wù)教育(勞動(dòng))課程標(biāo)準(zhǔn)(含2022年修訂部分)
- 過松源晨炊漆公店(其五)課件
- 最新交管12123學(xué)法減分題庫含答案(通用版)
- 安全事故案例圖片(76張)課件
- 預(yù)應(yīng)力錨索施工方案
- 豇豆生產(chǎn)技術(shù)規(guī)程
- 奢侈品管理概論完整版教學(xué)課件全書電子講義(最新)
- 文藝美學(xué)課件
- 中藥炮制學(xué)教材
- 常見腫瘤AJCC分期手冊(cè)第八版(中文版)
- 電氣第一種第二種工作票講解pptx課件
評(píng)論
0/150
提交評(píng)論