操作系统之多级页表
Linux的内存分页管理 - Vamei - 博客园 (cnblogs.com)
虚拟地址 = 逻辑地址
为什么有多级页表
对每一个进程来说,能够用到的地址是有限的,因此如果对虚拟地址的每一个页都设置一个对应项,那么页表的大小是
4GB内存空间 4KB的页大小
共有 2 20 2^{20} 220个页
每个页占据4B(假设)
那么页表占据的空间是 2 22 2^{22} 222B
也就是4MB
这个内存的开销很大
多级页表
前8bit是一级页表,后12bit是二级页表
从前8bit寻址一级页表,里面存着的是对应二级页表的入口地址
二级页表拥有相同的一级页表,里面存着的才是对应的物理地址块的入口
首先第一个好处,不用连续的4MB了,各个页表这里总不用必须强制连在一起
假设还是和原来一样,每一个逻辑页都要记录,那么实际的内存要比4MB还要大
但是!
如果一级页表中所有的内存都没有使用的话,这个页表项就对应为空,那么二级列表就不存在
因此还会大大减少空间的使用
三级列表
最新的Linux就是三级页表
64位机器的页表都是4级的,
不管多少级页表,页表寄存器始终指向一级页表的起始位置 Page Table Base Address
名词解释
MMU
内存管理单元
把逻辑地址翻译成物理地址,其实就是前面说的页表还有段表。
TLB
每多一级页表就可以
原理就是在cache中简历一个快速的列表访问器,如果可以击中就得到物理地址,不能就去多级列表中查