2014-10-26 225 views
1

我有一個關於確定頁面大小的架構類的HW問題。我看到,已經有關於這個SO進入這裏:確定頁面表大小

Determine page table size for virtual memory

,但我有將其應用於我的問題煩惱。

據我所知,一般方程爲:

(共#頁)×(頁面大小)

但是,當我做數學的數字沒有意義。有人能幫我看看我做錯了什麼嗎?

字節可尋址存儲器, 48位虛擬空間, 16 KB的頁面大小(14位來表示),
4 GB物理存儲器(22位來表示),& 有效的,骯髒的,參照對每個比特頁面

一個應用程序的表大小是多少?

總#頁= 2 ^2分之48^ 14 = 2^34

頁面大小= 16KB

總計頁面大小=(總#頁)×(頁面大小)= 2^34 x 16 kB = 274877906944 kB?!?!?

一些幫助將非常感謝 - 顯然有一些我做錯了。

謝謝。

+0

1)這是單層頁面表嗎? 2)虛擬地址空間的虛擬頁面數量限制是最大的嗎?頁表項是32位還是64位? – user3344003 2014-10-27 00:14:51

回答

1

你用頁表項混淆頁:

  1. 頁表由頁表項
  2. 每個頁表項擁有一個地址到一個頁的物理內存
  3. The page is a 16kB slice of memory

您希望將4GB物理內存映射到多個16kB頁面上。

所以你需要(4 * 10^6/16 * 10^3)= 250頁(不會忽略)

每個地址以頁表條目其是,它由32位整數保持的物理內存中的地址以及關於該頁面的一些修飾符/信息位。

每個進程需要至少一個頁表。它由250個頁面表項組成。每一頁表項的大小是32位(4B)號(稱它爲任何你想要的)

所以需要一個過程的總大小是:

250 * 4B = 1000 B = 1KB的

爲什麼不使用基於x86 MMU所使用的分頁模型的方法:

您所描述的單級別分頁機制的問題是每個(無論多小)進程都需要:4GB/16kb = 4 * 10^6 B/16 * 10^3 B = 0,25 * 1000 = 250頁表項
250 * 4字節(每項32位)=每過程1 KB

這看似不起眼並不但在這裏你已經使用16個KB的頁面(例如大多數x86系統使用4KB頁,所以你需要1MB每個進程

這就是爲什麼x86使用兩級尋呼過程中,每個進程都有1024個目錄項和每個這些條目的保存頁面表的地址(持有1024頁表項)。因此,進程的最小分配內存變爲: 4個字節(頁目錄項)+ 1024 * 4個字節(1024個32位頁表項) 每個頁表項都指向內存中的一個4kB物理頁面。

1024頁目錄項*爲每個目錄* 4kB的頁1024個表項=尋址存儲器

虛擬地址包括4GB大致是:

  • 頁目錄項索引
  • 頁表進入指數
  • 在4KB的頁面偏移

ŧ他的意思是,即使增加單個頁面的大小(從而減少了所需的頁表條目數量),也需要更大的數字來描述偏移量。