基本分頁內存管理


為什么要引入基本分頁內存管理?

答:在連續存儲管理方式中,固定分區會產生內部碎片,動態分區會產生外部碎片。這兩種技術對內存的利用率都比較低。而分頁式存儲管理方式把主存空間划分為大小相等且固定的塊,塊相對較小,作為主存的基本單位,每個進程也以塊為基本單位划分,進程在執行時,以塊為單位逐個申請主存中的塊空間。

分頁式存儲管理方式從形式上來看,很像固定分區,但卻有着本質的不同點:

  1. 塊的大小相對於分區來說要小得多
  2. 進程也按照塊來划分,運行時按照塊來申請主存,盡管這樣也會產生內部碎片,但是相對於進程的大小來說是非常小的,每個進程平均只產生半個塊大小的內部碎片

進程頁表:為了便於在內存中找到進程的每個頁面對應的物理塊,系統為每個進程建立了一張頁表,記錄頁面在內存中對應的物理塊號,頁表一般存在內存中

頁表的第一部分存的是頁號,第二部分存的是物理內存中的塊號,頁表項的第二部分與邏輯地址的第二部分共同組成物理地址

物理塊(盤塊)的分配與回收

  • 位示圖

    利用位示圖(即二維數組Map[m][n])的一 位(0/1)來表示一個內存物理塊(或磁盤盤塊)的使用情況,使內存所有物理塊(或磁盤上所有盤塊)都與一個二進制位相對應

  • 物理塊(盤塊)的分配

    1. 根據需求計算確定所需物理塊數zKs
    2. 順序掃描位示圖,找出zKs個其值均為空閑“0”的 二進制位
    3. 將所找到的“0”值二進制位Map[i][j]的行/列號轉換為與之對應的物理塊(盤塊)號b: b = n x i + j
    4. 按物理塊(或盤塊)號分配物理塊(或盤塊) ,同 時修改位示圖和進程頁表
  • 物理塊(盤塊)的回收

    1. 將回收物理塊(或盤塊)的物理塊(或盤塊)號b 轉換為位示圖中的行號i和列號j:

      i = b DIV n;

      j = b MOD n;

    2. 按物理塊(或盤塊)號回收物理塊(或盤塊)

    3. 根據回收物理塊(或盤塊)對應二進制位的行/列號,並修改位示圖和進程頁表

分頁內存地址結構及地址變換

一個頁表項多長?

每個頁表項代表一個頁面的地址,一般很小。

以32位邏輯地址為例,字節為編碼單位,一個頁面的大小為4 KB,所以2的32次方 B 除以4 KB地址空間一共有 1 M 頁,則需要log 2 (1 M) = 20 位才能保證表示范圍能容納所有的頁面,又因為以字節為編碼單位,[20 / 8] = 3 B(字節),所以頁表項的大小應該大於等於3 B,取4 B為常見。

所以該頁的頁號為:頁表始址+頁號x頁表項長度

分頁內存地址變換機構

基本的地址變換機構

  1. 先將邏輯地址寄存器的頁號與頁表寄存器的頁表長度比較,看是否越界;
  2. 若不越界,則頁表始址+頁號x頁表項長度,得到頁號。由於進程頁表是像數組一樣的連續存儲的,通過像數組一樣地訪問下標(頁號為下標),查到物理塊號;
  3. 在物理地址寄存器中,將物理塊號與塊內地址(也是頁內地址)相加得到物理地址;

具有快表的地址變換機構

從上面我們可以看出:CPU要想獲取一個數據時,必須兩次訪問內存:

1、從內存中的頁表中,尋找對應的物理塊號,將物理塊號與頁內地址組合成物理地址。

2、根據組合成的物理地址,來獲取數據。

所以為了提高效率就引進了快表,什么是快表?

在地址變換機構中,增設一個具有並行查尋能力的特殊高速緩沖寄存器,稱為“聯想存儲器”或“快表”。 用來存放當前訪問的若干頁表項,加速地址變換過程,命中率達到90%以上 。

在引入快表的分頁存儲管理方式中,通過快表查詢,可以直接得到邏輯頁所對應的物理塊號,由此拼接形成實際物理地址,減少了一次內存訪問,縮短了進程訪問內存的有效時間。

但是,由於快表的容量限制,不可能將一個進程的整個頁表全部裝入快表,不一定每次在快表中都能找到要尋找得頁號,所以在快表中查找到所需表項存在着命中率的問題。在快表中查不到還是得往頁表中查找。但快表的命中率高,在總體上來說,還是減少了訪問內存的時間。

兩級頁表

為什么要引入兩級頁表?

由於引入了分頁管理,進程在執行時不需要將所有頁都調入內存頁框中,只要將保存有映射關系的頁表存入內存中即可

我們這里考慮一下頁表的大小,以32位邏輯空間,頁面大小4 KB ,頁表項大小4 B 為例,若要實現進程對全部邏輯地址空間的映射,則每個進程需要需要2的20次方個頁表項。2的20次方個頁表項 * 4 B ,為4 MB ,也就是說每個進程在頁表項這一塊就需要4 MB 的主存空間,顯然這是比較大的內存占用。即使不考慮對全部邏輯地址空間的映射,一個邏輯地址空間稍大的進程,其頁表項所占用的主存空間也是過大的。

所以,為了壓縮頁表,我們將頁表映射的思想進一步延伸,使用一個層次結構的頁表——兩級頁表

基本思想

對頁表按內存物理塊大小進行分頁,對它們進行 編號並離散地存放亍不同的物理塊中;同時為離 散分配的頁表分頁再建立一張頁表,稱之為外層 頁表,以記錄各頁表分頁對應的物理塊號 。

以32位邏輯地址空間、頁面大小為4KB的系統為例,若采用一級頁表結構,則每個進程頁表的頁 表項可達1M(2的20次方)個;而若采用兩級頁表結構,由於各頁表分頁包含4KB/4B=1K個頁表項,故需1K(2的10次方) 個頁表分頁即可(也就是說每一頁的頁表有1K個頁表項),因此外層頁表的外層頁號及內 層頁號均為10位。此時邏輯地址結構為:

其結構示意圖如下:

其地址變換結構如下:

多級頁表結構

對亍64位計算機,如規定頁面大小仍為4KB,則每 個進程的頁表項可達264/4K=252個,且外層頁表可 能有252/210 =242個頁表項;即使按每個頁表分頁 1M個頁表項來划分(假設頁表項大小4B),頁表 分頁將達到4MB,而外層頁表仍有252/220 =4G個 頁表項,要占用16GB的連續內存空間。

可見,無論 怎樣划分,其結果都是不能接受的。因此,必須采 用多級頁表,將16GB的外層頁表再進行分頁,並將 各個分頁離散的分配到不相鄰接的物理塊中,在利 用第二級的外層頁表來映射它們之間的關系。事實 上,對於64位的機器,用三級頁表結構都很難適應

反置頁表

  1. 一般頁表的表項是按頁號進行排序,而頁表項內容 包括物理塊號的;反置頁表則是為每一個物理塊設 置一個頁表項並將它們按物理塊的號數排序,頁表 項內容包括對應頁號及其隸屬進程的標識符
  2. 在利用反置頁表進行地址變換時,是用進程標識符 和頁號去檢索反置頁表。若找到與之匹配的表項, 則以該表項序號即該頁所在物理塊號與頁內地址構 成物理地址;否則地址出錯或產生調頁中斷請求
  3. 進程外部頁表的設立及反置頁表Hash檢索

其地址變換機構如下:


免責聲明!

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



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