计算机组成原理笔记(王道考研)(持续更新)

news2024/12/25 12:19:41

文章目录

  • 前言
  • 概论
    • 计算机的发展
    • 计算机系统
      • 计算机硬件组成
      • 各个硬件的工作原理
      • 计算机系统的层次结构
      • 计算机系统结构、组成、实现
    • 计算机性能指标
      • 储存器
      • CPU
      • 整体指标
      • Amdahl定律与加速比

前言

本文是对王道计算机考研《计算机组成原理》课程的总结,主讲咸鱼学长讲的确实清晰。

王道考研《计算机组成原理》

由于我们学校已经开设过汇编和计算机体系结构,所以计组的笔记内容会比较精炼,不适合无基础人听。

如果有不理解的,可以回去看看我前面的CSAPP笔记和汇编语言笔记(不过我感觉还是没啥必要,我这篇文章更多的是总结性质,不适合入门学习)

CSAPP笔记:
第一卷:程序结构与执行——信息表示、指令、处理器、性能优化、储存层次
第二卷:在系统上运行程序——链接、异常控制流、虚拟内存
第三卷:程序间的交流与通信——系统级IO、网络编程、并发编程
汇编语言笔记:
汇编语言笔记——微机结构基础、汇编指令基础
汇编语言笔记——汇编程序开发、汇编大作业
汇编语言笔记——接口技术与编程

概论

计算机的发展

在这里插入图片描述

计算机系统

计算机硬件组成

在这里插入图片描述

最开始计算机是没有内存的,程序员给条指令,计算机就执行一个行为。

冯诺依曼提出了储存程序理论,程序记录了计算机要做的一系列流程,理应先放在储存器(内存)中,等计算机需要的时候按照规定顺序执行。

下图中,注意看实线,代表数据流。

输入设备把数据交给运算器,运算器和储存器进行交互,最后运算器再把结果输出给输出设备。控制器负责协调这4个部件,他只和储存器有数据交换,这是因为控制器需要从储存器中读取指令。虽然控制器负责协调,实际上还是以运算器为核心的。

在这里插入图片描述

现代计算器为了减轻运算器的压力,将储存器作为中心,整体运行没什么变化,只不过输入是先送到储存器中,储存器的数据也可以直接输出,都不需要经过运算器了。

在这里插入图片描述

各个硬件的工作原理

这一节比较抽象,我学过5级流水线CPU了,所以就直接从宏观层面去总结。

在这里插入图片描述

首先是主存:

  1. 储存体负责具体储存数据
    • 储存单元指的是一个地址对应的空间
    • 储存元指一个可以存1bit的电子元件
    • 字就是储存单元具体的值,字长就是其bit数
  2. MAR。一个寄存器,储存了地址
    • 即指向储存单元的指针
    • 长度对应内存地址空间范围
  3. MDR。一个寄存器,储存一个字的数据
    • 一般MDR长度=字长
    • CPU存取数据都要经过MDR

在这里插入图片描述

CPU和主存通过寄存器交换着三个数据:地址,数据,指令,看一下交互过程:

  1. 假设CPU要取数据,就先设置MAR,然后发一个“取”指令给主存,然后主存把数据放到MDR里。
  2. 当CPU存数据时,CPU先把数据放MDR,然后设置MAR,发送一个“存”指令给主存,主存就会把MDR的数据放到目标位置。

现在CPU已经把MAR和MDR集成进去了。

再说运算器:

运算器是一个计算核心ALU+三个辅助寄存器构成:

  1. ALU负责计算
  2. ACC,默认的操作数和结果寄存器
  3. X,第二个操作数的寄存器
  4. MQ,执行乘除时会用到

在这里插入图片描述
一个完整的运算过程如下:

  1. 取指:控制器C收到运算指令
  2. 译码:取出操作符和操作数
  3. 执行:ALU计算,把结果放在对应寄存器
  4. 访存:输出到内存(有时候不执行)
  5. 写回

有时候要多执行一个周期,先去把内存的数放到辅助寄存器中,再进行一个周期的计算。

再论控制器:

控制器以CU为核心,IR和PC是两个辅助寄存器。IR存放指令内容,PC存放下一指令地址。

在这里插入图片描述

现在的CPU其实是把控制器和运算器集成在了一起,同时又集成了一大堆寄存器。指令的执行其实就是CPU和内存在反复打交道。

下图描述了一条指令被CPU执行的全过程。可以看到,无论是取指令,还是取数据,都要进行内存访问。

图灵机的神奇之处就在于,第一条指令存在IR之中,运行完毕后,会决定PC值是单纯+1还是做其他处理,也就是说一条指令可以决定下一条指令是什么,如此就可以自动执行,生生不息了,所以你的计算机只要开了机,指令就是在一直运行的。

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

计算机系统的层次结构

在这里插入图片描述

计算机系统=软件+硬件/固件,实际上,在开发设计人员眼中,软硬件在逻辑上是等价的,乘法运算可以用软件去写(基于底层硬件),也可以直接用底层硬件实现,所以说软硬件只不过处在不同层次罢了。

从整体的角度来看,软硬件还可以继续细化成若干层,形成7(或者5)层结构,自下向上为:

  1. 硬联逻辑。最基础的硬件,比如晶体管构成的各种逻辑门。
  2. 微程序级。由基础硬件构成的功能单元。比如什么控制器,加法器,移位器等等。
  3. 机器语言级。用0和1来描述抽象的模块行为。
  4. 操作系统级。建立在裸机之上,上面的人看不懂机器语言,机器也看不懂人的汇编语言,在此之间操作系统构成软硬件交流的界面。
  5. 汇编语言级。比如x86指令集汇编。
  6. 高级语言级。用来开发的编程语言。
  7. 应用语言级。应用程序。

在这里插入图片描述

计算机系统结构、组成、实现

  1. 系统结构(体系结构):计算机硬件有哪些部分,有哪些功能。比如CPU就是一个系统结构部分,CPU可以进行寻址,可以操作寄存器,执行指令,这是功能。又比如有内存,这是结构部分,内存空间是如何管理的,这是功能。
  2. 组成:是硬件实际的结构,比如CPU的结构如何,有没有Cache,有没有片外Cache。
  3. 实现:计算机组成其实是用各种模块进行组合,形成一个大型功能单位;而模块(微程序级)的物理实现,就是计算机实现部分。

程序员一般只能看到系统结构,再往下看不到了,也没必要看到。既然看不到,就可以说这就是透明的。(这个透明和生活中的透明正好是反过来的)

在这里插入图片描述

我们之前那本CSAPP,讲的其实是体系结构,而计组学的是组成,电子信息那帮人学的是实现。

计算机性能指标

在这里插入图片描述

储存器

  • 字长=MDR长度
  • 地址空间= 2 M A R 长度 2^{MAR长度} 2MAR长度
  • 容量=字长×地址空间

CPU

  • 主频:内部时钟频率
  • 时钟周期:主频倒数
  • CPI(cycles per instruction):一条指令消耗的平均周期数
  • IPS(instructions per second):一秒执行的指令数=主频/CPI
  • FLOPS:一秒执行浮点指令数

CPU时间=通过CPU计算出来的时间=CPU消耗周期数/时钟频率。CPU时间仅仅是程序在CPU上消耗的时间,实际上消耗的还有其他部分,比如等待,调度啥的。

CPI即每条指令平均消耗周期,CPI=CPU时钟周期数/指令数
CPI还可以通过加权计算,CPI=不同类指令的CPI加权和。

通过加权公式可以看出,CPI受到权重影响,而不同程序会影响指令权重,所以CPI实际上受到程序影响。

CPU真正执行的时间=(指令数×CPI)/时钟频率,由此可得三个因素:

  1. 时钟频率。取决于计算机实现技术
  2. CPI。取决于计算机实现技术和指令集技术,指令集够不够好,如何用越少的周期实现一个指令
  3. IC。指令数量,取决于从编程技术到计算机实现的一系列流程。

平时使用计算机,CPU时间太过理想,综合考虑各种因素,于是有了吞吐量这个衡量参数,更加实用。

吞吐量常用MIPS(Million IPS)衡量,即每秒百万条指令计算。为什么是百万呢。百万其实就是兆指令,对应6次方的MHz单位,通过CPU时间计算方便。

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

整体指标

  • 数据通路带宽。我们一般说带宽指的是速度,但是这里指的其实是数据总线位宽
  • 吞吐量。单位时间执行请求的数量。请求可以是指令,任务等。
  • 响应时间。

性能指标的评判要用到基准程序,其实就是我们说的跑分。但是这个东西只能参考,因为我们日常的使用场景是丰富的,基准程序只能测量某一个方面。

正如我们前面说的,CPU时间很复杂,受时钟频率,CPI,IC三者约束。

Amdahl定律与加速比

Amdahl定律用于衡量一个部分的性能对于整体性能的重要性,具体用加速比计算,加速比=改进后性能/改进前性能=改进前时间/改进后时间。原理很简单,改进的加速比取决于这一部分的占比(可向量化百分比)与提升空间(优化部分可以提升到什么程度)。

在这里插入图片描述

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

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

相关文章

那些曾经考过的turtle绘图题(1~5)

【编程实现绘图 -1】 使用使用turtle库的函数,绘制三个彩色的圆,圆的颜色按顺序如图,圆的半径从里至外分别是20,50, 100,效果如图所示 # 样例代码 from turtle import * # 导入turtle库 list_r = [20, 50, 100] # 定义半径列表 list_color = ["red", "…

chatgpt赋能python:在画布中间画图的Python技巧

在画布中间画图的Python技巧 在Python中,绘图是数据可视化和图形表示的一种重要方式。然而,在绘制图表时,我们需要让图表的中心点位于画布的正中心,而不是依靠手动计算像素值来实现。这不仅让图表更易读,还提高了可视…

chatgpt赋能python:Python中如何处理多个输入

Python中如何处理多个输入 在编写Python程序时,我们经常需要从用户那里获取多个输入来执行某些操作。本文将介绍Python中的各种方法来处理多个输入。 从终端获取多个输入 Python中最简单的方式是从终端获取多个输入。下面是一个基本的例子: input_st…

chatgpt赋能python:Python中的函数

Python中的函数 Python是一种高级语言,可用于各种应用程序,从Web开发到科学计算。Python中的函数是重要的编程概念之一,它允许开发人员将一段代码重复使用,并可以按照需要调用它们。 函数是什么? 函数是一种拥有参数…

直动式插装减压阀DPR-100-N-S-24

参数规格 操作压力:流动情况: 内部泄漏: 弹性范围: 工作温度: 推荐过滤等级: 流体介质: 阀腔/阀腔工具:阅体材质: 3000 PSI (207 Bar)见[压降与流量关系图].5英寸/min(82cc/min)在最大压力3000PSI(207Bar)下50PSI至200PSI(3至14 Bar)预设值:150 PSI(10 Bar) 100 PSI 至…

打包jar包或war包

idea下springboot打包成jar包和war包,并且在外部tomcat下运行访问 jar包 这里设置pom.xml文件将工程打成jar包 使用maven的插件打包,打包后的jar包在项目的target目录下 此时打包出来是有默认的名称的jar包。然后在命令行下 运行起这个jar包。当然&…

chatgpt赋能python:Python中如何在输出一排后换行输出

Python中如何在输出一排后换行输出 在Python编程中,经常需要使用print语句输出信息。有时候需要在输出一排信息之后换行输出,比如在输出一个数据表格或者一个列表等等情况下,这就需要用到Python中如何在输出一排后换行输出的方法。 什么是换…

Python基础之类的继承与派生

一、继承 新创建一个类,这个类可以继承一个或多个父类,新创建的类及哦啊做子类或派生类,被继承的类叫做父类或基类。 例: class ParentClass_01: # 定义父类passclass ParentClass_02: # 定义父类passclass SonClass_01(Pa…

RTKLIB学习总结(九)RTK算法详解

文章目录 一、RTK算法数据类型1、rtk_t:rtk控制结构体2、sol_t:结果结构体3、SOLQ_XXX:解的类型状态4、ambc_t:模糊度固定控制结构体5、ssat_t:卫星状态控制结构体6、prcopt_t:算法处理选项结构体7、obs_t&…

【ChatGPT工具篇-1】ChatGPT + MindShow 分分钟搞定PPT制作

AI 能生万物吗?  制作一份“通用性”的PPT需要几步? 三步 借助ChatGPT和MindShow,分分钟完成操作,就能制作出来完胜大部分人的PPT文件; 解锁更多AIGC(ChatGPT、AI绘…

C#,码海拾贝(42)——病态线性方程组的“简单迭代解法”之C#源代码

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> /…

chatgpt赋能python:Python如何定义π

Python如何定义π 介绍 Python是一种高级编程语言&#xff0c;它被广泛用于数据分析、机器学习、科学计算和Web开发等领域。在这些领域中&#xff0c;算数计算是非常重要的&#xff0c;而数学领域中重要的一个数字就是π。 π是圆的周长与直径的比例。它是一个无限不循环的小…

springboot+vue房屋租赁租房管理系统94sk3

本租房管理系统有管理员&#xff0c;租客&#xff0c;屋主三个角色。管理员功能有个人中心&#xff0c;租客管理&#xff0c;屋主管理&#xff0c;房源信息管理&#xff0c;订单信息管理&#xff0c;屋主申诉管理&#xff0c;通知公告管理&#xff0c;留言板管理&#xff0c;系…

chatgpt赋能python:Python多行注释

Python 多行注释 在 Python 中&#xff0c;我们经常需要写注释来解释代码或者用于调试。Python 的注释分为单行注释和多行注释&#xff0c;本文主要介绍 Python 中如何多行注释。 单行注释 在 Python 中&#xff0c;单行注释以符号 # 开头&#xff0c;可以写在代码的任何位置…

魔法打败魔法?OpenAI用GPT-4 来解释 GPT-2 的行为

大语言模型&#xff08;LLM&#xff09;像大脑一样&#xff0c;它们是由 “神经元” 组成的&#xff0c;它们观察文本中的一些特定模式&#xff0c;以影响整个模型接下来 “说” 什么。但由于 LLM 中的参数数量多到已经无法由人类解释的程度&#xff0c;因此&#xff0c;LLM 给…

MixQuery系列(一):多数据源混合查询引擎调研

背景 存储情况 当前的存储引擎可谓百花齐放,层出不穷。为什么会这样了?因为不存在One for all的存储,不同的存储总有不同的存储的优劣和适用场景。因此,在实际的业务场景中,不同特点的数据会存储到不同的存储引擎里。 业务挑战 然而异构的存储和数据源,却给分析查询带…

如何兼顾性能+实时性处理缓冲数据?

我们经常会遇到这样的数据处理应用场景&#xff1a;我们利用一个组件实时收集外部交付给它的数据&#xff0c;并由它转发给一个外部处理程序进行处理。考虑到性能&#xff0c;它会将数据存储在本地缓冲区&#xff0c;等累积到指定的数量后打包发送&#xff1b;考虑到实时性&…

Golang每日一练(leetDay0094) H 指数 I\II H Index

目录 274. H 指数 H Index &#x1f31f;&#x1f31f; 275. H 指数 II H Index ii &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 27…

sqlserver数据库学习感悟(1)----关于group by

以下含编写过程&#xff0c;如果嫌啰嗦&#xff0c;最后有总结哒&#xff01; 例题&#xff1a;有heat表和eatables两张表&#xff0c;分别为&#xff1a; eatables heat&#xff1a;protein&#xff08;蛋白质&#xff09;&#xff0c;fat&#xff08;脂肪&#xff09;&…

架构演变过程

单体架构 分布式架构&#xff1a;业务拆分 微服务 分布式架构的一种。独立开发和部署&#xff0c;一个业务多个服务支持 特点&#xff1a; 单一职责&#xff1a;拆分粒度更小&#xff0c;一个服务一个业务&#xff0c;避免重复开发&#xff08;面向对象角度来说符合最少知道原…