摘要:本文對“Cache-主存”和“主存-輔存”為兩種存儲層次依據的原理和基本思想、引入的目的、硬件組成、失效開銷、映像規則、查找方法、替換算法、寫策略等多個方面進行了對比分析。以加深對存儲層次的理解,提高對層次結構設計思想的認識。
關鍵詞:存儲器;存儲層次;虛擬存儲技術;“Caehe-主存”;“主存-輔存”。
中圖分類號:TP333
文獻標識碼:A
文章編號:1002-2422(2010)06-0110-03
1 對比分析
1.1 依據的原理和基本思想
程序在運行時遵循局部性原理。程序的局部性原理表現在兩個方面:
(1)時間局部性:如果一個存儲項被訪問,則可能該項很快再次被訪問。
(2)空間局部性:如果一個存儲項被訪問,則該項及臨近項也可能很快被訪問。
“Cache-主存”和“主存-輔存”兩種存儲層次正是基于局部性原理,以“快速實現常見事件”為指導思想來解決存儲器容量、速度和價格的矛盾。兩者都將CPU頻繁訪問的數據和指令存放在速度較高的存儲介質中,而將不頻繁訪問的數據和指令存放在速度較慢但容量較大、價格較低的存儲介質中,從而形成了存儲器的層次結構。
1.2 引入的目的
理想的存儲系統應該具有能滿足計算要求的容量和與CPU相匹配的速度。近年來,CPU性能提高的很快,但主存性能的提高卻相對較慢,如圖1所示。因此CPU和主存之間在性能上的差距越來越大?,F代計算機都采用Cache來解決這個問題。就是在CPU和主存之間增加一級或兩級速度高、容量較小且每位價格高的高速緩沖存儲器。借助于輔存軟硬件,在與主存構成一個有機的整體,以彌補主存速度的不足。

引入“主存-輔存”層次的目的是為了彌補主存容量的不足。是在主存外面增加一個容量更大,每位價格更低、速度更慢的存儲器(稱為輔存,一般是硬盤),依靠輔助軟硬件的作用,構成一個整體。“主存-輔存”層次常被用來實現虛擬存儲器,向編程人員提供大量的存儲空間。
1.3 硬件組成
現代計算機,主存都是采用DRAM做成的,而幾乎所有的Cache,都采用SRAM,所有的輔存都采用了磁表面存儲設備和光盤存儲設備。
DRAM的優點之一是單管動態存儲元來存儲一位信息,其元件數量少,集成度高。但讀取所在位的數據時,會破壞其中的信息,為防止信息丟失,須定期刷新。其設計的重點是大容量,地址線不能被復用。
為防止信息在讀出時被破壞,SRAM中每位使用4至6個晶體管,其訪問時間和存儲周期沒有差別,不需要刷新。SRAM的存儲周期比DRAM的短,但單位價格較貴。
磁表面存儲器和光盤存儲器的優點是存儲容量大,價格低,可重復使用,記錄位可以長期保存而不丟失,甚至可以脫機存檔,是非破壞性讀出,光盤還具有儲存密度高等優點。其主要缺點是存取速度較慢,數據傳輸率低,機械結構復雜,對工作環境要求較高。
1.4 失效開銷
從速度上看,目前Cache的訪問時間一般是主存的訪問時間的1/4到1/100,而主存的訪問速度要比磁盤的訪問速度快10萬倍。從實現方式的角度看,“Cache-主存”存儲層次主要由專用硬件實現,查找轉換速度快,而“主存-輔存”存儲層次主要由軟件實現,查找轉換的過程相對較慢。從所處位置上看,相對輔存主存在物理位置上更加靠近CPU,Cache未能命準時,CPU可直接訪問主存,但主存未能命準時,對輔存的訪問必須先通過主存,這樣從輔存傳送一個信息塊所需的時間遠大于直接從主存傳送一個信息塊所需的時間。
以上這些原因致使CPU訪問不命準時,處理“主存-輔存”存儲層次的失效開銷遠大于處理“Cache-主存”存儲層次的失效開銷。
1.5 映像規則
地址映像的方法很多,常用的有全相聯映像、直接相聯映像、組相聯映像、段相聯映像等多種。選用何種映像方法除了看所用的地址映像和變換硬件能否有高的速度、低的價格以及是否便于實現之外,還要看這種映像方法帶來的塊(頁/段)的沖突概率是否低,空間的利用率是否高等。
全相聯映像的主要優點是塊的沖突概率最低。只有當Cache或主存中裝滿后,才有可能出現塊的沖突,所以,Cache和主存的空間利用率最高。但是,由于其相聯存儲器容量最大,實現代價相對較大,而且目前Cache的容量已經很大,這樣,查表速度比較難以提高。
相比之下,直接映像法所需的硬件簡單,成本低。但Cache的塊沖突概率很高,且Cache的空間利用率很低,而組相聯映像既能減少塊的沖突概率,提高Cache和主存空間的利用率,又能使地址映像機構及地址變換的速度比起全相聯映像法要簡單和快速。因此,絕大多數計算機都采用兩路組相聯或四路組相聯。如表1所示。

相聯度越高(即n的值越大),Cache空間的利用率就越高,塊沖突概率就越低,因而Cache的失效率就越低。雖然從降低失效率的角度來看,n的值越大越好,但在后面將看到,增大n值并不一定能使整個計算機系統的性能提高,而且還會使Cache的實現復雜度和代價增大。因此,絕大多數計算機都采用直接映象、兩路組相聯或四路組相聯。特別是直接映像,采用得最多。
因為,“主存一輔存”存儲層次的失效開銷非常大,操作系統設計者為減少平均訪問時間,總是設法降低失效率。因此,操作系統允許將塊放在主存的任意位置,即采用全相聯映像。
1.6 查找方法
虛擬存儲器通過增設地址映像表機構來實現程序在主存中的定位。這種定位技術把程序分成若干較小的段或頁,用相應的映像表機構來指明該程序的某段或某頁是否已裝入主存。若已裝入主存,則應同時指明其在主存中所處的開始位置;如果未裝入主存,則去輔存中調段或頁,并建立起程序空間和實存空間的地址映像關系。這樣,程序執行時通過查映像表將程序(虛)地址變換成實際主存地址再訪問主存。但是,“Cache-主存”存儲層次中,不宜采用類似虛擬存儲器的地址映像表法來存儲地址映像關系,因為這種地址映像需要大容量的隨機訪問存儲器來構成,從而代價大、速度慢,所以基本上都采用目錄表硬件方式來實現地址的變化和查找。
1.7 替換算法
命中率、輔助軟硬件成本及是否便于實現是確定替換算法的主要因素。目前常用的替換算法有隨機算法、先進先出、近期最少使用法、最久未使用法等。
在“主存-輔存”存儲層次中,因其失效開銷非常大,系統設計者必須設法降低失效率,為此現在大多數系統中都采用了基于局部性原理,失效率低、實現相對簡單的NRU算法。而“Cache-主存”存儲層次中,NRU和隨機法分別因失效率底和實現簡單而被廣泛采用。
1.8 寫策略
按照存儲層次的要求,Cache內容應是主存部分內容的一個副本,但是在處理機要和主存交換信息時,有時會出現主存內容跟不上Cache對應內容的變化的現象,產生所謂的Cache與主存內容的不一致性問題。這是可能會導致系統出錯,為了保證正確性,主存內容必須更新。至于何時更新,這正是寫策略所要解決的問題。寫策略主要有兩種:
(1)全寫法,或稱寫直達法。即寫操作將數據同時寫入Cache和主存。
(2)寫回法,即寫Cache時不寫主存,僅當被寫Cache數據塊要被替換出去時才寫回主存。
同樣,“主存一輔存”存儲層次中也存在主存與輔存內容不一致性問題。但由于主存的下一級是磁盤,而磁盤的訪問時間相對較長,所以,目前還沒有一個虛擬存儲器操作系統在CPU執行“寫”操作時將數據穿過主存直接寫入磁盤,虛擬存儲器總是采用寫回策略。由于訪問磁盤的開銷非常大,虛擬存儲器通常使用“臟”位設置的辦法,來保證只有被修改過了的塊才被寫回磁盤,這樣就可以避免對,一級存儲器的不必要的訪問。
2 結束語
以上對比可知,“Cache-主存”和“主存-輔存”兩個存儲層次依據的原理和基本思想是相同的,而這兩個存儲層次的引入目的不同,所選硬件的組成材料不同。其失效開銷也存在著較大差異,正是這些因素影響了在映像規則、替換算法、查找方法、失效時CPU的狀態等方面的設計決策。
參考文獻
[1]Todd Jobson's Blog Reflections.Santa Clara,CA,USA:Sun Microsystems,2007.
[2]李學干.計算機系統結構.西安:西安電子科技大學出版社,2000.
[3]陸鑫達.計算機系統結構.北京:高等教育出版社,1996.
[4]白中英.計算機組成原理.北京:科學出版社,2002.
[5]孟靜.操作系統.北京:高等教育出版社,2001.
[6]湯子瀛,哲鳳屏,等.計算機操作系統.西安:西安電子科技大學出版社,1996.
[7]張晨曦,王志英,等.計算機體系結構.北京:高等教育出版社,2000.