B.1 介绍
本附录是对内存层次结构的快速复习,包括缓存和虚拟内存的基础知识、性能方程和简单优化。第一节回顾以下36个术语:
缓存(cache)
全相连(fully associative)
写分配(write allocate)
虚拟内存(virual memory)
脏位(dirty bit)
统一缓冲区(unified cache)
内存滞怠周期 memory stall cycles
block offset
misses per instruction
direct mapped
write back
块(block)
valid bit
data cache
locality
block address
hit time
address trace
write through
缓存未命中(cache miss)
set
instruction cache
page fault
random replacement
average memory access time
miss rate
index field
缓存命中(cache hit)
n-way set associative
no-write allocate
page
least recently used
write buffer
miss penalty
tag field
write stall
如果这篇回顾说得太快,你可能想看看《计算机组织与设计》中的第7章,那是我们为经验不足的读者写的。
缓存是对地址离开处理器后遇到的内存层次结构的最高或第一层的称呼。由于局部性原则适用于许多层次,而且利用局部性来提高性能是很流行的,所以现在只要采用缓冲来重用经常出现的项目,就会用到缓存这个词。这方面的例子包括文件缓存、名称缓存等等。
当处理器在缓冲区中找到一个请求的数据项时,它被称为缓存命中(cache hit)。当处理器在高速缓存中没有找到它所需要的数据项目时,就会发生缓存未命中(cache miss)。一个固定大小的包含所要求的字(word)的数据集合,被称为块(block)或行运行(line run),从主存储器中检索出来并放入高速缓存。时间局部性告诉我们,我们很可能在不久的将来再次需要这个字,所以把它放在高速缓存中是很有用的,因为它可以被快速访问。由于空间局部性,该块中的其他数据很有可能很快就会被需要。
缓存未命中所需的时间取决于内存的延迟和带宽两个因素。延迟决定了检索该块的第一个字的时间,而带宽决定了检索该块的其余部分的时间。缓存未命中由硬件处理,并导致使用顺序执行的处理器暂停,或停顿,直到数据可用。在非顺序执行中,使用该结果的指令仍然必须等待,其他指令可以未命中期间执行。
同样,并不是所有被程序引用的对象都需要驻留在主存储器中。虚拟内存意味着一些对象可能驻留在磁盘上。地址空间通常被分割成固定大小的块,称为页(pages)。在任何时候,每个页都驻留在主存或磁盘上。当处理器引用一个不在缓存或主存中的页内的目标时,就会发生页面故障(page fault),整个页面会从磁盘移到主存。由于页面故障需要很长时间,它们在软件中被处理,处理器不会停滞。在磁盘访问发生时,处理器通常会切换到其他任务。从高层次的角度来看,对引用局部性的依赖,以及缓存与主存的相对大小和每比特的相对成本,与主存与磁盘的关系相似。
图B.1显示了从高端台式机到低端服务器的计算机在内存层次结构中每一级的大小和访问时间的范围。
Last updated