作者james732 (好人超)
看板LinuxDev
标题Re: [问题] 关於 multi-level page table 的问题
时间Wed Jan 4 08:09:11 2012
下面的讨论是用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)
1F:推 KAOKAOKAO:推 01/05 20:15
2F:推 mimi0213:linux後面的3g以上的空间都会建起来 01/08 11:14
3F:推 mimi0213:只是後面的l2pte是所有processes share只要一份即可 01/08 11:17
4F:推 justinC:第二层的 table, 要第一个用完才会用第二个(vm连续)? 还是 01/08 17:52
5F:→ justinC:第二层 table, 有可能用了多个 page table, 但未用满 01/08 17:52