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

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

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

  • 计算机系统组成
  • 存储器系统
    • 主存储器
    • 辅助存储器
    • 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【机器学习理论基础】回归模型定义和分类
  • 【CSS in Depth 2 精译】2.6 CSS 自定义属性(即 CSS 变量)+ 2.7 本章小结
  • Spring MVC 全面指南:从入门到精通的详细解析
  • MiniGPT-Med 通用医学视觉大模型:生成医学报告 + 视觉问答 + 医学疾病识别
  • 【公益案例展】亚运天穹——践行亚运理念,筑牢安全防线
  • MOS管知识整理
  • 【Python 项目】类鸟群:仿真鸟群
  • 网络协议 — Keepalived 高可用方案
  • Lab1 论文 MapReduce
  • vue中使用$set方法给对象添加属性
  • 使用 NumPy 及其相关库(如 pandas、scikit-learn 等)时,由于 NumPy 的版本不兼容或者某些依赖库与 NumPy 的版本不匹配
  • 局域网如何进行内网连接和外网连接
  • 语音识别概述
  • 基于Jetpack Compose实现的Android Preference
  • 代码随想录(day6)哈希表-求两个数组的交集
  • Angular 响应式表单 基础例子
  • Angular 响应式表单之下拉框
  • CentOS7简单部署NFS
  • java 多线程基础, 我觉得还是有必要看看的
  • javascript 哈希表
  • python学习笔记-类对象的信息
  • Sass Day-01
  • Solarized Scheme
  • 理清楚Vue的结构
  • 实习面试笔记
  • 我从编程教室毕业
  • 智能合约Solidity教程-事件和日志(一)
  • Semaphore
  • 通过调用文摘列表API获取文摘
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​如何防止网络攻击?
  • (03)光刻——半导体电路的绘制
  • (04)odoo视图操作
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (算法)前K大的和
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)甲方乙方——赵民谈找工作
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • []我的函数库
  • [Android] Android ActivityManager
  • [ANT] 项目中应用ANT
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [BSGS算法]纯水斐波那契数列
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [C#]C#学习笔记-CIL和动态程序集
  • [C++]C++类基本语法
  • [GPT]Andrej Karpathy微软Build大会GPT演讲(上)--GPT如何训练
  • [iOS]如何删除工程里面用cocoapods导入的第三方库
  • [kimi笔记]为什么csc.exe不可以双击运行
  • [LeetCode] 93. Restore IP Addresses 复原IP地址
  • [Linux] day07——查看及过滤文本