日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

13 操作系统第三章 内存管理 虚拟内存 请求分页管理方式 页面置换算法 页面分配策略

發布時間:2024/7/5 windows 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 13 操作系统第三章 内存管理 虚拟内存 请求分页管理方式 页面置换算法 页面分配策略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 1 虛擬內存
          • 1.1 傳統存儲管理方式的特征、缺點
          • 1.2 局部性原理
          • 1.3 虛擬內存主要特征
          • 1.4 如何實現虛擬內存技術
          • 1.5 虛擬內存的基本概念小結
      • 2 請求分頁管理方式
          • 2.1 頁表機制
          • 2.2 缺頁中斷機構
          • 2.3 地址變換機構
          • 2.4 請求分頁管理方式小結
      • 3 頁面置換算法
          • 3.1 最佳置換算法 OPT
          • 3.2 先進先出置換算法(FIFO)
          • 3.3 最近最久未使用置換算法(LRU)
          • 3.4 時鐘置換算法(CLOCK)
            • 3.4.1 簡單的CLOCK算法
            • 3.4.2 改進型的時鐘置換算法
          • 3.5 頁面置換算法小結
      • 4 頁面分配策略
          • 4.1 頁面分配、置換策略
            • 4.1.1 駐留集
            • 4.1.2 分配、置換策略
          • 4.2 何時調入頁面
          • 4.3 從何處調入頁面
          • 4.4 抖動(顛簸)現象
          • 4.5 頁面分配策略小結

1 虛擬內存

在傳統存儲管理方式的基礎上引入了交換技術、覆蓋技術,使得內存利用率有所提升,并且能從邏輯上擴充內存容量。

1.1 傳統存儲管理方式的特征、缺點

  • 一次性:作業必須一次性全部裝入內存后才能開始運行。這會造成兩個問題:①作業很大時,不能全部裝入內存,導致大作業無法運行;②當大量作業要求運行時,由于內存無法容納所有作業,因此只有少量作業能運行,導致多道程序并發度下降。
  • 駐留性:一旦作業被裝入內存,就會一直駐留在內存中,直至作業運行結束。事實上,在一個時間段內,只需要訪問作業的一小部分數據即可正常運行,這就導致了內存中會駐留大量的、暫時用不到的數據,浪費了寶貴的內存資源。
  • 可用虛擬存儲技術解決上述問題

    1.2 局部性原理

    時間局部性:如果執行了程序中的某條指令,那么不久后這條指令很有可能再次執行;如果某個數據被訪問過,不久之后該數據很可能再次被訪問。(因為程序中存在大量的循環)

    空間局部性:一旦程序訪問了某個存儲單元,在不久之后,其附近的存儲單元也很有可能被訪問。 (因為很多數據在內存中都是連續存放的,并且程序的指令也是順序地在內存中存放的)

    如何應用局部性原理?

    高速緩沖技術的思想: 將近期會頻繁訪問到的數據放到更高速的存儲器中,暫時用不到的數 據放在更低速存儲器中。

    快表機制就是將近期常訪問的頁表項副本放到更高速的聯想寄存器中

    • 基于局部性原理,在程序裝入時,可以將程序中很快會用到的部分裝入內存,暫時用不到的部分留在外存, 就可以讓程序開始執行。

    • 在程序執行過程中,當所訪問的信息不在內存時,由操作系統負責將所需信息從外存調入內存,然后繼續 執行程序。

    • 若內存空間不夠,由操作系統負責將內存中暫時用不到的信息換出到外存。 在操作系統的管理下,在用戶看來似乎有一個比實際內存大得多的內存,這就是虛擬內存

    • 操作系統虛擬性的一個體現,實際的物理內存大小沒有變,只是在邏輯上進行了擴充。

    易混知識點:

    虛擬內存的最大容量是由計算機的地址結構(CPU尋址范圍)確定的
    虛擬內存的實際容量= min(內存和外存容量之和,CPU尋址范圍)

    Eg:某計算機地址結構為32位,按字節編址,內存大小為512MB,外存大小為2GB。 則虛擬內存的最大容量為2 32B=4GB
    虛擬內存的實際容量=min(2 32B,512MB+2GB)=2GB+512MB

    1.3 虛擬內存主要特征

    虛擬內存有一下三個主要特征:

  • 多次性:無需在作業運行時一次性全部裝入內存,而是允許被分成多次調入內存。
  • 對換性:在作業運行時無需一直常駐內存,而是允許在作業運行過程中,將作業換入、換出。
  • 虛擬性:從邏輯上擴充了內存的容量,使用戶看到的內存容量,遠大于實際的容量。
  • 1.4 如何實現虛擬內存技術

    虛擬內存技術,允許一個作業分多次調入內存。如果采用連續分配方式,會不方便實現。因此, 虛擬內存的實現需要建立在離散分配的內存管理方式基礎上。



    主要區別:

  • 在程序執行過程中,當所訪問的信息不在內存時,由操作系統負責將所需信息從外存調入內存,然后繼續執行程序。 操作系統要提供請求調頁(或請求調段)功能

  • 若內存空間不夠,由操作系統負責將內存中暫時用不到的信息換出到外存。操作系統要提供頁面置換(或段置換)的功能

  • 1.5 虛擬內存的基本概念小結

    2 請求分頁管理方式

    請求分頁存儲管理與基本分頁存儲管理的主要區別:

  • 在程序執行過程中,當所訪問的信息不在內存時,由操作系統負責將所需信息從外存調入內存,然后繼續執行程序。 操作系統要提供請求調頁功能, 將缺失頁面從外存調入內存
  • 若內存空間不夠,由操作系統負責將內存中暫時用不到的信息換出到外存。 操作系統要提供頁面置換的功能, 將暫時用不到的頁面換出外存
  • 2.1 頁表機制
  • 與基本分頁管理相比,請求分頁管理中,為了實現“請求調頁”,操作系統需要知道每個頁面是否已經調入內存;如果還沒調入,那么也需要知道該頁面在外存中存放的位置。
  • 當內存空間不夠時,要實現“頁面置換”,操作系統需要通過某些指標來決定到底換出哪個頁面;有的頁面沒有被修改過,就不用再浪費時間寫回外存。有的頁面修改過,就需要將外存中的舊數據覆蓋,因此,操作系統也需要記錄各個頁面是否被修改的信息。
  • 為此引入頁表機制描述頁面和內存的情況

    基本分頁存儲管理的頁表VS請求分頁存儲管理的頁表:

    2.2 缺頁中斷機構
  • 在請求分頁系統中,每當要訪問的頁面不在內存時,便產生一個缺頁中斷,然后由操作系統的缺頁中斷處理程序處理中斷。 此時缺頁的進程阻塞,放入阻塞隊列,調頁完成后再將其喚醒,放回就緒隊列。
  • 如果內存中有空閑塊,則為進程分配一個空閑塊,將所缺頁面裝入該塊,并修改頁表中相應的頁表項。
  • 如果內存中沒有空閑塊,則由頁面置換算法選擇一個頁面淘汰,若該頁面在內存期間被修改過,則要將其寫回外存。未修改過的頁面不用寫回外存。
  • 缺頁中斷是因為當前執行的指令想要訪問的目標頁面未調入內存而產生的,因此屬于內中斷。
    一條指令在執行期間,可能產生多次缺頁中斷。

    (如:copy A to B,即將邏輯地址A中的數據復制到邏輯地址B,而A、B屬于不同的頁面,則有可能產生兩次中斷)

    中斷回顧:

    2.3 地址變換機構

    請求分頁存儲管理的地址變換機構較基本分頁存儲管理的地址變換機構的主要區別:

    新增步驟1:請求調頁(查到頁表項時進行判斷)
    新增步驟2:頁面置換(需要調入頁面,但沒有空閑內存塊時進行)
    新增步驟3:需要修改請求頁表中新增的表項

    過程如下:

    注意:

  • 快表中有的頁面一定是在內存中的。若某個頁面被換出外存, 則快表中的相應表項也要刪除, 否則可能訪問錯誤的頁面
  • 找到對應頁表項后,若對應頁面未調入內存, 則產生缺頁中斷,之后由操作系統的缺頁中斷處理程序進行處理
  • 在具有快表機構的請求分頁系統中,訪問一個邏輯地址時,若發生缺頁,則地址變換步驟是: 查快表(未命中)——查慢表(發現未調入內存)——調頁(調入的頁面對應的表項會直接加入快表)——查快表(命中)——訪問目標內存單元


    補充細節:

    ①只有“寫指令”才需要修改 “修改位”。并且,一般來說只需修改快表中的數據,只有要將快表項刪除時才需要寫回內存中的慢表。這樣可以減少訪存次數。
    ②和普通的中斷處理一樣,缺頁中斷處理依然需要保留CPU現場。
    ③需要用某種“頁面置換算法” 來決定一個換出頁面。
    ④換入/換出頁面都需要啟動慢速的I/O操作,可見,如果換入/ 換出太頻繁,會有很大的開銷。
    ⑤頁面調入內存后,需要修改慢表,同時也需要將表項復制到快表中。

    2.4 請求分頁管理方式小結

    3 頁面置換算法


    頁面的換入、換出需要磁盤I/0,會有較大的開銷,因此好的頁面置換算法應該追求更少的缺頁率

    3.1 最佳置換算法 OPT
    • 最佳置換算法(OPT,Optimal):每次選擇淘汰的頁面將是以后永不使用,或者在最長時間內不再被訪問的頁面,這樣可以保證最低的缺頁率。

    例:假設系統為某進程分配了三個內存塊,并考慮到有一下頁面號引用串(會依次訪問這些頁面):7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

    最佳置換算法可以保證最低的缺頁率,但實際上,只有在進程執行的過程中才能知道接下來會訪問到的是哪個頁面。操作系統無法提前預判頁面訪問序列。因此,最佳置換算法是無法實現的。

    3.2 先進先出置換算法(FIFO)
    • 先進先出置換算法(FIFO):每次選擇淘汰的頁面是最早進入內存的頁面
    • 實現方法:把調入內存的頁面根據調入的先后順序排成一個隊列,需要換出頁面時選擇隊頭頁面即可。
    • 隊列的最大長度取決于系統為進程分配了多少個內存塊。

    例:假設系統為某進程分配了三個內存塊,并考慮到有以下頁面號引用串:
    3,2,1,0,3,2,4,3,2,1,0,4

    例:假設系統為某進程分配了四個內存塊,并考慮到有以下頁面號引用串:
    3,2,1,0,3,2,4,3,2,1,0,4

    Belady異常一一當為進程分配的物理塊數增大時,缺頁次數不減反增的異常現象。
    只有FIFO算法會產生Belady異常。另外,FIFO算法雖然實現簡單,但是該算法與進程實際運行時的規律不適應,因為先進入的頁面也有可能最經常被訪問。因此,算法性能差

    3.3 最近最久未使用置換算法(LRU)
    • 最近最久未使用置換算法(LRU,least recently used):每次淘汰的頁面是最近最久未使用的頁面
    • 實現方法:賦予每個頁面對應的頁表項中,用訪問字段記錄該頁面自上次被訪問以來所經歷的時間t。

      當需要淘汰一個頁面時,選擇現有頁面中t值最大的,即最近最久未使用的頁面。

    例:假設系統為某進程分配了四個內存塊,并考慮到有以下頁面號引用串:
    1,8,1,7,8,2,7,2,1,8,3,8,2,1,3,1,7,1,3,7

    在手動做題時,若需要淘汰頁面,可以逆向檢查此時在內存中的幾個頁面號。在逆向掃描過程中最后一個出現的頁號就是要淘汰的頁面。

    該算法的實現需要專門的硬件支持,雖然算法性能好,但是實現困難,開銷大

    3.4 時鐘置換算法(CLOCK)
    • 最佳置換算法性能最好,但無法實現;
    • 先進先出置換算法實現簡單,但算法性能差;
    • 最近最久未使用置換算法性能好,是最接近OPT算法性能的,但是實現起來需要專門的硬件支持,算法開銷大。

    時鐘置換算法是一種性能和開銷較均衡的算法,又稱CLOCK算法,或最近未用算法(NRU,Not Recently Used)

    3.4.1 簡單的CLOCK算法

    簡單的CLOCK算法實現方法:為每個頁面設置一個訪問位,再將內存中的頁面都通過鏈接指針鏈接成一個循環隊列。當某頁被訪問時,其訪問位置為1。當需要淘汰一個頁面時,只需檢查頁的訪問位。如果是0,就選擇該頁換出;如果是1,則將它置為0,暫不換出,繼續檢查下一個頁面,若第一輪掃描中所有頁面都是1,則將這些頁面的訪問位依次置為0后,再進行第二輪掃描(第二輪掃描中一定會有訪問位為0的頁面,因此簡單的CLOCK算法選擇一個淘汰頁面最多會經過兩輪掃描

    3.4.2 改進型的時鐘置換算法
    • 簡單的時鐘置換算法僅考慮到一個頁面最近是否被訪問過。事實上,如果被淘汰的頁面沒有被修改過,就不需要執行I/0操作寫回外存。只有被淘汰的頁面被修改過時,才需要寫回外存。
    • 因此,除了考慮一個頁面最近有沒有被訪問過之外,操作系統還應考慮頁面有沒有被修改過。在其他條件都相同時,應優先淘汰沒有修改過的頁面,避免I/0操作。這就是改進型的時鐘置換算法的思想。
    • 修改位=0,表示頁面沒有被修改過;修改位=1,表示頁面被修改過。
    • 為方便討論,用(訪問位,修改位)的形式表示各頁面狀態。如(1,1)表示一個頁面近期被訪問過,且被修改過。

    算法規則:將所有可能被置換的頁面排成一個循環隊列

  • 第一輪:從當前位置開始掃描到第一個(0,0)的幀用于替換。本輪掃描不修改任何標志位
  • 第二輪:若第一輪掃描失敗,則重新掃描,查找第一個(0,1)的幀用于替換。本輪將所有掃描過的幀訪問位設為0
  • 第三輪:若第二輪掃描失敗,則重新掃描,查找第一個(0,0)的幀用于替換。本輪掃描不修改任何標志位
  • 第四輪:若第三輪掃描失敗,則重新掃描,查找第一個(0,1)的幀用于替換。
    由于第二輪已將所有幀的訪問位設為0,因此經過第三輪、第四輪掃描一定會有一個幀被選中,因此改進型CLOCK置換算法選擇一個淘汰頁面最多會進行四輪掃描
  • 第一優先級:最近沒訪問,且沒修改的頁面
  • 第二優先級:最近沒訪問,但修改過的頁面
  • 第三優先級:最近訪問過,但沒修改的頁面
  • 第四優先級:最近訪問過,且修改過的頁面
  • 3.5 頁面置換算法小結

    4 頁面分配策略

    4.1 頁面分配、置換策略
    4.1.1 駐留集
    • 駐留集:指請求分頁存儲管理中給進程分配的物理塊的集合。
    • 在采用了虛擬存儲技術的系統中,駐留集大小一般小于進程的總大小。
      若駐留集太小,會導致缺頁頻繁,系統要花大量的時間來處理缺頁,實際用于進程推進的時間很少;駐留集太大,又會導致多道程序并發度下降,資源利用率降低。所以應該選擇一個合適的駐留集大小。

    考慮一個極端情況,若某進程共有100個頁面,則該進程的駐留集大小為100時進程可以全部放入內存,運行期間不可能再發生缺頁。若駐留集大小為1,則進程運行期間必定會極頻繁地缺頁。

    注意:系統為某個進程分配N個物理塊等價于某個進程的駐留集大小為N

    4.1.2 分配、置換策略
  • 固定分配:操作系統為每個進程分配一組固定數目的物理塊,在進程運行期間不再改變。即,駐留集大小不變
  • 可變分配:先為每個進程分配一定數目的物理塊,在進程運行期間,可根據情況做適當的增加或減少。 即,駐留集大小可變
  • 局部置換:發生缺頁時只能選進程自己的物理塊進行置換。
  • 全局置換:可以將操作系統保留的空閑物理塊分配給缺頁進程,也可以將別的進程持有的物理塊置換到外存,再分配給缺頁進程。
  • 分配、置換策略搭配:

  • 固定分配局部置換:系統為每個進程分配一定數量的物理塊,在整個運行期間都不改變。若進程在運行中發生缺頁,則只能從該進程在內存中的頁面中選出一頁換出,然后再調入需要的頁面。
    這種策略的缺點是:很難在剛開始就確定應為每個進程分配多少個物理塊才算合理。(采用這種策略的系統可以根據進程大小、優先級、或是根據程序員給出的參數來確定為一個進程分配的內存塊數)
  • 可變分配全局置換:剛開始會為每個進程分配一定數量的物理塊。操作系統會保持一個空閑物理塊隊列。當某進程發生缺頁時,從空閑物理塊中取出一塊分配給該進程;若已無空閑物理塊,則可選擇一個未鎖定的頁面換出外存,再將該物理塊分配給缺頁的進程。
    采用這種策略時,只要某進程發生缺頁,都將獲得新的物理塊,僅當空閑物理塊用完時,系統才選擇一個未鎖定的頁面調出。被選擇調出的頁可能是系統中任何一個進程中的頁,因此這個被選中的進程擁有的物理塊會減少,缺頁率會增加。
    鎖定:系統會鎖定一些頁面,這些頁面中的內容不能置換出外存(如:重要的內核數據可以設為“鎖定”)
  • 可變分配局部置換:剛開始會為每個進程分配一定數量的物理塊。當某進程發生缺頁時,只允許從該進程自己的物理塊中選出一個進行換出外存。如果進程在運行中頻繁地缺頁,系統會為該進程多分配幾個物理塊,直至該進程缺頁率趨勢適當程度;反之,如果進程在運行中缺頁率特別低,則可適當減少分配給該進程的物理塊。
  • 可變分配全局置換:只要缺頁就給分配新物理塊
    可變分配局部置換:要根據發生缺頁的頻率來動態地增加或減少進程的物理塊

    4.2 何時調入頁面
  • 預調頁策略:根據局部性原理,一次調入若干個相鄰的頁面可能比一次調入一個頁面更高效。但如果提前調入的頁面中大多數都沒被訪問過,則又是低效的。因此可以預測不久之后可能訪問到的頁面,將它們預先調入內存,但目前預測成功率只有50%左右。故這種策略主要用于進程的首次調入, 由程序員指出應該先調入哪些部分。
  • 請求調頁策略進程在運行期間發現缺頁時才將所缺頁面調入內存。由這種策略調入的頁面一定會被訪問到,但由于每次只能調入一頁,而每次調頁都要磁盤I/O操作,因此I/O開銷較大。
  • 預調頁策略運行前調入; 請求調頁策略運行時調入
    4.3 從何處調入頁面
  • 系統擁有足夠的對換區空間:頁面的調入、調出都是在內存與對換區之間進行,這樣可以保 證頁面的調入、調出速度很快。在進程運行前, 需將進程相關的數據從文件區復制到對換區。
  • 系統缺少足夠的對換區空間:凡是不會被修改的數據都直接從文件區調入,由于這些頁面不會被修改,因此換出時不必寫回磁盤,下次需要時再從文件區調入即可。對于可能被修改的部分,換出時需寫回磁盤對換區,下次需要時再從對換區調入。
  • UNIX 方式:運行之前進程有關的數據全部放在文件區,故未使用過的頁面,都可從文件區調入。若被使用過的頁面需要換出,則寫回對換區,下次需要時從對換區調入。
  • 4.4 抖動(顛簸)現象

    剛剛換出的頁面馬上又要換入內存,剛剛換入的頁面馬上又要換出外存,這種頻繁的頁面調度行為稱為抖動,或顛簸
    產生抖動的主要原因是進程頻繁訪問的頁面數目高于可用的物理塊數(分配給進程的物理塊不夠)

    為進程分配的物理塊太少,會使進程發生抖動現象。為進程分配的物理塊太多,又會降低系統整體的并發度,降低某些資源的利用率

    為了研究為應該為每個進程分配多少個物理塊,Denning提出了進程 “工作集”的概念

    駐留集VS 工作集

  • 駐留集:指請求分頁存儲管理中給進程分配的內存塊的集合。
  • 工作集:指在某段時間間隔里,進程實際訪問頁面的集合。
  • 操作系統會根據“窗口尺寸”來算出工作集。

    例: 某進程的頁面訪問序列如下,窗口尺寸為4,各時刻的工作集為?

    工作集大小可能小于窗口尺寸,實際應用中,操作系統可以統計進程的工作集大小,根據工作集大小給進程分配若干內存塊。

    如:窗口尺寸為5,經過一段時間的監測發現某進程的工作集最大為3,那么 說明該進程有很好的局部性,可以給這個進程分配3個以上的內存塊即可滿足進程的運行需要。

    一般來說,駐留集大小不能小于工作集大小,否則進程運行過程中將頻繁缺頁。

    拓展:基于局部性原理可知,進程在一段時間內訪問的頁面與不久之后會訪問的頁面是有相關性的。 因此,可以根據進程近期訪問的頁面集合(工作集)來設計一種頁面置換算法——選擇一個不在工作集中的頁面進行淘汰。

    4.5 頁面分配策略小結

    總結

    以上是生活随笔為你收集整理的13 操作系统第三章 内存管理 虚拟内存 请求分页管理方式 页面置换算法 页面分配策略的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。