1. 程式人生 > >【操作系統】虛擬存儲器

【操作系統】虛擬存儲器

取出 preview 相關 tex clock 先進先出 技術 當前 存儲

相關文章:

【操作系統】存儲器管理

【操作系統】處理機調度簡述

【操作系統】之進程管理

【操作系統】經典的同步問題(生產者消費者問題, 哲學家進餐問題, 讀寫問題)

內存的容量有限, 如果有大作業或大量作業運行, 內存就會不夠用. 為解決這一問題邊催生了虛擬存儲器的概念.

常規存儲器管理方式的特征

  1. 一次性
    作業必須一次性地全部裝入內存後才能開始運行.
  2. 駐留性
    作業被裝入內存後, 整個作業都一直駐留在內存中, 其中任何部分都不會被換出, 直至作業運行結束.

局部性原理
由1968年P.Denning提出: 在較短的時間內, 程序的執行僅局限於某個部分, 相應地, 它所訪問的存儲空間也局限於某個區域.

他提出了幾個論點:

  1. 程序執行時, 除了少部分的轉移和過程調用指令外, 在大多數情況下是順序執行的.
  2. 過程調用將會使用程序執行軌跡由一部分區域轉至另一部分區域.
  3. 程序中存在許多循環結構, 這些結構雖然只有少數指令構成, 但是他們將被多次執行.
  4. 程序中號包括許多對數據結構的處理, 這寫往往都局限在很小的範圍內.

局限性還表現在時間和空間方面

  • 時間局限性
    由於程序中存在大量循環操作, 那麽某些指令(數據)在不久之後會再次被執行(訪問).
  • 空間局限性
    程序在一段時間內訪問的地址可能集中在一定的範圍內, 比如程序的順序執行.

虛擬存儲器

定義
具有請求調入和置換功能, 能從邏輯上對內存容量加以擴充的存儲器系統

特征

  1. 多次性. 一個作業中的程序和數據無需再作業運行時一次性全部裝入內存, 而是允許被分成多次調入內存運行. (只需當前要運行的部分程序和數據裝入內存即可)
  2. 對換性. 一個作業中的程序和數據, 無須在作業運行時一直常駐內存, 而是允許在作業的運行過程中進行對換操作.(在進程運行期間, 將有用的程序或數據換入, 無用的則換出)
  3. 虛擬性. 能夠從邏輯上擴充內存容量. 提高內存利用率

    虛擬性是以多次性和對換性為基礎的.


虛擬存儲器可以通過請求分頁, 請求分段的方法實現, 它們都需要軟硬件支持, 主要硬件有頁(段)表機制, 缺頁(段)中斷機構, 地址變換結構

請求分頁存儲管理方式

請求頁表

頁號物理塊號狀態位P訪問字段A修改位M外存地址

分為頁號, 物理塊號, 狀態位P, 訪問字A段, 修改位M, 外存地址
狀態位(存在位)P: 由於該字段只有一位, 又稱位字. 用於指示該頁是否已調入內存, 供程序訪問時參考.
訪問字段A: 用於記錄本也在一段時間內被訪問的次數, 或記錄本頁最近已有多長時間未被訪問.
修改位M: 標識該頁在調入內存後是否被修改過.
外存地址: 用於指出該頁在外存的地址.

缺頁中斷機構

每當要訪問的頁面不再內存時, 便產生依次缺頁中斷, 請求OS將所缺之頁調入內存.

  • 指令在執行期間產生和處理中斷信號
  • 一條指令在執行期間可能產生多次缺頁中斷

地址變換結構

技術分享

技術分享

內存分配

最小物理塊數
最小物理塊數能保證進程正常運行, 它取決於指令的格式, 功能和尋址方式.

內存分配策略
內存在進行分配時可以采取固定分配和可變分配.

  • 固定分配, 為每個進程分配一組固定數目的物理塊, 在進程運行期間不可更改.
  • 可變分配, 為每個進程分配一定數目的物理塊, 在進程運行期間可以更改.

頁面置換時可以采取全局置換和局部置換.

  • 全局置換, 如果進程在運行期間返現缺頁, 則將OS所保留的空間物理塊取出一塊分配給該進程, 或者以所有進程的全部物理塊為標的, 選擇一塊換出, 然後將所缺之頁調入.
  • 局部置換, 如果進程在運行中發現缺頁, 則只能從分配給該進程的n個頁面中選出一頁換出, 然後在調入一頁, 以保證分配給該進程的內存空間不變.

通過以上可以組合一下三種策略:

  1. 固定分配局部置換
    為每個進程分配多少物理塊是根據進程類型(交互型或批處理型)或根據程序員的建議來確定.
  2. 可變分配全局置換
    凡是產生缺頁的物理塊, 都將獲得新的物理塊.
  3. 可變分配全局置換
    為每個進程分配一定數目的物理塊, 但當某進程發現缺頁時, 只允許從該進程在內存的頁面中選擇一頁換出.

物理塊分配算法

  1. 平均分配算法. 將系統中所有可供分配的物理塊平均分配給各個進程.
  2. 按比例分配算法. 根據進程大小按比例分配物理.假設系統中有n個進程, 每個進程頁面數為, 則系統中頁面數總和為技術分享

    . 物理總塊數為m, 則每個進程能分到的物理塊數技術分享

    .
  3. 考慮優先權的分配算法. 一部分按比例分配, 一部分根據進程的優先權分配

頁面置換算法

最佳置換算法(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):最近已被訪問且被修改, 該頁可能再被訪問.

其執行過程分為以下三步:

  1. 從指針所指當前位置開始, 掃描循環隊列, 尋找A=0且M=0的頁面, 將遇到的第一個頁面作為淘汰頁. 在第一次掃描期間不改變訪問位A.
  2. 如果第一步失敗, 即查找一輪後未遇到的第一類頁面, 則開始第二輪掃描, 尋找A=0且M=1的頁面, 將所遇到的第一個這類頁面作為淘汰頁. 在第二輪掃描期間, 將所有掃描過的頁面的訪問位置都置0.
  3. 第二步也失敗, 亦即未找到第二類頁面, 則將指針返回到開始的位置, 並將所有的訪問位復0. 然後重復第一步. 若果仍失敗, 必要時重復第二步, 此時就一定能找到被淘汰的頁.

改進的Clock算法可減少磁盤的I/O操作次數, 但是系統開銷會增加.

頁面分配策略

  • 何時調入頁面

    1. 預調入策略
      將在不久之後便會被訪問的頁面預先調入內存
    2. 請求調入策略
      當進程所訪問的頁面不再內存中時, 便立即請求, 由OS將所需頁面調入內存.
  • 從何處調入頁面

    1. 若系統由足夠的對換區, 則從對換區調入. 否則從文件區調入.
    2. UNIX方式: 未運行國的頁面從文件區調入, 運行過的頁面從對換區調入(運行過的頁面已被換出至對換區)
  • 缺頁率
    即, 訪問失敗頁面的次數與總訪問數之比.
    S為訪問頁面成功的次數, F為方位失敗的次數. 則缺頁率為技術分享

抖動

抖動現象: 在系統中的進程太多, 需要頻繁的進行進程的對換操作, 以至於占用太多時間, 從而處理機的利用率下降並趨於0的情況, 我們稱之為抖動. 通常用工作集來避免抖動

工作集是在某段時間內, 進程實際索要訪問的頁面集合. 我們將這些頁面又稱為活躍頁面.

預防抖動的方法

  1. 采取局部置換策略
  2. 工作集算法融入處理機調度
  3. 調節缺頁率
  4. 暫停進程

請求分段存儲管理方式

請求段表

段名段長段基址存取方式訪問字段A修改位M存在位P增補位外存始址

分為段名, 段長, 段基地址, 存取方式, 訪問字段A, 修改位M, 存在位P, 增補位, 外存地址

  1. 存取方式, 該字段為兩位, 可執行(00), 可讀(01), 可寫(11)
  2. 訪問字段A, 記錄該段的訪問次數
  3. 修改位M, 表示該頁調入內存後是否已被修改過
  4. 存在位P, 指示本段是否已調入內存
  5. 增補位, 特有字段, 表示本段在運行過程中是否做過動態增長.
  6. 外存始址, 指示本段在外存中的起始地址, 即起始盤塊號.

缺段中斷機構

技術分享

技術分享

地址變換機構

技術分享

技術分享

【操作系統】虛擬存儲器