MMU随笔-------《超标量处理器设计》
MMU是内存管理单元,完成VA--->PA的转换
现在程序渐渐变大,物理内存无法满足,所以需要虚拟内存。
嵌入式设备程序小,不需要MMU,可以直接使用物理内存,而对于智能手机、PC等,就需要物理内存了
操作系统,调度负责将物理存储器动态分配给每个程序。
方便实现程序物理地址的共享和虚拟地址的共享 保护和共享
将虚拟内存看做一本书,虚拟地址空间大小是4G,也就是书的大小是4G,每一页就是一个地址空间,大小为4KB
历史原因,物理空间不叫页,叫frame,它和页的大小必须相等
页的大小是4KB,pa和va的页都是4kb,所以,VA[11:0] 和PA[11:0] 相等。
va和pa剩余的bit分别叫做 VPN virtual page number PFN physical frame number
PA和VA的映射都是以页的大小为粒度进行映射的,VA剩余的部分会被映射到disk,VA和PA页内的偏移不会变
有一些页没有映射,就会产生paga fault的异常送给处理器,进行page table walking
为了减少page fault发生的概率,可以将物理内存中经常没有使用的page进行替换,类似cache满的时候,扔掉不经常使用的某一行。
PT page table存放va和pa的映射关系 表项entry 存放在物理内存中
PTR page table register 页表寄存器 存放当前程序的页表在物理内存中的起始位置
实际页表每个entry都是32bit,也会存放read write等
需要2 cycle
step1:VA访问物理内存中的页表,获取PA
step2:PA访问物理内存,获取data
例子:32位处理器中,页大小是4KB,页表中每个entry是4 byte,表项个数为 4G/4kb = 2^20,所以页表大小是4 byte x (2 ^20) =4MB
意味着每一个进程,都需要4MB的连续的空间来存储页表,进程多了,这个空间就很大了。
多级页表 hierarchical page table
将4MB的线性页表划分为若干个更小的页表,根据实际需要,渐渐地放入这些子页表。
两个相邻的子页表可以放在物理内存中不连续的位置
操作系统穿件进程-----> 在物理内存中找到4KB空间(存放第一级页表)-----> PTR特殊寄存器(第一级页表中的物理内存起始地址)-----> 第一级页表-----> 第二级页表
page table walk 当tlb缺失时,需要从页表中找到对应的映射关系并将其写回到tlb的过程。
多级页表需要多次访问内存,二级页表,需要三次访问物理内存。时间较久
tlb只具有时间相关性,现在被访问的页,后面还会被访问到,不具有空间相关性。
页的大小其实是可变的
页内的碎片:页变大,会导致一个页内的很多空间被浪费了,会降低页的利用效率,发送page fault,意味着每次搬移更多的数据,导致paga fault处理时间变长。
tlb容量远远小于页表。