【文件属性】:
文件名称:虚地址缓存-轻松实现高速串行io--fpga应用设计者指南
文件大小:3.09MB
文件格式:PDF
更新时间:2021-06-09 11:02:33
UNIX 系统 内幕 pdf
15.13 虚地址缓存
如同 TLB 是地址转换的缓存一样,计算机还为物理内存设置了高速缓存。大部分机器有
分离的数据、指令缓存或一个公用的缓存。这些缓存的大小通常为 64~512KB,而且要比内
存访问要快得多。缓存一般采用写回方式,就是说数据写操作仅修改缓存。仅在缓存需要为
新数据分配或因为其他原因而替换缓存数据行时,才向主存刷新数据。
传统的硬件体系结构使用物理地址缓存(图 15-15)。MMU 首先转换虚地址,然后再访问物
理内存。所有对物理内存的访问都要通过缓存。如果在缓存中找到了数据,MMU 就无需访问
内存了。
图 15-15 典型的物理地址缓存体系结构
这种缓存的优点是简单。硬件保证厂缓有的一致性,操作系统既不知道缓存的存在,也
不负责其一致性维护。缺点是只能在地址转换之后才进行缓存查找,减弱了缓存的优点。此
外,如果 TLB 中没有有效的地址转换,MMU 必须从物理内存中或缓存访问页表项。这需要额
外的缓存和内存访问。
许多现代体系结构都使用虚地址缓存,在某些结构中一并取消了 TLB。图 15-16 所示为
一种典型的结构。MMU 首先在缓存中查找相应的虚地址。如果发现了,就不必进一步查找了。
如果数据不在缓存中,MMU 再进行地址转换,从物理内存中获取数据,
该结构中还可以同时有虚地址缓存和 TLB。在这种结构中,比如 MIPS R4000[MIPS 90]
和惠普 PA-RISC[Lee 89],MMU 同时查找缓存和 TLB,这种结构通过一定的结构复杂性代价换
取了更高的性能。
虚地址缓存由若干缓存数据行组成,每一行都映射若干连续的内存字节。例如,Sun-3[Sun
86]的缓存大小为 64kb,每行 16 字节。缓存用虚地址进行索引,有时还可以将进程 ID 或上
下文 ID 与虚地址组合起来作为索引。由于许多虚地址(从同一或多个地址空间)映射到同一个
缓存数据行,每个行上必须包含一个标识其映射的进程和地址空间的标记。
图 15-16 虚地址缓存
使用虚地址作为索引有一个重要的影响——每个缓存都有一个对齐因子。两不同的虚地
址可能映射到同一个缓存数据行,对齐因子通常等于一个或多个缓存大小。我们用“对齐地
址”代表映射到同一缓存数据行的地址。
尽管物理地址缓存对操作系统是完全透明的,硬件却不能保证虚地址缓存的一致性。一
个给定的物理地址可能映射到若干个虚地址上,因而也可能映射到多个缓存数据行上,这引
起了内部的一致性问题。缓存的写回特性造成内存的数据相对于缓存过时。一般有 3 种类型
的一致性问题——映射变化或多义地址,地址别名或同义地址和直接内存访问(DMA)操作。
15.13.1 映射变化
在虚地址被映射到不同的物理地址时需要修改映射(图 15-17)。如下几种情况会修改映
射:
图 15-17 映射变化导致 cache 项失效
·上下文切换 上下文切换用一个新进程的地址空间替换原地址空间。在大多数结构中,
缓存数据行上的标记标识该行属于哪个进程。这样,上下文切换就不会清除整个缓存。然而,
在许多系统中,u 区在内核地址空间中。上下文切换时,内核将 u 区的地址重新映射到新进
程的 u 区上。由于内核是共享的,其缓存行有一个特殊的标识,对所有的进程始终都是有效
的。因此,上下文切换要清除缓存中原 u 区的所有数据行。
·换出 当 pagedaemon 从内存中删除页面时,需清除页面的所有缓存数据行。
·保护权限变化 页面的保护权限发生变化时,缓存数据行也受到影响。在响应显式的