王道操作系统笔记-内存(24)– 内存管理6
TLB
- 页表保存在主内存中。
- Page-table base register (PTBR) points to the page table.(页表基址寄存器指向页表)
- Page-table length register (PRLR) indicates size of the page table.(页表限长寄存器表明页表的长度)
- 在这个机制中,每一次的数据/指令存取需要两次内存存取,一次是存取页表,一次是存取数据
- 我们是首先查询页表得到物理地址,然后访问该物理地址读取指令、数据。
- TLB translation look-aside buffers 通过一个联想寄存器,可以解决两次存取的问题。(快表)
当我们有了TLB之后,首先在TLB找,如果找不到就是miss,找到了就是hit。如果hit了直接把偏移量拿过来用。(这样就是一次访问即可)。如果miss了就再去页表里面找,然后再复制到TLB里面。
TLB虽然是cache,但是只存有页表项的副本。普通Cache则会有其他数据的副本。
两级页表
单级页表有两个问题:
- 页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框。
- 没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。
针对第一个问题,我们既然都可以使用页表来将进程的地址空间进行分页,那么我们也可以给页表再分页。这样也就可以让页表离散存放。这一个页表可能叫 页目录表,外层页表,或顶层页表。
针对第二个问题,可以使用虚拟储存技术。也就是需要访问页面的时候,才把页面调入内存。如果想访问的页面不在内存中,会产生缺页中断(内中断),把目标页面从外存调入内存。后文详细介绍。