win10 4g內存最佳虛擬內存 怎樣設置虛擬內存( 二 )


如何實現虛擬內存技術如你所見,虛擬內存允許一個作業/進程多次調入內存,如果連續分配不方便實現,所以虛擬內存技術的實現是基于不連續的分配管理 。
傳統的基本分頁管理、基本段管理、基本段頁面管理和虛擬內存技術分別稱為請求分頁管理(頁面虛擬內存系統)、請求段管理(段虛擬內存系統)和請求段頁面管理(段虛擬內存系統) 。
這些概念非常容易混淆,其實很容易區分 。記住這句話就OK了,摘自百度百科:
如果不具備請求頁面調整和頁面替換的功能,則稱為基本分頁管理(或純分頁管理) 。不具備支持虛擬內存實現的功能 。它要求每個作業(進程)在運行之前都要加載到內存中 。
請求分段存儲管理是類似的 。它以分段存儲管理為基礎,但增加了請求段調整和段替換的功能 。
請求頁面調整和頁面替換的概念類似于請求段落調整和段落替換的概念 。這里以請求頁面調整和頁面替換為例進行說明 。
在程序執行過程中,當被訪問的信息不在內存中時,操作系統負責將所需信息從外存(磁盤)轉移到內存中,然后繼續執行程序(操作系統應提供請求頁面轉移的功能,將內存中缺失的頁面從磁盤轉移到內存中);
如果沒有足夠的內存空,操作系統負責將內存中暫時不用的信息換出到磁盤(操作系統要提供頁面替換的功能,將暫時不用的頁面換出到磁盤) 。
具體來說,在基于頁面的虛擬內存系統中,每當CPU要訪問的頁面不在內存中時,就會產生缺頁中斷,然后由操作系統的缺頁中斷處理程序來處理該中斷 。此時,這個缺頁的進程/作業將被阻塞,放入阻塞隊列,在分頁完成后將其喚醒,并放回就緒隊列 。
如果內存中有空個空閑塊,為這個進程分配一個空個空閑塊,將缺失的頁加載到這個塊中,修改頁表中對應的頁表項 。
如果存儲器中沒有空空閑塊,則頁面替換算法選擇要消除的頁面 。如果在內存期間修改了頁面,則應將頁面寫回外部內存,未修改的頁面無需寫回外部內存 。
可見這并不是一個簡單的過程,基礎分頁管理中簡單的頁表已經不能勝任這樣的工作 。
讓我們先回顧一下基本分頁管理的頁表 。它只有兩個字段:頁碼和塊號:

請求分頁管理的頁表自然要復雜得多:
1)為了實現“請求頁轉移”的功能,操作系統需要知道每一頁是否已經轉移到內存中,如果沒有,還需要知道該頁在磁盤中的位置 。
2)內存不夠空時,為了實現“換頁”功能,操作系統需要一些指標來決定換出哪一頁 。如果有些頁面沒有修改,就沒有必要浪費時間寫回磁盤;如果某些頁面已經被修改,則需要覆蓋磁盤中的舊數據 。因此,操作系統還需要記錄每個頁面是否被修改過 。
為此,將該名稱添加到請求分頁管理的頁表中 。4個字段:
狀態:頁面是否已被轉移到內存中 。
訪問字段:可以記錄頁面最近被訪問了多少次,也可以記錄頁面最后一次被訪問的時間,可以作為頁面替換算法換出頁面的參考 。
修改為:頁面被轉移到內存后是否被修改過?
Memory:這個頁面在內存中的存儲地址 。

頁面替換算法也是一個很重要的內容,在本文中應該是一起寫的 。但想到“頁面替換”的問題不僅存在于虛擬內存中,在計算機設計的其他領域也會發生(例如,大多數計算機會在一個或多個緩存中存儲最近使用的32字節或64字節的內存塊,當這些緩存滿時,必須選擇并丟棄一些塊來存儲最近使用的內存塊) 。

推薦閱讀