目的:程序产生的
虚拟地址
32
位
(高
10
位,中
10
位,低
12
位)转换成不同的物理地址呢?(共享页面的除外)
手段:通过
PGD
页目录表、
PTE
页面表,表转换(这些表由操作系统维护)即转换函数
通过这两张表的内容和线性地址,可以完成
4G
的虚拟空间的转换,正因为程序不可能用到
4G
空间,
没有用到的地址空间,就不需要为其地址映射建立
PTE
表
,
分配物理页面
了,所以两级目录会为我们节省存储空间,假设程序用到了整个的
4G
空间,那两级目录是没有意义的,另外还有一点通过两级目录,可以映射到不连续的物理页面上,这也是两级目录的一个好处。
步骤:
1
。每个进程有个
mm_struct
结构,此结构保存了一个
PGD
指针,通过这个转换成
CR3
的值,重置
CR3
,(算法为此值减去
0X 0C 0000000,
因为程序产生的是虚拟地址,
CR3
要的是物理地址)
步骤
2
。
CR3
为基址,以
线性地址高
10
位
做为索引,找到
PGD