当前位置: 首页 > news >正文

计算机组成原理(四)Cache存储器

文章目录

  • Cache存储器的基本原理
  • cache命中率、平均访问时间、效率
  • 地址映射
    • 全相联映射
    • 直接映射
    • 组相联映射
  • 查找算法
  • cache 存储器替换策略
  • cache 存储器-写操作策略
  • 习题

Cache存储器的基本原理

  • Cache是一种高速缓冲寄存器,是为了解决CPU和主存之间速度不匹配而采用的一项关键技术。
  • Cache能够高速地向CPU提供指令和数据,从而加快程序的执行速度。
  • Cache 为了追求高速,包括管理在内的全部功能由硬件完成。

在这里插入图片描述
在这里插入图片描述

cache命中率、平均访问时间、效率

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 理解

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

地址映射

  • 主存容量远大于cache容量,所以当你要把一个主存块调入cache时,就有一个如何放置的问题(映射问题)

全相联映射

  • 全相联映射:将主存种一个块的地址与块的内容一起存入cache的行中,其中块地址存入cache行的标记部分中。
  • cache的数据块大小称为行。主存的数据块大小称为块。行与块是等长的。
  • 可以使得主存中的一个块直接拷贝到cache的任意一行,非常灵活。
  • 缺点:比较电路难于设计和实现,只适合小容量cache使用

在这里插入图片描述

直接映射

  • 这是一种多对一的映射方式,但是一个主存块只能拷贝到cache的一个特定行位置上。
  • cache 的行号i 和主存的块号 j 有如下函数关系:
    i = j m o d m ( n 为 c a c h e 中的总行号) i = j mod m (n为cache中的总行号) i=jmodm(ncache中的总行号)
  • 直接映射方式的优点:硬件简单,成本低。
    缺点:每一个主存块只有一个固定的行位置可以存放,容易发生冲突。适合大容量的cache采用。
  • 区别于组相联映射

在这里插入图片描述

组相联映射

  • 组相联映射方式是全相联映射和直接映射的混合:将cache 分成u 组,每一组v行,主存存放到哪一个组是固定的,至于存到该组的哪一行是灵活的。
    m = u ∗ v 组号 q = j m o d u m = u*v 组号 q = j mod u m=uv组号q=jmodu
  • 组相联映射方式中,每一组的行数v一般取值较小,这种规模的v路比较器容易设计和实现。而块在组中的排放又有一定的灵活性,冲突减少。

在这里插入图片描述

查找算法

  • 通过查找目录表实现
  • cache中设有一个目录表,该表所包含的项数与cache的块数相同,每一项对应cache中的一块,用于指出当前该块中存放的信息是哪一个主存块的。它实际上记录了该主存块的块地址的高位部分,称为标识(tag).每一个主存块能唯一地由其标识来确定。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cache 存储器替换策略

  • cache的工作原理要求它尽量保存最新数据

在这里插入图片描述

cache 存储器-写操作策略

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

习题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 简单点评:
    (1)全相联方式:其实就是组号为1的组相联方式,那么对于主存的地址的分配,就只有标记+块内地址,同时,这个标记的位置也就是内存中块的数目
    (2)直接映射方式:需要直接映射到cache中,所以要留有到底映射到哪一个cache的行,所以地址的组成是’标记+块数+块内地址’,其中,标记加上块数的部分的总的位数是主存中的块的数目,其中的块数应该是cache的行数
    (3)组相联映射:在全相联映射的基础上,增加了组号的问题,主存中地址的形式标记+组号+块内地址,其实,和直接映射相比,也就是将cache的行数换成了组数。

在这里插入图片描述
在这里插入图片描述

  • cache 的地址组成刚刚好是 块数加上块内地址

在这里插入图片描述

相关文章:

  • NATAPP-内网穿透工具----下载与配置
  • Android_Android Studio 常用快捷键 for mac
  • kotlin 音频播放,多音轨同时播放,音频播放期间,可以随时设置播放速度
  • 【Nacos】【踩坑专栏】nacos启动失败:libstdc++.so.6: 无法打开共享对象文件: 没有那个文件或目录
  • 大模型KV Cache节省神器MLA学习笔记(包含推理时的矩阵吸收分析)
  • 韩兴国/姜勇团队在《Trends in Plant Science》发表植物根系氮素再分配的观点文章!
  • 你还不会选ProfiNET和EtherCAT网线?
  • JavaWeb测试卷
  • 多元多项式的特征列与零点的关系定理
  • 代码解读 | Hybrid Transformers for Music Source Separation[07]
  • 从中概回购潮,看互联网的未来
  • 一文彻底理解机器学习 ROC-AUC 指标
  • QT向已有ZIP中追加文件
  • (55)MOS管专题--->(10)MOS管的封装
  • WBTC与BTC的主要区别
  • 【技术性】Search知识
  • 2017 年终总结 —— 在路上
  • Angular2开发踩坑系列-生产环境编译
  • DataBase in Android
  • ECMAScript6(0):ES6简明参考手册
  • ES6系统学习----从Apollo Client看解构赋值
  • Mac转Windows的拯救指南
  • TCP拥塞控制
  • Vue 重置组件到初始状态
  • 高性能JavaScript阅读简记(三)
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 码农张的Bug人生 - 初来乍到
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 如何实现 font-size 的响应式
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 使用Swoole加速Laravel(正式环境中)
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 【干货分享】dos命令大全
  • ​马来语翻译中文去哪比较好?
  • ![CDATA[ ]] 是什么东东
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $.proxy和$.extend
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (1)(1.9) MSP (version 4.2)
  • (33)STM32——485实验笔记
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二)PySpark3:SparkSQL编程
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (转)创业家杂志:UCWEB天使第一步
  • (转载)OpenStack Hacker养成指南
  • .cn根服务器被攻击之后
  • .Family_物联网
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .Net Redis的秒杀Dome和异步执行
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @Valid和@NotNull字段校验使用
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解