1. 程式人生 > >第五章:記憶體管理

第五章:記憶體管理

計算機系統中的儲存器可以分成兩類:記憶體儲器(記憶體)和外儲存器(外存)
處理器可以直接直接訪問記憶體,但不能直接訪問外存
CPU要通過啟動相應的輸入/輸出裝置後才能使外存與記憶體交換資訊

5.1 基本概念

1.1 儲存體系

  • 儲存裝置速度明顯慢於同級別CPU速度
  • 任何儲存裝置都無法在速度與容量兩個方面同時滿足使用者的需

在這裡插入圖片描述

  • 少量的、非常快速、昂貴、內容易變的快取記憶體器(Cache),通常是幾百KB的數量級。

  • 若干兆位元組、中等速度、中等價格、內容易變的記憶體(RAM),通常是千MB的數量級。

  • 低速、價廉、內容不易變的外存(磁碟),通常是百到千GB的數量

1.2 儲存管理的任務

任何程式和資料以及各種控制用的資料結構都必須佔用一定的儲存空間,因此儲存管理直接影響系統性能。

記憶體空間:是由儲存單元(位元組或字)組成的一維連續的地址空間。
記憶體空間的作用:用來存放當前正在執行程式的程式碼及資料,是程式中指令本身地址所指的程式計數器所指的儲存空間。
記憶體空間一般分為兩部分:
  1. 系統區:用以存放作業系統常駐記憶體部分,使用者不能佔用這部分空間
  2. 使用者區:分配給使用者使用,用於裝入並存放使用者程式和資料,這部分的資訊隨時都在發生變化。

儲存管理實質上就是管理供使用者使用的那部分空間

記憶體管理問題主要包括:
  1. 記憶體管理方法

  2. 記憶體的分配和釋放演算法

  3. 虛擬儲存器的管理

  4. 控制記憶體和外存之間的資料流動方法

  5. 地址變換技術和記憶體資料保護與共享技術

單道、單使用者系統中,至少也要把它分成兩個區域:
  1. 在一個區域內放系統軟體,如作業系統本身

  2. 在一個區域內放使用者程式,如應用系統本身

多道、多使用者系統中,需要將記憶體劃分成更多的區域,以便支援多道程式。要求:
  • 充分利用記憶體,為多道程式併發執行提供儲存基礎

  • 儘可能方便使用者使用

    1. 作業系統自動裝入使用者程式
    2. 使用者程式中不必考慮硬體細節
  • 系統能夠解決程式空間比實際記憶體空間大的問題

  • 程式的長度在執行時可以動態伸縮

  • 記憶體存取速度快

  • 儲存保護與安全

  • 共享與通訊

  • 及時瞭解有關資源的使用狀況

  • 實現的效能和代價合理

作業系統中儲存管理的主要任務:

一.記憶體的分配和回收
記憶體的分配和回收:一個有效的儲存分配機制,應對使用者提出的需求給予響應,為之分配相應的儲存空間;在使用者程式不再需要它時及時回收,以供其它使用者使用。為此,應具有以下功能:
  • 記住每個儲存區域的狀態。

  • 實施分配

  • 回收

為實現上述功能,必須引入分配表格,通稱為記憶體分配表,包括:

  • 位示圖表示法:用一位(Bit)表示一個空閒頁面(0空閒,1佔用)

  • 空閒頁面表:包括首頁面號和空閒頁面個數,連續若干頁面作為一組登記在表中

  • 空閒塊表:空閒塊首址和空閒塊長度,沒有記錄的區域為程序所佔用

記憶體分配有兩種方式:

  • 靜態分配:
    程式要求的記憶體空間是在目標模組連線裝入記憶體時確定並分配的,並且在程式執行過程中不允許再申請或在記憶體中“搬家”,即分配工作是在程式執行前一次性完成

  • 動態分配:
    程式要求的基本記憶體空間是在目標模組裝入時確定並分配的。但是在程式執行過程中,允許申請附加的記憶體空間或在記憶體中“搬家”,即分配工作可以在程式執行前及執行過程逐步完成

動態儲存分配具有較大靈活性:

  • 不需要一個程式的全部資訊進入記憶體後執行,而是在程式執行中需要時系統自動調入記憶體。

  • 程式當前暫不使用的資訊可以不進入記憶體,提高記憶體利用率

二.儲存共享

  • 概念:
    指兩個或多個程序共用記憶體中的相同區域,這樣不僅能使多道程式動態地共享記憶體,提高記憶體利用率,而且還能共享記憶體中某個區域的資訊。

  • 共享的內容包括:
    程式碼共享和資料共享,特別是程式碼共享要求程式碼必須是純程式碼。

  • 儲存共享的一個目的是通過程式碼共享節省記憶體空間,提高記憶體利用率;另一個目的是通過資料共享實現程序通訊。

三.儲存保護

  • 儲存保護的目的:
    為多個程式共享記憶體提供保障,使在記憶體中的各程式只能訪問其自己的區域,避免各程式間相互干擾。儲存保護通常需要有硬體支援,並由軟體配合實現。

  • 儲存保護的內容包括:
    保護系統程式區不被使用者有意或無意的侵犯;
    不允許使用者程式讀寫不屬於自己地址空間的資料,如系統區地址空間、其它使用者程式的地址空間。

1)地址越界保護:每個程序都具有相對獨立的程序空間,如果程序在執行時所產生的地址超出其地址空間,則發生地址越界。

  • 地址越界可能侵犯其它程序的空間,影響其它程序的正常執行;

  • 地址越界也可能侵犯作業系統系統空間,導致系統混亂。

處理方法:對程序所產生的地址必須加以檢查,發生越界時產生中斷,由作業系統進行相應處理。

2)許可權保護:對於允許多個程序共享的公共區域,每個程序都有自己的訪問許可權。

  • 對屬於自己區域的資訊,可讀可寫

  • 對公共區域中允許共享的資訊或獲得授權可使用的資訊,可讀不可修

  • 對未獲得授權使用的資訊,不可讀不可寫

發生地址越界或非法操作時,由硬體產生中斷,進入作業系統處理

四.“擴充”記憶體容量

  • 在硬體支援下實現,軟體、硬體相互協作,將記憶體和外存結合起來統一使用。
  • 藉助虛擬儲存技術或其它交換技術,達到在邏輯上擴充記憶體容量,即為使用者提供比記憶體物理空間大得多的地址空間,使使用者感覺他的程式是在這樣一個大的儲存器上執行。

1.3 地址轉換

儲存器以位元組(每個位元組為8個二進位制位)為編排單位,每個位元組都有一個地址與其對應。
  • 絕對地址 :
    假定儲存器的容量為n位元組,其地址編號順序為0,1,2,…,n-1。這些地址稱為“絕對地址”,與絕對地址對應的記憶體空間為“實體地址空間”。

  • 邏輯地址 :
    使用者程式中使用地地址稱為“邏輯地址”,對應 “邏輯地址空間”

地址重定位

     當用戶程式進入計算機系統請求執行時,儲存管理要為它分配合適的記憶體空間,
 這個分配到的記憶體空間可能是從某單元開始的一組連續的地址空間。
     該地址空間的起始 址是不固定的,而且邏輯地址與分到的記憶體空間的絕對地址經常不一致!。
 因此,每個邏輯地址在記憶體中也沒有一個固定的絕對地址與之對應。
     為了保證程式的正確執行,必須根據分配給程式的記憶體區域對程式中指令和資料的存放
 地址進行重定位,即要把邏輯地址轉換成絕對地址。

把邏輯地址轉換成絕對地址的工作稱為“地址重定位”或“地址轉換”,又稱“地址對映”。
  

1.地址對映過程通常是由硬體完成的
2.地址對映是將虛擬地址轉成實體地址
3.頁表項的一些內容是硬體確定的
4.根據頁表項的有效位確定所需訪問的頁面是否已經在記憶體
5.如果沒有采用分頁管理或者直接訪問了快速定位快,則不用訪問頁目錄和頁表

重定位的方式有“靜態重定位”和“動態重定位”兩種:

1) 靜態重定位

由於地址轉換工作是在程式開始執行前集中完成的,所以在程式執行過程中就無需再進行地址轉換工作,這種地址轉換方式稱為“靜態重定位”。
在裝入一個程式時,把程式中指令地址和資料地址全部轉換成絕對地址
在這裡插入圖片描述

2) 動態重定位

在裝入程式時,不進行地址轉換,而是直接把程式裝入到分配的記憶體區域中。在程式執行過程中,每當執行一條指令時都由硬體的地址轉換機構將指令中的邏輯地址轉換成絕對地址。這種方式的地址轉換是在程式執行時動態完成的,故稱為“動態重定位”。
動態重定位由軟體和硬體相互配合來實現。硬體要有一個地址轉換機構,該機構可由一個基址暫存器和一個地址轉換線路組成。

在這裡插入圖片描述

    儲存管理為程式分配記憶體區域後,裝入程式把程式直接裝到所分配的區域中,
並把該記憶體區域的起始地址存入相應程式程序的程序控制塊中。
    當程式程序被排程佔用處理器時,隨同現場資訊的恢復,程式所佔的記憶體
區域的起始地址也被存放到“基址暫存器”中。
    程式執行時,處理器每執行一條指令都會把指令中的邏輯地址與基址暫存器
中的值相加得到絕對地址,然後按絕對地址訪問記憶體

5.2 分割槽儲存管理方案

基本思想 : 把記憶體劃分成若干個連續區域、稱為分割槽,每個分割槽裝入一個執行程式。

分割槽的方式:固定分割槽、可變分割槽

5.2.1 固定分割槽

基本思想

固定分割槽是指系統先把記憶體劃分若干個大小固定的分割槽、一旦劃分好,在系統執行期間便不再重新劃分。
程式執行時必須提供對記憶體資源的最大申請量。

記憶體分配表

用於固定分割槽管理的記憶體分配表是一張分割槽說明表,按順序每個分割槽在分割槽說明表中對應一個表目。
表目內容包括:分割槽序號、分割槽大小、分割槽起始地址以及使用狀態(空閒或佔用)

5.2.2 可變分割槽

1.基本思想

是指系統不預先劃分固定分割槽,而是在裝入程式時劃分記憶體分割槽,使為程式分配的分割槽的大小正好等於該程式的需求量,且分割槽的個數是可變的。

在這裡插入圖片描述

2.移動技術

解決碎片問題的辦法是在適當時刻進行碎片整理,通過移動記憶體中的程式,把所有空閒碎片合併成一個連續的大空閒區且放在記憶體的一端,而把所有程式佔用區放在記憶體的另一端,這一技術叫“移動技術”或“緊縮技術”

採用移動技術需要注意一下幾點:

  • 移 動技術會增加系統的開銷。增大系統執行時間。

  • 移動是有條件的。不是任何在記憶體中的作業都能隨時移動。
    採用移動技術時儘可能減少需要移動的作業數和資訊量

在這裡插入圖片描述

3.可變分割槽的實現

採用可變分割槽方式管理時,要有硬體的地址轉換機構作支援。
硬體設定兩個專用的控制暫存器:基址暫存器和限長暫存器

基址暫存器用來存放程式所佔分割槽的起始地址
限長暫存器用來存放程式所佔分割槽的長度

當程式被裝到所分配的分割槽後,把分割槽的起始地址和長度作為現場資訊存入該作業程序的程序控制塊中。
在這裡插入圖片描述

    為了實現可變分割槽的管理,必須設定某種資料結構用以記錄記憶體分配的情況,
確定某種分配策略並且實施記憶體的分配與回收。記憶體分配表由兩張表格組成:
    一個是已分配區表,記錄已裝入的程式在記憶體中佔用分割槽的起始地址和長度,
用標示位指出佔用分割槽的程式名。
    另一個是空閒區表,記錄記憶體中可供分配的空閒區的起始地址和長度,
用標誌位指出該分割槽是未分配的空閒區。

在這裡插入圖片描述

4.空閒分割槽的分配策略

1)最先適應演算法

又稱順序分配演算法,首次適應演算法。
傾向於優先使用地地址空閒區
當接到記憶體申請時,順序查詢分割槽說明表,找到第一個滿足申請長度的空閒區,將其分割並分配。此演算法簡單,可以快速作出分配決定!
在這裡插入圖片描述

2)最優適應演算法

當接到記憶體申請時,查詢分割槽說明表,找到第一個能滿足申請長度的最小空閒區,
將其分割並分配。
空閒區按照空閒區大小遞增排列
此演算法最節約空間,因為它儘量不分割大的空閒區;其缺點是可能
會形成很多很小的空閒區域,稱作碎片。

3)最壞適應演算法:

當接到記憶體申請時,查詢分割槽說明表,找到能滿足申請要求的最大的空閒區。

基本思想:在大空閒區中裝入資訊後,分割剩下的空閒區相對也很大,還能用於裝入其它程式。

優點:可以避免形成碎片,而缺點是分割了大的空閒區後,
如果再遇到較大的程式申請記憶體時,無法滿足要求的可能性較大。

4)下次適應演算法:

當接到記憶體申請時,查詢分割槽說明表,從上一次分配的位置開始掃描記憶體,
選擇下一個大小足夠的可用塊。

5.分割槽的回收

當用戶程式執行結束後,系統要回收已使用完畢的分割槽,將其記錄在空閒區表中。

在收回空間時,應首先檢查是否有與回收區相鄰的空閒區,
即檢查相鄰的空閒區表中標誌為“未分配”的欄目,以確定是否有相鄰空閒區,
若有,則應合併一個空閒區登記。

  • 如果空閒區表中第i個登記欄中“起始地址+長度”正好等於S,則表明回收區有一個上鄰空閒區。這時要修改第i欄登記項內容:起始地址不變,長度為原長度加上L,即:長度=原長度+L,於是回收區便與上鄰空閒區合併了。
    在這裡插入圖片描述
  • 回收分割槽的下鄰分割槽是空閒的,需要將兩個空閒區合併成一個更大的空閒區,然後修改空閒區表。
  • 回收分割槽的上鄰分割槽和下鄰分割槽都是空閒的,需要將三個空閒區合併成一個更大的空閒區,然後修改空閒區表。
  • 回收分割槽的上鄰分割槽和下鄰分割槽都不是空閒的,則直接將空閒分割槽記錄在空閒區表中。
6.分割槽的保護

1)系統設定“界限暫存器”:界限暫存器可以是上、下界暫存器或基址、限長暫存器。
在這裡插入圖片描述

2)保護鍵方法:即為每個分割槽分配一個保護鍵,相當於一把鎖。同時為每個程序分配一個相應的保護鍵,相當於一把鑰匙,存放在程式狀態字中。每當訪問記憶體時,都要檢查鑰匙和鎖是否匹配,若不匹配,將發出保護性中斷。

5.2.3 分割槽管理方案的優缺點

優點
  • 通過分割槽管理,記憶體真正成為了共享資源,有效利用了處理機和I/O裝置,從而提高了系統的吞吐量和縮短了週轉時間。
  • 在記憶體利用率方面,可變分割槽的記憶體利用率比固定分割槽高。
缺點
  • 記憶體使用仍不充分,存在較為嚴重的碎片問題(因要移動碎片浪費了處理機時間),且不能提供虛擬記憶體,不能擴充,受實體記憶體不足限制

5.3 覆蓋技術與交換技術

5.3.1 覆蓋技術

  • 覆蓋技術:
    指一個程式的若干程式段或幾個程式的某些部分共享某一個儲存空間。

  • 覆蓋技術的實現
    把程式劃分為若干功能上的相對獨立的程式段,按照其自身的邏輯結構使那些不會同時執行的程式段共享同一塊記憶體區域。
    未執行的程式段先儲存在磁碟上,當有關程式段的前一部分執行結束後,把後續程式段調入記憶體,覆蓋前面的程式段。

  • 覆蓋技術是使用者程式自己新增的控制。
    要求程式設計師提供一個清楚的覆蓋結構,把一個程式劃分成不同的程式段,並規定好它們的執行和覆蓋順序。
    作業系統則根據程式設計師提供的覆蓋結構,完成程式段間的覆蓋。
    覆蓋可以從使用者級徹底解決記憶體裝不下程式的問題

  • 事例
    在這裡插入圖片描述
    該程式正文段所需記憶體空間:A(20KB)+B(50KB)+F(30KB)+C(30KB)+D(20KB)+E(40KB)=190KB
    在這裡插入圖片描述
    採用覆蓋技術後只需要A(20KB)+B(50KB)+E(40KB)=110KB記憶體空間即可!

  • 覆蓋技術主要用於系統程式的記憶體管理上
    例如MS-DOS把系統分成兩部分,一部分是作業系統中要經常用到的基本部分,
    它們常駐記憶體且佔用固定區域,另一部分是不太經常使用的部分,它們存放在磁碟上,
    當呼叫它們時才被調入記憶體覆蓋區。

5.3.2 交換技術

也稱對換技術。在分時系統中,使用者的程序比記憶體能容納的數量要多,這就需要在磁碟上儲存那些記憶體放不下的程序。有需要時再裝入記憶體。

  • 程序從記憶體移到磁碟並再移回記憶體稱為交換。
  • 交換技術是程序在記憶體與外存之間的動態排程,是由作業系統控制的。
  • 程序交換是指將暫時不用的程序程式碼,資料和部分程序控制塊交換至磁碟
後備儲存區(稱為盤交換區swapping Area)

目的是儘可能達到“足夠快地交換程序,以使當CPU排程程式想重新排程CPU時,
總有程序在記憶體中牌處於就緒(準備執行)狀態“的理想狀態,提高記憶體利用率,多用於分時系統中。

交換技術原理:
  • 換出程序的選擇:即系統需要將記憶體中的程序換出時,選擇哪個程序
    根據時間片輪轉法或基於優先數的排程演算法選擇要換出的程序

  • 交換時機的確定:
    在記憶體空間不夠或有不夠的危險時,換出部分程序到外存,以釋放記憶體

  • 交換空間的分配:
    有些系統中程序在記憶體中時,不分配磁碟空間,被換出時,必須分配磁碟交換空間。有些系統程序一旦建立,就分配磁碟上的交換空間。無論何時程序被換出,都被換到所分配空間,而不是每次換到不同空間

  • 換入程序換回記憶體時位置的確定
    使用絕對地址則為原來位置,相對地址則可重定位(可不在原位置)

交換技術的缺點:

因交換需要花費大量CPU時間,將影響對使用者的響應時間,因此,減少交換的資訊量是交換技術的關鍵問題。
合理的做法是:在外存中保留每個程式的交換副本,換出時僅將執行時修改過的部分複製到外存。

覆蓋技術和交換技術的發展導致了虛擬儲存技術的出現!
在這裡插入圖片描述

5.4 頁式儲存管理方案

優點

  • 1.由於它不要求作業或程序的程式段和資料在記憶體中連續存放,從而有效地解決了碎片問題.
  • 2.動態頁式管理提供了記憶體和外存統一管理的虛存實現方式,使使用者可以利用的儲存空間大大增加

5.4.1 基本思想

把一個邏輯地址連續的程式分散存放在幾個不連續的記憶體區域中,並且保證程式的正確執行,則既可充分利用記憶體空間,又可減少移動所花費的開銷。

該技術廣泛用於微機系統中,支援頁式儲存管理的硬體部件稱為“儲存管理部件”(Memory Management Unit,MMU)

儲存管理部件首先把記憶體分成大小相等的許多區(塊:是進行主存空間分配的物理單位)同時,要求程式中的邏輯地址也進行分頁,頁大小與塊大小一樣

頁式儲存器提供程式設計使用的邏輯地址由兩部分組成:

頁號和頁內地址
頁式儲存管理方案中,系統將程式的邏輯空間按照同樣大小也劃分成若干頁面也稱頁。
一個程序當前經常使用的頁面集合叫做工作集,高效的交換策略能夠確保所有程序的工作集儲存在實體記憶體中。作業系統為每個程序提供與工作集大小相等的物理頁面數.採用工作集模型可以解決顛簸問題
程式的各個邏輯頁面從0開始依次編號,稱作邏輯頁號或相對頁號。
每個頁面內從0開始編址,稱為頁內地址。
頁號是地址的高位部分
頁內地址是地址的地位部分

頁式儲存的地址計算:

假定地址用m個二進位制表示,其中頁內地址部分佔用n個二進位制位,那麼每一個塊的長度就是2n,也就是每一頁有2n。這時頁號部分佔用了m-n位,所以最大程式可允許有2(m-n)個頁面。

例:邏輯地址從0(頁號和頁內地址)開始,當編址2n-1,第0頁頁內地址各位均為1,即佔滿了一個頁面。下一個地址是2n,這時頁號為1,而頁內地址恢復到0,表示進入了第1頁。再繼續順序編址,此時頁內地址為0~(2n-1)屬於第1頁,依次類推,自然分頁!

5.4.2 儲存空間的分配與回收

頁式儲存管理分配記憶體空間以物理頁面為單位

為了提高記憶體利用率並減少記憶體碎片,頁面的劃分(與頁表數量相關,可以找到平衡點)

哪些塊已經分配

哪些塊尚未分配

當前剩餘空閒塊

簡單的記憶體分配表可以用一張“位示圖”構成

假設記憶體的可分配區域被分成256塊,則可用字長為32位的8個字作為“位示圖”。位示圖每一位與記憶體塊對應,每一位的值可以是0或1,0為空閒,1為佔用。

在這裡插入圖片描述

在進行記憶體分配時,先檢視空閒塊數是否滿足程式要求。

如不能滿足:則不分配,程式不能裝入記憶體

如能滿足:則根據需求從位示圖中找出一些為0的位,把這些位置置1,並從空閒塊數中減去本次分配的塊數,然後按照找到的位計算出對應的塊號。

當找到一個為0的位,根據它所在的字號、位號,按這下公式計算對應塊號:

塊號=字號*字長+位號

如果有一個書架上有10行和10列格子(每行和每列都有0-9的編號),有100本書要存放在裡面,那麼我們使用一個行的編號+一個列的編號就能確定某一本書的位置。如果已知這本書的編號87,那麼我們首先鎖定第8行,然後找到第7列就能準確的找到這本書了
在這裡插入圖片描述

分配原則:找0置1。從空閒塊中減去分配塊數,按找到的位計算對應塊號

回收原則:找1歸0。將佔用標誌位修改成0,再把回收的塊數加入到空閒塊中

5.4.3 地址轉換與快表

為每個裝入記憶體的程序提供一張頁表,該頁表所在記憶體的起始地址和長度作為現場資訊存放在該程序的程序控制塊中。

頁表是一種特殊的資料結構,放在系統空間的頁表區,存放邏輯頁與物理頁幀的對應關係。 每一個程序都擁有一個自己的頁表,PCB表中有指標指向頁表
  

頁框:將實體記憶體(記憶體空間)分為固定大小的塊,稱為物理塊/幀/頁框;


頁: 將邏輯記憶體(使用者程式的地址空間)分為固定大小的塊,稱為頁/頁面;


頁和頁框的大小相同(這樣可將使用者程式的任一頁放入物理塊中,實現了離散分配;


頁表:各個頁離散地儲存在記憶體的任一物理塊中,為了能在記憶體中找到每個頁面所對應的物理塊,系統為每個程序建立了一張頁面映像表,簡稱頁表(一般存放在記憶體中);

頁表項:頁表是由頁表項組成的,每一行就是一個頁表項(在程序地址空間內的所有頁,依次在頁表中有一個頁表項)。
在這裡插入圖片描述

頁表項 = 邏輯地址空間大小 / 頁面大小
頁表總量 = 頁表項 * 物理頁號大小
頁表數 = 頁表總量 / 頁表大小

1、頁式儲存管理的地址轉換

系統要提供一對硬體的頁表控制暫存器,即頁表起始地址暫存器和頁表長度暫存器,另外還需要高速緩衝儲存器的支援。

  • 頁表起始地址暫存器:用於儲存正在執行程序的頁表在記憶體的首地址。

當程序被排程程式選中投入執行時,系統將其頁表首地址從程序控制塊中取出送入該暫存器

  • 頁表長度暫存器:用於儲存正在執行程序的頁表的長度。

當程序被選中(系統)執行時,系統將它從程序控制塊中取出送入該暫存器

頁表指出該程式邏輯地址中的頁號與所佔用的記憶體塊號間對應關係。

頁表長度是由程式擁有的頁面數而定,幫每個程式的頁表長度可能是不同的。

實體地址的計算公式為:

實體地址=記憶體塊號*塊長+頁內地址

33題
2、頁表

1)多級頁表:

例:使用者地址空間為2GB,頁面大小為4KB,則一個程序最多可以有 ? 頁

1GB=1024MB 1MB=1024KB

2GB=2048MB 2048MB=2048*1024=2097152KB

2097152KB/4=52 4288=219

存放頁表的頁面為頁表頁,一般作業系統採用二級頁表,即由頁表頁和頁目錄一起構成程序頁表

第一級表示頁目錄,儲存頁表頁地址

第二級表示頁表頁,儲存物理頁面號(即記憶體塊號)

2)雜湊頁表(叢集頁表):

當地址空間>32位時,使用以頁號為雜湊值的雜湊頁表,包含三個欄位

(a)虛擬頁號,(b)所對映的頁框號,(c)指向連結串列中下一個元素的指標

3)反置頁表:

原:每個程序都有對應頁表,程序中每個頁面都有一個表頁

現:每個物理頁框對應一個表項,每個表項包含與該頁框對應的虛擬頁面地址以及擁有該頁面程序的資訊。

3、快表

頁式儲存管理中的頁表是存放在記憶體中。當要按給定的邏輯地址進行讀寫時,必須訪問兩次記憶體。

第一次按頁號讀出頁表中對應的塊號

第二次按計算出來的絕對地址進行讀寫

兩次訪問記憶體延長了指令的執行週期,降低了執行速度
快表命中率 35題

解決方法:

1)在地址對映機制中增加一組高速暫存器儲存頁表,開銷大經濟不可行

2)在地址對映機制中增加一個小容量的聯想暫存器(相聯暫存器),由高速緩衝儲存器組成,這個高速緩衝儲存器稱為“快表”。記錄一部分頁號與記憶體塊號的對應關係。

解決方法:

快表只存放當前程序最活躍的少數幾頁,內容動態更新。

更新原理:查詢快表和查詢記憶體頁表是並行進行的,一旦發現快表中有與所查頁號一致的邏輯頁號就停止查詢記憶體頁表,而直接利用快頁中的邏輯頁號。

使用快表可以加快儲存速度,降低訪問時間。

5.5 虛擬儲存技術與虛擬頁式儲存管理方案的實現

5.1 虛擬儲存技術

基本思想:

利用大容量外存來擴充記憶體,產生一個比有限的實際記憶體空間大得多的、邏輯的虛擬記憶體空間,簡稱虛存。作業系統當前使用的部分保留在記憶體,把其他部分儲存在磁碟上,並在需要時在記憶體和磁碟間動態交換,支援多道程式設計技術。

虛擬儲存空間主要跟計算機地址位寬有關
在這裡插入圖片描述

工作原理:

當程序開始執行時,先將一部分程式裝入記憶體,另一部分暫時留在外存;
當要執行的指令不在記憶體時,由系統自動完成將它們從外存調入記憶體的工作;
當沒有足夠的記憶體空間時,系統自動選擇部分記憶體空間,
將原內容交換到磁碟上,並釋放這些記憶體空間供其它程序使用。

與交換技術區別:
  • 交換技術:以程序為單位,當程序所需記憶體大於系統記憶體則無法執行-
  • 虛擬儲存:以頁或段為單位,當程序所需記憶體大於系統記憶體,仍然可正常執行,因為一部分可以被換出在外存上。

5.2 虛擬頁式儲存管理

5.2.1 基本思想

在程序開始執行時逐步載入,動態轉換。

在使用虛擬頁式儲存管理時需要在頁表中增加以下表項:
  • 頁號–頁面的編號

  • 有效位–又稱駐留位、存在位或中斷位,表示該頁是在記憶體還是在外存

  • 頁框號–頁面在記憶體中時所對應的記憶體塊號

  • 保護位–是否能讀/寫/執行

  • 禁止快取位–採用記憶體對映I/O的機器中需要的位

在這裡插入圖片描述

當某個程序發生缺頁中斷,且選中一個頁面進行淘汰時,只需要將該頁面移除記憶體,即修改該頁面的有效位又稱駐留位.

當建立一個新的程序並排程執行時,該程序需裝入一個頁面:記憶體塊號指示調入頁面對應的物理塊號,駐留位指示該頁是否調入記憶體,供程式訪問時參考.訪問位記錄該頁一段時間內被訪問次數,提供給置換演算法在選擇換出頁面時參考.

當某程序的一個頁面內容被修改後,修改位 保護位

5.2.2 缺頁中斷

實現虛擬頁式儲存管理的硬體基礎是缺頁中斷機制
若在頁表中發現所要訪問的頁面不在記憶體,則產生缺頁中斷。
在這裡插入圖片描述

5.2.3 頁面排程策略

虛擬儲存器系統通常定義三種策略來規定如何(或何時)進行頁面排程:

  • 調入策略:何時將一個頁由外存調入記憶體中

    • 請求調頁:只調入發生缺頁時所需頁面。易產生較多缺頁中斷,造成對外存I/O次數多,時間開銷過大,易產生抖動現象。

    • 預調頁:在發生缺頁需要調入某頁時,一次調入該頁以及相鄰的幾個頁,提高調頁I/O效率,減少I/O次數。

第5章 記憶體管理

  • 置頁策略:當執行緒產生缺頁中斷時,記憶體管理器還必須確定將調入的虛擬頁放在實體記憶體的何處。用於確定最佳位置的一組規則稱為“置頁策略”

  • 置換策略:如果缺頁中斷髮生時實體記憶體已滿,“置換策略”被用於確定哪個虛頁面必須從記憶體中移出,為新的頁面騰出空位。

    • 固定分配區域性置換:可基於程序的型別,為每程序分配固定的頁數的記憶體空間,在整個執行期間都不會改變。採用該策略時,如果程序在執行中出現缺頁,則只能從該程序的N個頁面選出一個換出,然後再調入一頁,以保證分配給該程序的記憶體空間不變。

    • 可變分配全域性置換:採用這種策略時,先為系統中的每一程序分配一定數量的物理塊,作業系統本身也保持一個空閒物理塊佇列。當某程序發生缺頁時,由系統的空閒物理塊佇列中取出一物理塊分配給該程序。但當空閒物理塊佇列中的物理塊用完時,作業系統才從記憶體中選擇一塊調出。但當空閒物理塊佇列中的物理塊用完時,作業系統才從記憶體中選擇一塊調出.該塊可能是系統中任意一個程序的頁

    • 可變分配區域性置換:基於程序的型別,為每一程序分配一定數目的記憶體空間。當某程序發生缺頁時,只允許從該程序的頁面中選出一頁換出,這樣就不影響其他程序的執行.如果程序在執行過程中頻繁的發生缺頁中斷,則系統再為該程序分配若干物理塊,直到程序的缺頁率降低到適當程度位置.

5.2.4 頁面置換演算法

因剛被調出的頁面又立即要用,被調出的頁面因裝入不久又被選中調出,調出不久又被裝入的頻繁排程現象稱為“抖動”或“顛簸”。

  • 1.先進先出頁面置換演算法(First-In First-Out,FIFO)

    • 原理:選擇最先裝入記憶體的一頁調出,或把駐留在記憶體中時間最長的一頁調出

    • 過程:把裝入記憶體的那些頁面按進入的先後次序排好佇列,每次總是調出隊首的頁,當裝入一個新頁後,把新頁的頁號排入隊尾。

    • 注:由操作維護維護一個有當前在記憶體中的頁面的連結串列,最老的頁面在表頭,最新在頁面表尾。當發生缺頁時,置換表頭的頁面把新調入的頁面加到表尾。

  • Belady現象:在分頁式虛擬儲存管理中,發生缺頁時的置換演算法採用時,如果對一個程序未分配它所要求的全部頁面,有時就會出現分配的頁面數增多,但缺頁率反而提高的異常現象
    在這裡插入圖片描述

  • 2.最近最少使用頁面置換演算法(Leat Recently Used,LRU)

    • 原理:在缺頁發生時,首先置換掉最長時間未被使用過的頁面。

    • 過程:總是選擇距離現在最長時間內沒有被訪問過的頁面先調出。實現這種演算法的是在頁表中為每一頁增加一個“計時”標誌,記錄該頁面自上次被訪問以來經歷的時間,每被訪問一次都應從0開始重新計時。

    • 注:計時值最大頁調出,最近時間內最長時間沒有被呼叫過被調出,開銷較大

  • 3.最近最不常用頁面置換演算法(Leat Frequently Used,LFU)

    • 原理:根據在一段時間裡頁面被使用的次數選擇可以調出的頁,如果一個頁面被訪問的次數較多,則是經常要使用的頁面,就不能調出。
    • 過程:為每頁設定一個計數器,每當訪問一頁時,就把該頁對應計數器加1,週期沒有發生缺頁中斷,所有計數器清0重新計數;如果發生缺頁中斷,則選擇計數值最小頁調出。
    • 注:實現開銷大,且要確定合適的週期具有一定難度。
  • 4.理想頁面置換演算法(OPT)

    • 原理:該演算法轉換後不再需要的或者在最長時間後才會用到的頁面。
    • 過程:作為衡量其他頁面置換演算法優劣的一個標準。

例子:
(a)某程式在記憶體中分配三個頁面,初始為空,所需頁面的走向為4,3,2,1,4,3,5,4,3,2,1,5,採用FIFO演算法,請計算整個缺頁次數
在這裡插入圖片描述
(b)某程式在記憶體中分配三個頁面,初始為空,所需頁面的走向為4,3,2,1,4,3,5,4,3,2,1,5,採用LRU演算法,請計算整個缺頁次數。
在這裡插入圖片描述
(c)某程式在記憶體中分配三個頁面,初始為空,所需頁面的走向為4,3,2,1,4,3,5,4,3,2,1,5,採用OPT演算法,請計算整個缺頁次數。

在這裡插入圖片描述

  • 5.最近未使用頁面置換演算法(NRU)

    • 原理:隨機地從類編號最小的非空類中挑選一個頁面淘汰。
    • 過程:在最近一個時鐘滴答中(典型時間是約20ms)置換一個沒有被訪問的已修改頁面要比置換 一個被頻繁使用的乾淨頁面好。
    • 優點:易於理解和實現,效能不是最好但夠用。
    • 當訪問頁面(讀或寫)時設定R位;當寫入頁面(修改頁面)時設定M位。用R位和M位構造一個簡單的頁面置換演算法:當啟動一個程序時,所有頁面的兩個位都由作業系統設定0,定期將R位清零,以區別最近沒有被訪問的頁面和被訪問的頁面。
  • 6.第二次機會頁面置換演算法(NRU)
    FIFO演算法可能會把經常使用的頁面置換出去。

    • 思想:尋找一個最近的時鐘隔以來沒有被訪問過的頁面。如果所有的頁面都被訪問過,該演算法就退化為FIFO演算法。
    • 檢查進入記憶體時間最久頁面的R位,如果是0,既老又沒有被採用,可以立刻置換掉;如果是1就清0,放到連結串列尾端,修改其進入時間繼續搜尋。
  • 7.時鐘頁面置換演算法(CLock)
    把所有的頁面都儲存在一個類似時鐘面的環形連結串列中,一個錶針指向最老的頁面。當發生缺頁中斷時,演算法首先檢查錶針指向的頁面,如果它的R位是0就置換該頁面,並把新頁面插入這個位置,然後把錶針前稱一位;如果R位是1就清除R位並把錶針前稱一個位置,重複這個過程直到找到一個R位為0的頁面為止。稱為時鐘(Clock)。

5.2.5 缺頁中斷率

假定一個程式共有n頁,系統分配給它的記憶體塊是m塊(m、n均為正整數,且1 ≤ m ≤ n)。因此,該程式最多有m頁可同時被裝入記憶體。如果程式執行中訪問頁面的總次數為A,其中有F次訪問的頁面尚未裝入記憶體,故產生了F次缺頁中斷。定義為 f =F/A,稱 f 為“缺頁中斷率”。

缺頁中斷率與缺頁中斷的次數有關!

  • 1.分配給程式的記憶體塊數:
    分配給程式的記憶體塊數多,則同時裝入記憶體的頁面數就多,故減少了缺頁中斷的次數,也就降低了缺頁中斷率。反之,缺頁中斷率就高。

  • 2.頁面的大小:
    頁面的大小取決於記憶體分塊的大小,塊大則頁面也大,每個頁面大了則程式的頁面數就少。裝入程式時是按頁存放在記憶體中的,因此,裝入 一頁的資訊量就大,就減少了缺頁中斷的次數,降低了缺頁中斷率。反之,若頁面小則缺頁中斷率就高。

  • 3.程式編制方法:
    考生不用瞭解,不考Pascal程式設計。
    注:缺頁中斷率與程式的區域性化程式密切相關。

  • 4.頁面置換演算法:
    對缺頁中斷率的影響很大,排程不好就會出現“抖動”。理想的排程演算法能使缺頁中斷率最低。

5.2.6 虛擬儲存管理的效能問題

在虛擬儲存中,頁面可能在記憶體與外存間頻繁排程,有可能出現抖動或顛簸。

顛簸是由於缺頁率高而引起的。

程序在一段時間內集中訪問一些頁面,稱為“活動”頁面。

如果分配給一個程序的記憶體物理頁面數太少,使得該程序所需要的活動頁面不能全部裝入記憶體,則程序在執行過程中可能會頻繁地發生磯頁中斷,從而產生顛簸。

5.3 段式與段式儲存管理方案

5.3.1 段式儲存管理方案

  • 1.設計思想:
    系統將記憶體空間動態劃分為若干個長度不同的區域,每個區域稱作一個物理段。每個物理段在記憶體中有一個起始地址,稱作段首址。將物理段中的所有單元從0開始依次編址,稱為段內地址。

    使用者程式按邏輯上有完整意義的段來劃分,稱為邏輯段。將一個使用者程式的所有邏輯段從0開始編號,稱為段號,將一個邏輯段中的所有單元從0開始編址,稱為段內地址。使用者程式的邏輯地址由段號和段內地址兩部分組成。

    記憶體分配時,系統以段為單元進行記憶體分配,為每一個邏輯段分配一個連續的記憶體區(物理段)。邏輯上連續的段在記憶體中不一定連續存放。

    作業系統為了實現段式管理,需要建立段表。當把程式裝入記憶體後,系統為每個使用者程式建立一張表,用於記錄使用者程式的邏輯段與記憶體物理段間的對應關係。段表包括邏輯段號、物理段起始地址(段首址)和物理段長度三項內容。使用者程式有多少邏輯段該段表就登記多少行,且按邏輯段順序排列。段表存放在記憶體系統區裡。

  • 2.地址轉換:
    與頁式儲存管理相同,為了實現段式管理,系統提供一對暫存器:段表起始地址暫存器和段表長度暫存器。

    段表起始地址暫存器:用於儲存正在執行程序的段表在記憶體的首地址。當程序被排程程式選中投入執行時,系統將其段表首地址從程序控制塊中取出送入該暫存器。

    段表長度暫存器:用於儲存正在執行程序的段表的長度。當程序被選中執行時,系統將它從程序控制塊中取出送入該暫存器。

  • 3.與可變分割槽管理方案的比較:

    • 相同點:有相同的記憶體分配表,包括已分配區表和空閒區表。

    • 不同點:段式儲存管理是為程式的每一個分段分配一個連續的記憶體空間。儲存空間管理的方案與可變分割槽管理方案相同。

5.3.2 段頁儲存管理方案

為使用者提供一個二維地址空間,滿足程式和資訊的邏輯分段的要求。

段式管理反映了程式的邏輯結構,有利於段的動態增長以及共享和記憶體保護等,大大方便了使用者。等分記憶體,有效克服碎片,提高儲存器利用率。方便使用者的程式設計和提高記憶體的利用率。

  • 基本思想:
    用頁式方法來分配和管理記憶體空間,即把記憶體劃分為若干大小相等的頁面;用段式方法對使用者程式按照其內在的邏輯關係劃分成若干段;再按劃分記憶體頁面的大小,把每一段劃分成若干大小相等的頁面。
    記憶體是以頁為基本單位分配給每個使用者程式的,邏輯上相鄰的頁面在實體記憶體中不一定相鄰。

  • 實現過程:
    需要增加段式管理和頁式管理的成分:系統必須為每個程式建立一張段表;由於一個段又被劃分成了若干頁,系統又為每個段建立一張頁表。段表中記錄了該段對應的頁表的起始地址和長度;而頁表則給出該段的各個邏輯頁面與記憶體塊號之間的對應關係。

在作業系統各種儲存管理方法中,存在外碎片的是(CD)
A.固定分割槽
B.頁式
C.動態分割槽
D.段式
E.段頁式

所謂外部碎片是指記憶體空間不能夠被分配
內部碎片是指記憶體空間被分配出去但沒有被利用。
頁式儲存管理方案同固定分割槽一樣,將實體記憶體劃分成固定大小的塊,每一塊都可以分配使用,因而可以很好的避免外部碎片。
但頁式儲存管理中,程序的最後一頁經常裝不滿一個物理塊,所以儲存內部碎片。
同樣固定分割槽儲存管理方案中,分割槽通常比裝入的程序大,所以也存在內部碎片;
而段式儲存管理方案和可變分割槽一樣,總是劃分和程序大小相同的塊來存放程序,所以不存在內部碎片,但是記憶體空間被多次分配、回收之後,總會留下一些很難再被分配的小空間,因此存在外部碎片;
段頁式儲存管理同頁式儲存管理一樣,可以很好的解決記憶體的外部碎片問題。
虛擬頁式儲存管理方案是將記憶體按照一定的大小分頁,每個分頁都分配出去,但是總存在最後一個分頁裝不滿的情況,存在內部碎片。
虛擬段式儲存管理方案是將記憶體按照程式段的長度進行分配的,分配出去的記憶體都是剛好夠裝下整個程式段,所以不存在記憶體碎片,但是在分配過程中,可能存在某一塊記憶體裝不下任何一個程式段的情況,所以存在外存碎片。

下列各種記憶體管理方案中,哪些可以與虛擬儲存技術結合使用(BCD)
A.可變分割槽
B.頁式
C.段式
D.段頁式
E.固定分割槽

要能與虛擬儲存技術結合使用的記憶體管理方案必須具有如下特性:
1.使用動態記憶體地址,記憶體中的程序是可以移動的
2.不能要求全部程式載入入記憶體,程序才能執行的

下列儲存管理方案中,能支援多道程式設計的是(ABDE)
A.可變分割槽儲存管理
B.頁式儲存管理
C.單一分割槽儲存管理
D.固定分割槽儲存管理
E.段頁式儲存管理

在引入虛擬頁式儲存管理的系統中,會出現下列哪些現象(ABCE)
A.頁面抖動(顛簸)
B.Belady異常
C.缺頁中斷
D.越界中斷
E.頁面寫錯誤

下列哪一種儲存管理方案以程序為單位分配一組連續的記憶體單元(AB)
A.固定分割槽
B.可變分割槽
C.頁式
D.段式
E.段頁式

在虛擬頁式儲存管理中,為實現地址變換所涉及到的資料結構是(ACE)
A.空閒區表
B.分割槽分配表
C.頁表
D.段表
E.點陣圖

下列儲存管理方案中,可進行程序部分交換的是(CDE)
A.固定分割槽
B.可變分割槽
C.頁式
D.段式
E.段頁式
AB可以將整個程序進行交換

在可變分割槽管理方案中,移動技術可以解決碎片問題。當一個程式在記憶體中移動時,需要做哪些工作(ABCDE)
A.讀出該程式在記憶體中的所有程式碼和資料
B.程序記憶體重定位(靜態或動態)
C.將讀出的程式碼和資料寫入目標記憶體中
D.修改記憶體已分配區表
E.修改空閒區表

下列關於虛擬頁儲存管理方案的敘述中,哪些是正確的(ABCD)
A.將記憶體等分成大小為2的冪次方的記憶體塊,稱為頁框
B.系統將虛擬地址空間等分為若干頁面,大小與頁框相同
C.虛擬頁面在物理空間上不要求連續存放
D.硬體機制實現邏輯地址到實體地址的動態轉換
E.所有頁必須常駐記憶體

在虛擬頁式儲存方案中,當判斷一個頁面是否已調入記憶體時需要用到頁表表項的哪些位(AB)
A.駐留位
B.中段位
C.修改位
D.訪問位
E.保護位

程式區域性性原理

區域性性原理:CPU訪問儲存器時,無論是存取指令還是存取資料,所訪問的儲存單元都趨於聚集在一個較小的連續區域中.

  • 時間區域性性
    如果一個資訊項正在被訪問,那麼在近期它很可能還會被再次返回.
  • 空間區域性性
    在最近的將來將用到的資訊很可能與現在正在使用的資訊在空間地址上是臨近的,比如程式碼的順序性,記憶體訪問的順序性
  • 順序區域性性
    在典型程式中,除轉移類指令外,大部分指令是順序進行的.