缓存 Cache
L10-Cache <- 课件
笔记放在PDF中了~
- 一读取就是一个 block
替换策略
关于(组相联 & 全相连) : 需要考虑替换问题
处理缓存的读请求:
适用于lcache和D cache
- 命中 顺利读取数据
- 缺失 阻塞流水线 从下层存储层级获取请求的数据 数据保存至缓存,读取请求的字 恢复流水线运行
处理缓存写命中
写直达 & 写回
写缓冲: 在 Cache 和内存中间 , 一旦放入写缓冲, 就当作完成任务了, 不必等待。担任缓冲容量有限。
写回:
- 只将数据写回到缓存
- 只有需要将缓存块驱逐(Evicted)时, 才写回到下层存储层
- 每个缓存块需要1 bit 脏块 标记
处理缓存写缺失
写直达流程图:
写回流程图:
替换算法
直接映射:不需要选择替换的块 组相联映射:
- 首先映射到有效位为0的项 (优先占用空闲的行)
- 如果没有,在该组的项中挑选一个项替换 最近最少使用(LRU,Least-recently used)
- 替换很长时间没有使用的块
- 不适用于超过4路的组相联映射 随机替换
- 当相联度较高时,与LRU性能类似
分析: 全相联映射缓存最好,组相联缓存次之,直接映射缓存最差 通常情况使用组相联映射,并采用LRU替换策略 较大的cache 块能更好地利用空间局部性以降低缺失率 在固定块大小的cache中
较大块 => 块的数量减少 地址映射的竞争增大 => 增加缺失率 较大块 => 空间局部性降低
#虚拟存储
虚拟存储器 (Virtual Memory)
存储器的存储容量可能小于可寻址空间
- 32-bit地址可以寻址4GB空间
- 内存地址可能只有1GB
系统可以同时运行多个程序,如果这些程序运行所需的 存储空间大于实际内存容量,系统该如何运行?
虚拟存储器
- 将主存用作辅助存储器的 高速缓存 的技术
- 程序拥有自己的虚拟地址空间, 存储频繁访问的代码与数据
- 根据 局部性原理 而设计
虚拟存储器 优势:
- 运行时, CPU和OS将虚拟地址转换为物理地址
- 实现多个程序共享存储器
- 允许运行超过主存容量的程序
- 代码重定向: 代码可以加载进内存的任何地方 (物理地址上可以不连续)
例子: 从存储层次结构来看
- 假设内存容量为1GB,此时已经使用了1GB容量,在程序运行时需要额外的存储空间
- 把内存中的一块数据 (100MB) 移出到硬盘
- 此时,内存有100MB的空闲 (free) 存储空间
- 如果稍后,需要使用被替换出去那块数据
- 需要把内存中其他的数据块移出到硬盘,以获得100MB的空闲存储空间将原来的数据载入
此处评论已关闭