您當前的位置:首頁 > 動漫

每個頁表項佔用一個位元組是怎麼來的?

作者:由 知乎使用者QCmhwt 發表于 動漫時間:2022-12-24

每個頁表項佔用一個位元組是怎麼來的?知乎使用者QCmhwt2022-12-24 01:53:21

今天看作業系統課本里面有一段話:

>例如,對於一個具有 32 位邏輯地址空間的分頁系統,規定頁面大小為 4KB 即 2^12B ,則在每個程序頁表中的頁表項可達 1 兆個之多。又因為每個頁表項佔用一個位元組,故每個程序僅僅頁表就要佔用 1MB 的記憶體空間,而且還要求是連續的。

“又因為每個頁表項佔用一個位元組”是怎麼來的?百思不得其解,搜尋也沒有得到答案。

我的想法是,一個 32 位長的邏輯地址,分頁大小為 4KB ,那麼就有 12 位用來儲存頁內地址(偏移量),剩下 20 位都是頁號,所以有 2^20 即 1 兆個頁表項。頁表的一項包括 頁號 和 塊號,至少都是 20bit ,怎麼會只佔用 1B 呢?書上也沒有任何解釋。

每個頁表項佔用一個位元組是怎麼來的?2018-12-07 11:58:14

巧了,昨天我也是糾結這個問題,想了一晚上都沒太明白。

然後今天上知乎搜了一下,看到了其中一個回答才恍然大悟,原來頁號是隱藏的,頁表項是隻存塊號,其他多的的是控制資訊。

說頁號是隱藏的是因為要求必須連續,這樣每個頁表項就從0到n有了固定的編號了,這個編號就相當於頁號,頁表項裡不用再額外儲存,只用儲存相應的塊號就可以了。

一個邏輯地址的前半段就是這個頁號,在地址變換時把頁表暫存器裡的基址地址(葉表在記憶體的起始地址,也就是0號頁號對應的地址)加上這個頁號×頁表項長度,就是該頁號對應的頁表項在記憶體的地址,訪問即可以得到該頁表項裡儲存的物理塊號。

啊抱歉抱歉,才意識到這是兩年前的問題了,現在回答也沒啥意義了,但我還是忍不住想寫一下,相當於作為我自己的筆記了吧,大家可以不用理我,不過要是發現我有理解的不對的地方歡迎指出(/ω\)

另外要求頁表必須連續就是這個原因。

但是必須連續這個條件有點苛刻,如果一個程序有10頁的頁表,那必須全部裝進記憶體,有點浪費記憶體資源,於是有了二級頁表。

就拿這10頁的頁表為例,二級頁表的作用就是再拿出一頁來儲存這10頁的基址地址(實際上一頁可以儲存很多頁表項,但是本例中只用到了10個)作為索引表,因此執行一個程序時就只用把這一個索引表裝入記憶體就能找到所有對應的地址了(然而代價是多次訪問記憶體甚至是磁碟)。

同樣這個索引表的一個頁表項裡也只存放對應頁第0個頁表項的物理塊號,1到10的頁號是隱藏的(因為連續,和上面說的原理是一樣的)這樣的話那10頁頁表就可以不用連續儲存了,因為有了索引表就知道每一頁的第0號頁表項的起始地址,然後根據二級頁號(相當於某一頁頁表的頁表項偏移量)就能計算出某頁真正的物理地址,最後加上頁內偏移量即可。

每個頁表項佔用一個位元組是怎麼來的?2021-12-08 03:08:26

時隔一年我來回答一下 頁表項包含虛頁號和實業號 這裡虛頁號是從零到1兆連續的 在頁表項中可以隱去,因為頁表項也是連續的 兩者一一對應 然後你說的八bit應該是實頁號 佔八位

每個頁表項佔用一個位元組是怎麼來的?2019-11-24 17:29:53

同看到這裡,跟題主疑問一模一樣。

原文來源:《計算機作業系統》湯子瀛第四版 P142

應該是每個程序大小規定最多隻能佔用256個頁面吧。。

想了半天也只有這個解釋了。

看到的時候給我整懵逼了,搞得我開始懷疑自己這麼長時間是不是對頁表的儲存機制理解錯了。。。

不給大前提真的是耍流氓啊。

標簽: 頁表  地址  10  記憶體  儲存