虚地址缓存-轻松实现高速串行io--fpga应用设计者指南

时间:2024-06-29 04:49:13
【文件属性】:

文件名称:虚地址缓存-轻松实现高速串行io--fpga应用设计者指南

文件大小:3.09MB

文件格式:PDF

更新时间:2024-06-29 04:49:13

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 从内存中删除页面时,需清除页面的所有缓存数据行。 ·保护权限变化 页面的保护权限发生变化时,缓存数据行也受到影响。在响应显式的


网友评论