• 对内存地址进行抽象,为每个进程建立各自的地址空间
    • 使用基址寄存器和界限寄存器来为每个进程划定范围的方法在如今计算机中已不再使用;比如一个进程需要连续且完整的加载到内存中,但如果有时候进程会随着数据增多而膨胀,甚至超过内存的大小
    • 一个更好的办法就是将进程切碎,分成一个个小单元,比如4kb大小称为一页(page)
    • 其中只有一部分的page会在内存中加载,当CPU需要访问的地址不在内存中的页面时,可以从磁盘中加载对应的部分
    • image.png
    • 同时内存不够时也可以把长期不访问的页面保存到磁盘中,然后删除内存中的部分
    • 这个做法称为虚拟内存(virtual memory)
    • CPU发出要访问的虚拟地址,然后由内存管理单元(memory management unit)负责把虚拟地址转换成物理地址后,通过总线访问内存
    • image.png
    • 内存从总线中获得物理地址,它对虚拟地址毫不知情
    • MMU为了实现地址转换,需要一个用来记录虚拟地址到物理地址页框的映射关系,称为页表
    • image.png
    • MMU只需转换高4位,就可以完成地址转换
    • image.png
    • 多级页表的好处是可以让部分页表保存在内存中
    • 页表通常是保存在内存中,那MMU每次转换都需要从内存中读取,就会很慢,所以需要硬件加速
    • 也就是MMU中有暂时存储最近使用的部分页表项,称为转换检测缓冲区(translation lookaside buffer),简称TLB
    • image.png