[学习笔记]《CSAPP》深入理解计算机系统 - Chapter 6 存储器层次结构

总结一些第六章的一些关键信息

  • [Chapter 6 存储器层次结构](#Chapter 6 存储器层次结构)

Chapter 6 存储器层次结构

  1. 随机访问存储器(Random-Access Memory, RAM)分为两类: 静态的和动态的。
    • 静态(SRAM) 比动态更快,更贵
    • 动态(DRAM)
  2. 数据流通过称为总线(bus)的共享电子电路在处理器和DRAM主存来来回回。每次CPU和主存之间的数据传送都是通过一系列的步骤来完成的,这些步骤称为总线事务(bus transaction). 读事务(read transaction)从主存传送数据到CPU. 写事务(write transaction)CPU传送数据到主存. 简单地示例描述:CPUI/O桥接器用系统总线连接,I/O桥接器和DRAM主存用内存总线连接。I/O桥接器将系统总线地电子信号翻译成内存总线地电子信号,反之同理。I/O桥也将系统总线和内存总线连接到I/O总线,如磁盘和图形卡这样的I/O设备共享I/O总线
    系统总线和内存总线是与CPU相关的,诸如PCI(已被PCIe(PCI express)总线取代)这样的I/O总线设计成与底层CPU无关。I/O总线比前两个慢,但是可以容纳种类繁多的第三方I/O设备。
    • 通用串行总线(USB)
    • 图形卡(或适配器),负责代表CPU在显示器上画像素
    • 主机总线适配器: 将一个或多个磁盘连接到I/O总线,两个常用的磁盘接口分别是SCSISATA。前者更快更贵,前者可以支持多个磁盘驱动器,而SATA适配器只能支持一个驱动器。

DMA

CPU发出请求,磁盘控制器收到指令(比如读),之后,将逻辑快好翻译成一个扇区地址,读该扇区内容,然后将这些内容直接传送到主存,不需要CPU的干涉。

设备可以自己执行读或者写总线事务而不需要CPU干涉的过程,称为直接内存访问(Direct Memory Access, DMA)

局部性

  • 好的时间局部性: 被引用过一次的内存位置很可能在不远的将来再被多次引用
  • 好的空间局部性: 一个内存位置被引用了一次,那么程序很可能在不愿的将来,引用附近的一个内存位置
c 复制代码
int sumvec(int v[N])
{
    int i, sum = 0;
    for (i = 0; i < N; i++)
        sum += v[i];
    return sum;
}
// sum: 好的时间局部性
// v: 好的空间局部性
  1. CPU寄存器由编译器管理

抖动

reference from P425

即高速缓存反复地加载和驱逐相同地告诉缓存块的组

  1. 缓存写

    写命中:

    直写: 写一个缓存了的字w(写命中),在高速缓存更新了其副本之后,立即将w的高速缓存块写回紧接着的第一层中。缺点是每次写都会引起总线流量

    写回: 尽可能地推迟更新,只有当替换算法要驱逐这个更新过的块时,才把它写到紧接着的第一层中,缺点是增加了复杂性。高速缓存必须为每个高速缓存行维护一个额外的修改位(dirty bit)

    写不命中:

    写分配: 加载相应的低一层的块到高速缓存中,然后更新这个高速缓存块。缺点是每次不命中都会导致一个块从低一层传送到高速缓存

    非写分配: 避开高速缓存,直接把这个字写到低一层中。

  2. 高速缓存既保存数据,也保存指令。只保存指令的高速缓存称为i-cache。只保存程序数据的高速缓存称为d-cache。既保存指令又保存数据的高速缓存称为"同一的高速缓存(unified cache)"。

    Intel Core i7 为例: 每个CPU芯片有四个核。每个核有自己私有的L1 i-cache、L1 d-cacheL2 统一的高速缓存。所有核共享芯片上L3统一的高速缓存。

  3. 高速缓存行、组和块的区别

    • 块: 固定大小的信息包、在高速缓存和主存之间来回传送
    • 行: 高速缓存中的一个容器,存储块以及其他信息(例如有效位和标记位)
    • 组: 一个或多个行的集合。
相关推荐
_Kayo_2 小时前
node.js 学习笔记3 HTTP
笔记·学习
CCCC13101635 小时前
嵌入式学习(day 28)线程
jvm·学习
星星火柴9366 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
小狗爱吃黄桃罐头6 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
艾莉丝努力练剑7 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
武昌库里写JAVA8 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
Cx330❀9 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
杜子不疼.9 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
小幽余生不加糖9 小时前
电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
人工智能·笔记·学习·音视频
..过云雨10 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习