頁表項是隻包含物理塊號的,至於王道所說的頁號仍可當作是頁表項的一部分但無需單獨的20位進行表示,因為有個裝置叫頁表暫存器,內含頁表始址和頁表長度,由於一個頁表項4B,因此知道頁號和頁表始址後可透過頁表始址+頁號x4B 得到該頁對應的頁表項地
3 翻譯加速從頁命中的流程圖中可以看出,CPU 每次需要請求一個虛擬地址,MMU 就需要從記憶體/快取記憶體中獲取 PTE ,然後再根據 PTE 的內容去從物理記憶體中載入資料
這種慢是為了安全,如果頁表在使用者空間,那麼使用者就可能自己修改頁表,對映任意的記憶體地址,訪問任何記憶體,甚至是直接操作硬體,程序間、核心的隔離保護就失去了意義
頁表的大小不會很大,比如表示4GB,每個頁4KB,如果頁表只有一級的話,整張頁表的大小為:(4GB ➗ 4KB)* 4B = 4MB今天剛好在上OS的課,回答一下如果是32位的系統,1個頁大小4KB,假設一個頁表項的大小是4B,那麼需要1M
參考:《Linux 核心設計與實現》程序的頁面只有在物理記憶體將要耗盡的時候才會被pageout出去,否則就在物理記憶體,運氣好還能進cache呢頁表是開機階段創立的,後續的只是對頁表的分配
一級頁表的缺陷由於頁表必須連續存放,並且需要常駐物理記憶體,當邏輯地址空間很大時,導致頁表佔用記憶體空間很大
這是ARM32才有的高階和低端記憶體,這是為了解決虛擬地址不夠的問題你的問題跟ARM64下 4G記憶體都有線性對映一樣,核心只是映射了地址,並沒有使用,使用者態申請到虛擬地址後 在寫時發生缺頁異常,才分配到真實物理地址,並建立使用者態的對映
程序訪問虛擬記憶體,CPU執行時透過分頁機制轉換成物理記憶體訪問,虛擬地址到物理記憶體的轉換表稱為頁表,這個轉換是個查表的過程
虛擬記憶體是一個間接容器- 如果沒有虛擬記憶體時,程式地址直接對映到物理記憶體
如果有效位是0,且PTE中的地址為null,這表示這個虛擬頁還未被分配,而如果有效位是0且PTE中有地址,那麼這個地址指向該虛擬頁在磁碟上的起始位置上圖的示例展示了一個有8個虛擬頁和4個物理頁的系統的頁表,四個虛擬頁(VP1、VP2、VP4
作業系統發展歷史CPU比磁碟速度快太多程式執行過程三種連結方式三種裝入方式記憶體管理的職責記憶體管理的職責-記憶體空間的分配與回收-連續分配管理方式連續分配方式固定分割槽分配動態分割槽分配記憶體管理的職責-記憶體空間的分配與回收-非連續分配