我們看到,分段管理機制已經提供了很好的保護機制,那為什麼還要加上分頁管理機制呢?
其實它的主要目的在於實現虛擬儲存器。
轉換使用兩級頁表,第一級叫做頁目錄,大小為4kb,儲存在乙個物理頁中,每個表項4位元組長,共有1024個表項。每個表項對應第二級的乙個頁表,第二級的每乙個頁表也有1024個表項,每乙個表項對應乙個物理頁。頁目錄表的表項簡稱pde(page directory entry),頁表的表項簡稱pte(page table entry)。進行轉換時,先是從由暫存器cr3指定的頁目錄中根據線性位址的高10位得到頁表位址,然後在頁表中根據線性位址的第12到21位得到物理頁首位址,將這個首位址加上線性位址低12位便得到了實體地址。
分頁機制是否生效的開關位於cr0的最高位pg位(參見圖3.8)。如果pg=1,則分頁機制生效。所以,當我們準備好了頁目錄表和頁表,並將cr3指向頁目錄表之後,只需要置pg位,分頁機制就開始工作了。
cpu就是使用mmu(memory management unit,記憶體管理單元)進行分頁控制的,
如果處理器沒有mmu,或者有mmu但沒有啟用,cpu執行單元發出的記憶體位址將直接傳到晶元引腳上,被記憶體晶元(以下稱為物理記憶體,以便與虛擬記憶體區分)接收,這稱為實體地址(physical address,以下簡稱pa)。
如果處理器啟用了mmu,cpu執行單元發出的記憶體位址將被mmu截獲,從cpu到mmu的位址稱為虛擬位址(virtual address,以下簡稱va),而mmu將這個位址翻譯成另乙個位址發到cpu晶元的外部位址引腳上,也就是將va對映成pa。
作業系統和mmu是這樣配合的:
1,作業系統在初始化或分配、釋放記憶體時會執行一些指令在物理記憶體中填寫頁表,然後用指令設定mmu,告訴mmu頁表在物理記憶體中的什麼位置。
2,設定好之後,cpu每次執行訪問記憶體的指令都會自動引發mmu做查表和位址轉換操作,位址轉換操作由硬體自動完成,不需要用指令控制mmu去做。
處理器會將最近常用的頁目錄和頁表項儲存在乙個叫做tlb(translation lookaside buffer)的緩衝區中。只有在tlb中找不到被請求頁的轉換資訊時,才會到記憶體中去尋找。這樣就大大加快了訪問頁目錄和頁表的時間。當頁目錄或頁表項被更改時,作業系統應該馬上使tlb中對應的條目無效,以便下次用到此條目時讓它獲得更新。當cr3被載入時,所有tlb都會自動無效,除非頁或頁表條目的g位被設定。
tlb表項格式還是比較複雜的:
OpenGl學習第三章
上個星期學習了下金字塔的繪製,然後這週有看了看正方體的繪製,通過依次繪製6個面來繪製正方體,整體 跟上次的金三角沒有區別,只是座標點,顏色,已經繪製的 有點區別,上 看看 這是座標 private static float cubevertexcoords new float new float n...
C Primer Plus 第三章 學習
oop的本質是設計並拓展自己的資料型別,即讓型別與資料匹配。c 內建的型別,分為兩組 基本型別,復合型別。基本型別 整數,浮點數 復合型別 陣列,字串,指標和結構。標識儲存的資料的方法 使用變數 3.1簡單變數 程式必須記錄三個基本屬性 1.資訊將儲存在 2.要儲存什麼值 3.儲存何種型別的資訊 宣...
C Primer學習(第三章)
初始化string物件的方式 string s1 string s2 s1 string s2 s1 string s3 value string s3 value string s4 n,c 使用getline讀取一整行 int main int b begin a int e end a 對陣列...