昨天參加網易的筆試,被一個操作系統的分頁式管理難住啦,本來就忘得差不多啦,地址給的還是16進制,真是就懵啦。就把分頁式存儲管理又看了一遍,記錄下。
1.分頁式存儲管理基本原理:
分頁式存儲管理允許把進程分配到不相鄰的分區中。首先將進程的邏輯地址空間划分為大小相等的塊,且塊相對比較小,每個塊稱為一頁(Page),由頁號和頁內地址組成;
其次,將內存空間也划分為同樣大小的塊,每個塊稱為一頁面(PageFrame)。
頁:
頁號 |
頁內地址 |
|
|
假設邏輯地址為A,頁面大小為L,則頁號和頁內地址為:
頁號=A/L
頁內地址=A%L
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進制的乘除。