看板 LinuxDev 關於我們 聯絡資訊
下面的討論是用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)
KAOKAOKAO:推 01/05 20:15
mimi0213:linux後面的3g以上的空間都會建起來 01/08 11:14
mimi0213:只是後面的l2pte是所有processes share只要一份即可 01/08 11:17
justinC:第二層的 table, 要第一個用完才會用第二個(vm連續)? 還是 01/08 17:52
justinC:第二層 table, 有可能用了多個 page table, 但未用滿 01/08 17:52