4 计算机组成原理第三章 存储系统 高速缓冲存储器 虚拟存储器

文章目录

      • 1 局部性原理性能分析
      • 2 Cache工作原理(简易版)
      • 3 地址映射
      • 4 替换算法
          • 4.1 替换算法(十进制)举例
          • 4.2 Cache工作原理(加强版)
            • 4.2.1写策略-命中
            • 4.2.2 写策略-未命中
          • 4.3 替换算法(二进制)例题
          • 4.4 Cache工作原理(高配版)
          • 4.5 Cache例题小结
      • 5 虚拟存储器
          • 5.1 页式虚拟存储器
          • 5.2 段式虚拟存储器
          • 5.3 段页式虚拟存储器
          • 5.4 快表TLB
          • 5.5 页式虚拟存储器-例题

在这里插入图片描述

1 局部性原理性能分析

  • 空间局部性:在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的
  • 时间局部性:在最近的未来要用到的信息,很可能是现在正在使用的信息

高速缓冲技术就是利用程序访问的局部性原理,把程序中正在使用的部分存放在一个高速的,容量较小的Cache中,使CPU访存操作大多数针对Cache进行,从而大大提高程序的执行速度

2 Cache工作原理(简易版)

Cache工作原理类似操作系统分页存储快表机制
在这里插入图片描述
CPU与Cache之间的数据交换以字为单位,而Cache与主存之间的数据交换则以Cache块为单位

  1. 命中率H:CPU欲访问的信息已在Cache中的比率
    设一个程序执行期间,Cache的总命中次数为Nc,访问主存的总次Nm
    则H=Nc/Nc+Nm
  2. 缺失率M=1-H
  3. 设tc为命中时的Cache访问时间,tm为未命中时的访问时间
    Cache—主存系统的平均访问时间Ta为Ta=Htc+(1-H)tm

假设Cache的速度是主存的5倍,且Cache的命中率为95%,则采用Cache后,存储器性能提高多少(设Cache和主存同时被访问,若Cache命中则中断访问主存)?

在这里插入图片描述

若采用先访问Cache再访问主存的方式:

不命中时,访问cache耗时为t,发现不命中后再访问主存耗时为5t,总耗时为6t
故系统的平均访问时间为 T2 = 0.95×t+0.05×6t = 1.25t
故性能为原来的 5t / 1.25t = 4倍,即提高了3倍。

Cache三大核心问题:

  1. 主存中的块放到Cache中哪个位置?
    (1)空位随意放:全相联映射
    (2)对号入座:直接映射
    (3)按号分组,组内随意放:组相联映射
  1. 对于(1),Cache满了如何处理?对于(2)(3),对应位置被占用如何处理?
    随机(RAND)算法、先进先出(FIFO)算法、近期最少使用(LRU)算法、最不经常使用(LFU)算法。
  1. 修改Cache中的内容后,如何保持主存中相应内容的一致性?

命中
全写法(write-through
写回法(write-back

不命中
写分配法(write-allocate
非写分配法(not-write-allocate

3 地址映射

在这里插入图片描述
Cache高三位确定行号,低6位确定行内地址,对应这行中的哪个单元
主存:

低的6位表示每一行中的具体哪个位置,对应这行的哪个单元
中的3位对应Cache的行号
高的19位就是主存比Cache多出来的地址位数

  1. 全相联映射
    在这里插入图片描述

主存中内容可以往Cache中随意放,但需要设置一个有效位,如果是0表示空闲,如果是1表示已经占满;
根据有效位可以判断是否放了东西,根据有效位后的标号对应主存的地址(主存的地址高位作为一个标记,存放在Cache相应的单元)

Cache需要保存地址高位,绿+蓝都要存

  1. 直接映射
    在这里插入图片描述

由于主存中多块可以放在Cache中同一位置,为了区分具体来自主存中哪一位置,把主存中的块存过去后,立刻把主存地址高位存到对应的Cache行,作为标记项

Cache需要保存地址高位,一一对应的无需保存,存绿

  1. 组相联映射:按号分组,组内任意放(综合了上面两者优势)

在这里插入图片描述
高的两位做组号,0 1对应0组(高两位00) ,2 3对应1组(高两位01)…

  1. 三种方式地址映射
    在这里插入图片描述

在这里插入图片描述

有效位告诉机器此块数据要使用,不能被其他数据覆盖(Cache中只要放了数据就置有效位1)
标记位告诉机器,Cache中数据来自主存具体哪一位置

4 替换算法

  1. 随机算法(RAND):随机地确定替换的Cache块。它的实现比较简单,但没有依据程序访问的局部性原理,故可能命中率较低。
  2. 先进先出算法(FIFO):选择最早调入的行进行替换。它比较容易实现,但也没有依据程序访问的局部性原理,可能会把一些需要经常使用的程序块(如循环程序)也作为最早进入Cache的块替换掉。
  3. 近期最少使用算法(LRU):依据程序访问的局部性原理选择近期内长久未访问过的存储行作为替换的行,平均命中率要比FIFO要高,是堆栈类算法。
    LRU算法对每行设置一个计数器,Cache每命中一次,命中行计数器清o,而其他各行计数器均加1,需要替换时比较各特定行的计数值,将计数值最大的行换出。
  4. 最不经常使用算法(LFU):将一段时间内被访问次数最少的存储行换出。每行也设置一个计数器,新行建立后从0开始计数,每访问一次,被访问的行计数器加1,需要替换时比较各特定行的计数值,将计数值最小的行换出。
4.1 替换算法(十进制)举例

在这里插入图片描述
说明:
直接映射:

(1)主存块号/总块数 余数→Cache块号
(2)商→对应的标记位

  • 访问4,6号,由于Cache为空,未命中,标记置为0,再访问12,对应Cache中4号单元,虽然有效位1,但是标记位0与12除8商1不一样,则发生替换,12替换4,并把标记位改1,未命中
  • 访问4未命中,4号单元标记位改0,访问8…
    每次访问一个单元,用商更新一下被访问的标记位

在这里插入图片描述
FIFO

每新进来一个元素,先往下放,如果之前有元素,就把之前有的元素往上抬,则下面的元素始终是新放入的,往上抬时,自然而然替换了
访问第四个4时,因为里面有4和12,命中,访问接下来的8把最上面12替换出去…

在这里插入图片描述
LRU:

把即将要替换的放上面,把最近使用过的放下面
访问12时,12根4相比,是刚刚使用的,把12放下面,接下来访问4,12是最近不太用的,往上抬,且4命中;访问8时,8往下放,替换12…


4.2 Cache工作原理(加强版)

在这里插入图片描述

4.2.1写策略-命中
  1. 全写法(写直通法,write-through):当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用写缓冲(write buffer)
  2. 写回法write-back):当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存
4.2.2 写策略-未命中
  1. 写分配法write-allocate):把主存中的块调入Cache,在Cache中修改。
    搭配写回法使用。
  2. 非写分配法not-write-allocate):只写入主存,不调入Cache。
    搭配全写法使用。

在这里插入图片描述

4.3 替换算法(二进制)例题

设主存地址空间大小为1KB,按字节编址,Cache由8个块构成,每个Cache块大小为16B,CPU依次访问以下地址:0001001110、1001110010、0001001111、0011000010、0101001000、1011110010、1111010000、0011001001(十进制为78、626、79、194、328、754、976、201),求:

(1)假设地址映射方式为全相联映射,在采用FIF0、LRU、LFU替换算法时,分别求Cache命中次数。

首先分析地址结构:在这里插入图片描述

访问0001001110时,有效位由0改为1,标记位就是地址前六位000100
访问1001110010时,有效位由0改为1,标记位就是地址前六位100111
访问0001001111时,标记位地址前六位000100,已在Cache中,命中,或者用十进制角度,64~79为一块,访问78,再访问79,命中(调入的一块同标记位的地址,而不是一个地址)

全相联模式下,可能不会发生替换,Cache是一点一点用完

(2)假设地址映射方式为直接映射,求Cache命中次数。

首先分析地址结构:在这里插入图片描述

访问0001001110时,由100可知放在Cache中4号块,把标记置为000,有效位1
访问1001110010时,由111可知放在Cache中7号块,把标记置为100,有效位1
访问0001001111时,由100可知放在Cache中4号块,此时有效位1,Cache标记位000与当前地址标记位000同,命中
访问0011000010时,由100可知放在Cache中4号块,此时有效位1,Cache标记位001与当前地址标记位000不同,未命中,替换,把001替换000

直接映射:对号入座→有冲突直接替换,不涉及替换策略

首先分析地址结构:在这里插入图片描述

  • 访问0001001110时,由组号00可知放在Cache中0号块,把标记置为0001,有效位1,在组内采用全相联映射,放0号组的1号块和2号块都可以,假设放在1号块
  • 访问1001110010时,由11可知放在Cache中3号组,把标记置为1001,有效位1,
  • 访问0001001111时,由00可知放在Cache中0号组,此时有效位1,Cache标记位0001与当前地址标记位0001同,命中
  • 访问0011000010时,由00可知放在Cache中0号组,此时有效位1,Cache标记位0011与当前地址标记位0001不同,未命中,把它放在0组中的2号块(1号块已放了)
  • 访问0101001000时,由00可知放在Cache中0号组,第0组已满,但当前标记与Cache两个标记都不同,需要替换,

若采用FIFO(替换最早调入的):最早调入的块标记是0001,故替换之。
若采用LRU(替换最近未使用的):刚用过0011,故替换0001
LFU(比较次数,替换使用次数最少的)

(4)假设其它配置同(3),采用写回法和直写法时,Cache的总容量分别为多少?

在这里插入图片描述
标记项:有效位1位固定,标记位由地址映射方式决定,维护位由替换算法决定,替换位由替换策略决定

4.4 Cache工作原理(高配版)

在这里插入图片描述

4.5 Cache例题小结

在这里插入图片描述

5 虚拟存储器

在这里插入图片描述

  • 虚拟存储器是一个逻辑模型(关注功能,不关注实现)
  • 功能:用户给出一个地址,叫做虚地址或逻辑地址,虚拟存储器要给出该地址对应的数据。
  • 实现:由辅助硬件将虚地址映射到主存当中的某个单元,主存单元地址称为实地址物理地址
5.1 页式虚拟存储器

虚拟空间与主存空间都被划分成同样大小的页,主存的页称为实页,虚存的页称为虚页。

虚地址到物理地址映射过程:
在这里插入图片描述

5.2 段式虚拟存储器
  • 段式虚拟存储器中的段是按程序的逻辑结构划分的,各个段的长度因程序而异。
  • 虚拟地址分为两部分:段号和段内地址。
  • 段表:每一行记录了与某个段对应的段号、装入位、段起点和段长等信息。
    由于段的长度可变,所以段表中要给出各段的起始地址与段的长度。

地址映射过程:
在这里插入图片描述

5.3 段页式虚拟存储器
  • 把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位。
  • 每个程序对应一个段表,每段对应一个页表。
  • 虚拟地址:段号+段内页号+页内地址
5.4 快表TLB
  • 页表、段表存放在主存中,收到虚拟地址后要先访问主存,查询页表、段表,进行虚实地址转换。
  • 放在主存中的页表称为慢表(Page)。
  • 提高变换速度→用高速缓冲存储器存放常用的页表项→快表(TLB

在这里插入图片描述

5.5 页式虚拟存储器-例题

在这里插入图片描述

地址变换第一步,在于分析地址结构
标记对应虚页号,页框对应实页号
有效位0,快表未命中,接下来查询页表,若命中,页表完成虚实转换,若未命中,主存中调出来

实页号与虚页号相互替换,页内地址保持不变

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

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

相关文章

CICC城市大脑专委会获批成立,欢迎参加专委会共同探索和研究

CICC 城市大脑专委会中国指挥与控制学会(CICC)是经国家民政部正式注册的我国指挥与控制科学技术领域的国家一级学会,是全国性科技社会组织;是中国科学技术协会的正式团体会员,接受中国科学技术协会的直接领导&#xff…

讲座文稿 | 人工智能与因果推理

来源:本文为中国人民大学明德讲坛第23期暨服务器艺术人工智能哲学第11期讲座文稿。主持人:朱锐 嘉宾:邱德钧、秦曾昌、Vincent Luizzi、袁园 主办:中国人民大学哲学与认知科学跨学科交叉平台、服务器艺术 协办:神经现…

顺序栈的介绍及实现

1 栈 从数据结构角度来讲,栈也是线性表,其操作是线性表操作的子集,属操作受限的线性表。 但从数据类型的角度看,它们是和线性表大不相同的重要抽象数据类型。 ◆ 栈是只准在一端进行插入和删除操作的线性表,该端称为栈…

内排序算法一览

文章目录1 插入排序2 希尔(shell)排序3 冒泡排序4 快速排序5 选择排序6 堆排序7 归并排序8 内排序代码一览运行结果常用排序算法时间复杂度和空间复杂度一览表排序:将一组杂乱无章的数据按一定的规律顺次排列起来,可以看作是线性表的一种操作…

Nature:神经元在大脑中的起点并不一定是它们的终点

来源:生物通虽然人体有30亿个DNA碱基和超过30万亿细胞,格里森和他的同事们发现只有几百DNA突变可能出现在头几个细胞分裂后的受精胚胎或在大脑的早期发展。通过在死者的大脑中跟踪这些突变,他们第一次能够重建人类大脑的发育。胎儿大脑的发育…

扎克伯格Meta元宇宙被质疑:年均烧百亿美元,货要等十年

来源:新智元公司内部业务混乱、公司外部观感酷似曾经的雅虎,这些与扎克伯格的元宇宙发力结合在一起,让Meta的新老员工都怨声载道。不少Meta的员工,现在都在抱怨老板的元宇宙项目顾头不顾腚、在公司内部徒增业务困扰但并无法带来收…

链栈的介绍与实现

文章目录1 链栈定义2 链栈基本操作3 链栈代码实现1 链栈定义 链栈:采用链式存储的栈称为链栈 在一个链栈中,栈底就是链表的最后一个结点,而栈顶总是链表的第一个结点。因此,新入栈的元素即为链表新的第一个结点,只要…

栈与递归

文章目录1 递归的概念2 递归算法3 递归数据结构4 递归实现5 递归与循环差别1 递归的概念 递归是指在定义自身的同时又出现了对自身的调用。如果一个函数在其定义体内直接调用自己,则称直接递归函数;如果一个函数经过一系列的中间调用语句,通过…

马斯克与推特达成收购协议 专家警告称这一步迈得过大

来源:网易智能4月26日消息,当地时间周一,在特斯拉首席执行官埃隆马斯克(Elon Musk)敲定将以440亿美元的价格收购个人社交媒体平台推特后,特斯拉股价盘中一度下跌超2%,最终收于每股998.02美元&am…

循环队列的介绍与实现

文章目录1 循环队列定义2 循环队列基本操作3 循环队列代码实现4 补充1 循环队列定义 循环队列:即顺序存储的队列,是为了避免“假溢出”而利用%运算符将队列首尾相接连成一个环状的队列,称为循环队列。 引入循环队列克服顺序队列中存在的“假…

5年内开炸第一颗小行星,改变其轨道!中国计划建立小行星预警监测系统

来源:大数据文摘不知道多少科幻片中,小行星成为了人类灭绝的罪魁祸首。在超高的速度加持下,直径只有十几公里的小行星撞击地球,都有可能造成人类毁灭。为了提前预警这样的事件发生,人类做出了不少努力。美国航天局NASA…

算术逻辑单元设计

文章目录1 基本逻辑符号1.1 ALU1.2 逻辑符号1.3 复合逻辑2 加法器设计2.1 一位加法器2.2 进位产生原理2.2 多位二进制位加法器1 基本逻辑符号 1.1 ALU ALU功能: 算术运算:加、减、乘、除等 逻辑运算:与、或、非、异或等 辅助功能&#xff1a…

数字孪生城市框架与全球实践洞察(2022)

来源 : 世界经济论坛编辑 :蒲蒲全球数字孪生市场蓬勃发展。据预测,到2030年,数字孪生技术的应用将为城市规划、建设、运营节省成本达到2800亿美元。市场规模方面,2020年全球数字孪生市场规模为31亿美元,预计…

2 计算机组成原理第二章 数据的表示和运算 定点数运算 浮点数运算

文章目录1 进制转换2 定点数表示及其运算2.1 定点数表示2.1.1 真值→补码2.1.2 补码→真值2.1.3 [XT]补 →[-XT]补2.1.4 真值、原码、反码、补码转换关系图形总结2.2.4 移码2.2 定点数运算2.2.1 移位运算2.2.2 定点数加减运算2.2.3 溢出判断判溢出方法一判溢出方法二判溢出方法…

Gartner:AI和自动化将是新一代SASE的关键能力

来源:安全内参近年来,安全访问服务边缘(SASE)技术快速发展,得到了较广泛的行业应用。SASE架构通常包括了SD-WAN、FWaaS、安全Web网关、云访问安全代理(CASB)和零信任网络访问(ZTNA&a…

MIPS指令与MIPS汇编语言

文章目录1 MIPS简介2 MIPS指令系统的特点3 MIPS寄存器4 MIPS指令格式4.1 R-Type型指令4.2 l-Type型指令4.3 J-Type型指令4.4 三类指令小结5 MIPS例题6 MIPS过程调用6.1 过程调用和栈6.2 MIPS中栈的实现6.3 栈帧的概念6.4 MIPS中的过程调用(假定P调用Q)6.…

DeepMind爆发史:决定AI高峰的“游戏玩家”|深度学习崛起十年

来源:OneFlow社区翻译:刘晓祯、沈佳丽、胡燕君、许晨阳、周亚坤很少有人会否认,过去十年,AI领域最耀眼的明星组织当属DeepMind,没有之一。那个震动世界的高光时刻发生在2016年3月的一天,AI选手AlphaGo击败了…

链队的介绍与实现

文章目录1 链队定义2 链队基本操作3 代码实现1 链队定义 队列的链式存储结构简称为链队列,它是限制仅在表头删除和表尾插入的单链表。显然仅有单链表的头指针不便于在表尾做插入操作,为此再增加一个尾指针,指向链表上的最后一个结点。 type…

二叉树介绍与代码实现

文章目录1 树的基本概念1.1 树的形式定义1.2 树的递归定义1.3 树的基本术语1.4 二叉树的递归定义1.5 存储方法1.6 满二叉树VS完全二叉树2 二叉树的性质3 代码实现1 树的基本概念 1.1 树的形式定义 T{D,R} D为树T中包含n个结点的有限集合,R为树中结点之间…

2022先进计算七大趋势

来源:CBInsights 中文编辑:蒲蒲作为智能社会的底座、数字经济的引擎,算力的重要性已经被提到一个前所未有的高度。当下,算力的提升仍然面临着来自多个维度的挑战。不论是硬件层面还是架构层面,算力发展都亟需变革。先进…