2011年系統架構設計師真題7題
7.虛擬存盤器發生頁面失效時,需要進行外部地址變換,即實作( )的變換,
A.虛地址到主存地址
B.主存地址到 Cache 地址
C.主存地址到輔存物理地址
D.虛地址到輔存物理地址
這個題比較坑,答案是D, 我們一步步分析:(如果僅僅了解頁式存盤管理,那么這題很容易就選A了)
虛擬存盤器中,如果頁面失效,會發生缺頁中斷,即訪問的資料不在記憶體中,需要將磁盤中的資料加載到記憶體,這個程序中磁盤中的資料加載到記憶體,到底發生了什么?
有個大前提,缺頁中斷了,也就是我們要訪問的資料不在記憶體中(不在“頁表”中),如果記憶體已經滿了,那么需要進行頁面淘汰,并將所要訪問的資料加載到淘汰頁面的位置,如果記憶體沒有滿,那么就將所要訪問的資料加載到記憶體的空閑位置,
1. 所要訪問的資料加載到淘汰頁面的位置
要淘汰記憶體中的頁面,需要頁面置換演算法, 比如FIFO、LRU等,淘汰是直接清理掉嗎?并非如此,要淘汰的時候,需要判斷該頁面的資料是否已經被修改了,如果被修改了,需要寫回到磁盤,試想一下,如果不回寫到磁盤,那么我們修改的資料是不是就永久的丟失了?
所以,記憶體中的頁面被置換的時候,如果修改位為“1”,那么就要將資料回寫,如何回寫呢? 那是不是要找到該頁面當時是如何從磁盤加載到記憶體的?
這時候就需要“外頁表”了,它記錄了作業系統中記憶體的虛擬地址與磁盤物理地址的映射關系,通過虛擬地址找到該頁在磁盤中的準確位置(磁盤機號、柱面號、磁頭號和扇區),然后寫回,
到此位置,上面題的答案就出來了, 外部地址變換,需要通過虛擬地址找到磁盤的物理地址,然后將被置換的頁面寫回到磁盤,
2. 所要訪問的資料加載到記憶體的空閑位置
要訪問的資料,從磁盤加載到記憶體的空閑位置,需要記錄以下從磁盤哪個具體位置加載到記憶體的,這時候也需要維護以下“外頁表”,即為虛擬記憶體的虛擬地址到磁盤物理地址的映射,
綜上,無論記憶體是否滿,從磁盤加載資料到記憶體時,都要訪問“外頁表”,也就是虛擬地址與磁盤物理地址的映射,
那么我們經常說的頁表,其實是內頁表,是內部地址轉換的時候用的,也就是通過虛擬地址定位到記憶體的物理地址,我們我們寫的Java、C++代碼, 宣告了一個變數a,這個a的地址是虛擬地址,我們要改a的值,就需要通過“頁表”找到實際的物理地址,然后更改物理地址上保存的內容,
總的來說,“外頁表”是虛擬地址與磁盤物理地址的映射關系表,“頁表”是虛擬地址與記憶體物理地址的映射關系表,
關于作業系統的存盤管理可以參考以下兩篇文章:
http://www.ylaihui.com/blog/article/9280?rootCategoryId=16
http://www.ylaihui.com/blog/article/9276?rootCategoryId=16
文章最后附上作業系統的地址變換流程圖:

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/290223.html
標籤:其他
上一篇:Nginx總結
