【操做系統】虛擬存儲器

相關文章:html

【操做系統】存儲器管理程序員

【操做系統】處理機調度簡述算法

【操做系統】之進程管理數據結構

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

內存的容量有限, 若是有大做業或大量做業運行, 內存就會不夠用. 爲解決這一問題邊催生了虛擬存儲器的概念.spa

常規存儲器管理方式的特徵操作系統

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

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

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

侷限性還表如今時間和空間方面指針

  • 時間侷限性 
    因爲程序中存在大量循環操做, 那麼某些指令(數據)在不久以後會再次被執行(訪問).
  • 空間侷限性 
    程序在一段時間內訪問的地址可能集中在必定的範圍內, 好比程序的順序執行.

虛擬存儲器

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

特徵code

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

    虛擬性是以屢次性和對換性爲基礎的.


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

請求分頁存儲管理方式

請求頁表

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

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

缺頁中斷機構

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

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

地址變換結構

Alt text

內存分配

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

內存分配策略 
內存在進行分配時能夠採起固定分配和可變分配.

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

頁面置換時能夠採起全局置換和局部置換.

  • 全局置換, 若是進程在運行期間返現缺頁, 則將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, 則再返回到隊首去檢查第一個頁面.

Alt text

改進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. 外存始址, 指示本段在外存中的起始地址, 即起始盤塊號.

缺段中斷機構

Alt text

地址變換機構

Alt text

相關文章
相關標籤/搜索