[41] 什么是时间局域性和空间局域性?
局域性原理:程序常常重复使用它们最近用过的数据和指令。一条广泛适用的经验规律是:一个程序90%的执行时间花费在仅10%的代码中。局域性意味着我们可以根据一个程序最近访问的指令和数据,比较准确地预测它近期会使用哪些内容。局域性的原理也适应于数据访问,不过不像代码访问那样明显。
cache是小型的快速存储。通常在Main Memory和CPU之间,有时放置于CPU内。
每当CPU请求存储位置的内容时,都会首先检查cache中是否有此数据。如果cache中存在数据,则CPU直接从cache中获取数据。由于不需要CPU进入该数据的Main Memory,因此速度更快。如果缓存中不存在数据,则将一块数据从Main Memory读取到cache中,然后以字块的形式从cache中传输到CPU。
在cache中查找地址时,若缓存中包含该内存位置,称之为cache hit。如果在cache找不到,则称之为cache miss。
链表是一种将其元素存储在非连续存储位置中的数据结构,而向量是一种将元素存储在连续位置中的数据结构。对于具有cache的设计:如果cache中存在一块数据,则很可能在cache中也存在后续的连续数据,因为通常是从主存储器到高速缓冲存储器的任何取指令 根据缓存行(通常为64或128字节)获取。因此,在拥有cache的机器上,通过向量进行搜索将比链表进行搜索更快。
一共有三种主要的映射方法。这三种映射中,主存储器和cache都被划分为存储块(blocks of memory,也称cache line,每个64bytes),这是映射时的最小单位。
更高关联性的cache意味着需要更加大的比较器,用于将传入的地址和标签进行对比,会导致更加大的硬件需求和功耗。
cache的索引位有4位,因此cache包含2^4=16个块,每个块只有1byte所以不需要块内索引,剩下的16-4=12位全部作为标记位
cache的块的数量为256K/64=4096,而cache为四路关联,则组数量为4096/4=1024。64byte的cache line 需要6位进行块内索引,10位进行集合索引,剩下的32-6-10=16位作为标记为
回写缓存在内存带宽利用方面更好,因为仅在需要时才回写数据。如果系统中存在多个可以缓存同一地址的cache,则维护数据一致性非常复杂,因为内存可能并不总是具有最新数据。
cache的inclusive和exclusive属性适用于具备多级缓存的设计。
exclusive cache的优点之一是多级cache可以一起存储更多的数据。一般使用inclusive cache类型,每次cache miss,可以从下一级的cache中寻找,load。而exclusive cache,每次cache miss,只能去main memory中load。但是exclusive cache比较节省cache size。
以下是一些可用于替换cache line的算法
在多个处理器拥有自己的cache的共享多处理器系统中,相同数据(相同地址)的多个副本可能会同时存在于不同的cache中。如果允许每个处理器自由更新cache,则可能导致内存视图不一致。这称为高速缓存一致性问题。例如:如果允许两个处理器将值写入同一地址,则在不同处理器上读取同一地址可能会看到不同的值。
Snoop based Coherence | Directory based Coherence Protocol |
---|---|
对于小的系统来说,如果带宽足够,基于监听的协议速度会更加快 | 基于目录的协议需要使用查找表,这将会导致较长的时延 |
基于监听的协议不适合大型系统,因为它需要将将每一个请求信息进行广播 | 由于不需要广播,基于目录的协议更加适合大型系统 |
MESI协议时多处理器系统中最常用的cache一致性协议。MESI 是指4中状态的首字母。每个Cache line有4个状态,可用2个bit表示,它们分别是:
状态 | 描述 | 监听任务 |
---|---|---|
M 修改 (Modified) | 该Cache line有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中。 | 缓存行必须时刻监听所有试图读该缓存行相对就主存的操作,这种操作必须在缓存将该缓存行写回主存并将状态变成S(共享)状态之前被延迟执行。 |
E 独享、互斥 (Exclusive) | 该Cache line有效,数据和内存中的数据一致,数据只存在于本Cache中。 | 缓存行也必须监听其它缓存读主存中该缓存行的操作,一旦有这种操作,该缓存行需要变成S(共享)状态。 |
S 共享 (Shared) | 该Cache line有效,数据和内存中的数据一致,数据存在于很多Cache中。 | 缓存行也必须监听其它缓存使该缓存行无效或者独享该缓存行的请求,并将该缓存行变成无效(Invalid)。 |
I 无效 (Invalid) | 该Cache line无效。 | 无 |
是对于MESI协议的扩展,引入了两个新状态“F”“O”:
虚拟内存是一致内存管理技术,及时实际的物理内存很小,虚拟处理器也允许处理器查看地址的虚拟连续空间。操作系统管理虚拟地址空间以及从辅助设备(如磁盘)到物理主内存的内存分配。CPU中的地址转换硬件(memory management unit,MMU)将虚拟地址转换为物理地址。此地址转换使用分页的概念,其中将连续的内存地址块(称为页)用于虚拟内存和实际物理内存之间的映射。
软件程序或进程用来访问其地址空间中存储位置的地址称为虚拟地址。然后,操作系统连同硬件将其转换为另一个地址,该地址可用于实际访问DRAM上的主内存位置,该地址称为物理地址。地址转换是使用分页的概念完成的,如果主内存或DRAM没有此位置,则在OS的协助下,数据将从辅助内存(如磁盘)移至主内存。
所有虚拟内存都将虚拟地址空间划分为页,页内的虚拟内存地址是连续的。页是内存从辅助存储移动到物理内存以管理虚拟内存的最小单位。大多数计算机系统的页至少为4KB.当需要更大的实际内存是,某些结构还支持更大的页。页表用于将应用程序看到的虚拟地址转换为物理地址,是一种数据结构,用于多页情况下,在内存中虚拟地址到物理地址的映射。
TLB: Translation Lookaside Buffer。根据功能可以译为快表,直译可以翻译为旁路转换缓冲,也可以把它理解成页表缓冲。里面存放的是一些页表文件(虚拟地址到物理地址的转换表)。当处理器要在主内存寻址时,不是直接在内存的物理地址里查找的,而是通过一组虚拟地址转换到主内存的物理地址,TLB就是负责将虚拟内存地址翻译成实际的物理内存地址,而CPU寻址时会优先在TLB中进行寻址。处理器的性能就和寻址的命中率有很大的关系。