具有快表的地址变换机构
时间局限性:会有大量连续的指令需要访问同一个内存块的数据的情况(程序中的循环)
空间局限性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为很多数据在内存中都是连续存放的;比如数组)
引入快表后,地址的变换过程
快表中存储了访问频率很高的页表项,访问速度极快(容量很小,只能存储部分页表项)
两级页表
为什么要引入两级页表呢,单级页表的问题
一个支持32位逻辑地址空间的进程(这个进程的理论最大为4G),页表项大小为4B(连续的时候刚好可以填满一个内存块), 页面大小为4KB。
页面大小4KB(2的12次方),说明32位要拿出12位(就是4KB)来记录页面内的偏移地址,剩余20位用来表示页号/块号(即最大能记录页号为2的20次方的页号),那么单级页表就需要有2的20次方个页表项来记录每个页号对应的块号, 而每个页表项大小又为4B(即2的2次方),那么这个单级页表就需要 2的20次方 × 2的2次方 的内存大小去存放它(4MB),而每个内存块(即页面大小)的大小是2的12次方(即4KB),那么就需要 2的22次方 除以 2的12次方 等于 2的十次方个内存块(页框)去存放它(一个4G的进程的单级页表)
注意:上述问题中,如果进程需要4GB的内存,那么就需要4MB的连续内存来存放该进程的单级页表(单级页表需要连续才能比较便捷的计算)。这里引入两级页表不是为了解决4MB很大的问题,而是要解决需要连续4MB内存的问题,引入两级页表后,4GB的内存依然需要4MB的内存空间去存放页表项,只不过是可以分散放在不同的内存块(页框)中了
两级页表甚至多级页表的思想,先根据页面大小4KB(2^12)确定逻辑地址40,要拿12位来它在内存块中的地址,剩下的28位,为什么不能超过10位,因为一个内存块4KB,最多装入2^10个 4B的页表项,而各级页表的大小不能超过一个页面