之前讨论了分段和分页,现在看下页表的主要涉及的页表结构。
分层分页
大多数现代计算机系统支持大逻辑地址空间(2^32 ~ 2^64)。这种情况下,页表本身可以非常大。
例如:假如具有32位逻辑地址空间的一个计算机系统。如果系统的页大小为4KB(2^12)。那么页表可以多达100万的条目 (2^32/ 2^12)。假设某个项目有4字节。那么每个进程需要4MB的地址物理地址来存储页表本身。显然,我们并不想在内存中连续分配这么多页表。
这个问题的一个简单的解决方法就是讲页表划分为更小的块。完成这种划分方法有很多种。
最简单的方法就是使用两层分页算法,就是将页表再分页,例如,再次假设一个系统,具有32位逻辑地址空间和4K大小的页。一个逻辑地址被分为20位的页码和12位的页偏移。
因此要对20位的页表进行再分页,所以该页码可以分10位的页码和10位的偏移。这样一个逻辑地址就会分为如下表示。
其中p1表示的用来访问外部页表的索引,而p2是内部页表的页偏移。采用这种结构的地址转换方法。由于地址转换有外向内,所以这种也称为向前映射页表。
在这种分页结构的方案中,假设,系统是64位系统,那么当它的地址空间就有2^64, 当再以4KB作为地址的话,那么页表就会2^52个条目,那么就把页表进行细分,从而形成三级分层分页,四级分层分页等等。
为了装换每个逻辑地址,74位的系统需要7个级别的分页,如此多的内存访问时不可取的,从而分层分页在64位的系统并不是最优的。
哈希页表
处理大于32位的地址空间的常用方法是哈希页表,采用虚拟页码作