劉建文(
key:記憶體管理 虛擬記憶體 分層思想 管理思想
計算機記憶(儲存)系統被組織層次結構,高層高速但昂貴容量小,低層慢速但廉價容量大。由高層到低層分別名之暫存器堆、快取記憶體(cache)、主存(main memory)和外存(secondary memory)。那麼為什麼記憶系統要層次化呢?如果答案是效率,那麼提效的原理又是什麼呢?如果原理是傳說中的區域性性原理(principle of locality),那麼它又是如何實現的呢?對系統開發人員與應用開發人員有什麼影響呢(明顯的是記憶系統分層是對應用開發人員透明的,他們感覺不到分層的存在)?
快取記憶體作為一塊從記憶體到cpu的緩衝區,用來儲存在記憶體中被頻繁使用的資料塊。儲存系統層次化的乙個目標就是提高cpu訪問資料的時間,讓這個時間盡量逼近快取記憶體的速度。這個目標完成的效果取決於三個因素:第一,程式本身的行為特質;第二,快取記憶體的容量和組織方式;第三,快取資料替換的策略(cache replacement policy)。處理器的乙個資料引用在快取記憶體找到稱為「快取命中(cache hits)」,否則叫「快取不命中(cache misses)」。發生不命中時,(系統得先將)不命中的資料從記憶體取出,這個動作會將包含不命中資料的整塊資料載入快取記憶體(kemin:怎麼個整塊法?配置好的?)。
儲存系統層次化的另乙個目的是利用大容量的外存來擴充主存,這就是所謂的虛擬記憶體機制。虛擬記憶體可以讓我們把程式執行在乙個比較實際記憶體大的虛擬位址空間內。虛擬記憶體另一項功能就是實現多道技術,讓多個程序共享記憶體資源。虛擬記憶體機制的代價是需要額外的空間儲存管理資訊(像位址對映程式、頁表等)、對虛擬位址轉換所耗費的時間和發生缺頁時的處理時間。
虛存與主存的關係與主存與快取的關係很相似。由於種相似性,快取記憶體與位址轉換後備緩衝器tlb( translation lookaside buffer)常常讓人很迷惑。實際上,tlb也是快取記憶體,一種有特定用途的快取記憶體區。我們必須清楚,虛擬位址必須先被轉為實體地址才能訪問主存的,這也就是tlb的功能所在。雖然同樣作為一種緩衝區,快取記憶體與(分過頁的)主存的功能目標不太一致,快取記憶體偏向提高訪問速度,而分過頁的主存(也就是虛存)更多是擴充主存。
儲存器層次化的設計思想是以儲存器訪問的所謂「區域性性」為基礎的,包括時間區域性性和空間區域性性。
p.s.這個以區域性性為基礎的基礎字眼使用我意識到,是區域性性的客觀存在決定了儲存器的層次化設計,不是反之。換句話說,區域性性是事物存在的普遍法則,而儲存器層次化只是乙個特例。
p.s.這區域性性思想又讓我想起了其它的思想的客觀存在性,比如實現併發機制是中斷思想……
儲存器層次結構的中心思想是,對是每個k,位於k層的更快更小的儲存裝置作為位於k+1層的更大更慢的儲存裝置的快取。換句話說,層次結構中的每一層都快取來自較低一層的資料物件。
對層次結構中的每一層,必須有某種形式的邏輯照管(manage)快取(的功能實現)。這個邏輯包括如何劃分快取為塊、如何訪問快取、如何判斷快取是否命中,如何用新的資料塊替換舊的資料塊。這個邏輯可以由硬體、軟體或兩者的一種結合來實現。 比如,暫存器堆(register file)是位層次結構中的最高層,它比較特殊,是由編譯器來「管理」,管理方式如分配暫存器給某變數。這個「管理」邏輯是軟體;
再如cpu的一級(l1)及二級(l2)快取記憶體是完全靠內建的硬體來「管理」的。這個管理邏輯是硬體; 在實現了虛擬記憶體的系統裡,記憶體作為外存的快取,這個虛擬的「快取」是由作業系統軟體和cpu的位址轉換硬體(如mmu)共同「管理」的。
還有乙個例子,在具有分布式檔案系統(比如afs)的機器裡,外存作為整個分布式網路資料庫的「快取」,由本機的afs客戶端進行「管理」。
在作為乙個資料的使用者,比如應用開發人員,是不需關心快取的實現的,快取機制對他們來是自動的,透明的;但是對系統的管理者,比如作業系統開發人員則必須了解這些「管理」功能的實現原理。
kemin:作為乙個系統開發人員,接觸硬體開發可能性比較小,所以對cpu快取記憶體有基本的了解就行了;但系統開發人員很可能參與像編譯優化、作業系統移植等工作,所以對這兩個「管理」功能實現必須要掌握。
計算機系統學習筆記 gcc和gdb
gcc main.c 會預設生成乙個a.out的可執行檔案 gcc main.c o 會產生乙個 hello 可執行檔案 gcc main.c o 會產生乙個 可執行檔案 詳細過程可以分為四步 可以手動進行這四個步驟 gcc e main.c 不會產生.i檔案 gcc e main.c main.i...
計算機作業系統學習記錄
作業系統引論 作業系統的功能 一 平台與環境的功能 1 os是計算機使用者最基本的操作平台。os之所以叫做 os,是因為它使得計算機成了可以操作並且由它提供了一部分最基本的操作命令的緣故。2 在軟體層次上,os 是最底層的軟體,也是最接近硬體的軟體,對其他軟體提供支援,是其他軟體的執行平台。3 os...
《深入理解計算機系統》學習筆記(一)
第1章計算機系統漫遊 1.1 位 bit 位元組 8位 二進位制檔案 其他檔案 1.2 hello.c hello.i 修改文字,例如將標頭檔案內容插入 hello.s 匯程式設計序 hello.o 可重定位目標程式 二進位制 printf.o hello 可執行目標程式 二進位制 gun gun ...