區域性性原理:乙個程式只要部分裝入記憶體就可以執行
程式部分裝入技術優點:
區域性性原理
虛擬記憶體
虛存是對記憶體的抽象,構建在儲存體系之上,由作業系統來協調各儲存器的使用
虛擬記憶體大於物理記憶體
虛擬儲存器的大小由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讀書日記 第九章 虛擬記憶體
虛擬記憶體是硬體異常 硬體位址翻譯 主存 磁碟檔案和核心軟體的完美互動,它為每個程序提供了乙個大的 一致的和私有的位址空間。它將主存看成是乙個儲存在磁碟上的位址空間的快取記憶體,在主存中只儲存活動區域,並根據需要在磁碟和主存之間來回傳送資料。它為每個程序提供了結構一致的位址空間,從而簡化了記憶體管理...