請求分頁管理方式

前言

??本文接著上文虛擬內(nèi)存技術(shù)的實現(xiàn),虛擬內(nèi)存技術(shù)的三種實現(xiàn):請求分頁管理方式、請求分段方式、請求段頁管理方式。這三種方式只介紹請求分頁管理方式。
??本文內(nèi)容

1頁表機(jī)制

??回顧請求分頁存儲管理與基本分頁存儲管理的主要區(qū)別:
??(1) 在程序執(zhí)行過程中,當(dāng)所訪問的信息不在內(nèi)存中時,由操作系統(tǒng)負(fù)責(zé)將所需的信息從外存調(diào)入內(nèi)存,然后繼續(xù)執(zhí)行程序。
??(2) 若內(nèi)存空間不夠,由操作系統(tǒng)負(fù)責(zé)將內(nèi)存中暫時用不到的信息換出到外存。
??所以,和基本分頁管理相比,請求分頁管理中,為了實現(xiàn)“請求調(diào)頁”,操作系統(tǒng)需要知道每個頁面是否已經(jīng)調(diào)入內(nèi)存;如果沒有調(diào)入,需要知道該頁面在外存中的哪個地方。
??另一方面,當(dāng)內(nèi)存空間不夠時,要實現(xiàn)“頁面置換”,操作系統(tǒng)需要通過某些指標(biāo)來決定到底換出哪些頁面;有的頁面沒有被修改過,就不用再浪費(fèi)時間寫回外存。有的頁面修改過,就需要將外存中的舊數(shù)據(jù)覆蓋。因此,操作系統(tǒng)也需要記錄各個頁面是否被修改的信息。
??請求分頁管理方式的頁表信息如下:


??所以相對于基本分頁存儲的頁表,請求分頁存儲的頁表新增了狀態(tài)位、訪問字段、修改位、外存地址四個字段。各個字段的作用見上圖。
??基本分頁存儲管理的頁表稱為頁表基本頁表,請求分頁存儲管理的頁表通常稱為請求頁表。

2 缺頁中斷機(jī)構(gòu)

??假設(shè)在一個請求分頁存儲系統(tǒng)中,頁表和內(nèi)存以及外存信息如下:


從請求頁表中可以看出,此時1號頁和2號頁在內(nèi)存中,而0號頁不在內(nèi)存。以及各個頁面在外存中存放的位置。

??如果此時要訪問一個邏輯地址 = (頁號:頁面號) = (0,1024),為了訪問這個地址,需要查詢請求頁表,缺頁中斷機(jī)構(gòu)就會根據(jù)這個查詢結(jié)果作出是否發(fā)出缺頁中斷指令。如果當(dāng)前要訪問的頁不在內(nèi)存中,缺頁中斷機(jī)構(gòu)會發(fā)出一個缺頁中斷信號,然后由操作系統(tǒng)的缺頁中斷程序處理中斷。
??由于缺頁中斷處理過程需要I/O操作,把頁面從內(nèi)存調(diào)入內(nèi)存,在等待I/O操作完成的過程中,缺頁的進(jìn)程需要被阻塞,放入阻塞隊列,調(diào)頁完成后再將其喚醒,放入就緒隊列。

?? 2.1 存在空閑塊

??如果內(nèi)存中有空閑塊,則為進(jìn)程分配一個空閑塊,將所缺頁面裝入該塊,并修改頁表相應(yīng)的頁表項。
??下圖表示調(diào)入0號頁之后的狀態(tài):

?? 2.2 不存在空閑塊

??如果內(nèi)存中沒有空閑塊,則由頁面置換算法選擇一個頁面淘汰,若該頁在內(nèi)存期間被修改過,則要將其寫回外存。未修改過的頁面不需要寫回外存。
??對于上例,如果選擇淘汰2號頁,由于2號頁被修改過,所以需要將其寫回外存,之后2號的內(nèi)存空間就可以給0號塊使用。

??缺頁中斷是因為當(dāng)前執(zhí)行的指令想要訪問的目標(biāo)頁面未調(diào)入內(nèi)存而產(chǎn)生的,因此屬于內(nèi)中斷。
??一條指令在執(zhí)行期間,可能產(chǎn)生多次缺頁中斷。(如copy A to B,即將邏輯地址A中的數(shù)據(jù)復(fù)制到邏輯地址B,而A和B屬于不同的頁面,則有可能產(chǎn)生兩次中斷)。


3 地址變換

??和基本分頁存儲管理的地址變換相比,區(qū)別在于:

(1) 查到頁表項時需要進(jìn)行判斷,判斷頁面是否在內(nèi)存中。
(2) 當(dāng)需要調(diào)入頁面時,但有沒有空閑內(nèi)存時,需要進(jìn)行頁面置換。
(3) 當(dāng)頁面需要調(diào)入或調(diào)出,需要修改請求頁表中新增的表項。

??(1) 根據(jù)邏輯地址得到頁號和頁內(nèi)偏移量。
??(2) 對頁號進(jìn)行越界判斷。
??(3) 訪問頁表判斷頁是否在內(nèi)存中,如果在繼續(xù)執(zhí)行程序。
??(4) 如果訪問的頁不在內(nèi)存中,產(chǎn)生缺頁中斷請求,當(dāng)前進(jìn)程阻塞,缺頁中斷程序從根據(jù)頁表從外存找到缺失的頁。
??(5) 判斷內(nèi)存空間是否已滿,未滿,將缺頁調(diào)入內(nèi)存,修改頁表。如果已滿,從內(nèi)存中選擇一個頁面置換,如果頁面發(fā)生修改,需要將修改寫回外存,然后再將缺頁調(diào)入內(nèi)存,并修改頁表。
??(6) 頁面調(diào)入后,阻塞的進(jìn)程會處于就緒態(tài)等待處理機(jī)調(diào)度。

??幾個細(xì)節(jié)問題

(1) 只有“寫指令”頁表才需要修改“修改位”。并且如果有快表機(jī)構(gòu),一般來說只需要修改快表中的數(shù)據(jù),只有要將快表項刪除時才需要寫回內(nèi)存中的慢表。這樣可以減少訪問內(nèi)存次數(shù)。
??這也就是說,如果存在快表機(jī)構(gòu),當(dāng)修改了一個頁面時,只需要修改快表中的相應(yīng)的頁表項,而不需要修改內(nèi)存中的頁表,一方面快表操作更快,另一方面還減少了訪問內(nèi)存次數(shù),否則一次修改要修改兩個表。
(2) 和普通中斷一樣,缺頁中斷也需要保留CPU現(xiàn)場,以便進(jìn)程再次運(yùn)行時能從中斷的狀態(tài)繼續(xù)運(yùn)行。
(3) 這里換成那個頁面是通過頁面置換算法決定的,頁面置換算法見下一節(jié)頁面置換算法
(4) 換入/換成頁面都需要啟動慢速的I/O操作,可見,如果換入/換成過于頻繁,會有很大的開銷。
(5) 頁表調(diào)入內(nèi)存后需要修改慢表和快表兩個表,但是這和(1) 并不沖突。

ps:請求分頁系統(tǒng)中的頁表應(yīng)該稱請求頁表,由于麻煩,后面的部分我沒有進(jìn)行區(qū)分了,都叫成了頁表,讀者明白就可以了。

4 小結(jié)

??本文完

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 虛擬存儲器的基本概念 分析常規(guī)存儲器管理不足的原因: 1)常規(guī)存儲器管理方式的特征 一次性:作業(yè)在運(yùn)行前一...
    盆栽木只閱讀 1,433評論 0 0
  • 請求分頁管理方式 1 概述 請求分頁系統(tǒng)建立在基本分頁系統(tǒng)基礎(chǔ)之上,為了支持虛擬存儲器功能而增加了請求調(diào)頁功能和頁...
    saviochen閱讀 5,430評論 0 4
  • 1. 虛擬存儲器的基本概念 分析常規(guī)存儲器管理不足的原因: 1)常規(guī)存儲器管理方式的特征 一次性:作業(yè)在運(yùn)行前一...
    Whocare_2f87閱讀 1,190評論 0 0
  • 繼續(xù)來學(xué)習(xí)內(nèi)存管理之虛擬內(nèi)存管理 傳統(tǒng)存儲管理方式同時將多個進(jìn)程保存在內(nèi)存中以便允許多道程序設(shè)計。 一次性作業(yè)必須...
    KevinCool閱讀 1,693評論 0 1
  • 存儲器管理 存儲器的層次結(jié)構(gòu) 存儲器的層次結(jié)構(gòu):寄存器-高速緩存-主存-磁盤緩存-磁盤-可移動存儲介質(zhì) 可執(zhí)行存儲...
    顏洛濱閱讀 1,056評論 0 2

友情鏈接更多精彩內(nèi)容