x86架構下,頁面大小爲什麼是4K?

前提:32位邏輯空間的計算機OS,兩級頁表,每個頁中每個條目佔4bytes,即32位的數據
以上前提是目前X86架構的32爲系統的真實情況;

設頁大小爲X(byte),則X/4爲每個頁可以存取的條目的個數,兩級頁表的地址轉換關係如下圖所示:

這裏寫圖片描述

假設在一個32位的條目中存放此內存的地址,則2*log2(X/4)就是圖1中,p1+p2的位數;

2^(p1 + p2):系統可以尋址多少個頁面
(X / 4)^2:前兩級頁表共可以選擇多少entry,因爲第一級頁表entry個數爲4,第二級相同;

系統可以尋址的頁面數目 = 前兩級頁表共可以選擇多少entry,即2^(p1 + p2) = (X / 4)^2====>2*log2(X / 4) = p1 + p2;

此外:如果頁大小爲X,那麼爲了偏移量能夠尋址所有的X位,需要:2的d次方 = X,即log2(X) = d;

由圖可知p1 + p2 + d = 32,即2*log2(X / 4) + log2(X) = 32====>X = 4096,即頁的大小爲4096bit = 4K;

以上只是硬件在最充分利用資源情況下的方式,有人說爲什麼其他大小的頁面(如8k)不行?不是不行,是這麼做就是傻x,爲什麼?解釋如下:

前提如上面所述,如果頁面大小是8k,d就必須等於13(2^13=8k),p1+p2=19;
此時每個entry還是4B,則每個頁面共有entry=8K/4B=2048個;
假設用p2尋址2048個entry,則p2=11,此時p1=8;
問題來了,p1=8,則第一級頁表只能尋址2^8=256個entry,此時第一級頁表就有2048-256=1792個entry不能使用,這是多大的資源浪費???!!!

當然系統其他地方開銷是需要平衡的,所以4K是一個綜合評價後的結果,但是以後的大型系統,內存可能上升到T級別,到那時再用4K頁就是傻X,目前ARM v8 64位的Linux中,大內存情況下2M是比較合理的,而且OS中對其支持的很完美;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章