利用虛擬記憶體,可以編寫大於實際記憶體的程式;採用部分程式載入到記憶體中,可以同時執行更多的程序,併發度好,效率高。將需要的部分放入記憶體,有些用不到的部分從來不放入記憶體,記憶體利用率高 ,程式開始執行、響應時間等更快。使用虛擬記憶體有利於系統,同時也有利於使用者。
虛擬記憶體的實現
早期:記憶體不足時以程序為單位在內外存之間交換;現在:按需調頁(調頁,也稱惰**換,以頁為單位在內外存 之間交換,即對不在記憶體中的「頁」,當程序執行時要用時才調入,否則不調入)。
虛擬記憶體實現中,部分線性位址對應物理頁,其他對應磁碟相應位置。為了記錄頁是否在記憶體中,我們需要改造頁表,在頁表項中新增有效/無效的標誌位(v/i),在請求調頁的過程中,當訪問沒有對映的線性位址時,會出發頁錯誤處理程式,頁錯誤處理程式將訪問對應的磁碟內容,將其取出放入到記憶體中,然後重新訪問。儘管為了保證效率,分配給乙個程序的物理框好應足夠多,但是根據程式的區域性性原理,頁面4k當調入乙個頁面時,很多程式不會出錯。
具體實現細節如下
load[addr]->沒有對映到物理記憶體(根據addr查表(mmu),查詢標誌位,引發缺頁中斷)
設定缺頁中斷
缺頁中斷處理程式讀取磁碟得到需要的頁
選擇乙個空的頁框,寫入
修改頁表
重新開始指令
如何選取空閒的頁框
空閒的頁框是有限的,如果用完了需要進行頁框的淘汰,有很多的淘汰機制。我們可以用缺頁次數評價淘汰演算法。
fifo
即先入先出原則,如果淘汰的就是下乙個要用的呢?無法**
opt(min)
選擇最遠的將要使用的頁面淘汰,是一種最優的方案,不過預知未來難以做到
lru(opt演算法的可實現版本)
使用歷史來**未來。選取最長時間沒有使用的頁面淘汰,也成為最近最少使用
實現方法:
lru準確演算法代價太大,因此出現了其近似演算法:
clock演算法
每個頁加乙個引用位(reference bit),每次訪問一頁時,硬體自動設定該位為1。選擇淘汰頁:掃瞄該位,是1時清0,並繼續掃瞄;直到碰到是0時淘汰該頁,記錄該位置,下次繼續
具體如下:
演算法缺點:
實際演算法中可以動態設定清除週期的速度,主要看空閒記憶體比例來決定。
虛擬記憶體中的其他問題
寫時複製
為了更快的地建立程序,子程序共享父程序的位址空間,僅當子程序需要更改資料時才複製產生新的頁
換出的頁存放到**
工作集即給程序分配的主存物理空間。作業系統如何決定分配給程序的物理記憶體空間,下面是需要考慮的問題
工作集的兩種分配方式:
置換策略
系統執行過程中可能cpu的利用率大幅下降
每個程序的缺頁率增大 ,缺頁率增大到一定程度,程序總等待調頁完成 ,cpu利用率降低,程序進一步增多,缺頁率更大
這一現象稱為」顛簸「,防止的根本手段給程序分配足夠多的幀。但是分配多少合適呢。
belady異常:對有的頁面置換演算法,頁錯誤率可能會隨著分配幀數增加而增加。
什麼樣的頁面置換沒有belady異常:lru棧實現沒有。
虛擬記憶體中程式的優化
根據程式的區域性性原理,盡量將一起訪問的**放到一起
作業系統概念(九) 虛擬記憶體
有些情況下不需要將整個程式放入記憶體 程式中有處理異常錯誤條件的 陣列 鍊錶 表通常分配了比實際所需要的更多的記憶體 程式某些選項可能很少使用 虛擬記憶體將記憶體抽象成乙個巨大的 統一的儲存陣列,進而將使用者邏輯記憶體與物理記憶體分開,邏輯記憶體的大小不再受限,需要記憶體管理單元mmu將邏輯頁對映到...
作業系統 虛擬記憶體
1.虛擬記憶體術語 虛擬記憶體 程式引用記憶體使用位址與記憶體系統用於識別物理儲存站點的位址是不同的,程式生成的位址會自動轉換成機器指令。虛擬記憶體的大小收到定址機制和可用的備用記憶體量的限制,而不受記憶體儲存位置實際數量的限制。虛擬位址 在虛擬記憶體中分配給某一位置的位址使該位置可以被訪問,彷彿它...
作業系統虛擬記憶體
虛擬記憶體是計算機作業系統提供的一種記憶體管理技術,它使得應用程式認為它擁有連續可用的記憶體 乙個連續完整的位址空間 而實際上,它通常是被分隔成多個物理記憶體碎片,還有部分暫時儲存在外部磁碟儲存器上,在需要時進行資料交換。與沒有使用虛擬記憶體技術的系統相比,使用這種技術的系統使得大型程式的編寫變得更...