高速缓存(cache)
避免数据在短时间内可能会再次被利用, 甚至该数据项周围的数据也会被再次的调用, 为了保证数据能够及时的被调用, 减少访问数据的时间, 也就增加了高速缓冲.
就是为了数据在短时间内可能会再次被利用, 甚至该数据项周围的数据也会被再次的调用.减少数据访问的时间
随机访问存储器
保证每个数据被访问的时间都是相同的, 而不会因为存放的位置较远会造成时间的成线性增长
类型
- 静态高速缓存(SRAM) : 更快, 不需要刷新, 高速缓存.
- 动态高速缓存(DRAM) : 快, 需要刷新, 主存.
缓存是采用中间位做索引, 而不采用顺序索引(高位索引). 因为顺序索引的效率太低, 寻找的数据还是跟索引的位置呈线性增长
数据流通过总线的共享电子电路在处理器和DRAM主存之间来来回回
I/O操作
CPU采用内存映射I/O来向I/O设备发送命令请求.
CPU对地址操作的储存指令
- 发送一个指令告诉磁盘是读/写操作
- 指明指令要读取的逻辑块号
- 指明应该存储磁盘扇区内容的地址
写策略
写回 : 尽可能的推迟更新, 只有当替换算法要驱逐这个更新快时, 才将数据写回到低一层存储中.
不命中写分配 : 加载相应的低一层块到高速缓存中, 然后更新这个高速缓存块, 修改就修改这个缓存块的数据, 等到一定的时候在写回到内存中/磁盘中.(缺点 : 每次不命中操作都会更新缓存块)
直写 : 立即将修改的数据写回到低一层中.
不命中非写分配 : 避开高速缓存, 直接将数据写回到内存/磁盘中a.
直写高速缓存是非写分配, 写回高速缓存是写分配
缓存命中与不命中
高速缓存具有局部性
命中 : CPU直接从缓存中快速的读取数据项. 不命中 : CPU从缓存中没有读取到需要的数据项, 产生一个中断, 那么缓存就需要找到一个牺牲块, 然后从主存中查找这个数据项, 将该数据项以及它相邻的数据项都映射到缓冲的牺牲块中, 然后CPU就可以读取到需要的数据项.局部性
- 空间局部性 : 调用的数据项的周围数据项可能不久也会被引用, 所以也存储缓存中. 强调不同的数据项.
- 时间局部性 : 调用的数据项可能不久也会重复的被调用, 同样存放在缓存中. 强调同一数据项.
cache不命中的原因
- 义务失效 : 第一次访问的数据项.
- 容量失效 : 数据块太多, 容量不够.
- 冲突失效 : 多个数据项放在了同一个数据块中.