筆記NO1.內(nèi)存中頁式存儲機制

1.邏輯頁面的概念

假設(shè)cpu總線是32位的,那么最通用的邏輯頁面劃分手段為

通用邏輯頁面劃分

該圖表示將前20位劃分為頁號表示區(qū)域,其數(shù)字范圍為0-1048575,后12位表示頁面大小,其數(shù)字范圍為0-4095。

通常如果不足一頁的大小,為了補齊,會在后面補0補成一頁的大小。舉個例子,如果頁面大小為4kb,程序只有15kb的大小,那么必然會有一個頁面只有3kb的大小,為了補足該一個頁面的完整性,會在其空間后面補0補到4kb的大小。

2.物理頁框的概念

將內(nèi)存空間劃分大小相等的若干存儲區(qū),從0開始編號。


物理頁框劃分

幾乎和邏輯頁面的劃分一模一樣。也是為了更好的映射建立聯(lián)系,通常頁內(nèi)地址的大小是一樣的,也就是其占用的bit位是相同多的。不得不說的一點是,我看到的理論是,基本上要滿足邏輯頁面>=物理頁框的標準(ps:該理論最常可能接觸的地方即,32位操作系統(tǒng)只能用到4gb的物理內(nèi)存,內(nèi)存再多了,32位操作系統(tǒng)也是浪費用不到的),該塊內(nèi)存區(qū)域才會被操作系統(tǒng)使用,不然可能無法滿足邏輯頁面到物理頁框的映射。

3.進程頁表:


進程頁表示意圖

操作系統(tǒng)中每個進程會維護一張頁表,操作系統(tǒng)內(nèi)核會向進程分配邏輯地址,而進程中頁表則是可通過頁號以及頁號的邏輯地址去追蹤到內(nèi)存中的具體位置,也就是頁框的位置。一句話概括來說,頁表的功能是提供了具體的邏輯頁面和物理頁框的映射關(guān)系。頁表本身存在內(nèi)存中。注意,每個進程都會有一張自己的頁表。

4.操作系統(tǒng)的請求表

既然每個進程都要向操作系統(tǒng)內(nèi)核索要(或者說分配)邏輯地址,那么操作系統(tǒng)內(nèi)核也需要有一張表格來維護哪些邏輯地址已經(jīng)被使用了。即我要講的請求表。


請求表示意圖

請求表中有進程號,請求頁面數(shù),頁表始址,頁表長度,狀態(tài)位構(gòu)成。其主要管理邏輯地址。

5.操作系統(tǒng)的頁框存儲表

跟請求表類似,實際物理地址也需要有一張表格來管理頁框的狀態(tài),如果不管理會導(dǎo)致分配物理地址映射到邏輯地址時,將已分配的物理地址映射到其他進程邏輯地址,想想這會有多恐怖,你的映射關(guān)系將完全混亂。(其實一個頁框映射到不同邏輯地址也是共享內(nèi)存的實現(xiàn)方式,不過這個跟頁框存儲表關(guān)系不大,需要另說)。

一般構(gòu)成頁面存儲表的方法有兩種:位示圖和空閑頁面鏈表。其中位示圖更為高效和常見,所以我們只介紹這一種方法。


位示圖示意圖

這就是位示圖示意圖,很好理解吧,建立一個表格,表格的格子數(shù)量就是頁框的數(shù)量,1代表已分配,0代表未分配(可分配)。當然我覺得這個x,y坐標應(yīng)該沒那么簡單,畢竟要映射到真實的物理地址,可能是類似x,y坐標的單位是其他的一些東東,或者可以是一些數(shù),這些數(shù)可以通過一些簡單的變換映射到真實的物理地址。

6.那么邏輯頁面是如何映射到物理地址的呢?

這就是分頁存儲的地址轉(zhuǎn)換機制了。廢話不多說,上圖。


地址轉(zhuǎn)換步驟圖

首先要能認識頁表控制寄存器。

當我們要訪問某個頁框地址(物理地址),我們一定有的信息是其邏輯地址,進程號以及請求表。

根據(jù)進程號我們可以找到頁表始址,以及頁表長度。這樣我們就找到了目標頁表,這時我們還要查詢目標頁面到目標頁框的映射關(guān)系。

將頁表始址,以及頁表長度載入到頁表控制寄存器中,再根據(jù)邏輯地址的頁號(這里會有一個是否越界的判斷,只要頁號小于頁表長度,大于0即可),我們就可以找到頁框號啦。

因為頁面大小以及頁框大小幾乎總是一致的(這就是對齊思想的體現(xiàn)? 對齊真的會省去很多麻煩),這時頁內(nèi)地址也就是偏移量,在邏輯頁面和物理頁框中的偏移量是一樣大的,那么物理地址的頁內(nèi)地址就可以直接使用邏輯地址的頁內(nèi)地址了。

7.相聯(lián)存儲與快表技術(shù):

使用該技術(shù)是為了盡可能的使用cpu的高速計算能力,降低系統(tǒng)io的開銷。

相聯(lián)存儲及專用的高速緩沖存儲器(容量小,但是比內(nèi)存快很多),而其存儲的即是快表??毂硎俏覀冏罱L問過的部分頁表,根據(jù)計算機的局部原理,這些頁表有很大的概率被再次訪問,這時我們的cpu就可以使用更快的高速緩沖存儲器而不是內(nèi)存中去查詢物理地址的位置了。這樣我們的訪問機制變?yōu)榱耍涸儐栂嗦?lián)存儲器的快表中的頁表項->再詢問內(nèi)存中的頁表項

8.物理頁框的分配流程:

計算需要的頁框數(shù)量n

查詢位示圖,看看是否有足夠的那個空閑頁框可分配

如果有足夠的空閑頁框,則設(shè)置頁表大小為n,填入pcb(進程管理塊)中。

申請頁表區(qū),把頁表始址填入請求表中。

分配n個空閑頁框,將頁框號和頁號填入。

修改位示圖。

完成分配。

總結(jié):

正常來說,頁式管理機制訪問內(nèi)存中的某個物理地址,需要訪問內(nèi)存兩次(1次查表,1次查數(shù)據(jù))。

頁式存儲管理的優(yōu)點在于解決了內(nèi)存整塊(分區(qū))存儲管理的碎片問題(即內(nèi)存中分區(qū)管理,可能造成兩個特別大的內(nèi)存中夾著個小內(nèi)存,如果整片內(nèi)存都是這種情況,所有的小內(nèi)存既存不住東西(因為每次只能一整塊全存進去,而不能拆分),又會浪費大量的巨額內(nèi)存空間,碎片問題的概念建議谷歌去具體了解),便于管理。

缺點在于不易實現(xiàn)共享,不便于動態(tài)鏈接。

最后編輯于
?著作權(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ù)。

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