-----段式記憶體配置設定-----
1.概念
一種順應使用者視角的記憶體管理機制;程式由多段代碼、資料組成。
段是自然的邏輯單元
2.段式管理機制
# 将一個邏輯位址劃分為兩部分:段号和段内偏移量
# 段表:以段号為索引下标,将其映射到二維的實體位址
# 段表項内容:基位址+界限(段的開頭+段的長度)存儲在寄存器中
位址轉化:先把段的偏移量和界限比較,超過則是非法通路,
若符合,根據基位址+界限:可以找到這個段在記憶體中的位址
#記憶體包含:通過在段表項設定保護位;來達到記憶體保護的功能
#記憶體共享:共享的基本機關是段:要共享的段,在段表的位置相同
3.段式配置設定注意的事情:
# 段的長度可變(差別于頁),也面臨動态配置設定和外部/内部碎片
----段頁式記憶體配置設定----
1.概念:将邏輯位址劃分為3部分:段号;頁面;頁内偏移
2.位址轉換過程:先根據段号找到頁面;在根據頁面找到頁桢;完成位址轉換
----虛拟存儲管理--是對非連續記憶體配置設定的延續------
1.虛拟存儲的提出原因?
計算機中多程序導緻記憶體空間不足;常見的解決辦法:
* 覆寫技術--程式内部子產品之間
目标:在可以在較小的記憶體中運作較大的程式
方法:1.依據程式的邏輯,将程式劃分為若幹功能獨立的子產品;将不會
同時執行的子產品共享一塊記憶體區域
2.将子產品分為常用子產品--常駐記憶體;可選子產品在用的時候加載記憶體
3.不存在互相調用關系的子產品為一組,可以放在共享記憶體中
缺點:需要程式員劃分功能子產品,定義覆寫方式,增加程式設計難度
執行時間也會增加
* 交換技術:增加正在運作的程式的記憶體(連續配置設定OS負責--程序之間)
方法:将現在等待的程序換出記憶體,為其他運作程序提供空間
換入換出的基本機關是程序:換出與換入
交換的時機:隻有當記憶體不夠/有不夠的可能性的時候
交換區的大小:外存的大小;換入後:采用動态位址映射
* 虛拟存儲技術:每個程序部分裝入,其他部分放外村;
按照需求OS負責将其裝入。【延續非連續配置設定】
*局部性原理:程式執行過程一個比較短的時期,所執行的指令位址和
指令的操作數位址,分别局限在一定的區域;
局部性原理分類
時間局部性:指令執行/資料通路和下次執行/通路都集中在小的時間間隔
這個為虛拟存儲性能提供了前提。
空間局部性:目前指令和臨近的幾條指令,目前通路資料和臨近的資料通路
都集中在一個較小的區域:循環/數組
分支局部性:一條指令的兩次執行,很可能跳轉到相同的實體位置。
可以任務程式的執行集中在某個區域裡面;進而就可以确定将程序的那些指令
放到記憶體裡面。本質就是确定程序常用的指令,将不常用放外存。
注意:局部性原理從理論上保證虛拟存儲技術可以實作。
局部性特征是和程式的結構相關
在編寫程式的時候,盡量編寫可以提高程式局部性的結構
2.虛拟存儲的基本概念
思路:将程式常用加載到記憶體,不常用的放在外存
原理:裝載的時候将需要執行的頁面/段放入記憶體
CPU要通路的不在記憶體的時候,CPU通知作業系統将相應的頁面
加載進記憶體
注意:如果目前的記憶體已滿,就涉OS進行頁面/或段的置換操作
實作方式:虛拟頁式存儲、虛拟段式存儲
虛拟存儲技術基本特征:
* 不連續性:虛拟位址空間使用非連續;實體記憶體配置設定非連續
* 大使用者空間:提供給使用者的虛拟記憶體大于實際記憶體
* 部分交換:對程序部分的頁面進行置換
虛拟存儲的技術支援;
* 硬體:位址映射
* 作業系統提供頁面置換操作
3.虛拟頁式存儲
概念:頁式存儲配置設定+按需調頁+頁面置換算法
思路:當使用者程序加載進記憶體運作,隻裝入部分頁面,就啟動程式運作
在執行的過程中就會出現缺頁異常;作業系統處理該異常;就是進行
頁面裝入/頁面置換。
注意:虛拟頁式存儲頁表項結構
邏輯頁号+通路位+修改位+保護位+駐留位+實體頁幀
駐留位:表示該頁面是否在記憶體中
修改位:表示記憶體中的頁面是否被修改(駐留位有效)
修改過:置換的時候需要寫回外存
未修改過:置換的時候新的頁面直接覆寫該頁面
通路位:表示該頁面是否被通路過:用于頁面置換算法
保護位:表示可以對該頁面進行的操作--讀寫
* CPU通路記憶體--存在三種通路的可能:
頁面已經裝入記憶體,有對應的頁幀,CPU完成操作
非法頁面引用;産生異常
合法頁面引用,但是頁面不再記憶體,把頁面裝入記憶體
注意:假如實體記憶體占滿,需要進行頁面的置換算法。
* 缺頁中斷及響應
引起缺頁面中斷,作業系統相應這個中斷:
# 作業系統查找核心資料結構判斷以下2種情況:
是合法的,但是頁面不再記憶體中
是非法的--程序終止
# 作業系統查找系統核心資料結構,找出一個空閑的頁幀
# 把頁面從外存換入記憶體的空閑的頁幀--頁面置換算法
注意:記憶體已滿,需要判斷換出的頁面是否被修改:
# 更新核心資料結構,更新程序頁表
# 将程序頁表中該項有效位值:定為v
# 缺頁中斷程式傳回
# 重新執行引起中斷的那條指令
隻有程序真正需要的頁面才會被裝入記憶體,不使用就直接放在外存裡面
* 虛拟頁式存儲中的外存管理
應能友善的在外存中找到具體的頁面内容
根據不同類别的頁面選擇存儲的位置
代碼段:可執行的二進制檔案
動态加載的共享程式段:動态調用庫檔案
其他段:交換空間
* 虛拟頁式存儲的性能
有效的存儲通路時間:和缺頁率相關
* 全局置換和局部置換
全局置換:在所有在記憶體的頁面中選擇一個頁面換出
局部置換:僅僅在程序自己所屬的頁面中選擇一個頁面換出