分页机制是什么

将虚拟地址空间和物理地址空间都按照连续等长的页(Page) 来管理。物理页也叫页框(page frame)。任意一个逻辑页可以映射到任意一个物理页,逻辑上连续的页物理上可以不连续。

分页机制怎样实现、寻址

逻辑页和物理页之间的映射由页表来管理。每个页表项长度为 8B。假如一个页 4KB,则可以存储 512 条映射。因此这一个页可以管理 512*4KB=2MB 的空间。如果空间太大,就需要多级页表。

多级页表之所以可以减少存储开销,是因为有大量逻辑页是没有用到的,不需要保存他们的映射表项。

VA由各级页表的虚拟页号和页内偏移量组成,其中某一级页表的页号也可以看作上一级页表的偏移量。

image.png

寻址过程

第一级页表也叫页目录,地址存在CPU的寄存器中(在X86中是CR3寄存器)。

在寻址时,MMU首先在寄存器中找到页目录地址,再逐级根据页号找到下一级页表的地址,最后根据页内偏移找到需要访问的字节。

有可能从不同的虚拟地址得到同样的物理地址,这叫做内存共享。是一种进程间通信方式,也是写时拷贝(Copy-on-Write, CoW)的基础。

寻址的过程是MMU完成的,但页表是操作系统维护的。页表都放在内存中,因此每次查表需要访存。这时TLB可以加速查表。

详见:转址旁路缓存/快表(Translation Lookaside Buffer, TLB)

分页机制的优点

分页机制比分段机制好在哪里

关键在于段在物理和逻辑上都是连续的,要管理(包括申请、释放等)一段连续的内存空间就很复杂。

进程在逻辑上可以使用比物理内存更大的虚拟地址空间

虚拟内存管理的目标之一就是高效使用内存,即每个进程可以拥有独立、连续、统一的虚拟内存地址空间。

在32位系统上,每个进程有4GB地址空间;在64位系统上,Linux只用到了低47位,即256T。

因此,单个进程的虚拟地址空间就有可能比物理内存大。多个进程并发时,虚拟地址空间之和更大于物理内存。

之所以进程可以在逻辑上使用比物理内存更大的虚拟地址空间,是因为局部性原理。也即某个进程在一段时间内只使用虚拟内存的一部分内容。因此可以只将这一部分装载到物理内存中,其余部分放在外存上。要用到其余部分时,用缺页机制将其换入内存。

注意:分段机制也可以换入换出,但是不如分页机制只需交换少量页这样灵活。