挑戰408——操作系統(22)——虛擬存儲器的頁式管理

頁式虛擬存儲器

以頁爲單位的虛擬存儲器,稱爲頁式虛擬存儲器。它的虛擬空間跟主存空間都將被劃分爲相同大小的頁。主存中的頁,稱爲實頁,虛存中的頁,稱爲虛頁。虛擬地址被分爲兩個字段,虛頁號和頁內偏移。爲了對每個虛擬頁的存放位置,存取位置,使用情況,修改情況等等進行等進行說明,操作系統在主存中給每個進程都生成一個頁表。因此,每個虛擬頁表都對應有一個頁表項。頁表是一張存放在主存中的,虛擬頁與實頁對照的映射表。其中存放位置字段用來建立虛擬頁與實頁之間的映射,進而進行地址轉換。有效位用來表示對應頁面是否存在。

指令操作過程

對於採用虛擬存儲機制的系統,指令給出的是虛擬地址(即邏輯地址),因此CPU執行指令時,首先將虛擬地址轉成主存物理地址,才能到主存中存取數據。地址轉換由CPU的存儲器管理部件完成。虛擬地址分成兩個字段,高字段爲虛頁號,低字段爲頁內偏移地址。同樣,物理地址也這樣劃分:
在這裏插入圖片描述
左邊的是虛擬地址,右邊的是物理地址的地址格式。由於兩種的頁面大小是一樣的,因此頁內的偏移地址一樣(也就是爲什麼在進行地址轉換的時候,我們說頁式存儲管理的地址是一維的)。

請求頁式存儲管理

與基本分頁系統的聯繫:請求頁式存儲管理系統基於分頁系統,但在其基礎上,增加了請求調頁功能與頁面置換功能,是目前最常用的一種方式。

工作原理

只要求將當前需要的一部分頁面裝入內存,便可以啓動作業運行,倘若在執行的過程中,出現要訪問的頁面不在內存中,那麼就通過頁面調入功能將其調入,同時還可以將暫時不用的頁面換出到輔存,以騰出空間。因爲頁是根據請求調入的,故稱爲請求頁式存儲管理

硬件的支持

請求頁式存儲管理機制的實現,除了需要內外存以外,還需要頁表機制,地址變換機構,缺頁中斷等等一些硬件。請求頁式存儲管理機制需要解決兩個問題:如何發現和處理訪問頁面不存在主存的情況?
爲此,我們增加了以下字段:
在這裏插入圖片描述
後面的四個字段是新增的
狀態位P:用於記錄該頁是否已經調入內存
訪問字段:記錄該頁多久沒有被訪問了
修改位:標識該頁調入內存後是否被修改過
外存地址:指出該頁在內存外的地址,供調入該頁的時候使用。

那麼當該頁的狀態位爲0,即不在內存的時候,便會產生缺頁中斷請求操作系統將所缺的頁數調入內存中。我們之前提到過中斷,這裏比較一下缺頁中斷與其他一般中斷的區別:

  1. 缺頁中斷,在指令執行期間(即訪存),產生和處理中斷信號,因此它屬於內部中斷。通常CPU外部中斷是在每條指令執行之後。
  2. 一條指令的執行期間可能有多次缺頁中斷。

快表(TLB)

依據程序的局部性原理,一段時間內,進程總是經常訪問某些頁,如果把這些頁放在Cache中而不是主存中,那麼顯然可以提高訪問效率。所以我們把存放在Cache中的頁表稱爲快表(TLB)。相應的存放在主存中的頁表稱爲慢表(page)。類似於Cache與主存的關係,TLB是Page的一個副本,存放了Page很少的一部分。
在查找的時候,TLB與page同時進行,而快表可以根據內容來指定地址(一般採用相聯存儲器)。若快表中有此邏輯頁號,則能很快的找到對應的物理頁號,然後送入主存地址寄存器中,同時終止page的查詢。
因此在同時具有虛擬存儲系統跟Cache的系統中,地址訪問的順序應該是:

TLB -> 頁表 -> Cache ->主存

爲什麼?
我們思考一下。CPU發出訪存指令(即邏輯地址),於是先查找快表跟慢表,再查詢相應的Cache塊(這裏注意區分,我們要找的是地址而不是表,所以還要去Cache中看看有沒有這個地址)。若Cache命中,那麼說明所需的頁面已經調入了主存,也就是page必然命中,但是TLB不一定命中。(因爲Cache是主存的一小部分副本,Cache命中了,說明主存中一定有該內容,而TLB是page的一個副本且是很少的一部分,所以page命中,不一定就是TLB命中)。
反之,若Cache不命中,也不能說明所需要的頁就一定沒有調入內存(Cache是主存的一小部分副本,Cache裏面沒有不代表主存裏面沒有),並且和快表跟慢表是否命中都無關。如果是Page未曾命中,那麼當然是Cache跟主存都不會命中(因爲page在主存,所以page不命中推出主存不命中,從而推出Cahe也一定不會命中)。這種情況就是我們所謂的需要的頁不在主存中,產生了一種叫做缺頁的現象,此時需要執行頁面的置換策略。也就是下一篇要討論的內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章