操作系統篇-淺析分頁機制


|| 版權聲明:本文為博主原創文章,未經博主允許不得轉載。

  一、前言

  在我們進行程序開發的時候,一般情況下,是不需要管理內存的,也不需要操心內存夠不夠用,其實,這就是分頁機制給我們帶來的好處。它是實現虛擬存儲的關鍵,位於線性地址與物理地址之間,在使用這種內存分頁管理方法時,每個執行中的進程(任務)可以使用比實際內存容量大得多的連續地址空間。而且當系統內存實際上被分成很多凌亂的塊時,它可以建立一個大而連續的內存空間的映象,好讓程序不用操心和管理這些分散的內存塊。分頁機制增強了分段機制的性能。頁地址變換是建立在段變換基礎之上的。因為,段管理機制對於Intel處理器來說是最基本的,任何時候都無法關閉。所以即使啟用了頁管理功能,分段機制依然是起作用的,段部件也依然工作。

  二、頁表結構

  那么到底如何使用分頁機制呢?通過設置cr0的PG位可以開啟分頁機制。頁大小是4K,並且是4K對齊的。線性地址通過分頁機制轉換成物理地址的時候,可能某些線性地址是無效的。如果某個線性地址對應的頁不存在,那么訪問的時候將產生一個異常。

 

  兩級頁表結構

  內存分頁管理的基本原理是將整個主內存區域划分成 4096 字節為一頁的內存頁面。程序申請使用內存時,就以內存頁為單位進行分配。上面提到了線性地址經過分頁機制的轉換變成物理地址,但是沒有提到如何轉換。其實是通過兩個表,一個是頁目錄表PDE,也叫一級目錄,另一個是二級頁表PTE。進程的虛擬地址需要首先通過其局部段描述符變換為 CPU 整個線性地址空間中的地址, 然后再使用頁目錄表 PDE(一級頁表)和頁表 PTE(二級頁表)映射到實際物理地址頁上。頁表中,每項的大小是32b,其中20b用來存放頁面的物理地址,12b用於存放屬性信息。頁表含有1M個表項,每項4B。第一級表是頁目錄,存放在1頁4k頁面中,含有1K個表項。第二級是頁表,也是1K個表項。如下圖所示:

 

  三、結構

 

  

PDE結構

PTE結構

 

  從上圖中,可以看出PDE與PTE的結構其實是差不多的,其中屬性位包含如下信息:
  P——bit0,存在位標志,表示當前條目所指向的頁或頁表是否在物理內存中;
  R/W——bit1,讀寫位標志,指定一個頁或者一組頁的讀寫權限。R/W=0表示只讀,R/W=1可讀可寫;
  U/S——bit2,用戶/超級用戶標志,指定一個頁或者一組頁的特權級;
  PWT——bit3,用於控制對單個頁或者頁表的Write-back或者Write-through緩沖策略;

  PCD——bit4,用於控制對單個頁或者頁表的緩沖;  

  A——bit5,表示頁或者頁表是否被訪問;
  D——bit6,表示頁或者頁表是否被寫入;

  PS——bit7,決定頁的大小;

  G——bit8,指示全局頁;

  AVL——保留字段;

  保護模式是否開啟,取決於cr0的第0位PG。一個頁表或者頁目錄項大小是4B;而開啟分頁機制以后,存儲單元變成了頁(不存在說,一部分存儲開啟了分頁機制,另外一部分沒有開啟分頁機制(除非這部分不能通過操作系統訪問到))。所以,一個頁上含有1024個頁表項;一個頁目錄,對應1K*4K=4M的空間;一個程序有4G的線性地址空間,正好需要1K個頁目錄來存儲,它占用的頁表是4M。
  另外,頁表和頁目錄表都表項都是32b的,其中地址對應的是20b。處理器會將最近經常用到的頁目錄和頁表項保存在TLB中。而TLB是什么呢?可以簡單地理解,TLB就是頁表的Cache,其中存儲了當前最可能被訪問到的頁表項,其內容是部分頁表項的一個副本。只有在TLB無法完成地址翻譯任務時,才會到內存中查詢頁表,這樣就減少了頁表查詢導致的處理器性能下降。
  當頁目錄或者頁表項被修改的時候,對應TLB中的項目也就失效了;當cr3重新加載的時候,所有的TLB都失效了,除非頁或頁表條目的G位被設置。

  上圖是CR3的結構,CR3又叫PDBR,就是頁目錄寄存器。它的高20位將是頁目錄表首地址的高20位,頁目錄表的低12位會是零,也就是說,頁目錄表會是4KB對齊。類似地,PDE中的頁表基址以及PTE中的頁基址也是用高20位來表示4KB對齊的頁表和頁。

  四、總結

  回顧上面講到的內容不是很多,主要是這部分都是理解系統的基礎,包括下面幾點:

  1.分頁的作用,高效率地利用內存,可以運行比物理內存空間更大的程序;

  2.分頁機制的原理,利用兩級頁表將內存分割成4KB/頁的大小,強制內存對齊提高效率;

  3.頁表結構,PDE與PTE在內存中各個位的主要作用,表項與頁之間的對應關系。

 

  前面幾篇分享,都提到很多原理,廢話特別多,下篇開始我們將用代碼來逐漸說明,希望大家繼續關注!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM