[OS]Three Easy Pieces Chapter 19

Paging: Faster Translations (TLBs)

为了加速内存访问,OS需要硬件的帮助:translation-lookaside buffer(TLB)。TLB其实就是经常访问的PTE的硬件缓存。在每次访存之前,硬件首先去TLB中查看指定的PTE是否存在,如果存在,就不需要去内存中查找对应的PTE了。

1 TLB Basic Algorithm

2 Who Handles The TLB Miss

硬件处理

由硬件负责更新TLB。

软件处理(OS)

由OS负责更新TLB。当遇到TLB miss的时候,硬件只需要发出一个异常,然后跳转到对应的异常处理程序进行处理即可。

注意事项:

  • 这种异常和系统调用不一样,系统调用返回下一条指令的地址继续执行;而这种异常需要返回当前指令的地址重新执行当前指令。
  • OS需要确保TLB miss处理代码不会触发TLB miss。可以直接将处理代码放在物理地址中(未映射,无需地址翻译)或者在TLB中预留一些entries用来存放处理代码的PTE。

3 TLB Contents: What’s In There

TLB通常有32,64,128个entries,并且是全相连的(意味着任何一个entry都可能防止在任何位置,由硬件负责并行的查找对应的entry)。

A TLB entry

需要注意,TLB entry需要包含VPN,因为TLB是全相连的。

other bits通常包含valid bit,protection bits,address-space identifier,dirty bit等。

4 TLB Issue: Context Switches

需要注意的是,TLB中的内容都是针对某个进程而言的。当发生上下文切换的时候,TLB中的内容就不在有效了。

TLB flush

简单的做法是每次上下文切换的时候,都将TLB中的内容flush掉(将valid bit置0)。但是对于频繁切换的系统,可能会带来较大的开销。

ASID

另一种做法是在TLB entry中增加一个address space identifier(ASID)来指示该entry对应的进程。ASID相当于是PID,但是通常只有较少的位数(PID32位,ASID8位)

5 Issue: Replacement Policy

类似于页置换算法。

典型的有LRU,随机替换算法等。随机替换算法比较简单,并且可以避免一些边界情况。


[OS]Three Easy Pieces Chapter 19
https://erlsrnby04.github.io/2024/11/15/OS-Three-Easy-Pieces-Chapter-19/
作者
ErlsrnBy04
发布于
2024年11月15日
许可协议