复杂度3/5
机密度4/5
最后更新2021/04/22
这是很粗略的细节,只大概走一遍流程。
每个进程在自己有效地址空间的数据被映射到操作系统统一的虚拟地址空间。鉴于几乎所有程序仅仅使用很少一部分全部可寻址地址空间,只有真实有数据的虚拟地址空间的页面(所谓被reference到)才会被真实分配、记录和管理。每当CPU执行时需要访问某个地址,会根据PFT(Page Frame Table,又被称为HWPFT既Hardware PFT)查找对应的物理内存页面,这是CPU物理实现的,因此查找过程非常快,但正因为物理实现,此表无法包含所有物理内存的映射。如果PFT表没查到,就会触发CPU Page Fault中断,交由软件完成,这部分中断处理程序由VMM在初始化的时候保证了一定能够被HWPFT索引到,否则就无限死循环啦!
Page Fault中断处理程序先要校验所访问页面是否合法,所谓合法并不是绝对的,只能尽OS所能去验证。其中验证方法包括是否越界?是否非授权访问等等。在此之后,继续去查询SWPFT(Software PFT)表。这个表保足够大,大到可以装下所有本操作系统可访问的物理内存的对应关系;这个表也不需要全部都保存在物理内存,但确实有一部分必须保存在物理内存;这个表中还包括一些页面访问属性,包括paged-in,paged-out,free list等等,便于paging管理。如果在SWPFT表中查到了目标内存页,VMM会更新HWPFT,这样随后执行的程序或去访问附近的数据都会被HWPFT命中,由硬件完成转换。注意,无论由HW还是SWPFT查到页面,都不会发生磁盘IO,因为P