我之前一直有一个疑惑,为什么同样都是把页表存储在内存中,多级页表就比一级页表要省空间?
如果你也有这个疑惑,看完这篇文章你就明白了
先说一些基本概念(参考《现代操作系统》)
虚拟存储器的基本思想是:程序、数据和堆栈的总大小可能超过可用的物理内存的大小。由操作系统把程序当前使用的那些部分保留在主存中,而把其他部分保存在磁盘上。例如,对于一个16MB的程序,通过仔细地选择在每个时刻将哪4MB内容保留在内存中,并在需要时在内存和磁盘间交换程序的片段,这样这个程序就可以在一个4MB的机器上运行。
由程序产生的地址被称为虚拟地址,它们构成了一个虚拟地址空间。在使用虚拟存储器的情况下,虚拟地址不是被直接送到内存总线上,而且是被送到内存管理单元(Memory Management Unt,MMU),MMU把虚拟地址映射为物理内存地址。
虚拟地址空间以页面为单位划分。在物理内存中对应的单位称为页帧。页面和页帧的大小总是一样的。
假设页面的大小为4KB,下面是一个页表给出虚拟地址与物理内存地址之间的映射关系
在上图为例的16个4KB页面情况下MMU的内部操作如下图
这样的页表,有两个很主要的问题
1)页表有可能非常大