內存管理:頁式虛擬內存管理

頁式存儲管理——虛擬內存——缺頁中斷,頁面替換算法

開章明意: 創建一個進程(創建進程是在磁盤中),進程以字節爲單位編號,然後再進程分爲許多頁(每頁4KB),內存中有對應的頁框(設定同頁)。通過頁表(記錄頁和頁框的對應關係),將最需要的頁調入內存,其他頁留在磁盤中。根據CPU的需要動態的更新頁表,並調入調出頁,實現對內存的充分利用。
本質就是:內存局部讀入進程,其餘的存儲在磁盤中


內存不夠用的問題—— 現階段通常使用8G內存,但一個大型遊戲就要10G+內存,如何解決?
虛擬內存:給每個進程分配一個獨立的地址空間(本質在磁盤上),每個進程獨立的地址空間就叫虛擬內存。 虛擬內存中的頁是連續的,但可以對應到內存中不連續的頁框,這樣就實現了對內存的充分利用。(不要求內存提供連續的存儲空間)
在這裏插入圖片描述
當進程建立時, 數據儲存於磁盤內的虛擬內存空間,也不需要爲該進程去配置主內存空間,只有當該進程的頁被調用的時候纔會被加載到實際內存中。
在這裏插入圖片描述
操作系統爲了管理內存,給每個進程都分配獨立的地址空間,對32位的系統而言,這個空間的大小是4GB。這4GB並不是實際的物理內存,實際上並不存在,因此有虛擬內存這一名稱。

建立映射關係: 頁(page),頁框(frame),頁表
分爲大小相等的多個塊,稱爲頁(Page).每個頁都是虛擬內存中一段連續的地址(一般一頁爲4Kb),其中一部分對應物理內存上的一塊(稱爲頁框,通常頁和頁框大小相等),還有一些沒加載在內存中的對應在硬盤上。
內存構成: 8G, 按字節爲單位編號(0-許多,這些編號就叫做地址),再按頁框(一般爲4KB)爲單位進行與磁盤的數據交換.

頁表結構: ——頁表完成虛擬地址到物理內存地址的映射,每個進程都有一個自己的頁表,
在這裏插入圖片描述
頁表的每一項的屬性
1.頁號——頁框號
2.偏移量:內存的基地址加上偏移量找到想要的內存地址 即地址空間計算時的公式
3.存在位:頁是否在內存中
頁表中每個項通常爲32位,既4byte,除了存儲虛擬地址和頁框地址之外,還會存儲一些標誌位,比如是否缺頁,是否修改過,寫保護等。

頁表存在MMU(memory management unit 內存管理部件)中
在這裏插入圖片描述

缺頁中斷,頁面置換
進程線性地址空間裏的頁面不必常駐內存,在執行一條指令時,如果發現要訪問的虛擬內存的頁並不存在於物理內存中(存在位爲0),那麼停止該指令的執行,併產生一個頁不存在異常,故障處理程序從磁盤中取得缺的頁放入內存,如果內存已滿按頁面置換算法來廢棄某個頁面,將其所佔據的物理頁釋放出來,再調入所需頁。

頁面置換算法:決定將哪些頁面替換出去
選擇哪些頁替換出去就顯得尤爲重要,如果算法不好將未來需要使用的頁替換出去,則以後使用時還需要替換進來,這無疑是降低效率的。

1.最佳置換算法(Optimal Page Replacement Algorithm)
將未來最久不使用的頁替換出去,這聽起來很簡單,但是無法實現。但是這種算法可以作爲衡量其它算法的基準
2.時鐘替換算法: 最常用的算法
3.先進先出算法:淘汰在內存中最久的頁,這種算法的性能接近於隨機淘汰。並不好
4.最近不常使用算法: 淘汰最不經常訪問的頁項

空閒內存管理
系統要用什麼樣的數據結構記錄內存的使用情況? ——
空閒區鏈表
用一個表來記錄內存中空閒的頁框
在這裏插入圖片描述
當很多個空閒分區都能滿足進程的內存需求時,應該選擇哪個分區進行分配? —動態內存分配算法
1.最先匹配(First Fit Allocation):足夠大的第一個空閒區 最簡單 不用搜索整個表
在這裏插入圖片描述
2.最佳匹配算法(Best fit): 搜索整個空閒區表,找到符合要求的最小空閒區 應用最廣泛
在這裏插入圖片描述
3.最差匹配算法(Worst fit): 搜索整個表,分配最大的可用空間,性能最差
在這裏插入圖片描述


內存管理機制完善(三項實際中使用的技術)
對核心的頁式虛擬內存管理的完善: ** 兩級頁表機制 + 頁面高速緩存技術 + 段頁式存儲管理**
1.段頁式存儲管理(實際使用的管理方式): 頁式存儲管理能有效地提高內存利用率,而分段存儲管理能反映程序的邏輯結構並有利於段的共享。如果將這兩種存儲管理方法結合起來,就形成了段頁式存儲管理方式。段頁式管理就是將程序分爲多個邏輯段,在每個段裏面又進行分頁,即將分段和分頁組合起來使用。
2…兩級頁表:二級頁表 頁目錄—頁表 二級結構,節省內存
3…頁面高速緩存技術:又稱爲快表,提供中間由虛擬地址轉換爲物理地址時的緩存(緩存思想,緩存最常用的頁),可以直接將虛擬地址映射到物理地址,加速分頁過程
在這裏插入圖片描述


其他的一些基本概念:
1.重疊overlay ——即段式管理
如果一個程序需要使用比物理內存更大的內存空間怎麼辦?
此時,可以將程序按照功能分成一段一段功能相對完整的單元,一個單元執行完成後再執行下一個單元,這就是重疊(overlay)
2.交換技術:在磁盤中創建交換區,把一個最需要處理的進程完全調入內存(進程調度算法),使該進程運行一段時間。內存中進程未處於運行態時,就調出內存到磁盤交換區(即掛起),再調另一個完整進程進內存。空閒進程主要存在磁盤上,所以當他們不運行時就不會佔用內存
3.動態重定位:基址寄存器,界限寄存器
基址寄存器: 寄存程序的起始物理地址
界限寄存器: 寄存程序的長度
在這裏插入圖片描述
爲什麼不能直接使用物理地址:
1.內存不夠直接運行大型程序:內存往往是不夠用的: 建立認知—— 計算機開機會啓動大約100個進程,每個大約5-10M,
工作中的PS應用程序佔 1G 左右內存 一個大型遊戲就是10G+內存需求
2.無法併發:併發的概念——舉例理解: 多個程序保持就緒態,隨時可以運行
在這裏插入圖片描述
不同程序使用內存中不同的地址塊 —— 使用絕對物理地址: 導致對內存地址的不正確訪問(因爲兩個程序都使用絕對物理地址,兩個程序訪問地址衝突導致程序崩潰)
3. 在簡單嵌入式系統中可以直接引用物理地址
在這裏插入圖片描述
內存管理直觀—— 進程管理器: ctrl + Alt + delete
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章