高速缓存存储器通过提供对数据/指令的快速访问, 在减少程序处理时间方面起着重要作用。高速缓存内存小而又快, 而主内存又大又慢。
缓存的概念在下面说明。
缓存原理:
高速缓存的目的是提供对资源的最快访问, 而不会影响内存的大小和价格。试图读取一个字节数据的处理器首先查看高速缓存。如果该字节在高速缓存存储器中不存在, 它将在主存储器中搜索该字节。一旦在主存储器中找到该字节, 就将包含固定字节数的块读入高速缓存, 然后再传送到处理器。随着早先读入高速缓存存储器的块中包含与该过程相关的字节, 在高速缓存存储器中找到后续字节的可能性会增加, 这是因为这种现象称为"局部性引用"或"局部性"。
本地性原则
缓存内存设计:
缓存大小和块大小–
为了与处理器速度保持一致, 高速缓存的内存非常小, 因此查找和获取数据所需的时间更少。它们通常根据体系结构分为多个层。缓存的大小应容纳块的大小, 而块的大小又由处理器的体系结构确定。当块大小增加时, 由于局部性原理, 命中率最初会增加。
块大小的进一步增加导致将更多数据带入缓存将降低命中率, 因为在特定点之后, 使用由新块引入的新数据的概率小于重用正在使用的数据的概率。冲出来为新的块腾出空间。
映射功能–
从主存储器读取数据块时, 映射功能将确定高速缓存中的哪个位置被读入的主存储器块占据。如果高速缓存已满, 这将需要用主存储块替换高速缓存存储块, 这会变得很复杂。应该替换哪个缓存块?
应注意不要替换更可能被处理器引用的缓存块。替换算法直接取决于映射功能, 因此, 如果映射功能更灵活, 替换算法将提供最大的命中率。但是, 为了提供更大的灵活性, 搜索高速缓存存储器以确定块是否在高速缓存中的电路的复杂性增加了。
替换算法–
它确定在高速缓存已满时, 高速缓存中的哪个块被主内存中的读入块替换, 并具有映射功能的某些约束。应该替换在不久的将来不会被引用的缓存块, 但是很难确定哪个块不会被引用。因此, 应将高速缓存中已长时间未引用的块替换为来自主存储器的新读入块。这称为最近最少使用算法。
写政策–
内存缓存的最重要方面之一。选择要由新的读入主存储器块替换的来自缓存的数据块应首先放回主存储器中。这是为了防止数据丢失。应确定何时将高速缓存块放回主存储器中。
这两个可用选项如下-
- 选择将其替换为主存储器中的新读入块时, 请将其放在主存储器中。
- 每次对缓存块进行更新后, 将其放置在主存储器中。
写策略决定何时将高速缓存块写回到主存储器。如果选择了选项1, 则对主存储器执行过多的写操作。如果选择了选项2, 则在多处理器系统的情况下, 主内存中的块已过时, 因为尚未从高速缓存中替换该块, 但已进行了更改。
例子 :
什么是命中率?
命中数(在高速缓存中成功搜索)/尝试总数(总搜索)。
什么是LRU算法?
在这里更多细节
有哪些不同的高速缓存存储层?
如何检查Windows PC中缓存的不同层?
打开任务管理器->性能-> CPU(示例– L1, L2, L3)