【操作系統】虛擬存儲器
相關文章:
【操作系統】存儲器管理
【操作系統】處理機調度簡述
【操作系統】之進程管理
【操作系統】經典的同步問題(生產者消費者問題, 哲學家進餐問題, 讀寫問題)
內存的容量有限, 如果有大作業或大量作業運行, 內存就會不夠用. 為解決這一問題邊催生了虛擬存儲器的概念.
常規存儲器管理方式的特征
- 一次性
作業必須一次性地全部裝入內存後才能開始運行. - 駐留性
作業被裝入內存後, 整個作業都一直駐留在內存中, 其中任何部分都不會被換出, 直至作業運行結束.
局部性原理
由1968年P.Denning提出: 在較短的時間內, 程序的執行僅局限於某個部分, 相應地, 它所訪問的存儲空間也局限於某個區域.
- 程序執行時, 除了少部分的轉移和過程調用指令外, 在大多數情況下是順序執行的.
- 過程調用將會使用程序執行軌跡由一部分區域轉至另一部分區域.
- 程序中存在許多循環結構, 這些結構雖然只有少數指令構成, 但是他們將被多次執行.
- 程序中號包括許多對數據結構的處理, 這寫往往都局限在很小的範圍內.
局限性還表現在時間和空間方面
- 時間局限性
由於程序中存在大量循環操作, 那麽某些指令(數據)在不久之後會再次被執行(訪問). - 空間局限性
程序在一段時間內訪問的地址可能集中在一定的範圍內, 比如程序的順序執行.
虛擬存儲器
- 定義
- 具有請求調入和置換功能, 能從邏輯上對內存容量加以擴充的存儲器系統
特征
- 多次性. 一個作業中的程序和數據無需再作業運行時一次性全部裝入內存, 而是允許被分成多次調入內存運行. (只需當前要運行的部分程序和數據裝入內存即可)
- 對換性. 一個作業中的程序和數據, 無須在作業運行時一直常駐內存, 而是允許在作業的運行過程中進行對換操作.(在進程運行期間, 將有用的程序或數據換入, 無用的則換出)
- 虛擬性. 能夠從邏輯上擴充內存容量. 提高內存利用率
虛擬性是以多次性和對換性為基礎的.
虛擬存儲器可以通過請求分頁, 請求分段的方法實現, 它們都需要軟硬件支持, 主要硬件有頁(段)表機制, 缺頁(段)中斷機構, 地址變換結構
請求分頁存儲管理方式
請求頁表
頁號 | 物理塊號 | 狀態位P | 訪問字段A | 修改位M | 外存地址 |
---|
分為頁號, 物理塊號, 狀態位P, 訪問字A段, 修改位M, 外存地址
狀態位(存在位)P: 由於該字段只有一位, 又稱位字. 用於指示該頁是否已調入內存, 供程序訪問時參考.
訪問字段A: 用於記錄本也在一段時間內被訪問的次數, 或記錄本頁最近已有多長時間未被訪問.
修改位M: 標識該頁在調入內存後是否被修改過.
外存地址: 用於指出該頁在外存的地址.
缺頁中斷機構
每當要訪問的頁面不再內存時, 便產生依次缺頁中斷, 請求OS將所缺之頁調入內存.
- 指令在執行期間產生和處理中斷信號
- 一條指令在執行期間可能產生多次缺頁中斷
地址變換結構
內存分配
最小物理塊數
最小物理塊數能保證進程正常運行, 它取決於指令的格式, 功能和尋址方式.
內存分配策略
內存在進行分配時可以采取固定分配和可變分配.
- 固定分配, 為每個進程分配一組固定數目的物理塊, 在進程運行期間不可更改.
- 可變分配, 為每個進程分配一定數目的物理塊, 在進程運行期間可以更改.
頁面置換時可以采取全局置換和局部置換.
- 全局置換, 如果進程在運行期間返現缺頁, 則將OS所保留的空間物理塊取出一塊分配給該進程, 或者以所有進程的全部物理塊為標的, 選擇一塊換出, 然後將所缺之頁調入.
- 局部置換, 如果進程在運行中發現缺頁, 則只能從分配給該進程的n個頁面中選出一頁換出, 然後在調入一頁, 以保證分配給該進程的內存空間不變.
通過以上可以組合一下三種策略:
- 固定分配局部置換
為每個進程分配多少物理塊是根據進程類型(交互型或批處理型)或根據程序員的建議來確定. - 可變分配全局置換
凡是產生缺頁的物理塊, 都將獲得新的物理塊. - 可變分配全局置換
為每個進程分配一定數目的物理塊, 但當某進程發現缺頁時, 只允許從該進程在內存的頁面中選擇一頁換出.
物理塊分配算法
- 平均分配算法. 將系統中所有可供分配的物理塊平均分配給各個進程.
- 按比例分配算法. 根據進程大小按比例分配物理.假設系統中有n個進程, 每個進程頁面數為, 則系統中頁面數總和為
- 考慮優先權的分配算法. 一部分按比例分配, 一部分根據進程的優先權分配
頁面置換算法
最佳置換算法(Optimal)
OPT算法淘汰以後不使用或者在最長(未來)時間內不再被訪問的頁面
最佳置換算法有最好的性能當無法實現, 通常用它作為標準評價其他算法
先進先出置換算法(First In First Out)
淘汰最先進入內存的頁面, 即在內存中駐留時間最久的頁面.
最久未使用置換算法(Least Recently Used)
淘汰最近最久未使用的頁面
最少使用置換算法*(Least Frequently Used)
淘汰最近時期使用最少的頁面.
LFU算法的頁面訪問圖和LRU算法的頁面訪問圖完全相同
時鐘置換算法(Clock)
為每頁設置一位訪問位, 再將內存中的所有頁面都通過鏈接指針鏈接成一個循環隊列. 當某頁被訪問時, 其訪問位被置1. 置換算法在選擇一頁淘汰時, 只需檢查頁的訪問位. 如果是0, 就選擇該頁換出; 若為1, 則重新將它置0, 暫不換出; 再按照FIFO算法檢查下一個頁面. 當檢查到隊列中的最後一個頁面時, 若其訪問位仍為1, 則再返回到隊首去檢查第一個頁面.
改進Clock算法
淘汰的頁面即是未使用過的頁面, 又是未被修改過的頁面.
由訪問位A和修改位M可以組合成下面四種類型的頁面:
- 1類(A=0, M=0): 表示該頁最近既未被訪問, 又未被修改, 是最佳淘汰頁.
- 2類(A=0, M=1):表示該頁最近未被訪問, 但已被修改, 並不是很好的淘汰頁.
- 3類(A=1, M=0):最近已被訪問, 但未被修改, 該頁有可能再被訪問.
- 4類(A=1, M=1):最近已被訪問且被修改, 該頁可能再被訪問.
其執行過程分為以下三步:
- 從指針所指當前位置開始, 掃描循環隊列, 尋找A=0且M=0的頁面, 將遇到的第一個頁面作為淘汰頁. 在第一次掃描期間不改變訪問位A.
- 如果第一步失敗, 即查找一輪後未遇到的第一類頁面, 則開始第二輪掃描, 尋找A=0且M=1的頁面, 將所遇到的第一個這類頁面作為淘汰頁. 在第二輪掃描期間, 將所有掃描過的頁面的訪問位置都置0.
- 第二步也失敗, 亦即未找到第二類頁面, 則將指針返回到開始的位置, 並將所有的訪問位復0. 然後重復第一步. 若果仍失敗, 必要時重復第二步, 此時就一定能找到被淘汰的頁.
改進的Clock算法可減少磁盤的I/O操作次數, 但是系統開銷會增加.
頁面分配策略
-
何時調入頁面
- 預調入策略
將在不久之後便會被訪問的頁面預先調入內存 - 請求調入策略
當進程所訪問的頁面不再內存中時, 便立即請求, 由OS將所需頁面調入內存.
- 預調入策略
-
從何處調入頁面
- 若系統由足夠的對換區, 則從對換區調入. 否則從文件區調入.
- UNIX方式: 未運行國的頁面從文件區調入, 運行過的頁面從對換區調入(運行過的頁面已被換出至對換區)
-
缺頁率
即, 訪問失敗頁面的次數與總訪問數之比.
設S
為訪問頁面成功的次數,F
為方位失敗的次數. 則缺頁率為
抖動
抖動現象: 在系統中的進程太多, 需要頻繁的進行進程的對換操作, 以至於占用太多時間, 從而處理機的利用率下降並趨於0的情況, 我們稱之為抖動. 通常用工作集來避免抖動
工作集是在某段時間內, 進程實際索要訪問的頁面集合. 我們將這些頁面又稱為活躍頁面.
預防抖動的方法
- 采取局部置換策略
- 工作集算法融入處理機調度
- 調節缺頁率
- 暫停進程
請求分段存儲管理方式
請求段表
段名 | 段長 | 段基址 | 存取方式 | 訪問字段A | 修改位M | 存在位P | 增補位 | 外存始址 |
---|
分為段名, 段長, 段基地址, 存取方式, 訪問字段A, 修改位M, 存在位P, 增補位, 外存地址
- 存取方式, 該字段為兩位, 可執行(00), 可讀(01), 可寫(11)
- 訪問字段A, 記錄該段的訪問次數
- 修改位M, 表示該頁調入內存後是否已被修改過
- 存在位P, 指示本段是否已調入內存
- 增補位, 特有字段, 表示本段在運行過程中是否做過動態增長.
- 外存始址, 指示本段在外存中的起始地址, 即起始盤塊號.
缺段中斷機構
地址變換機構
【操作系統】虛擬存儲器