天天看點

作業系統--存儲管理3

-----段式記憶體配置設定-----

1.概念

一種順應使用者視角的記憶體管理機制;程式由多段代碼、資料組成。

段是自然的邏輯單元

2.段式管理機制

# 将一個邏輯位址劃分為兩部分:段号和段内偏移量

# 段表:以段号為索引下标,将其映射到二維的實體位址

# 段表項内容:基位址+界限(段的開頭+段的長度)存儲在寄存器中

位址轉化:先把段的偏移量和界限比較,超過則是非法通路,

若符合,根據基位址+界限:可以找到這個段在記憶體中的位址

#記憶體包含:通過在段表項設定保護位;來達到記憶體保護的功能

#記憶體共享:共享的基本機關是段:要共享的段,在段表的位置相同

3.段式配置設定注意的事情:

# 段的長度可變(差別于頁),也面臨動态配置設定和外部/内部碎片

----段頁式記憶體配置設定----

1.概念:将邏輯位址劃分為3部分:段号;頁面;頁内偏移

2.位址轉換過程:先根據段号找到頁面;在根據頁面找到頁桢;完成位址轉換

----虛拟存儲管理--是對非連續記憶體配置設定的延續------

1.虛拟存儲的提出原因?

計算機中多程序導緻記憶體空間不足;常見的解決辦法:

* 覆寫技術--程式内部子產品之間

目标:在可以在較小的記憶體中運作較大的程式

方法:1.依據程式的邏輯,将程式劃分為若幹功能獨立的子產品;将不會

同時執行的子產品共享一塊記憶體區域

2.将子產品分為常用子產品--常駐記憶體;可選子產品在用的時候加載記憶體

3.不存在互相調用關系的子產品為一組,可以放在共享記憶體中

缺點:需要程式員劃分功能子產品,定義覆寫方式,增加程式設計難度

執行時間也會增加

* 交換技術:增加正在運作的程式的記憶體(連續配置設定OS負責--程序之間)

方法:将現在等待的程序換出記憶體,為其他運作程序提供空間

換入換出的基本機關是程序:換出與換入

交換的時機:隻有當記憶體不夠/有不夠的可能性的時候

交換區的大小:外存的大小;換入後:采用動态位址映射

* 虛拟存儲技術:每個程序部分裝入,其他部分放外村;

按照需求OS負責将其裝入。【延續非連續配置設定】

*局部性原理:程式執行過程一個比較短的時期,所執行的指令位址和

指令的操作數位址,分别局限在一定的區域;

局部性原理分類

時間局部性:指令執行/資料通路和下次執行/通路都集中在小的時間間隔

這個為虛拟存儲性能提供了前提。

空間局部性:目前指令和臨近的幾條指令,目前通路資料和臨近的資料通路

都集中在一個較小的區域:循環/數組

分支局部性:一條指令的兩次執行,很可能跳轉到相同的實體位置。

可以任務程式的執行集中在某個區域裡面;進而就可以确定将程序的那些指令

放到記憶體裡面。本質就是确定程序常用的指令,将不常用放外存。

注意:局部性原理從理論上保證虛拟存儲技術可以實作。

局部性特征是和程式的結構相關

在編寫程式的時候,盡量編寫可以提高程式局部性的結構

2.虛拟存儲的基本概念

思路:将程式常用加載到記憶體,不常用的放在外存

原理:裝載的時候将需要執行的頁面/段放入記憶體

CPU要通路的不在記憶體的時候,CPU通知作業系統将相應的頁面

加載進記憶體

注意:如果目前的記憶體已滿,就涉OS進行頁面/或段的置換操作

實作方式:虛拟頁式存儲、虛拟段式存儲

虛拟存儲技術基本特征:

* 不連續性:虛拟位址空間使用非連續;實體記憶體配置設定非連續

* 大使用者空間:提供給使用者的虛拟記憶體大于實際記憶體

* 部分交換:對程序部分的頁面進行置換

虛拟存儲的技術支援;

* 硬體:位址映射

* 作業系統提供頁面置換操作

3.虛拟頁式存儲

概念:頁式存儲配置設定+按需調頁+頁面置換算法

思路:當使用者程序加載進記憶體運作,隻裝入部分頁面,就啟動程式運作

在執行的過程中就會出現缺頁異常;作業系統處理該異常;就是進行

頁面裝入/頁面置換。

注意:虛拟頁式存儲頁表項結構

邏輯頁号+通路位+修改位+保護位+駐留位+實體頁幀

駐留位:表示該頁面是否在記憶體中

修改位:表示記憶體中的頁面是否被修改(駐留位有效)

修改過:置換的時候需要寫回外存

未修改過:置換的時候新的頁面直接覆寫該頁面

通路位:表示該頁面是否被通路過:用于頁面置換算法

保護位:表示可以對該頁面進行的操作--讀寫

* CPU通路記憶體--存在三種通路的可能:

頁面已經裝入記憶體,有對應的頁幀,CPU完成操作

非法頁面引用;産生異常

合法頁面引用,但是頁面不再記憶體,把頁面裝入記憶體

注意:假如實體記憶體占滿,需要進行頁面的置換算法。

* 缺頁中斷及響應

引起缺頁面中斷,作業系統相應這個中斷:

# 作業系統查找核心資料結構判斷以下2種情況:

是合法的,但是頁面不再記憶體中

是非法的--程序終止

# 作業系統查找系統核心資料結構,找出一個空閑的頁幀

# 把頁面從外存換入記憶體的空閑的頁幀--頁面置換算法

注意:記憶體已滿,需要判斷換出的頁面是否被修改:

# 更新核心資料結構,更新程序頁表

# 将程序頁表中該項有效位值:定為v

# 缺頁中斷程式傳回

# 重新執行引起中斷的那條指令

隻有程序真正需要的頁面才會被裝入記憶體,不使用就直接放在外存裡面

* 虛拟頁式存儲中的外存管理

應能友善的在外存中找到具體的頁面内容

根據不同類别的頁面選擇存儲的位置

代碼段:可執行的二進制檔案

動态加載的共享程式段:動态調用庫檔案

其他段:交換空間

* 虛拟頁式存儲的性能

有效的存儲通路時間:和缺頁率相關

* 全局置換和局部置換

全局置換:在所有在記憶體的頁面中選擇一個頁面換出

局部置換:僅僅在程序自己所屬的頁面中選擇一個頁面換出

繼續閱讀