1. 程式人生 > >第四章 儲存器管理(二)

第四章 儲存器管理(二)

4.5 分頁儲存管理方式

1.連續分配方式:一個程序連續的裝進記憶體一個大小合適的區。->“碎片”->“緊湊”->增大開銷

2.如果允許一個程序直接分散裝入多個不相鄰分割槽中,則無需“緊湊”->產生儲存管理的離散分配方式。

3.離散分配三種方式:

  • 分頁儲存管理方式
  • 分段儲存管理方式
  • 段頁式儲存管理方式

4.離散分配記憶體:

  • 作業規定大小劃分成小份;記憶體也按同樣大小劃分成小份
  • 作業的任一小份可分散放入記憶體任意未使用的小份

5.分頁方式下,記憶體的使用率高,浪費少。但不是絕對沒有碎片(程序的最後一頁不總是能佔滿一個物理塊)。

6.分頁儲存管理的基本方法

  • 物理劃分塊的大小 = 邏輯劃分的頁的大小
  • 每個作業都有自己的頁表
  • 頁表的作用:每個作業頁號到物理塊號的地址對映

7.離散分配的過程;

  • 找空:空閒空間管理
  • 放入:裝入與地址對映(形成頁表)
  • 記錄:頁表地址記入PCB

8.如何執行一個作業?

  • 連續方式下:PCB記錄記憶體的首地址,根據地址順序取指令執行。
  • 離散方式下:頁表記錄作業的各頁分別佔用了記憶體哪些塊;PCB則記錄頁表在記憶體的地址——程序構造時伴隨著構造頁表,該核心資訊也要放在記憶體中供訪問。

9.地址對映(地址計算)的過程

若要執行某作業的一條指令,其相對地址是24B (設10B一頁,頁表如下表),其實體地址到底是多少呢?

  1. 分析其所在的頁和偏移得:2號頁(頁號從0開始) ,偏移4B處是該條指令
  2. 查頁表找頁面對應的塊(2號頁儲存在6號物理塊)
  3. 找物理塊6,向下偏移4B,找到要執行的指令。取出執行即可。
    以上就是求商(頁號)及取餘(偏移量)的過程
    在這裡插入圖片描述

10.一作業所有指令在使用者地址空間是順序編址。

11.例項

若作業頁表如下表所示,任意取一使用者程式指令,如第1011個指令,如何知道放在記憶體的哪裡?
重要引數:系統頁面大小=8B
頁內的所有指令編址用了3位
 111增一後進位,下一條第9條指令已經到了下一頁1000
1011中的1代表是1號頁,而011代表是該頁中偏移3B後的第4條,
根據頁表,1號頁存在7#物理塊上。
7#物理塊又在哪?
物理塊的編址也是8B大小決定的,地址結構類似
7#塊的第一條指令地址是111000。第7塊中向下偏移3就是要找的指令。其地址就是111011。
在這裡插入圖片描述

12.計算口訣

頁面大小決定偏移量(頁內地址)的位數 n;
作業大小->頁面數量
->頁表長度 a
->頁號的位數 m(或總位數-頁內位數)
記憶體容量決定塊數,塊數決定編址位數,即頁表項位數 b。
在這裡插入圖片描述
在這裡插入圖片描述

13.地址變換過程

分頁系統中,程序建立,放入記憶體,構建頁表,在PCB中記錄頁表存放在記憶體的首地址及頁表長度。

  1. 執行某程序A時,將A程序PCB中的頁表資訊寫入PTR中;
  2. 每執行一條指令時,根據分頁計算原理,得到指令頁號X和內部偏移量Y;
  3. CPU高速訪問PTR(頁表暫存器,記錄頁表在記憶體中的首地址和頁表長度,執行時快速定位頁表)找到頁表在哪裡:
  • 為防止錯誤檢索,增加預先的判斷:
  • 計算得到的頁號是否大於頁表長度(即頁表項數)
    e.g. 一個5頁的程序,頁面編號0-4,若地址計算出的頁號不在該範圍,一定產生了越界錯誤。
  1. 查頁表資料,得到X實際對應存放的物理塊,完成地址對映計算,最終在記憶體找到該指令。
    在這裡插入圖片描述

14.個人總結:

  • 頁面大小決定了在頁面中的偏移量,如果頁面填滿,向前進位時,則是頁號。
    e.g.頁面大小為8B
    10000:後三位為頁內相對於第0塊的偏移量;後三位的前幾位是頁號
  • 作業相對地址在分頁下不同位置的數有一定的意義結構。
  • 關鍵的計算是:根據系統頁面大小找到不同意義二進位制位的分界線。
  • 頁號+頁內地址(即頁內偏移)
    從地址中分析出頁號後,地址對映只需要把頁號改為對應物理塊號,偏移不變,即可找到記憶體中實際位置。
  • 頁面大小 = 頁表項大小 * 個數
    頁面大小:系統預定
    頁表項大小:記憶體大小決定塊的數量,塊的數量決定頁表項大小
    個數:頁號->物理塊號對映資訊個數(代表頁在外頁內的偏移量二進位制數位數)

15.記憶體的有效訪問時間EAT:程序發出邏輯地址的訪問請求,經過地址變換,到記憶體中找到對應的實際實體地址單元並取出資料,所需花費的總時間。

16.設訪問一次記憶體時間為t,則基本分頁機制下EAT=2t。

原因:CPU操作一條指令需訪問記憶體兩次:

  1. 訪問記憶體中的頁表(以計算指令所在的實際實體地址)
  2. 訪問指令記憶體地址

17.快表:在地址變換機構中增設一個具有並行查尋能力的特殊高速緩衝暫存器,又稱為“聯想暫存器”,或稱為“快表”,簡稱TLB,用以存放當前訪問的那些頁表項。

18.引入快表後的記憶體訪問時間:

快表的暫存器單元數量是有限的,不能裝下一個程序的所有頁表項。雖不能完全避免兩次訪問記憶體,但如果命中率a高還是能大幅度提高速度。
設一次查詢訪問快表時間為t’,則
EAT = a * t’ + (1 - a)(t’ + t) + t = 2t + t’ - t * a
在這裡插入圖片描述

19.兩級頁表

  • 將頁表分頁,並離散地將頁表的各個頁面分別存放在不同的物理塊中。
  • 為離散分配的頁表再建立一張頁表,稱為“外層頁表”,其每個表項記錄了頁表頁面所在的物理塊號。
  • 結構如下:
    在這裡插入圖片描述
    在這裡插入圖片描述

20.兩級頁表的地址變換機構

在這裡插入圖片描述

21.多級頁表:64位作業系統下,兩級仍然不足以解決頁表過大問題時,可按同樣道理繼續分頁下去形成多級頁表。

22.反置頁表

  • 每個程序一張頁表->一張OS 反置頁表 + 每程序一張外部頁表
  • 反置頁表(Inverted Page Tale):站在物理塊的角度,記錄佔用它的已調入記憶體的程序標識和頁號。系統中只需一張該表即可。一個64MB記憶體,若頁面大小4KB(64M/4K=2^16=16K個物理塊),反置頁表佔用64KB(16K*4B)
  • 程序外部頁表(External Page Table):每個程序一張,記錄程序不在記憶體中的那些頁面所在的外存物理位置。

4.6 分段儲存管理方式

1.分段儲存管理方式:作業分成若干段,段可離散存放,段內連續。

2.好處:

  • 方便程式設計
  • 資訊共享
  • 資訊保護
  • 動態增長
  • 動態連結

3.分段的基本原理:程式通過分段(segmentation)劃分為多個模組,每個段定義一組邏輯資訊。

編譯程式(基於原始碼)決定每個程式分幾段,每段多大。

4.段的特點

  • 每段有自己的名字(一般用段號做名),都從0編址,可分別編寫和編譯。裝入記憶體時,每段賦予各段一個段號。
  • 每段佔據一塊連續的記憶體。(即有離散的分段,又有連續的記憶體使用)
  • 各段大小不等。

5.分段的邏輯地址由段號(段名)+段內地址組成。

6.分段系統地址變換結構

分段儲存同樣有兩次記憶體訪問問題
解決方法:設定聯想暫存器,用於儲存最近常用的段表項。
在這裡插入圖片描述

7.分頁和分段的主要區別

  1. 需求:分頁是出於系統管理的需要,是一種資訊的物理劃分單位,分段是出於使用者應用的需要,是一種邏輯單位,通常包含一組意義相對完整的資訊。
    一條指令或一個運算元可能會跨越兩個頁的分界處,而不會跨越兩個段的分界處。
  2. 大小:頁大小是系統固定的,而段大小則通常不固定。分段沒有內碎片,但連續存放段產生外碎片,可以通過記憶體緊縮來消除。相對而言分頁空間利用率高。
  3. 邏輯地址:
  • 分頁是一維的,各個模組在連結時必須組織成同一個地址空間;
  • 分段是二維的,各個模組在連結時可以每個段組織成一個地址空間。
  1. 其他:通常段比頁大,因而段表比頁表短,可以縮短查詢時間,提高訪問速度。分段模式下,還可針對不同型別採取不同的保護;按段為單位來進行共享。

8.分段系統的突出優點:

  1. 易於實現共享
  • 在分段系統中,實現共享十分容易,只需在每個程序的段表中為共享程式設定一個段表項。
  • 對同樣的共享內容的管理上,很明顯分段的空間管理更簡單。分頁的圖涉及太多的頁面劃分和地址記錄的管理。
  1. 易於實現保護:
    程式碼的保護和其邏輯意義有關,分頁的機械式劃分不容易實現。

9.段頁式儲存管理方式的基本原理:

  • 將使用者程式分成若干段,併為每個段賦予一個段名。
  • 把每個段分成若干頁。
  • 地址結構包括段號、段內頁號和頁內地址三部分

10.段頁式系統中的地址變換機構:

在這裡插入圖片描述