分页:快速地址转换
为了解决分页带来的额外内存访问,又引入了地址转换旁路缓冲存储器,又称TLB。它是一个硬件缓存,它记录了频繁发生的虚拟地址到物理地址的转换。
引入该缓存后,每次需要访问内存时,硬件会先检查TLB中是否有期望的映射,如果有就直接转换。
TLB的基本算法
硬件会先从虚拟地址中提取页号,然后检查TLB中是否有该页号(在引入TLB之前,这里需要直接访问一次内存,去读取页表),如果有,则可以根据TLB的值,经过计算得到正确的物理地址。
如果没有找到,那么硬件需要去内存访问页表,然后将映射更新到TLB当中,前提是该虚拟地址有效,而且我们有权限访问。
上下文切换时对TLB的处理
引入TLB之后,我们在发生上下文切换时,要对TLB进行特殊的处理。因为TLB记录的是某一个进程的地址空间到物理地址的转换,如果切换进程,那么当前的TLB对于另一个进程是不可用的。
一种解决方案:
在发生上下文切换时,直接清空TLB,那么就不会有进程读到错误的TLB。但是也存在问题,每个进程刚运行时,都会发生TLB未命中。
第二种解决方案:
增加一个地址空间标识符,也可以看作是进程标识符,用于标识存储的内容是那个进程的映射。这样一来,TLB可以同时缓存多个进程的地址映射。
参考
《操作系统导论》