orange's学习--第三章:页式存储介绍

我们看到,分段管理机制已经提供了很好的保护机制,那为什么还要加上分页管理机制呢?

其实它的主要目的在于实现虚拟存储器。

orange's学习--第三章:页式存储介绍

        转换使用两级页表,第一级叫做页目录,大小为4KB,存储在一个物理页中,每个表项4字节长,共有1024个表项。每个表项对应第二级的一个页表,第二级的每一个页表也有1024个表项,每一个表项对应一个物理页。页目录表的表项简称PDE(Page Directory Entry),页表的表项简称PTE(Page Table Entry)。进行转换时,先是从由寄存器cr3指定的页目录中根据线性地址的高10位得到页表地址,然后在页表中根据线性地址的第12到21位得到物理页首地址,将这个首地址加上线性地址低12位便得到了物理地址。
        分页机制是否生效的开关位于cr0的最高位PG位(参见图3.8)。如果PG=1,则分页机制生效。所以,当我们准备好了页目录表和页表,并将cr3指向页目录表之后,只需要置PG位,分页机制就开始工作了。

orange's学习--第三章:页式存储介绍

CPU就是使用MMU(Memory Management Unit,内存管理单元)进行分页控制的,
如果处理器没有MMU,或者有MMU但没有启用,CPU执行单元发出的内存地址将直接传到芯片引脚上,被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address,以下简称PA)。
如果处理器启用了MMU,CPU执行单元发出的内存地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将VA映射成PA。

操作系统和MMU是这样配合的:
1,操作系统在初始化或分配、释放内存时会执行一些指令在物理内存中填写页表,然后用指令设置MMU,告诉MMU页表在物理内存中的什么位置。
2,设置好之后,CPU每次执行访问内存的指令都会自动引发MMU做查表和地址转换操作,地址转换操作由硬件自动完成,不需要用指令控制MMU去做。

        处理器会将最近常用的页目录和页表项保存在一个叫做TLB(Translation Lookaside Buffer)的缓冲区中。只有在TLB中找不到被请求页的转换信息时,才会到内存中去寻找。这样就大大加快了访问页目录和页表的时间。当页目录或页表项被更改时,操作系统应该马上使TLB中对应的条目无效,以便下次用到此条目时让它获得更新。当cr3被加载时,所有TLB都会自动无效,除非页或页表条目的G位被设置。

orange's学习--第三章:页式存储介绍

orange's学习--第三章:页式存储介绍

tlb表项格式还是比较复杂的:

orange's学习--第三章:页式存储介绍

线性地址与物理地址转换过程:

orange's学习--第三章:页式存储介绍