作業系統 第九章 虛擬記憶體管理

2022-04-25 03:39:01 字數 3973 閱讀 7946

區域性性原理:乙個程式只要部分裝入記憶體就可以執行

程式部分裝入技術優點

區域性性原理

虛擬記憶體

虛存是對記憶體的抽象,構建在儲存體系之上,由作業系統來協調各儲存器的使用

虛擬記憶體大於物理記憶體

虛擬儲存器的大小由2個因素決定:

使用虛擬記憶體的共享庫:

寫時複製

當確定採用寫時複製頁面時,重要的是注意空閒頁面的分配位置

vfork:fork()變形,不使用寫時複製

例子:虛擬記憶體的實現

虛擬頁式有兩種方式:

基本思想(虛擬頁式儲存管理)

執行之後,根據程序執行需要,動態裝入其他頁面

當記憶體空間已滿,而又需要裝入新的頁面時,則根據某種演算法置換記憶體中的某個頁面,以便裝入新的頁面

按需調頁

類似交換技術,粒度不同

調頁程式(pager)只是對程序的單個頁進行操作

需要頁⇒ 查閱此頁

懶惰交換:只有在需要頁時,才將它調入記憶體

調頁程式(pager)只是對程序的單個頁進行操作

調頁程式不是調入整個程序,而是把哪些要使用的頁調入記憶體

有效-無效位

缺頁中斷(頁錯誤)

2.檢視另乙個表來決定

3.找到頁在後備儲存上的位置

4.得到空閒幀,把頁換入幀

5.重新設定頁表,把有效位設為v

6.重啟指令: 近未使用

請求分頁討論

一條指令可能導致多次缺頁(涉及多個頁面)

請求分頁需要硬體支援

請求分頁的效能

有效訪問時間(eat):

對於請求調頁,降低缺頁錯誤率是極為重要的。否則,會增加有效訪問時間,從而極大地減緩了程序的執行速度

頁錯誤時間(包含多項處理的時間,主要有三項):

請求分頁效能優化

在程序裝載時,把整個程序拷貝到交換區

對於二進位制檔案的請求調頁,利用檔案系統進行交換

無空閒頁的辦法

頁面置換

頁面置換討論

需要頁面置換的情況

基本頁面置換

基本頁面置換方法

3.將所需頁讀入(新)空閒頁框,更新頁表和幀表

4.重啟使用者程序

頁面置換

頁面置換演算法

要求

優置換置換演算法(opt)

先進先出置換演算法(fifo)

最少最近使用置換演算法(lru)

近似lru演算法

先進先出演算法(fifo)

fifo演算法可能會產生belady異常

最優置換演算法(opt)

最少最近使用置換演算法(lru)

lru近似演算法

基於引用位的演算法

附加引用位演算法

二次機會演算法

實現:時鐘置換(順時針方向,採用迴圈佇列)

fifo的增強演算法

基於計數的頁面的置換

老化演算法

基本概念

兩個主要的分配策略:

固定分配

按比率分配(根據每個程序的大小來分配)

對於平均分配和比例分配,每個程序分得的數量可以因多道程式而變化。如果多道程式增加,則每個程序會失去一些幀,以提供新程序所需的記憶體。相反,如果多道程度較低,則原來分配給離開程序的幀會分配給剩餘程序

優先順序分配

全域性置換和區域性置換

區域性置換

採用區域性置換,分配給每個程序的頁框數量不變;採用全域性置換,可能增加所分配頁框的數量,因為可能從分配給其他程序的頁框中選擇乙個置換

全域性置換的問題,程序不能控制其缺頁率,區域性置換沒有這個問題。但區域性置換不能使用其他程序不常用的記憶體

全域性置換有更好的系統吞吐量,更為常用

基本概念

抖動(顛簸):乙個程序的頁面經常換入換出,程序的調頁時間多於它的執行時間

區域性置換演算法

區域性是由程式結構和資料結構來定義的。區域性模型指出,所有程式都具有這種基本的記憶體引用結構

顛簸發生的原因:分配的頁框數《區域性大小之和

工作集模型

d = ∑wssi ≡ 總的幀需求量

如果d>m ⇨ 抖動(顛簸)

策略:如果d>m,則暫停乙個程序

優點:可防止抖動,同時保持盡可能高的多道程式,優化了cpu利用率

困難:跟蹤工作集

缺頁率(pff)策略

可能不得不換出乙個程序。如果缺頁錯誤率增加並且沒有空閒幀可用,那麼必須選擇某個程序並將其交換到後備儲存。然後,再將釋放的幀分配給具有高缺頁錯誤率的程序

基本概念

核心在使用記憶體塊時有如下特點

夥伴(buddy)系統

演算法

優點

缺點

slab分配

當建立cache時,包括若干個標記為空閒的物件,物件的數量與slab的大小有關

slab有三種狀態:

當乙個slab充滿了已使用的物件時,下乙個物件的分配從空閒的slab開始分配

優點

記憶體請求可以快速滿足

簡單塊列表(slob):分配器用於有限記憶體的系統,例如嵌入式系統。slob工作採用3個物件列表:小(用於小於256位元組的物件)

、中(用於小於1024位元組的物件)和大(用於小於頁面大小的物件)。記憶體請求採用首先適應策略,從適當大小的列表上分配物件

預先調頁

在引用前,調入程序的所有或一些需要的頁面

如果預調入的頁面沒有被使用,則記憶體被浪費

在有些情況下,預調頁面可能具有優點。問題在於,採用預調頁面的成本是否小於處理相應缺頁錯誤的成本。通過預調頁面而調進記憶體的許多頁面也有可能沒有使用

頁面尺寸選擇

碎片——需要小的頁

i/o開銷——需要大的頁

程式區域性——需要小的頁

缺頁次數——需要大的頁

其他因素

沒有最佳答案,總的來說,趨向更大的頁

tlb範圍

增加頁的大小

提供多種頁的大小

反向頁表

i/o互鎖

程式結構

第九章 虛擬記憶體

計算機的主存被組織成乙個由m個連續的位元組大小的單元組成的陣列。每個位元組都有乙個唯一的實體地址 pa 第乙個位元組位址為0,接下來為1,再接下來為2,依次類推。cpu訪問記憶體的最自然方式就是使用實體地址。我們把這種方式稱為物理定址。如圖所示。現代處理器使用一種稱為虛擬位址的定址方式。使用虛擬定址...

作業系統 第九章

對標記為無效的訪問會產生頁錯誤陷阱 純粹按需調頁 pure demand paging 一條指令可能訪問多個頁的記憶體 一頁用於指令,其它頁用於資料 則一頁可能產生多個頁錯誤,不好的系統效能。區域性引用 locality of reference 頁表 有效無效位 次級儲存器 用來儲存不在記憶體中的...

CSAPP讀書日記 第九章 虛擬記憶體

虛擬記憶體是硬體異常 硬體位址翻譯 主存 磁碟檔案和核心軟體的完美互動,它為每個程序提供了乙個大的 一致的和私有的位址空間。它將主存看成是乙個儲存在磁碟上的位址空間的快取記憶體,在主存中只儲存活動區域,並根據需要在磁碟和主存之間來回傳送資料。它為每個程序提供了結構一致的位址空間,從而簡化了記憶體管理...