電腦儲存系統(學習摘錄)劉建文(http://blog.csdn.net/keminlau
)
KEY:記憶體管理 虛擬記憶體 分層思想 管理思想
分層組織
電腦記憶(儲存)系統被組織階層,高層高速但昂貴容量小,低層慢速但廉價容量大。由高層到低層分別名之寄存器堆、快取(cache)、主存(main memory)和外存(secondary memory)。那麼為什麼記憶系統要層次化呢?如果答案是效率,那麼提效的原理又是什麼呢?如果原理是傳說中的局部性原理(principle of locality),那麼它又是如何?的呢?對系統開發人員與應用開發人員有什麼影響呢(明顯的是記憶系統分層是對應用開發人員透明的,他們感覺不到分層的存在)?
快取
快取作為一塊從記憶體到CPU的緩衝區,用來儲存在記憶體中被頻繁使用的資料區塊。儲存系統層次化的一個目標就是提高CPU訪問資料的時間,讓這個時間盡量逼近快取的速度。這個目標完成的效果取決於三個因素:第一,程式本身的行為特質;第二,快取的容量和組織方式;第三,快取資料替換的策略(cache replacement policy)。處理器的一個資料引用在快取找到稱為“快取命中(cache hits)”,否則叫“緩衝不命中(cache misses)”。發生不命中時,(系統得先將)不命中的資料從記憶體取出,這個動作會將包含不命中資料的整塊資料載入快取(KEMIN:怎麼個整塊法?配置好的?)。
快取的組織方式決定了CPU搜尋緩衝的方式。快取可以組織成三種方式:直接映射(direct mapped)、全相聯映射(fully associative)和組相聯映射(set associative)。直接映射方式無須替換演算法,而後兩都需要一些策略(FIFO, LRU或其它策略)來決定如何替換不命中的資料區塊。
虛擬記憶體
儲存系統層次化的另一個目的是利用大容量的外存來擴充主存,這就是所謂的虛擬記憶體機制。虛擬記憶體可以讓我們把程式運行在一個比較實際記憶體大的虛擬位址空間內。虛擬記憶體另一項功能就是實現多道技術,讓多個進程共用記憶體資源。虛擬記憶體機制的代價是需要額外的空間儲存管理資訊(像地址對應程式、頁表等)、對虛擬位址轉換所耗費的時間和發生缺頁時的處理時間。
虛存與主存的關係與主存與緩衝的關係很相似。由於種相似性,快取與地址轉換後備緩衝器TLB( Translation Lookaside Buffer)常常讓人很迷惑。實際上,TLB也是快取,一種有特定用途的快取區。我們必須清楚,虛擬位址必須先被轉為物理地址才能訪問主存的,這也就是TLB的功能所在。雖然同樣作為一種緩衝區,快取與(分過頁的)主存的功能目標不太一致,快取偏向提高訪問速度,而分過頁的主存(也就是虛存)更多是擴充主存。
思想
儲存空間層次化的設計思想是以儲存空間訪問的所謂“局部性”為基礎的,包括時間局部性和空間局部性。
P.S.這個以局部性為基礎的基礎字眼使用我意識到,是局部性的客觀存在決定了儲存空間的層次化設計,不是反之。換句話說,局部性是事物存在的普遍法則,而儲存空間層次化只是一個特例。
P.S.這局部性思想又讓我想起了其它的思想的客觀存在性,比如實現並發機制是中斷思想……
儲存空間階層的中心思想是,對是每個K,位於K層的更快更小的存放裝置作為位於K+1層的更大更慢的存放裝置的緩衝。換句話說,階層中的每一層都緩衝來自較低一層的資料對象。
管理
對階層中的每一層,必須有某種形式的邏輯照管(manage)緩衝(的功能實現)。這個邏輯包括如何劃分緩衝為塊、如何訪問緩衝、如何判斷緩衝是否命中,如何用新的資料區塊替換舊的資料區塊。這個邏輯可以由硬體、軟體或兩者的一種結合來實現。
比如,寄存器堆(register file)是位階層中的最高層,它比較特殊,是由編譯器來“管理”,管理方式如分配寄存器給某變數。這個“管理”邏輯是軟體;
再如CPU的一級(L1)及二級(L2)快取是完全靠內建的硬體來“管理”的。這個管理邏輯是硬體;
在實現了虛擬記憶體的系統裡,記憶體作為外存的緩衝,這個虛擬“緩衝”是由作業系統軟體和CPU的地址轉換硬體(如MMU)共同“管理”的。
還有一個例子,在具有Distributed File System(比如AFS)的機器裡,外存作為整個分布式網路資料庫的“緩衝”,由原生AFS用戶端進行“管理”。
在作為一個資料的使用者,比如應用開發人員,是不需關心緩衝的實現的,緩衝機制對他們來是自動的,透明的;但是對系統的管理者,比如作業系統開發人員則必須瞭解這些“管理”功能的實現原理。
KEMIN:作為一個系統開發人員,接觸硬體開發可能性比較小,所以對CPU快取有基本的瞭解就行了;但系統開發人員很可能參與像編譯最佳化、作業系統移植等工作,所以對這兩個“管理”功能實現必須要掌握。