计算机组成原理:存储系统【二】

在这里插入图片描述

在这里插入图片描述

🌈个人主页:godspeed_lucip
🔥 系列专栏:计算机组成与原理基础


  • 🛰️1 Cache概述
    • 🛩️1.1 局部性原理
      • 🛫1.1.1 空间局部性
      • 🛫1.1.2 时间局部性
    • 🛩️1.2 性能指标
      • 🛫1.2.1 解释
      • 🛫1.2.2 例题
      • 🛫1.2.3 待解决的问题
    • 🛩️1.3 知识总结
  • 🛰️2 Cache与主存的映射
    • 🪂2.1 知识总览
    • 🪂2.2 全相联映射(随便放)
      • 🛸2.2.1 要点
      • 🛸2.2.2 CPU访问主存
    • 🪂2.3 直接映射(只可以放在固定位置)
      • 🛸2.3.1 要点
      • 🛸2.3.2 改进
      • 🛸2.3.3 缺点
      • 🛸2.3.4 CPU访存
    • 🪂2.4 组相联映射(可放到特定分组)
      • 🛸2.4.1 要点
      • 🛸2.4.2 CPU的访存
    • 🪂2.5 总结
  • 🛰️3 Cache替换算法
    • 🚀3.1 总览
    • 🚀3.2 随机算法(RAND)
      • ✈️3.2.1 解释
      • ✈️3.2.2 缺点
      • ✈️3.2.3 优点
      • ✈️3.2.4 示例
    • 🚀3.3 先进先出(FIFO)
      • ✈️3.3.1 解释
      • ✈️3.3.2 实例
      • ✈️3.3.3 优点
      • ✈️3.3.4 缺点
    • 🚀3.4 近期最少使用算法(LRU)
      • ✈️3.4.1 解释
      • ✈️3.4.2 实例
    • 🚀3.5 最不经常使用算法(LFU)
      • ✈️3.5.1 解释
      • ✈️3.5.2 实例
      • ✈️3.5.3 缺点
    • 🚀3.6 总结
  • 🛰️4 Cache写策略
    • 🚁4.1 总览
    • 🚁4.2 写命中
      • 4.2.1 写回法
      • 4.2.2 全写法
    • 🚁4.3 写不命中
      • 🚟4.3.1 解释
      • 🚟4.3.2 写分配法
      • 🚟4.3.3 非写分配法
    • 🚁4.4 多级Cache
      • 🚟4.4.1 解释
      • 🚟4.4.2 注意
    • 🚁4.5 总结
  • 🛰️5 总结


🛰️1 Cache概述

🛩️1.1 局部性原理

🛫1.1.1 空间局部性

(1)解释
image1
(2)说明
比如说一个数组,当我们访问a[0][0]时,其接下来的a[0][1]、a[0][2]也很有可能被接着访问,这就是局部性原理
image2
而对于指令也是一样,一个程序中的指令通常是被顺序存放的,CPU访问了一条指令后,对于其周围的指令是很有可能接着去访问的

🛫1.1.2 时间局部性

(1)解释
image3
(2)说明
对于一条循环指令来说(for(int i=1,i<10,i++)),i=1的加法,在未来的i=2的时候也要用到。这就是时间局部性

3. 基于局部性原理,可以将CPU目前访问的地址“周围”的部分数据放进Cache中,这样可以大幅提升CPU的运行速度

🛩️1.2 性能指标

🛫1.2.1 解释

image4
上述的命中率是CPU分别在Cache、主存中找数据的情况,CPU也可以同时在Cache、主存中寻找数据,此时的平均访问时间就是
image5

🛫1.2.2 例题

image6

🛫1.2.3 待解决的问题

Cache是取目前访问的地址的“周围”的数据,那么如何界定周围?
image7
image8
注意:
image9

🛩️1.3 知识总结

image10

🛰️2 Cache与主存的映射

🪂2.1 知识总览

解决Cache与主存的数据块的对应关系的问题image1

🪂2.2 全相联映射(随便放)

🛸2.2.1 要点

(1)主存块可以放在Cache的任何一块上
(2)Cache中的每块都设置了一个标记位记录该主存块的地址,对于未存放数据的Cache块标记位已全0展示
(3)但是地址位为全0的主存块实际上是有资源的,所以还需要设置一个有效位(1代表有数据,0代表无数据)

🛸2.2.2 CPU访问主存

(1)前提:主存地址空间为256MB,每块行长为64kb,则:

image2
假设CPU访问地址为:1…1101 001110
image3

🪂2.3 直接映射(只可以放在固定位置)

🛸2.3.1 要点

(1)使主存地址对Cache内存块个数取余,得到的数字就是该主存块应该存放的Cache块编号
image4
(2)设置了标记位与有效位,与全相联映射一致。

🛸2.3.2 改进

考虑到该方法需要将主存地址对Cache总块数取余,即地址的后三位实际上对应的是Cache块的编号,那么在Cache的标记位上,可以直接截取主存地址的前19位,因为后3位分别为000-111。
image5

🛸2.3.3 缺点

对于一个特定的主存块来说,假如其对应的Cache内存块没有空间,那么即使其他Cache块有空间,该主存块也不可以放到有空间的Cache块中去。

🛸2.3.4 CPU访存

image6

🪂2.4 组相联映射(可放到特定分组)

🛸2.4.1 要点

(1)将Cache块分组,主存块需要对组数进行取余,根据结果决定改主存块要放在那个Cache块组中。
(2)设定标记位与有效位
(3)标记位的改进方法与直接映射类似,对于一个块数为8的Cache,对地址位为22位的主存地址只需要保存前20位就可以了。(222/22)

🛸2.4.2 CPU的访存

image7

🪂2.5 总结

🛰️3 Cache替换算法

🚀3.1 总览

image1

🚀3.2 随机算法(RAND)

✈️3.2.1 解释

image2

✈️3.2.2 缺点

image3

✈️3.2.3 优点

实现简单,原理简单

✈️3.2.4 示例

image4
注意:当CPU在Cache中未访问到目标数据而去主存寻找时,找到的数据要立即放入Cache中去

🚀3.3 先进先出(FIFO)

✈️3.3.1 解释

image5

✈️3.3.2 实例

image6

✈️3.3.3 优点

image7

✈️3.3.4 缺点

image8
且容易出现抖动现象
image9

🚀3.4 近期最少使用算法(LRU)

✈️3.4.1 解释

image10
image11
对于第一条,我们当然也可以使其加1,但是不加1其实也可以达到效果。

✈️3.4.2 实例

image12

🚀3.5 最不经常使用算法(LFU)

✈️3.5.1 解释

image13

✈️3.5.2 实例

image14

✈️3.5.3 缺点

image15

🚀3.6 总结

image16
LRU的Cache的命中率最大,效果最好

🛰️4 Cache写策略

🚁4.1 总览

image1

🚁4.2 写命中

解释

CPU要对一个地址进行写操作,而且这个地址已经被调入了Cache,发生了命中的情况

4.2.1 写回法

  1. 解释

image2
这样做避免了每次写都将数据写回主存,节省了一些写的时间

  1. 注意

为了让CPU知道Cache是否发生了写操作,还需要对每个Cache块增加一个“脏位”,该位数值为1代表已经修改,为0代表没有修改

  1. 示意图

image3

缺点

存在数据不一致的隐患

4.2.2 全写法

  1. 解释

image4

  1. 注意

为了增加CPU将数据写入主存的速度,可以增加一个由SRAM(速度较快)实现的缓冲队列,CPU先将数据放入缓冲队列,当CPU暂时不再进行写操作时,缓冲队列在专门的控制电路下将数据写入主存

  1. 示意图

image5

  1. 缺点

image6

🚁4.3 写不命中

🚟4.3.1 解释

当CPU需要对一个地址进行写操作,且这个数据不在Cache中的时候,CPU回将数据调入Cache中

🚟4.3.2 写分配法

  1. 解释
    image7

  2. 示意图
    image8

🚟4.3.3 非写分配法

  1. 解释
    image9

  2. 也就是说,当不命中时,CPU对某个地址进行写操作时不讲数据调入Cache,只有在进行读操作时才将数据调入Cache。因为具备全写法中直接对主存进行修改的特性,所以通常搭配全写法使用

  3. 示意图
    image10

🚁4.4 多级Cache

🚟4.4.1 解释

image11

🚟4.4.2 注意

低级Cache中保存的是主存的副本,而高级Cache保存的是低级Cache的副本,所以多级Cache中也存在数据同步的问题。一般来说:
image12

🚁4.5 总结

image13

🛰️5 总结

计算机组成原理如一座精密的交响乐团,微观中展现着电子的舞蹈,宏观中奏响着科技的交响曲。

它拆解复杂问题为简单指令,通过微处理器的默契协作,创造出无尽可能。

存储单元如记忆的灯塔,指引信息的航程。

总线是信息的大道,连接着各个功能模块,使计算机成为无比高效的智慧之器。

在计算机组成原理的魔法指导下,世界逐渐变得更加智能、便捷、创新。

渴望挑战计算机组成与原理的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多CO的奇迹吧。我们推出了引领趋势的💻CO专栏:《计算机组成原理基础》 ,旨在深度探索CO的实际应用和创新。🌐🔍

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/469825.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

06MARL经典算法 基于agent modelling

文章目录 前言agent modelling一、Fictitious Play(虚拟博弈)二、JAL with agent modelling 前言 基于JAL的算法需要对智能体的行为做出假设以便应用博弈知识求解策略&#xff0c;带来很多限制&#xff0c;根据其他智能体观察到的行为对其它智能体进行建模&#xff0c;预测其行…

MySQL 基础知识(四)之表操作

目录 1 约束 2 查看已有表 3 创建表 4 查看表结构 5 修改表 6 删除表 1 约束 主键约束 primary key&#xff1a;唯一&#xff0c;标识表中的一行数据&#xff0c;此列的值不可重复&#xff0c;且不能为 NULL&#xff0c;此外&#xff0c;可以多个列组成主键唯一约束 uniq…

Matplotlib自定义辅助函数 (一):让你的图表大放异彩!

Matplotlib美化秘诀&#xff1a;自定义辅助函数&#xff0c;让你的图表大放异彩&#xff01; 利用Matplotlib进行数据可视化示例 &#x1f335;文章目录&#x1f335; &#x1f333;一、创建自定义样式函数&#x1f333;&#x1f333;二、创建自定义颜色映射&#x1f333;&…

Rabbit和Springboot整合(高阶)

在昨天的练习作业中&#xff0c;我们改造了余额支付功能&#xff0c;在支付成功后利用RabbitMQ通知交易服务&#xff0c;更新业务订单状态为已支付。 但是大家思考一下&#xff0c;如果这里MQ通知失败&#xff0c;支付服务中支付流水显示支付成功&#xff0c;而交易服务中的订单…

【C语言】常见字符串函数的功能与模拟实现

目录 1.strlen() 模拟实现strlen() 2.strcpy() 模拟实现strcpy() 3.strcat() 模拟实现strcat() 4.strcmp() 模拟实现strcmp() 5.strncpy() 模拟实现strncpy() 6.strncat() 模拟实现strncat() 7.strncmp() 模拟实现strncmp() 8.strstr() 模拟实现strstr() 9.str…

每日五道java面试题之java基础篇(六)

第一题&#xff1a;Java 创建对象有哪⼏种⽅式&#xff1f; Java 中有以下四种创建对象的⽅式: new 创建新对象通过反射机制采⽤ clone 机制通过序列化机制 前两者都需要显式地调⽤构造⽅法。对于 clone 机制,需要注意浅拷⻉和深拷⻉的区别&#xff0c;对于序列化机制需要明…

每日OJ题_递归①_力扣面试题 08.06. 汉诺塔问题

目录 递归算法原理 力扣面试题 08.06. 汉诺塔问题 解析代码 递归算法原理 递归算法个人经验&#xff1a;给定一个任务&#xff0c;相信递归函数一定能解决这个任务&#xff0c;根据任务所需的东西&#xff0c;给出函数参数&#xff0c;然后实现函数内容&#xff0c;最后找出…

【Vue】工程化开发脚手架Vue CLI

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Vue⛺️稳重求进&#xff0c;晒太阳 工程化开发&脚手架Vue CLI 基本介绍 Vue Cli是Vue官方提供的一个全局命令工具 可以帮助我们快速创建一个开发Vue项目的标准化基础架子【集成了we…

解决‘vue‘ 不是内部或外部命令,也不是可运行的程序(设置全局变量)

发现是没有执行&#xff1a; npm install -g vue/cli 但是发现还是不行 此时&#xff0c;我们安装了 Vue CLI&#xff0c;但是在运行 vue ui 命令时出现了问题。这通常是因为全局安装的 Vue CLI 的路径没有被正确地添加到系统的环境变量中。 可以尝试以下几种方法来解决这个问…

Cocos2dx-lua ScrollView[一]基础篇

一.ScrollView概述 cocos游戏中ScrollView控件大量使用,95%以上的项目都会使用ScrollView,个别游戏可能全部使用翻页的滑动效果。如果想要精通Cocos的UI开发,精通ScrollView控件非常关键,因此对ScrollView的使用进行总结很有必要。 下文缩写说明:sv = ScrollView, item代…

分布式文件系统 SpringBoot+FastDFS+Vue.js【三】

分布式文件系统 SpringBootFastDFSVue.js【三】 七、创建后台--分角色管理7.1.创建后台数据库表7.2.创建实体类7.2.1.Admin7.2.2.Menu7.2.3.MenuBean7.2.4.Role7.2.5.RoleMenu 7.3.编辑配置文件application.yml7.4.编写工具类7.4.1.AuthContextHolder7.4.2.HttpUtils7.4.3.Stri…

Linux——网络通信TCP通信常用的接口和tco服务demo

文章目录 TCP通信所需要的套接字socket()bind()listen()acceptconnect() 封装TCP socket TCP通信所需要的套接字 socket() socket()函数主要作用是返回一个描述符&#xff0c;他的作用就是打开一个网络通讯端口&#xff0c;返回的这个描述符其实就可以理解为一个文件描述符&a…