1. 程式人生 > >第四章 儲存器管理 + 分頁 + 分段

第四章 儲存器管理 + 分頁 + 分段

  • 主存:儲存程序執行時的程式和資料
  • 暫存器:速度最快,價格昂貴容量不大,一般以字為單位,只要存放指令一次操作的資料就夠了 。
  • 快取記憶體:總之:速度快、存放部分記憶體資料、硬體自動處理
  • 磁碟快取:記憶體的一部分,將頻繁使用的一部分磁碟資料資訊預讀入在磁碟快取,減少磁碟讀寫時間
    在這裡插入圖片描述

動態分割槽分配:

  • 首次適應演算法FF
    - 優點:優先利用記憶體低址部分,保留了高地址部分的大空閒區;
    - 缺點:但低址部分不斷劃分,會產生較多小碎片;而且每次查詢從低址部分開始,會逐漸增加查詢開銷
  • 迴圈首次適應演算法
    - 優點:空閒分割槽分佈均勻,減少查詢開銷
    - 缺點:缺乏大的空閒分割槽
  • 最佳適應演算法
    - 缺點:每次找到最合適大小的分割槽割下的空閒區也總是最小,會產生許多難以利用的小空閒區(外碎片)
  • 最差適應演算法
  • 快速適應演算法

動態重定位分割槽分配:

使用者程式在記憶體中移動,將空閒空間緊湊起來提高空間利用率。但必然需要地址變化,增加“重定位”工作。
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

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

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

分頁、分段

記憶體劃分成多個小單元,每個單元K大小,稱(物理)塊


作業也按K單位大小劃分成片,稱為頁面
【 物理劃分塊的大小 = 邏輯劃分的頁的大小 】
頁面大小要適中:
- ⊙太大,(最後一頁)內碎片增大,類似連續分配的問題。
- ⊙太小的話,頁面碎片總空間雖然小,提高了利用率,但每個程序的頁面數量較多,頁表過長,反而又增加了空間使用

例:在這裡插入圖片描述

例題:
某系統採用頁式儲存管理方式,實體記憶體空間1M,頁面大小2K,若邏輯空間32頁,計算:
1)邏輯地址格式

頁號 頁內地址
15 - 11 10 - 0

2)不考慮許可權等問題,程序的頁表有多少項(即頁表記錄條數)?每項多少位?
- 32頁所以有32項 1M/2K=9位
3)物理空間減一半,頁表有什麼變化?
- 項數還是32,但物理塊數變了,塊號編號位數減1

在這裡插入圖片描述

· 地址變換機構

具體實現地址對映 —— 地址變換機構。
圍繞頁表進行工作,那麼頁表資料放在哪?

  • 暫存器。一個程序有n個頁,頁表就需要記錄n項資料,需要n個暫存器。不現實。
  • 記憶體。只設置一個頁表暫存器PTR(page table register)記錄頁表在記憶體中的首地址和頁表長度,執行時快速定位頁表。

地址變換的過程

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

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

訪問記憶體的有效時間

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

  • 設訪問一次記憶體時間為t,則基本分頁機制下EAT=2t,why?
    • CPU操作一條指令需訪問記憶體兩次:
      • 訪問記憶體中的頁表(以計算指令所在的實際實體地址)
      • 訪問指令記憶體地址

針對訪問速度問題 —— 引入塊表

塊表裡存放著:正在執行程序的頁表的資料項

快表的暫存器單元數量是有限的,不能裝下一個程序的所有頁表項。雖不能完全避免兩次訪問記憶體,但如果命中率a高還是能大幅度提高速度

  • 設一次查詢訪問快表時間為 t’ , 那:
  • EAT= at’ + (1-a)(t’+t) + t = 2t + t’ - ta
    在這裡插入圖片描述

針對大頁表佔用記憶體問題 —— 兩級、多級頁表、反置頁表

① 兩級頁表:

  • 將頁表分頁,並離散地將頁表的各個頁面分別存放在不同的物理塊中
  • 為離散分配的頁表再建立一張頁表,稱為“外層頁表”,其每個表項記錄了頁表頁面所在的物理塊號

格式:

外頁號 頁在外頁內的偏移 頁內地址(偏移量)

在這裡插入圖片描述

分段儲存管理

從提高記憶體利用率角度;

  • 固定分割槽 → 動態分割槽 → 分頁

從滿足並方便使用者(程式設計師)和使用上的要求角度:

  • 分段儲存管理:作業分成若干段,各段可離散放入記憶體,段內仍連續存放

段的特點

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

段的地址結構: 段號 + 段內地址
段表: 記錄每段實際存放的實體地址
在這裡插入圖片描述

》段表與地址變換機構

段是連續存放在記憶體中。段表中針對每個“段編號”記錄:“記憶體首地址”和“段長”
在這裡插入圖片描述
同樣有兩次記憶體訪問問題
解決方法:設定聯想暫存器,用於儲存最近常用的段表項

在這裡插入圖片描述

★★★ 分頁與分段的主要區別 ★★★

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

分段系統的突出優點: 易於實現共享、易於實現保護
分頁容易造成共享和非共享資料共處一頁,不方便設定許可權
可重入程式碼:(又稱為純程式碼,允許多個程序同時訪問的程式碼、不允許任何程序對它進行修改)
可共享的程式碼必須是可重入的

段頁式儲存管理

① 基本原理

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

② 地址變換過程

  • 三次訪問記憶體
  • 可藉助高速緩衝彌補不足
    在這裡插入圖片描述