【系统架构设计】计算机组成与体系结构(三)

计算机组成与体系结构(三)

  • 计算机系统组成
  • 存储器系统
    • 主存储器
    • 辅助存储器
    • Cache存储器
      • Cache 基本原理
      • 映射机制
        • 直接映射
        • 全相联映射
        • 组相联映射
      • 替换算法
      • 写操作
  • 流水线(计算)
    • 流水线周期
    • 流水线执行时间
    • 流水线的吞吐率
    • 流水线的加速比

计算机系统组成

存储器系统

主存储器

辅助存储器

Cache存储器

Cache 功能是提高CPU数据输入输出的速率,突破所谓的“冯·诺依曼瓶颈”,即CPU与存储系统间数据传送带宽限制。其容量小但速度快

Cache 通常采用相联存储器(ContenAddressable Memory,CAM)。CAM是一种基于数据内容进行访问的存储设备。当对其进行写入数据时,CAM能够自动选择一个未用的空单元进行存储;当要读出数据时,不是给出其存储单元的地址,而是直接给出该数据或者该数据的一部分内容,CAM对所有存储单元中的数据同时进行比较,并标记符合条件的所有数据以供读取。由于比较是同时、并行进行的,所以这种基于数据内容进行读写的机制,其速度比基于地址进行读写的方式要快很多。

ps:也就是相联存取 方法。

Cache 基本原理

使用Cache 改善系统性能的依据是程序的局部性原理,即最近的、未来要用的指令和数据大多局限于正在用的指令和数据,或是存放在与这些指令和数据位置上邻近的单元中。这样就可以把目前常用或将要用到的信息预先放在Cache 中,当CPU需要读取数据时,先在Cache 中查找所需要的内容,如果有则直接读取;如果没有再从内存中读取该数据,然后同时送往CPU和Cache。如果CPU需要访问的内容大多都能在Cache 中找到(称为访问命中),则大大提高系统性能。

ps:这里要注意,如果没有从Cache 读到数据,从内存读到的数据会同时送往CPU 和Cache

如果以h 代表对Cache的访问命中率(1-h 称为失效率,或称为 未命中率),t1 表示Cache 的周期时间,t2 表示内存的周期时间,以读操作为例,使用”Cache +主存储器“的系统的平均周期是t3 ,则

t3=t1 * h + t2 *(1-h)

映射机制

当CPU发出访存请求后,存储器地址先被送到Cache 控制器以确定所需数据是否已经在Cache 中,若命中则直接对Cache 进行访问,该过程被称为Cache 的地址映射(映像)。在Cache 地址映射中,主存和Cache 将均分成容量相同的块(页)。常见的映射方法有 直接映射 、全相联映射、组相联映射

直接映射

直接映射方式以随机存取存储器作为Cache存储器,硬件电路较简单。在进行映射时,主存地址被分成了三部分,从高到低依次是:区号、页号、页内地址
在这里插入图片描述

在本例中,假设内存容量为1GB,Cache容量为8MB,页面的大小为512KB。直接映射中,先分区,再分页一个区的大小就是Cache的容量大小,所以一共分:1GB/8MB=128个区,所以区号是7位;每个区分:8MB/512KB=16个页,所以页号是4位.

在直接映射方式中,每个主存页只能复制到某一个固定的Cache 页中,如图1-4所示。直接映射方式的映射规律是:主存中每个区的第0页,只能进入Cache 的第0页,若当前时刻Cache中0号页被占据,而1-15号页空闲,现在需要将1区第0页(即内存的16页)调入Cache 是会发生冲突的。所以直接映射的块冲突率很高
在这里插入图片描述
在Cache 中,为每一个页设立一个Cache 标记,用于识别当前Cache 块来自于哪个内存区。直接映射中,由于每个区的N号页都必须进入到Cache的N号页,所以只需要记录区号就可以,所以在本例中,对应标记的长度也是7位。

直接映射方式的优点是比较容易实现,缺点是不够灵活,有可能使Cache的存储空间得不到充分利用

ps:要看清楚,到底是内存页还是Cache页内存区还是Cache标记

全相联映射

全相联映射使用相联存储器组成的Cache 存储器,在全相联映射方式中,主存的每一页可以映射到Cache的任一页,如果淘汰Cache 中某一页的内容,则可以调入任一主存页的内容,因而较直接映射方式灵活

在全相联映射方式中,主存地址分为:地址部分(主存页标记)和数据部分(页内地址)数据部分用于存放数据,而地址部分则存放该数据的存储器地址
在这里插入图片描述
每个Cache 页可以映射到主页存的任一页,所以每页Cache 标记只需要表明它现在所映射的主存页号即可。在全相联映射方式中,主存地址不能直接提取Cache页号,而是需要将主存页标记与Cache各页标记逐个比较,直到找到标记符合的页(访问Cache 命中),或者全部比较完后仍无符合的标记(访问Cache失败)。因此这种映射方式速度很慢,失去了高速缓存的作用,这是全相联映射方式最大缺点。而且Cache标记信息位数增加,比较逻辑成本随之增加。当然如果让主存页标记和各Cache标记同时比较,则成本又太高。全相联映射方式因比较器电路难于设计和实现,只适用于小容量Cache
在这里插入图片描述

ps: 以上2种映射方式,全相联映射以页位单位,可以自由映射,没有固定的对应关系;直接映射方式,主存分组,主存组内的各页与Cache 的页之间采取的是固定的映射关系,但各组均可映射到Cache中

组相联映射

组相联映射(页组映射)介于直接映射和全相联映射之间,是这2种映射的一种折衷方式。在该方式中,主存与Cache 都分组,主存中一个组内页数与Cache 的分组数相同,如图1-7所示。
在这里插入图片描述
根据之前的例子,主存依旧是128区,而每个区是8组,每个组是2页。组相联映射方式的主存地址组织如图1-8所示。基本规则是:主存中的组与Cache的组形成直接映射关系,而每个组内的页是全相联映射关系。如主存1区0页,由于在0组,所以只能进入Cache的0组中,至于进入Cache的0组0页还是0组1页,并无强制要求,可以任意放置。
在这里插入图片描述
容易看出,如果Cache 中每组只有1页,那组相联映射就变成了直接映射方式;如果Cache 中每组有16页(即Cache只分一组),那就变成了全相联映射方式。因此,在具体设计组相联映射时,可以根据设计目标选取具体分组页数。由于Cache中每组有若干可供选择的页,因而它在映射定位方面较直接映射方式更灵活;每组页数有限,因此较全相联映射付出的代价不是很大。

ps: 为保障性能,内存与Cache之间的映射往往采用硬件完成,编程时不用考虑。

替换算法

当Cache产生一次访问未命中,相应数据应同时写入CPU和Cache,但当Cache 已存满数据后,新数据必须替换某些旧数据,常用替换算法有以下三种:

  • 随机算法:随机选择一块进行替换
  • 先进先出:将最先进入Cache的块作为被替换的块。该方法要求为每块做一个记录,记下它们进入Cache 的先后次序。优点是:容易实现,系统开销小;缺点:可能会将一些需要经常使用的程序块替换掉
  • 近期最少使用(Least Recently Used ,LRU)算法:把CPU近期最少使用的块作为被替换的块。该方法需要随时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的块。该方法相对合理,但实现较为复杂,系统开销大。通常需要对每一块设置一个称为“年龄计数器”的硬件或软件计数器,用以记录其使用情况。

写操作

为保证缓存在Cache中的数据与内存中的内容一致,常用方法如下:

  • 写直达(write through):当要写Cache 时,数据同时写入主存,有时也被称为写通;当要被替换时,不需要将这块写回主存,新调入块直接替换Cache块就行。该方法实现简单,而且能随时保持主存数据正确性,但可能增加多次不必要主存写入,降低存取速度
  • 写回(write back):修改Cache 某块,相应数据不写入主存,而是当该块要被淘汰了再写回主存。在采用该更新策略的Cache块表中,一般有一个标志位,当一块中任一单元被修改时,标志位被置1,在需要替换掉这块时,如果标志位1则必须先把这块写回到主存后再调入新块;如果标志位0,则不必写回主存,直接替换这块就行。该方法操作速度快,但因主存中的字块未随时修改而有可能出错
  • 标记法:对Cache 中每个数据设置一个有效位。当数据进入Cache后,有效位置1,当CPU要对该数据进行修改时,数据只需写入内容并同时将该标志位置0;当要从Cache 读数据时,如果标志位1则从Cache 读,如果0则从内存读

流水线(计算)

流水线技术把一个任务分解为若干顺序执行的子任务,不同的子任务由不同的执行机构负责执行,而这些机构可以同时并行工作。在任一时刻,任一任务只占用其中一个执行机构,这样就可以实现多个任务的重叠执行,以提高工作效率。

流水线周期

流水线应用过程中,会将需要处理的工作分为N阶段,最耗时那一段的时间为流水线周期。如使用流水线技术执行100条指令,每条指令取指2ms,分析4ms,执行1ms,则流水线周期为4ms。

流水线执行时间

1个任务的执行过程可分成N个阶段,假设每个阶段完成时间t,则完成改任务时间为Nt。若以传统方式,k个任务就是kNt;而使用流水线技术,则时Nt+(k-1)t。即:

  • 流水线执行时间 = 第1条任务的执行时间 + (n-1)x 流水线周期

ps:流水线执行时间,其实进一步可分为理论情况和实践情况两种不同的处理方式。在真正做流水线处理时,考虑到处理的复杂性,会将任务的每个执行阶段的时间都统一为流水线周期,即第1条任务的执行时间 = N x 流水线周期

流水线的吞吐率

流水线的吞吐率(Though Put rate ,TP)是指单位时间内流水线所完成的任务数量或输出的结果数量。有些文献也称为平均吞吐率、实际吞吐率。

  • 吞吐率 = 任务数k / 处理完成k个任务所用时间
  • 最大吞吐率 = 1/ 流水线周期

ps: 接用实际的流水线执行时间 ,吞吐率=k /[(N + k-1) *流水线周期],k 无穷就可以推出最大吞吐率。

流水线的加速比

完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比

  • 最大的加速比 = 单个任务的阶段数N

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python函数 之 匿名函数

1.概念 匿名函数: 使用 lambda 关键字 定义的表达式,称为匿名函数. 2.语法 lambda 参数, 参数: 一行代码 # 只能实现简单的功能,只能写一行代码 # 匿名函数 一般不直接调用,作为函数的参数使用的 3.代码 4.练习 # 1, 定义匿名函数, 参数…

JDK 和 JRE:它们之间的区别是什么?

JDK 和 JRE:它们之间的区别是什么? 1、JRE(Java Runtime Environment)1.1 JRE的主要组成部分1.2 JRE的用途 2、JDK(Java Development Kit)2.1 JDK的主要组成部分2.2 JDK的用途 3、总结 💖The Be…

pbootCMS 数据库sqlite转mysql数据库

前言 pbootCMS默认使用 sqlite数据库 ,那么什么是sqlite数据库呢? SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌…

Java | Leetcode Java题解之第232题用栈实现队列

题目&#xff1a; 题解&#xff1a; class MyQueue {Deque<Integer> inStack;Deque<Integer> outStack;public MyQueue() {inStack new ArrayDeque<Integer>();outStack new ArrayDeque<Integer>();}public void push(int x) {inStack.push(x);}pub…

Spark底层原理:案例解析(第34天)

系列文章目录 一、Spark架构设计概述 二、Spark核心组件 三、Spark架构设计举例分析 四、Job调度流程详解 五、Spark交互流程详解 文章目录 系列文章目录前言一、Spark架构设计概述1. 集群资源管理器&#xff08;Cluster Manager&#xff09;2. 工作节点&#xff08;Worker No…

数电基础 - 组合逻辑电路

目录 一. 简介 二. 分析方法 三. 设计方法 四. 常用的逻辑组合电路 五. 冒险现象 六. 消除冒险现象 七. 总结 一. 简介 组合逻辑电路是数字电路中的一种类型&#xff0c;它在任何时刻的输出仅仅取决于当时的输入信号组合&#xff0c;而与电路过去的状态无关。 组合逻辑…

红酒的艺术之旅:品味、鉴赏与生活的整合

在繁忙的都市生活中&#xff0c;红酒如同一道不同的风景线&#xff0c;将品味、鉴赏与日常生活巧妙地整合在一起。它不仅仅是一种饮品&#xff0c;更是一种艺术&#xff0c;一种生活的态度。今天&#xff0c;就让我们一起踏上这趟红酒的艺术之旅&#xff0c;探寻雷盛红酒如何以…

秋招突击——7/9——MySQL索引的使用

文章目录 引言正文B站网课索引基础创建索引如何在一个表中查看索引为字符串建立索引全文索引复合索引复合索引中的排序问题索引失效的情况使用索引进行排序覆盖索引维护索引 数据库基础——文档资料学习整理创建索引删除索引创建唯一索引索引提示复合索引聚集索引索引基数字符串…

映美精黑白相机IFrameQueueBuffer转halcon的HObject

映美精黑白相机&#xff0c;用wpfhalcon开发取图 1.到官网下载&#xff0c;开发包 1sdk 2c开发例子 3c#开发例子 引入TIS.Imaging.ICImagingControl35.dll 3.ICImagingControl使用这个类控制相机 /// <summary> /// 相机控制 /// </summary> public ICImagingC…

CentOS7二进制安装和YUM安装mongodb,服务器无法安装5.0以上的 mongodb 数据库报错 Illegal instruction

文章目录 MongoDB 安装二进制安装YUM 安装 Tips:1、MongoDB安装问题2、MongoDB登录3、MongoDB排序时内存大小限制和创建索引4、创建用户5、Java yaml使用密码连接mongodb6、MongoDB增删改查 MongoDB 安装 二进制安装 [rootmysql5-7 mongodb-6.0.4]# cat start.sh #!/bin/bash…

小程序-设置环境变量

在实际开发中&#xff0c;不同的开发环境&#xff0c;调用的接口地址是不一样的 例如&#xff1a;开发环境需要调用开发版的接口地址&#xff0c;生产环境需要正式版的接口地址 这时候&#xff0c;我们就可以使用小程序提供了 wx.getAccountInfoSync() 接口&#xff0c;用来获取…

作为空降高管,如何服众?教你3个步骤,站稳脚跟

作为空降高管&#xff0c;如何服众&#xff1f;教你3个步骤&#xff0c;站稳脚跟 第一招&#xff1a;请“尚方宝剑” 空降领导最大的劣势有4点&#xff1a; ①、缺乏支持&#xff0c;没有群众基础&#xff0c;不得民心。 ②、对环境不熟悉&#xff0c;不了解团队结构。 ③…

TCP传输控制协议二

TCP 是 TCP/IP 模型中的传输层一个最核心的协议&#xff0c;不仅如此&#xff0c;在整个 4 层模型中&#xff0c;它都是核心的协议&#xff0c;要不然模型怎么会叫做 TCP/IP 模型呢。 它向下使用网络层的 IP 协议&#xff0c;向上为 FTP、SMTP、POP3、SSH、Telnet、HTTP 等应用…

12-《向日葵》

向日葵 向日葵&#xff08;拉丁文&#xff1a;Helianthus annuusL.&#xff09;&#xff0c;为木兰纲、菊目、菊科、向日葵属的一年生草本植物。高1&#xff5e;3.5米。茎直立&#xff0c;圆形多棱角&#xff0c;质硬被白色粗硬毛。广卵形的叶片通常互生&#xff0c;先端锐突或…

如何在项目中打印sql和执行的时间

目标&#xff1a;打印DAO方法中sql和执行的时间 一种方式是去实现Mybatis的拦截器Interceptor &#xff0c;比较麻烦&#xff1b; 这里介绍一种比较简单的实现方式&#xff1b; 1、如何打印sql&#xff1f; 配置文件加这个可以打印出com.zhenhui.ids.busi.watch包下执行的sq…

Nacos服务公网环境登陆报密码错误问题排查

作者&#xff1a;小丫 一、问题现象 nacos服务内网可以正常登录&#xff0c;如下&#xff1a; 走公网代理出来之后&#xff0c;无法正常登录&#xff0c;报错"用户名密码错误" 二、排查步骤 1、链路分析 首先确认公网代理的链路&#xff1a; 域名—>haprox…

Stable Diffusion 深度探索:从入门到精通的全方位教程

在人工智能艺术创作的浪潮中&#xff0c;Stable Diffusion 作为一股不可忽视的力量&#xff0c;正以其独特的魅力吸引着无数创作者和科技爱好者的目光。本文旨在为大家提供一份详尽的 Stable Diffusion 教程&#xff0c;从基础概念到高级应用&#xff0c;带领你一步步走进这个充…

Detrs beat yolos on real-time object detection

Abstract 然而&#xff0c;我们观察到nnms对yolo的速度和准确性产生了负面影响。最近&#xff0c;端到端基于变压器的检测器(DETRs)为消除NMS提供了一种替代方案。然而&#xff0c;高昂的计算成本限制了它们的实用性&#xff0c;阻碍了它们充分发挥排除NMS的优势。在本文中&am…

【WebGIS】从设计层面设计系统

本项目在通过现代信息技术手段&#xff0c;对古村古镇进行多方位、多角度的数字化记录、展示与传播&#xff0c;实现文化遗产的数字化保护、活化利用与共享。项目内容主要包括&#xff1a;1&#xff09;古村古镇数据库的建立&#xff1a;通过多种渠道收集古村古镇的各类信息&am…

【第32章】MyBatis-Plus之代码生成器配置

文章目录 前言一、概述1.特点说明2.示例配置3. 数据库配置 (DataSourceConfig) 二、全局配置 (GlobalConfig)1.方法说明2.示例配置 三、包配置 (PackageConfig)1. 方法说明2. 示例配置 四、模板配置 (TemplateConfig)1. 方法说明2. 示例配置 五、注入配置 (InjectionConfig)1. …