MMU
为什么要使用虚拟地址:
多进程时,都直接访问物理地址,容易发生冲突;
不利于进程地址空间的隔离
物理内存有限,物理内存紧张时,使用虚拟地址,可以分时复用同一个物理页面,swap到disk
MMU是处理器/核中的一个硬件单元,通常每个核一个MMU,MMU = TLB(translation lookaside buffer) + TWU(table walk unit),可以完成VA->PA转换,和权限检查(permission check)
page table是每个进程独有的,存储在main memory中(也可以被swap到disk)
转换过程:
VPN/VPO PPN/PPO,VPO==PPO,本质上就是VPN->PPN的过程
TLB是给page table设计的硬件缓存,转换va->pa时,先从TLB中查找,hit后进行权限检查,然后返回PA(或者protection fault,即SIGSEGV);TLB miss后,触发page table walk, page in mem(entry对应的p-present位是1),则update TLB,page not in mem(entry对应的p-present位是0),则触发page fault,然后分配物理内存,demand paging,或者从disk load page,然后将P位置1。
TLB miss后使用table walk unit(硬件单元查找(通常CISC架构比如IA-32) - hardware TLB miss handling,page table中没有,出现page fault时,才会交由软件处理;也可以使用软件的方式software TLB miss handling(通常RISC架构比如Alpha处理器)。硬件快,软件灵活,IA-64提供了一种混合方式)。
在多级页表系统中,其实每级页表都可以视为一种“虚拟地址”向“物理地址”的转换,只是这里的“虚拟地址”是待转换的虚拟地址的一个位域子集,而除了最后一级页表PTE是直接指向物理页面的,其他级别页表里的“物理地址”都是指向对应下一级页表的首地址。
每一级的位数怎么确定的,4kB,10个bit,对应每一个4个字节,大小为4KB。
多级页表增加了内存访问次数,进而增加了转换时间,可以使用large page / paging structure caches优化。
感谢:https://zhuanlan.zhihu.com/p/436719684
浙公网安备 33010602011771号