深入理解计算机系统(第三版)/ CSAPP 杂谈,第6章:储存器层次结构
- SRAM 贵,稳定,集成度低,用于高速缓存存储器
-
DRAM 较便宜,不稳定,集成度高,需要定时重新读写和纠错码,用于主存和帧缓冲区
-
DRAM 的存储单元(超单元)以二元阵列排列而不是线性排列,这样可以节省管脚。请求某个超单元先发送行,此时会将行缓存到内部行缓冲区;然后发送列,此时将该行该列的超单元数据返回给请求者。传统的 DRAM 会将剩余的数据丢掉,而 FPM DRAM会缓存整行。这两种DRAM早就已经停产了,现在主流是 DDR3/4 SDRAM。
-
可擦写编程器 EEPROM 掉电数据不丢失,主要用于存储数据,如闪存(U盘)
-
一般的程序都具有良好的局部性,即访问的数据都是在一个较密集的区间内,这样可以提高访问效率。但局部性也导致容易受到栈溢出攻击。印象中新版本的 Linux 内核有降低局部性,防止栈溢出攻击的策略。
-
存储器层次结构的本质是,每一层存储设备都是较低一层的缓存。
-
高速缓存步骤:1. 组选择(一般用内存中间的位避免相邻的内存分到同一个组) * 2.行匹配 3. 字抽取(返回)
-
直接映射高速缓存命中遵循定的策略,在真实的程序中很常见,会导致令人困惑的性能问题。例如反复调用两个相邻的内存块(两个数组),而两个内存块映射的组索引恰好一样(块大小为2的幂时尤为容易出现),就会导致冲突不命中,只能每次重新加载。解决方案可以是稍微扩充一下内存块大小。直接映射高速缓存限制是只能有1行。
-
组相联高速缓存每组可以有多行,冲突不命中的问题得到缓解。
-
缓存经常会用到 write-back 机制,即更新的数据不会立刻写入到下一层,而是每隔一段时间写一次,以获得更高的性能。L1 对 RAM,RAM 对 ROM 都会用到。write-allocate 是当需要写的时候,如果没有匹配缓存,就先加载进来,而不是 write-through 直接写进去。write-back 和 write-allocate 经常一起使用。
-
i7 每个核心都有独立的 L1 i-cache (instructment) d-cache(data) 和 L2 unified cache。所有核心共享 L3 cache。L1 4周期,32kb,64组64块大小;L2 10周期,256KB,8行512组64块大小;L3 40-75 周期,8mb,16行8192组64块大小
版权所有,转载请注明出处:
https://sickworm.com/?p=494