昨天參加網易的筆試,被一個操做系統的分頁式管理難住啦,原本就忘得差很少啦,地址給的仍是16進制,真是就懵啦。就把分頁式存儲管理又看了一遍,記錄下。spa
1.分頁式存儲管理基本原理:操作系統
分頁式存儲管理容許把進程分配到不相鄰的分區中。首先將進程的邏輯地址空間劃分爲大小相等的塊,且塊相對比較小,每一個塊稱爲一頁(Page),由頁號和頁內地址組成;htm
其次,將內存空間也劃分爲一樣大小的塊,每一個塊稱爲一頁面(PageFrame)。blog
頁:索引
頁號進程 |
頁內地址內存 |
|
|
假設邏輯地址爲A,頁面大小爲L,則頁號和頁內地址爲:ci
頁號=A/Lget
頁內地址=A%Ltable
2.當進程將要運行時,操做系統會爲進入內存的每一個用戶進程創建一張頁表,記錄進程邏輯地址空間的頁號和內存物理地址空間中的頁面號一一對應關係。同時系統還會創建一張做業表,將當前運行的做業的頁表地址進行登記。
對應關係如圖所示:
進程運行時,經過查找頁表,就能夠找到每頁對應的物理頁面號。頁表就是實現從頁號到物理塊號的地址映射。
3.地址轉換
地址轉換時,先從頁表控制寄存器中找到相應的頁表,再以頁號爲索引去檢索頁表。查找操做由硬件執行。在執行檢索以前,先將頁號與頁表長度進行比較,若是頁號大於或等於頁表長度,則表示本次所訪問的地址已超越進程的地址空間。因而,這一錯誤將被系統發現併產生一地址越界中斷。若未出現越界錯誤,則將頁表始址與頁號和頁表項長度的乘積相加,便獲得該表項在頁表中的位置,因而可從中獲得該頁的物理塊號,將之裝入物理地址寄存器中。與此同時,再將有效地址寄存器中的頁內地址送入物理地址寄存器的塊內地址字段中。這樣便完成了從邏輯地址到物理地址的變換。右圖示出了分頁系統的地址變換機構。
網易的筆試題:
23.有用戶態進程A,其虛擬內存頁爲1KB,A佔用了64頁,內存大寫爲128KB,A進程將愛子到內存的頁面和物理內存塊的編號對應關係以下:
頁面編號 物理內存塊編號
0 4
1 9
2 5
3 8
請根據以上信息回答以下問題,並給出計算過程:
1)虛擬地址爲015D對應的物理地址是多少?
2)物理地址爲113C對應的虛擬地址爲多少?
3)進程A有一做業長度爲8頁,試圖訪問虛擬地址2A3D並保存整型1到該地址對應的物理地址空間,以後又嘗試從該地址讀取保存的數據,請問A進程這兩次內存訪問過程可否正常執行?並解釋緣由。
解:
1)虛擬地址爲015D對應的物理地址是 :
1KB=400H (轉換成16進制)
頁號: 015D/400=0
頁內地址:015D%400=15D
查找頁表:0->4
物理地址:4*400+15D=115D
2)物理地址爲113C對應的虛擬地址爲多少?
就是反過來,物理快號:113C/400 = 4
塊內地址:113C%400 = 13C
虛擬地址:0*400+13C=013C
3)進程A有一做業長度爲8頁,試圖訪問虛擬地址2A3D並保存整型1到該地址對應的物理地址空間,以後又嘗試從該地址讀取保存的數據,請問A進程這兩次內存訪問過程可否正常執行?並解釋緣由。
不能。
頁號:2A3D/400 = A
頁內地址:2A3D%400=23D
A>8,超出進程A的頁表長度。
**第三問不是很肯定,若是有錯,請指出,謝謝。第三問我也不太懂。
這個題麻煩的就是16進制的乘除。