[理工] 反轉分頁表和一般page table的差別

作者: sooge (老衲)   2019-01-30 13:35:47
大家好 小弟對於反轉分頁表的疑惑一直不解,一直以來都是死記硬背反轉分頁表的定義
,但始終不明白到底和一般的page table到底差在哪
希望有人可以指點一下迷津T﹏T
一般的page table是紀錄page number和frame number,將page number轉為frame number
後再透過frame number去memory找資料
反轉分頁表的定義是:page table是以physical memory作為紀錄對象,若有n個frame,
則inverted page table就有n個entry
每個entry紀錄<process id,process number>配對資訊
代表此frame是哪個page所佔用
但我對inverted page table的儲存方法一直沒有感覺
明明最後還是要去memory查資料
存成一般的page table和存成<process id,process number>的樣子有什麼差別嗎?
為什麼反轉分頁表就可以節省page table size。
求各位強者幫忙解答
一般page table
https://i.imgur.com/zABkNB2.jpg
inverted page table
https://i.imgur.com/RYDUL0I.jpg
作者: S2067030 (Ep.Yao)   2019-01-30 13:44:00
因為反轉分頁表只有一份,不會浪費太多空間存別人資料
作者: sooge (老衲)   2019-01-30 13:48:00
可是page table也是一份像multilevel paging和hashing page table都是一個entry裡塞很多資料所以可以縮小size 但反轉分頁表就....無法理解
作者: S2067030 (Ep.Yao)   2019-01-30 13:52:00
我想一下怎麼解釋字比較少一般的分頁表,會花很多實體記憶體,在記錄其他的實體記憶體正在使用的情形,但是反轉分頁表,只有一份紀錄全部當然這樣做缺點就是你筆記寫的那兩個,所以才要用雜湊
作者: gama79530 (Perfect Man)   2019-01-30 13:58:00
page table是用virtual page number去做tag用來對應到physical frame number,可以有很多個page table給不同process用
作者: y2j60537 (skkkkuu)   2019-01-30 13:59:00
cpu裡面有10個process就有10個page table
作者: ko330 (ko330)   2019-01-30 14:00:00
一般的 page table 10個process在跑就有10份阿
作者: S2067030 (Ep.Yao)   2019-01-30 14:02:00
你把他想成,每個人都有一份資料(page table)去查找phy跟大家使用雜湊共用一份去查找phy,後者比較省空間(反轉)執行的時候就是把ASID送過去逐一查找反轉分頁表
作者: sooge (老衲)   2019-01-30 14:07:00
哦哦懂了 雖然還是有點不太理解中間轉換過程 總而言之就是雜湊的裂化版就對了?
作者: S2067030 (Ep.Yao)   2019-01-30 14:12:00
轉換過程就是Process產生pid跟p跟頁篇移量然後用pid去反轉分頁表找實體記憶體的進入點找到以後在+d (頁偏移量) 就可以拿到phy位置了
作者: gama79530 (Perfect Man)   2019-01-30 14:14:00
inverted page table感覺就很像反過來,直覺上的思考方式是把physical frame number當tag用來對應到virtual page number,不過實際上我們只會需要把VA轉PA,如果照這種方式的話會不知道對應到哪一個virtual address space所以解套的辦法是把process id也加進去VA裡面,用這種方式的話完整的VA應該是processID串virtual address
作者: sooge (老衲)   2019-01-30 14:25:00
所以和一般的page table就是差一個pid而已嗎 因為要紀錄所有的process資訊,上面大大們講了那麼多,但感覺我理解有障礙= = 這樣反轉分頁表紀錄了所有process的轉換資訊 pagetable不是應該要爆炸大嗎一個frame對應到一個entry怎麼反轉分頁表不會和memory一樣大
作者: S2067030 (Ep.Yao)   2019-01-30 14:31:00
大到靠北所以才要靠Hash幫忙減少次數啊y
作者: gama79530 (Perfect Man)   2019-01-30 14:31:00
舉個例子,假設2g記憶體,32bit的address spacepage size 1 byte,OS最多只會有4個processpage table entry不考慮任何其他bit ,例如dirty bit(這個例子很極端根本不可能,不過只是舉例而已)使用一般的page table的話一個entry要32+30個bit,4個processes要4*2^32個entries使用inverted page table的話一個entry要有2+32+30個bit但總共有1*2^30個entry稍微算一下那一個比較省空間很明顯inverted page table單一entry的size確實是要比普通的page table entry大,但是因為它總共會有的entry數量會比一般的page table少很多,所以才可以省空間
作者: sooge (老衲)   2019-01-30 14:49:00
哦哦終於懂了!! 所以反轉分頁表也是藉由一個entry裡塞很多資料量來減少page table size的方法 然後因為一個frame只能對應的到一個特定的process的page 所以才失去了memory sharing的特性感謝樓上所有大大
作者: S2067030 (Ep.Yao)   2019-01-30 15:02:00
同為考生 在18天就解脫了 加油!再啦 幹
作者: sooge (老衲)   2019-01-30 15:22:00
一起加油!! 我是再25天XD
作者: TWkobe (中華柯比)   2019-01-30 15:45:00
你想的沒錯 反轉會超大 除了hashing 還有用教粗粒度做法一般你看到的是page level, 有的會用block level
作者: sooge (老衲)   2019-01-30 16:06:00
謝謝TW大補充
作者: gama79530 (Perfect Man)   2019-02-03 14:29:00
我發現我好像有寫錯不小心把TLB的觀念混進我的例子裡了一個entry會需要32 + 30 bit的是TLB的entry不是pagetable的entry正確的應該是page table要有2^32個entry,一個entry要30個bitinverted page table是有2^30個entry,一個entry要2+32 個bit

Links booklink

Contact Us: admin [ a t ] ucptt.com