虛擬內存的基本思想
按照固定大小將進程的地址空間分爲多個頁面,每一個頁面內部都有連續的地址.這些頁被映射到物理內存,但是並不是所有的頁都在內存中時程序才能運行.當程序需要已經在物理內存中的地址空間時,由硬件完成映射;當程序引用不在內存中的地址空間時,產生缺頁中斷,由操作系統將頁面調入內存.
進程運行內存模型
分頁
-
地址的轉化
建立頁表,通過MMU(內存管理單元)來完成線性地址到物理地址的轉換
-
頁表項的結構(不同進程共享內存的 安全性)
保護位標記了 讀,寫,執行三個權限
修改位標記了是否被修改,如果被修改那麼頁框在重新分配前,需要先持久化到硬盤
訪問位是供頁面置換算法使用
高速緩存位是是否啓用高速緩存,需要實時輸入的設備需要關閉高速緩存 -
加速分頁:快表(TLB)
- 快表是在MMU中,可以減少內存訪問次數
- 軟件管理TLB,當訪問的頁表不在TLB中時,發出指令讓操作系統來處理(換出一頁)
- 軟失效:在內存,不在頁表;硬失效:不在內存
- 針對大內存的頁表
- 多級頁表
- 倒排頁表
倒排頁表是在每個頁表框記錄下 是哪個進程的哪個頁表項 使用當前頁表框,減少了存儲壓力,但是增大了查詢的複雜度(每次都要遍歷倒排頁表)
- 頁面置換算法
最優頁面置換;最近未使用(R位定時清零)根據R,M位來決定換出哪個;先進先出;時鐘置換;最近最少使用;
工作集頁面置換算法:局部性原理
寫時複製,共享庫(相對跳動)
段頁式存儲
分頁和分段的區別
1、分頁機制會使用大小固定的內存塊,而分段管理則使用了大小可變的塊來管理內存。
2、分頁使用固定大小的塊更爲適合管理物理內存,分段機制使用大小可變的塊更適合處理複雜系統的邏輯分區。
3、段表存儲在線性地址空間,而頁表則保存在物理地址空間。