操作系統之虛擬內存
L24 內存換入-請求調頁與內存換入
-
Swap in
/Swap out
-
讓用戶使用,使用分段,為了提高效率,引入分頁;然后鏈接分段分頁使用虛擬內存
-
用換入,換出實現
大內存
-
把要使用的部分換入到物理內存,建立映射
-
請求,換入(調入頁面),建立映射(頁面映射)
-
請求調頁
-
MMC查找缺頁,就需要調頁,即缺頁中斷。
-
訪問的內存地址沒有在內存中(沒有映射),就需要在磁盤中找到地址調入內存,從而實現虛擬內存
-
一個實際系統的請求調頁
-
CR0,2,3
等CPU的寄存器 -
申請空閑頁面,讀磁盤,建立映射(放入頁表)
-
修改頁表
L25 內存換出
-
Swap out
-
選擇一頁淘汰,換出到磁盤,選擇哪一頁,就是頁面置換算法
-
FIFO頁面置換
-
MIN頁面置換
-
最遠將使用的頁淘汰
-
LRU頁面置換
least recent use
-
最近最少使用的頁面淘汰
-
客觀世界:局部性,稀疏性,低秩性
-
LRU置換算法實現
-
很巧妙的利用時間戳,缺頁利用時間戳最小的值換出
-
實際操作系統實現很困難,每執行一條指令,進行地址重定位,需要查看當前頁面的時間戳,效率很低,然后還要考慮時間戳溢出
-
LRU准確實現,用頁碼棧
-
棧頂始終是最近訪問的頁面
-
實際代價太多,LRU近似實現
-
將時間計數變為是和否
-
循環一圈,不是之前的最近最少訪問,近似成:最近沒有訪問,轉一圈如果沒有改變值,即是該值最近沒有被訪問過
-
二次機會算法,Clock算法
-
缺頁少,從1置為0就少
-
R置為1即頁面調入,R置為0即頁面將調出
-
定時清除R位,最近一段時間又沒有使用,所以就清除
-
還需要解決一個問題
-
理解:頁面換入換出>實現虛擬內存>為了實現段頁機制>為了實現程序執行起來>最終位進程
-
一個進程分為很多段,形成很多頁面,但是頁框可能不足夠,此時產生缺頁中斷,進行頁面調入調出
-
當訪問內存時,頁面不存在,產生缺少中斷,然后從磁盤中調入到頁面到物理內存,此時可能葉框滿,需要根據clock算法將頁面寫入到磁盤,然后再將調入的頁面寫入到內存中
-
swap
分區管理