目录
1.分段机制中的图
2.分页机制中的图
3.页表
3.1页表结构
3.2 地址转换的实例
如图:逻辑地址空间是16位64kB,物理地址空间是15位32kB,逻辑地址空间大小和物理地址空间大小是不一致
的,但是每一页和每一页帧的大小是一样的,都是10位1kB.
逻辑地址(4,0),对应的三个标志位是100,它的位置对应着flags。根据上图,可知它的dirty bit是1,
resident bit是0,clock/reference是0;因此可以知道逻辑地址(4,0)在物理内存地址中实际是不存在
的,如果CPU访问这个逻辑地址会抛出一个内存访问异常.
逻辑地址(3,1034),对应的三个标志位是011,它的位置(也就是页号的位置)对应着flags.根据上图,可知
它的dirty bit是0,resident bit是1,clock/reference是1;因此可以知道逻辑地址(3,1034)在物理地
址中存在.由于逻辑地址的页内偏移和物理地址的帧内偏移是一样的,所以页表不需要保存偏移。根据页表,
页号3对应的页帧号是4,再加上它们的偏移量相等,所以逻辑地址(3,1034)对应的物理地址是(4,1023).
这个页表是由操作系统维护.
3.3 TLB
3.4 二级页表
在二级页表中,逻辑地址中的页号部分分成了2部分,p1和p2.
p1,p2表示的是页表项在一级页表中和二级页表中的页号.
二级页表寻址过程:
(1)寻址的时候首先要找一级页表,一级页表的起始地址CPU是知道的,将p1(页号)作为index
可以查到对应的页表项.
(2)一级页表项中存放着二级页表的起始地址,根据二级页表项的起始地址和p2这个索引号,
可以找到二级页表中对应的页表项,二级页表项里面存的就是对应的frame number.
frame number+对应的offset就可以得到最终物理地址.
p1找二级页表的起始地址,p2中找到真正的物理地址.
看上面的寻址过程又多了一次寻址和处理,而且页表都放在内存里,空间开销是很大,但是通过这种方式
可以使得某些不存在映射关系的页表项就不需要再驻留在内存中了,比如说一级页表中有一个页表项的
中的驻留标志位为"未驻留"(resident bit是0),则表示映射关系不存在,那么在二级页表中的整个页表
就没有必要再驻留在内存中了,这样就节省了空间.
对比单级页表,不管驻留标志位是怎样的,即使映射关系不存在,对应的空间仍然需要保留.
在分级页表中,驻留标志位是"未驻留"的时候,就不需要保留相关的页表项信息,这样就极大节省了空间.
多级时间换空间,时间用TLB来缓解.
3.5 多级页表
64位系统可以用5级页表来表示.
3.6 反向页表
有没有一种方法尽量使得页表的大小与逻辑空间大小无关,只与物理空间大小相关?
解决大地址空间问题.
4.笔记逻辑图
5.推荐阅读
推荐阅读1