1. 程式人生 > >2018.12.12 第九章虛擬記憶體

2018.12.12 第九章虛擬記憶體

這章基本分為兩個部分,第一部分是講虛擬記憶體,第二部分講動態記憶體分配,目前只看完第一部分。

david的課還是老樣子,講的一塌糊塗,助教小哥ben spinelli的recitation也還是一如以往的通透。

基本上虛擬記憶體就是類似於記憶體和磁碟之間的cach,為了讓每個程序都以為自己對記憶體有著徹底的控制,就需要給他們每個都設定自己的虛擬地址,而頁表和虛擬記憶體就是用來管理虛擬地址和實體地址之間的對映關係的。

當然,另外一個作用是我們需要的記憶體比實際擁有的記憶體更多,所以需要拿一些磁碟充作記憶體來湊數,然後通過系統技巧讓cpu大部分時候處理的仍然是記憶體,只有少部分page fault(和cache miss是一個意思)時才需要到磁盤裡load資料。

cpu操作的是虛擬地址,然後通過頁表以及其他的一套辦法把它翻譯成實體地址,並檢查它是否快取在記憶體中。

具體翻譯的辦法是,頁表檢查虛擬地址的低位,然後把其高位按某種對應關係對映為相應的鼓勵地址,再結合低位就成了實體地址。所以其實頁表本身的儲存內容,也就是頁本身的大小,也就是那幾個作用類似index的低位而已。

值得一提的是在真正翻譯之前,一般要先檢查一個tlb硬體,這個就是相當於一個小cache,有自己的index和tag,利用locality減少翻譯次數的。

具體內容書上有,雖然講的也不太明白就是了(david真的是,課講的爛,書寫的也沒思路)。如果以後忘了的話就重看一下,也可以結合ben的recitation來看。