Re: [問題] 關於 multi-level page table 的問題

看板LinuxDev作者 (好人超)時間14年前 (2012/01/04 08:09), 編輯推噓4(401)
留言5則, 3人參與, 最新討論串1/1
下面的討論是用x86的10/10/12的架構為例 第一層Page directory共1024個Entry 第二層Page table同樣1024個Entry,共有1024個Table 每個Entry的大小都是4 bytes 4GB的memory space,每4KB一個Page的話 這樣總共會有1048576個Page 在一層的情況下,如果每個Page table entry是4 bytes 擺放整個表格,就需要4194304 Bytes=4MB的連續空間 對於每一隻執行中的程式,OS都需要找4MB的連續空間來擺這個Table 這並不容易,也容易有很多問題 另外,並不是每一隻程式都會用到4G的Memory space 如果一隻程式只用到512MB,那麼它只需要131072個Page entry 也就是512KB就夠了 為每隻程式準備固定4MB的表格並不划算 但如果準備長度不定的表格,又會增加軟硬體的複雜度 二層的設計,讓第一層的大小固定,都是1024個Entry OS會為每隻程式都準備第一層的表格,4KB也不會那麼困難 但第二層就是依需求才會建立 OS並不會一開始就把1024個對應的Page table全部生出來 第二層的每個Page table都可以描述4MB的空間,其實也不小了 如果這隻程式需求小於4MB,第二層可能只要做一個Page table就夠了 這樣佔用的記憶體就是只有第一層的4K跟第二層一個表格的4K,比固定4M省很多 我想,節省記憶體的前提是:大部份程式會用到的記憶體都遠小於4G 另外,第二層的1024個表格,可以分散在記憶體各處,不必連續 即使程式真的吃滿了4G的Memory space,雖然會多耗費第一層的4KB 但OS也不需要去找4MB的連續記憶體來擺,只要能找到1025個4KB就可以了 這樣記憶體的分配與回收會比較有彈性 我看的書都一直強調,大塊的連續記憶體是很珍貴的資源...XDD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 115.80.245.147 ※ 編輯: james732 來自: 115.80.245.147 (01/04 08:22)

01/05 20:15, , 1F
01/05 20:15, 1F

01/08 11:14, , 2F
linux後面的3g以上的空間都會建起來
01/08 11:14, 2F

01/08 11:17, , 3F
只是後面的l2pte是所有processes share只要一份即可
01/08 11:17, 3F

01/08 17:52, , 4F
第二層的 table, 要第一個用完才會用第二個(vm連續)? 還是
01/08 17:52, 4F

01/08 17:52, , 5F
第二層 table, 有可能用了多個 page table, 但未用滿
01/08 17:52, 5F
文章代碼(AID): #1F0vYfo0 (LinuxDev)
文章代碼(AID): #1F0vYfo0 (LinuxDev)