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容量远远小于页表。