標籤(空格分隔): 作業系統
有乙個24bit的作業系統,
4kb / page (每個頁表佔4kb),
4byte / page table entry(每個頁表項佔4b)
問:給你乙個虛擬位址,要求你求出其在記憶體中的實體地址
由每個頁表佔4kb,可得 4k
b=212
24bi
t4kb
=212=
4096
所以對映表,由 [0 ~ 4095] 的頁表項組成,每個頁表項佔4byte
現在有虛擬位址virarr[0
,224−
1]每個頁表pagetable= 4096
頁號virpageno= viraddr / 4096
位偏移offset= viraddr % 4096
實體地址塊號phypageno,要從對映表中查詢
最後實際的實體地址 ph
ypag
e=ph
ypag
eno∗
4096+o
ffse
t 程式實現如下
#define page_size 4096
int pagetable[page_size];
unsigned
int getphyaddr(unsigned
int viraddr)
對於要求連續的記憶體空間來存放頁表的問題,可利用將頁表進行分頁,並離散地將各個頁面分別存放在不同的物理塊中的辦法來加以解決,同樣也要為離散分配的頁表再建立一張頁表,稱為外層頁表,在每個頁表項中記錄了頁表頁面的物理塊號。
下面我們仍以前面的24位邏輯位址空間為例來說明。
由於總容量16kb的頁表,太大了,所以要拆分成4個1kb的頁表
每個頁表項 4byte = 4096 bit
現在 24 位的作業系統被分為
index1(內層頁表)
index2(外層頁表)
offset(頁內偏移)
2 bit
10 bit
12 bit
程式實現如下
#define page_size 4096
typedef
int array[1024]; //一級頁表
array *outtable[1024];
//初始化,4個二級頁表
void init()
} unsigned
int getphyaddr(unsigned
int virarr)
作業系統 頁式儲存方式,頁,頁表,頁表項
作業系統和計算機組成原理裡都講到記憶體管理的頁式管理,但是本人以及很多初次學習分頁的時候,都會迷茫頁表大小和頁表項大小之間的關係,本人仔細分析了後寫了這篇blog,僅當學習交流,個人理解之用,如果有錯或者分析不夠嚴謹,歡迎指正。按字 圖結合起來分析,相信還是比較容易看懂。頁 將程序劃分的塊,對應的大...
作業系統 頁儲存
為了能知道每個程序的每個頁面在記憶體中的存放位置,作業系統需要為每個程序建立一張頁表。如上圖所示頁表,記錄了頁面在記憶體中對應的記憶體塊號,頁表一般存放在記憶體中。在配置了頁表後,程序執行時,通過查詢該錶,即可找到每頁在記憶體中的記憶體塊號。可見頁表作用是實現從頁號到記憶體塊號的位址對映。這就是頁儲...
作業系統離散儲存方式
離散分配方式分為三種 分頁儲存方式引出了三個概念,乙個叫頁面 在頁表中對應頁號 乙個叫物理塊 在頁表中對應塊號 乙個叫頁表。頁表 系統為每乙個程序建立了一張頁面和物理塊的對映表。結構如下 這裡我們不妨先分析一下,這樣的結構有哪些優勢和問題。優勢在於,通過將邏輯位址和實體地址分開劃分,然後設定對映建立...