1.虛擬存儲器的定義
所謂“虛擬存儲器”,是指具有請求調入功能和置換功能,能從邏輯上對內存容量加以擴充的一種存儲器系統。
虛擬存儲管理下 :內存邏輯容量由內存容量和外存容量之和所決定; 運行速度接近于內存速度; 每位的成本卻接近于外存。
2.虛擬存儲器的實現
虛擬存儲管理:
允許將一個作業分多次調入內存。
若采用連續分配方式,需申請足夠空間,再分多次裝入,造成內存資源浪費,并不能從邏輯上擴大內存容量。
虛擬的實現建立在離散分配存儲管理基礎上
方式:請求分頁/請求分段系統
細節:分頁/段機構、中斷機構、地址變換機構、軟件支持
3.虛擬存儲器的特征
離散分配方式是基礎
多次性:一個作業被分成多次調入內存運行
對換性:允許在作業的運行過程中進行換進、換出。(進程整體對換不算虛擬)
虛擬性:能夠從邏輯上擴充內存容量,使用戶所看到的內存容量遠大于實際內存容量。
請求分頁存儲管理方式
基本分頁 + “請求調頁”和“頁面置換”功能。
換入和換出基本單位都是長度固定的頁面
1)硬件支持
? ?一臺具有一定容量的內/外存的計算機
+ 頁表機制
+ 缺頁中斷機構
+ 地址轉換機構
②缺頁中斷機構
每當要訪問的頁面不在內存時,便產生一缺頁中斷通知OS,OS則將所缺之頁調入內存。作為中斷,需經歷幾個步驟:
a)“保護CPU環境”
b)“分析中斷原因”
c)“轉入缺頁中斷處理程序”
d)“恢復CPU環境”等。
作為一種特殊中斷,與一般中斷有明顯區別:
(1)在指令執行期間產生和處理中斷信號。
(2)一條指令在執行期間,可能產生多次缺頁中斷。
頁面置換算法
進程運行過程中,訪問的頁面不在內存,調入時內存已無空閑空間,需要將內存中的一頁程序或數據調到外存。
頁面置換算法(page replacement algorithms):選擇換出哪些頁面的算法,其好壞直接影響系統的性能。
應具有較低的缺頁率:
頁面調入次數(缺頁次數)/總的頁面使用次數
1)最佳(Optimal)置換算法
Belay,1966年提出的一種理論上的算法
換出以后永不再用的,或在最長(未來)時間內不再被訪問的頁面。
優點:保證獲得最低的缺頁率
不足:無法實現,因為無法預知一進程將來的運行情況
作用:作為參照標準,評價其他算法
2)先進先出置換算法(FIFO)
先進入的先淘汰,即選擇內存中駐留時間最久的頁面予以淘汰。
優點:實現簡單,把一進程已調入內存的頁面按先后次序組織成一個隊列,并設置一個指針(替換指針),使它總是指向隊首最老的頁面。
不足:與進程實際運行規律不相適應(較早調入的頁往往是經常被訪問的頁,頻繁被對換造成運行性能降低)
Belady現象:出現分配的頁面數增多,缺頁率反而提高的異常現象。
描述:一個進程P要訪問M個頁,OS分配N個內存頁面給進程P;對一個訪問序列S,發生缺頁次數為PE(S,N)。當N增大時,PE(S,N)時而增大,時而減小。
Belady現象的原因:FIFO算法的置換特征與進程訪問內存的動態特征矛盾,即被置換的頁面并不是進程不會訪問的。
4)輪轉算法(clock)又稱最近未使用算法(NRU,Not Recently Used),
LRU(最近最久未使用算法)近似算法折衷FIFO
每個頁設一個使用標志位(use bit),若該頁被訪問則將其置為1。
設置一個指針,從當前指針位置開始按地址先后檢查各頁,尋找use bit=0的頁面作為被置換頁。
若指針經過的頁use bit=1,修改use bit=0(暫不凋出,給被用過的頁面駐留的機會),指針繼續向下。到所有頁面末尾后再返回隊首檢查。
影響缺頁率的主要因素
(1)分配給作業的主存塊數:
? 多則缺頁率低,反之則高。
(2)頁面大小:
? 大則缺頁率低;反之則高。
(3)頁面調度算法:
? 對缺頁中斷率影響很大,但不可能找到一種最佳算法。
(4)程序編制方法:
? 以數組運算為例,如果每一行元素存放在一頁中,則按行處理各元素缺頁中斷率低;反之,按列處理各元素,則缺頁中斷率高。
系統抖動:
為了提高處理機利用率,可增加多道程序并發度;
但進程數目增加過多,每個進程分配得到的物理塊太少,在某個臨界點上,會出現剛被淘汰的頁很快又需重新調入;而調入不久又被淘汰出去;出現頻繁缺頁
大部分處理器時間都用在來回的頁面調度上,這種局面稱為系統抖動或顛簸(thrashing)
抖動的后果:
缺頁率急劇增加
內存有效存取時間加長,
系統吞吐量驟減;系統已基本不能完成什么任務,而是忙于頁面對換操作,cpu雖然忙,但效率急劇下降。
根本原因:
頁面淘汰算法不合理;分配給進程的物理頁面數(駐留集)太少。