此篇部落格內容在於著重幫助讀者明白在分頁記憶體管理下,虛擬位址和實體地址轉換計算是怎麼進行的。
有關分頁記憶體管理的其他知識請事先參閱有關資料。^_^
1.對每個程式而言,就好像自己獨佔了記憶體空間從0到極限的計算機。虛擬位址都是以0開始到某個上限結束。這是因為某個程式在何種硬體裝置的機器上執行並不能事先確定(因為寫出來的程式一般都會在很多計算機上執行,而每台計算機的記憶體占用情況事先肯定無法知曉),作業系統自然不可能對症下藥地發出對於某
臺機器的物理主存位址。因此,指令裡面的位址是程式空間(虛擬空間)的虛擬位址(程式位址)。所以當 程式真正執行起來的時候,每個虛擬位址必然要對應著乙個實體地址(實際存在)。既然要對應,那就比如存在某種對應機制。
2.分頁記憶體管理機制將虛擬記憶體和物理記憶體都分成大小一樣大的部分,我們稱為頁,然後按頁進行記憶體分配.一般頁的大小有4kb、8kb、16kb。在該管理機制下記憶體分配單位化而且不需要空閒連續在一起即可使用
(比如第四頁和第8頁都空閒則可以組合起來給乙個程式使用,但在分頁記憶體管理發明之前是不可以的,因
為兩段空間不連續,至於為什麼~~~~~~此處不予解釋,需要了解的同學可以參閱相關資料。)
3.虛擬位址的頁號表示和實體地址頁號表示是從0開始的。(比如虛擬位址的第1頁前面還有第0頁,這個對理解計算非常重 要)。4.理解了上面幾點知識就可以嘗試理解如下圖表:(了解頁表是什麼即可。)
通過頁表我們就可以發現,每個虛擬頁面號都對應著乙個物理頁面號,比如虛擬頁面號是1,查詢該錶
我們就可以知曉虛擬頁面號1對應的物理頁面號在**。之所以有這個表存在,就是因為我們使用的物理
記憶體是不連續的(參考知識點②)。
現在直接上題:
第一步:
由頁面大小為4kb可以得出頁內偏移值為12位,也就是00100000 0000 0100,前面四位為頁面號,
即 0010 0000 0000 0100,由此我們可以知道虛擬頁面為2。
可能到這裡有不少讀者會困惑為什麼是這樣子計算,我以十進位制數做說明。
假設乙個頁面大小是10000kb,已知某個虛擬位址為26000,我們就可以知道這個位址是 虛擬頁面2的起始位址+6000
後的乙個位址。(虛擬頁面0、虛擬頁面1對應了前20000個位址),同理二進位制數也這麼看。
此處還要注意的一點是:1kb=2^10 b=1024b 而不是1kb=1000b。
第二步:
知道了虛擬位址對應的虛擬頁面是2後我們就可以查詢頁表,發現虛擬頁面2對應的物理頁面是110,
110 0000 0000 0000(頁面110的物理首位址)+100(偏移量)=110 0000 0000 0100
&補充題目(一道筆試題)
邏輯位址0對應的頁為0 查詢頁表可知虛擬頁0對應的物理頁為2,
所以物理頁的首位址是2×4×2^10=8192
再加上偏移量0 得出實體地址為8192+0=8192 所以選a。
註明:實體地址是從0開始標註的 ,
假如乙個頁大小為16,
那麼第0頁位址為0~15
所以第1頁首位址為16,也就是1×16=16
所以第2頁首位址為32,也就是2×16=32,
以此類推。
分頁記憶體管理 虛擬位址到實體地址的轉換
引子 這是邏輯位址 虛擬位址 包括程式中列印的變數位址顯示的都是邏輯位址,並不是記憶體空間上的實體地址。每條指令在被執行時,讀取運算元時需要給出運算元所在的記憶體位址,這個位址不能是物理主存位址,因為該程式在哪種硬體設定的機器上執行並不能事前確定,那作業系統就不能在此給出對應於某台機器的實體地址。一...
分頁記憶體管理 虛擬位址到實體地址的轉換
這裡看這篇文章讀懂什麼時分頁記憶體管理 摘抄一部分 4.1 分頁記憶體管理 將虛擬記憶體空間和物理記憶體空間皆劃分成大小相同的頁面,例如4kb 8kb和16kb等。並將頁作為記憶體空間的最小分配單位,乙個程式的乙個頁面 虛擬頁面 可以存放在任何乙個物理頁面中。乙個程式發出的虛擬位址由虛擬頁面號和頁內...
虛擬位址和實體地址,共享記憶體
32位作業系統,定址空間為2 32次方個byte,注意儲存單位是位元組byte 即物理記憶體為4gb 記憶體分布圖 邏輯位址 段表,段偏移量 線性位址 頁表 實體地址 1.每個程序的4g記憶體空間只是虛擬記憶體空間,每次訪問記憶體空間的某個位址,都需要把位址翻譯為實際物理記憶體位址 2.所有程序共享...