作業系統,二級頁表儲存方式

2021-06-28 15:34:17 字數 1404 閱讀 6300

標籤(空格分隔): 作業系統

有乙個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,僅當學習交流,個人理解之用,如果有錯或者分析不夠嚴謹,歡迎指正。按字 圖結合起來分析,相信還是比較容易看懂。頁 將程序劃分的塊,對應的大...

作業系統 頁儲存

為了能知道每個程序的每個頁面在記憶體中的存放位置,作業系統需要為每個程序建立一張頁表。如上圖所示頁表,記錄了頁面在記憶體中對應的記憶體塊號,頁表一般存放在記憶體中。在配置了頁表後,程序執行時,通過查詢該錶,即可找到每頁在記憶體中的記憶體塊號。可見頁表作用是實現從頁號到記憶體塊號的位址對映。這就是頁儲...

作業系統離散儲存方式

離散分配方式分為三種 分頁儲存方式引出了三個概念,乙個叫頁面 在頁表中對應頁號 乙個叫物理塊 在頁表中對應塊號 乙個叫頁表。頁表 系統為每乙個程序建立了一張頁面和物理塊的對映表。結構如下 這裡我們不妨先分析一下,這樣的結構有哪些優勢和問題。優勢在於,通過將邏輯位址和實體地址分開劃分,然後設定對映建立...