第四章存儲器管理

程序的鏈接與裝入

程序的裝入

目的:是將代碼裝入內存準備執行

  1. 絕對裝入方式
  2. 可重定位裝入方式
  3. 動態運行時的裝入方式:增加一個重定位寄存器,通過硬件完成地址的修正。真實地址等於邏輯地址+重定位寄存器上的地址
    image-20200622175520753

程序的鏈接

目的:將目標模塊相對獨立的地址空間合併成一個地址空間。

  1. 靜態鏈接方式
    • 對相對地址進行修改
    • 變換外部調用符號
  2. 裝入時動態鏈接
  3. 運行時動態鏈接

連續存儲分配方式

目的:給每一個程序分配一片連續的存儲空間,容量爲程序運行時所需的最大空間。

指標:碎片率,越小越好。

單一連續分配

內存分爲系統區和用戶區

  • 用戶區一次只能裝入一個程序運行
  • 系統區裝入操作系統
image-20200622181950847

固定分區分配方式

將內存劃分成固定數目的區域,如圖所示

image-20200622182210610

爲了實現內存的管理,需要建立固定分區表(數組實現)

image-20200622182308481

程序的大小和分區大小不能完全匹配,所以需要分配大於等於程序大小的內存,分區中浪費的空間稱爲內碎片

動態分區分配(***)

操作系統不預設固定數目分區,按照程序內存需求爲其劃分,內存中分區數目動態變化。

image-20200622182722198

數據結構

  • image-20200622182822266
  • image-20200622182958683

分配算法:

  • 首次適應算法:空閒分區以地址遞增的順序排列,每次從鏈首開始順序查找,直到找到一個大小能滿足要求的空閒分區爲止。然後再按照程序的要求大小,從該空閒分區中劃分出一塊內存空間給請求者,餘下的空閒部分仍留在空閒鏈表中。特點是低端或高端地址空間被頻繁使用。
  • 循環首次適應算法:在首次適應算法的基礎上,每次查找時從上次找到空閒分區的下一個空閒分區開始查找。特點是空閒分區使用均勻,但是會缺乏大的空閒分區。
  • 最佳適應算法:能滿足要求、又是最小的空閒分區分配給作業,避免"大材小用”。特點:分區按照大小順序排列。
  • 最差適應算法:每次從空閒分區中選擇最大的空閒分區分配給程序,以便切割剩餘的空閒分區空間更大。

切割操作會產生一些空間過小,總是不會分配給程序,這些空間被稱作外碎片

### 可重定位分區分配

緊湊:通過移動程序,將外碎片合併一個大的空閒分區

基本分頁存儲管理方式

離散分配的基本單位是頁

頁表

解決了邏輯地址到物理地址的轉換的問題:

  • 將程序邏輯地址空間劃分成固定大小的頁面;
  • 內存劃分成等大小的頁框;
  • 頁表實現頁面到頁框的索引;
  • 頁表項個數由程序的邏輯地址空間決定,頁表項位數由頁框起始物理地址位數決定。

記錄了頁面和頁框號(每個頁框的起始地址)的對應關係,如下圖所示

image-20200622191317403

頁表存儲了頁框的起始物理地址,需要一個連續的存儲空間實現隨機訪問,對於邏輯地址相當於頁號+頁內偏移

image-20200622200719784

地址變換機構(***)

  • 先讓頁號與頁表基址相加得到頁框號
  • 再讓頁框號與頁內偏移相加得到物理地址
image-20200622200925736

基本分段存儲管理方式

  • 離散分配的基本單位是端
  • 採用二維邏輯地址結構,由段號加段內偏移構成

段表

image-20200622201627033

地址變換機構(***)

image-20200622201656943

分頁和分段的主要區別

  • 頁是信息的物理單位;段是信息的邏輯單位。
  • 頁大小固定;段大小不固定。
  • 分頁採用一維線性邏輯地址,分段採用二維邏輯地址。

虛擬存儲器(***)

概念:虛擬存儲器是指具有請求調入功能和置換功能,能從邏輯上對內存容量加以擴充的一種存儲器,其邏輯容量由內存容量和外存容量之和決定,運行速度接近於內存速度,每位成本接近外存。

虛擬存儲器實現方法的硬件支持

分頁請求系統

  1. 請求分頁的頁表機制
  2. 缺頁中斷機構
  3. 地址變換機構

分段請求系統

  1. 請求分段的端表機制
  2. 缺段中斷機構
  3. 地址變換機構

頁面置換算法(***)

頁面中斷:發生頁面的置換

最佳置換算法(理想化)

置換以後永不使用或者最長時間不使用的頁面

image-20200622203218539
  • 發生3次缺頁中斷和頁面中斷

先進先出頁面置換算法

淘汰最先進入的頁面,即選擇在內存中駐留時間最久的頁面予以淘汰。

image-20200622203901808

最近最久未使用置換算法(LRU)

選擇最近最久未使用的頁面予以淘汰,即當前使用次數最少的頁面。

實現方式

  • 利用棧保存當前使用的各個頁面的頁面號,每當進程訪問某頁面時,便將該頁面的頁面號從棧中彈出,並將它壓入棧頂。因此,棧底是最近最久未使用的頁面。
  • 使用寄存器,每一次訪問都會在寄存器加一,每次置換選擇寄存器中次數最少的頁面
image-20200622204543566

clock置換算法

簡單clock置換算法(最近未訪問頁面置換算法)
  • 將所有的頁面組成一個循環鏈表,併爲每個頁面添加一個訪問位A。
  • 當一個頁面被訪問時,將其A位設置爲1。
  • 置換過程是從pointer開始,若該頁面的A位爲1,將其設置爲0,並使pointer指向下一個頁面,直到找到A位爲0的頁面;若該頁面的A位爲0,則將其置換出內存,並用換入的頁面佔用換出頁面的頁框,使pointer指向下一個頁面。
  • 如果第一輪沒有找到,則執行第二輪,由於第一輪將所有頁面的A都設置爲0,則一定能在第二輪找到
image-20200623101130548
改進型clock置換算法

增加一個修改爲M,頁面狀態可以分爲四類

  • 1類(A=0,M=0) ,未訪問未修改;
  • 2類(A=0,M= 1),未訪問.已修改;
  • 3類(A=1,M=0),已訪問未修改;
  • 4類(A=1, M= 1) ,已訪問已修改;

置換過程

  1. 從pointer開始尋找1類頁面,直到找到1類頁面結束,或者掃描完一遍進入第II步。
  2. 從pointer開始尋找2類頁面, 直到找到2類頁面結束,或者掃描完一遍進入第I步。在本步每掃描完一個頁面,須將頁面的訪問位修改爲0
  3. 重複l和II。(一 定可以找到置換的頁。)
image-20200623101334666

最近最少未使用(LFU)

在最近時期內選擇使用次數最少的頁面作爲淘汰頁

練習題目

image-20200622181520299

image-20200622190511957

image-20200622190706448

image-20200622190752961

image-20200622202031148

image-20200623101755205

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章