计算机组成原理01-计算机基本组成

开篇

  • 计算机组成,是指计算机硬件系统的逻辑实现
  • 计算机组成结构

计算机系统简介

  • 计算机系统由两大部分组成:硬件和软件
    • 软件又分为:
      • 系统软件:用来管理整个计算机系统
        面向计算机系统本身,用于管理 / 控制硬件资源、支撑应用软件运行,是所有软件的基础

        • 操作系统(OS):管理计算机资源、提供人机交互(例如:Windows、Linux、macOS)

        • 语言处理程序:让编写的语言在编译后能够在计算机上运行
          将高级语言(如 Java、C++)转换成计算机可执行的机器语言

        • 服务性程序(工具软件):如调试器、诊断程序、备份工具、驱动程序等,为系统运维和软件开发提供支撑

        • 数据库管理系统(DBMS):如 MySQL、Oracle、PostgreSQL;

        • 网络软件:如网络协议栈、路由器固件、防火墙软件等,实现计算机间的通信与网络资源共享

      • 应用软件:按特定任务需求编织成的各种程序

计算机系统的层次结构

  • 系统复杂性管理的方法1:抽象
    • 对于一个过程或者一件制品的某些细节有目的的隐藏,以便把其他方面、细节或者结构表达得更加清楚

    • 指高级的模型,和低级的实体相对

    • 一个系统可以从不同角度进行抽象

      • 从物理构成的角度,抽象成9层
        • 依据是每一层计算机典型的构架模型

        • 最底层是物理抽象,电子设备依靠电子的移动来工作

        • 电子原件层:利用电子在不同物质当中的移动特征来构造电子元件

          • 描述方式:可以用连接点、管角、电流和电压的特征
        • 模拟电路层:利用下层的接口进一步构建放大器、滤波器等模拟电路部件

          • 这些部件工作在联系的电压下
        • 数字电路层:利用模拟电路原件构建与门、非门

        • 逻辑层(计算机组成原理重点)

        • 微体系结构层(计算机组成原理重点)

        • 指令集架构层

        • 操作系统层

        • 应用层

          层级 核心定义
          1. 物理层(物理抽象层,最底层) 电子设备的物理基础,依靠电子的移动 / 量子效应工作
          2. 电子元件层 利用电子在不同物质中的移动特征,构造电阻、电容、二极管、三极管等基础电子元件
          3. 模拟电路层 基于电子元件的接口,构建放大器、滤波器、振荡器等模拟电路部件
          4. 数字电路层 利用模拟电路元件(如三极管)构建与门、或门、非门、触发器等数字逻辑部件
          5. 逻辑层 对数字电路层的逻辑部件进行组合,构建 CPU 的功能模块(如 ALU、寄存器堆、控制单元)、存储器模块、总线接口等
          6. 微体系结构层(微架构层) 对逻辑层的功能模块进行组织,定义指令执行的微操作序列与硬件流水线(如取指、译码、执行、访存、写回)
          7. 指令集架构层(ISA 层,原描述缺失,关键过渡层) 抽象微架构层的硬件细节,定义 CPU 可执行的指令集合、寄存器组、寻址方式、内存模型等
          8. 操作系统层 基于 ISA 层,管理计算机的硬件资源(CPU、内存、外设),提供系统调用接口,支撑上层软件运行
          9. 应用层(顶层) 面向用户的特定任务,开发的各类应用软件(如办公软件、浏览器、游戏、工业软件等)
    • 程序员角度抽象层次(M0~M3)

      • 最底层M1,机器语言层:二进制编码

      • 汇编语言M2:将机器语言符号化,运行时转为二进制

      • 高级语言M3:现在的编程语言,运行时转为汇编语言

      • 除此之外,M1还有向底层的路线:

        • 在最底层的机器语言之下,还有微指令系统M0,将一条机器指令继续细化。
        • 一条机器指令(M1)的执行,对应一段由多条微指令组成的微程序
        • 在每一个时间点上可以执行的操作,放到一个微指令当中。
        • 执行时间有先后顺序的,把它放到不同的微指令当中。
        • 通过微指令的执行顺序,来控制这些操作之间的先后顺序。
        • 微程序M0是由硬件来直接执行微指令
        • 多条微指令构成了一个微程序;一个微程序对应了一条机器指令
        • 实际上,M1是在用微指令来解释机器指令:
          M1 指令是由 M0 的微程序硬件解释执行,而非 M1 直接由硬件执行
      • 在M1和M2之间。

        层次 核心定义 执行 / 转换方式
        M0 微指令系统 / 微程序层(硬件层,机器语言之下) 计算机硬件可直接执行的最小控制单位;一条机器指令(M1)的执行,对应一段由多条微指令组成的微程序 硬件直接执行,无翻译过程;微程序由硬件控制器按顺序取出并执行
        M1 机器语言层(硬件 - 软件接口层) 用二进制编码表示的指令集合,是 CPU(通过 M0)可直接执行的指令形式;每条指令对应一段微程序 无翻译,由 M0 层的微程序硬件解释执行(即一条 M1 指令 → 调用对应的微程序 → 执行多条微指令)
        M2 汇编语言层(符号化机器语言) 用助记符(如 ADD、MOV)、符号地址替代二进制编码的语言,与机器语言一一对应 由汇编器(Assembler) 翻译成机器语言(M1),无执行期转换(编译期完成)
        M3 高级语言层(面向问题 / 程序员) 接近自然语言和数学表达式的编程语言(如 Java、C、Python),独立于具体硬件 分两类:编译型(C/C++):编译器 → 汇编代码 → 汇编器 → 机器代码(运行前完成);解释型(Python):解释器逐行翻译成机器代码,运行期实时转换

计算机体系结构和计算机组成的区别

  • 计算机体系结构:机器语言程序员所见到的计算机系统的属性,概念性的结构与功能特性

    • 是硬件与软件的接口约定
    • 核心是 "做什么"(功能与接口定义),不涉及具体实现细节。
    • 核心属性:指令集架构、数据类型、寻址技术、I/O机理
  • 计算机组成: 实现计算机体系结构所体现的属性

    • 具体指令的实现
    • 核心是 "怎么做"(硬件实现细节),是体系结构的物理载体。
    对比维度 计算机体系结构 计算机组成
    核心定位 功能与接口的抽象定义(做什么) 功能的具体硬件实现(怎么做)
    关注对象 机器语言程序员 / 编译器设计者 计算机硬件工程师
    典型示例 指令集中是否有乘法指令、寻址方式有哪些 乘法指令用硬件乘法器还是加法器迭代实现、Cache 的组相联方式
    变更影响 影响上层软件(如编译器、操作系统),变更成本极高 不影响上层软件,仅影响硬件性能 / 功耗 / 成本,变更成本较低

计算机的基本组成

冯·诺依曼计算机

  • 目前的计算机,都是存储结构的计算机;数据程序都是以二进制的方式存放在计算机当中的。这种结构的机器称为冯·诺依曼计算机(冯·诺依曼也被称为 现代计算机之父)
  • 冯·诺依曼计算机的特点
    • 计算机由五大部件组成

      • 运算器:核心。完成算术运算和逻辑运算

      • 控制器:指挥控制程序的运行(完成一条指令、执行指令之间的相互顺序)

      • 存储器:存放数据和程序

      • 输入设备:将信息转化成机器能够识别的形式

      • 输出设备:将结果转化成人能认识的形式

        部件 核心功能
        运算器(ALU,算术逻辑单元) 完成算术运算(+、-、×、÷)和逻辑运算(与、或、非、异或),是数据处理核心
        控制器(CU,控制单元) 产生控制信号,指挥协调各部件按指令顺序执行;接收状态反馈(如运算结果的标志位),实现指令的取指、译码、执行流程
        存储器(主存) 按地址存储程序指令和数据,支持随机访问(按地址读写)
        输入设备 将外部信息(如键盘输入、文件)转换为计算机可识别的二进制形式并送入存储器
        输出设备 将存储器中的二进制结果转换为人类可识别的形式(如显示器显示、打印机打印)
    • 指令和数据以同等地位存于存储器,不加以区分,可按地址寻访

      • 存储器不区分指令和数据,仅通过地址和时序区分;
      • 例如:取指阶段读的是指令,执行阶段读的是数据
    • 指令和数据用二进制表示

    • 指令由操作码和地址码组成

      • 操作码指明了这条指令要做什么(如加法、读取内存)
      • 地址码指明了操作数所在的地址(根据内存地址从内存读取;或寄存器编号从寄存器中取出)
    • 存储程序(程序存放在存储器当中)

    • 以运算器为中心

  • 冯·诺依曼计算机硬件框图
    • 黑色表示数据通路(数据流动)
    • 虚线表示控制和状态反馈

改进冯·诺依曼计算机框图

  • 待改进的问题
    • 以运算器为中心,运算器成为整个系统的瓶颈
    • 结构看起来很乱,不具备层次化的特征
  • 第一次改进
    • 改为以存储器为中心的计算机硬件框图,实现 输入输出设备 和 存储器 之间直接的信息交换
    • 双线大箭头表示数据传输
  • 第二次改进:现代计算机硬件框图
    • 分为了 主机I/O设备
    • 主机 包括 CPU 和 主存
    • I/O设备 包含 辅存、输入设备、输出设备

  • 应对系统复杂性的方法2:3'Y
    • 层次化(Hierachy)
      • 将被设计的系统划分为多个模块或子模块
      • 分别对模块或子模块进行设计、细化
    • 模块化(Modularity)
      • 有明确定义(well-defined)的功能和接口
      • 只有功能和接口都定义好,才能把设计出来的子模块和子子模块组装好,形成更大的模块
    • 规则性(regularity):模块更容易被重用
      • 让模块满足某些标准(工业标准或者国际标准),这样设计出来的模块不止在我们系统中能用,在其他系统上也能使用

计算机解决问题

  • 通过在 计算机上解决一个问题的方式 ,对框图进行细化
  • 问题一:一个现实中的问题,如何用计算机来解决?
  • 从这个问题就衍生出第二个问题
    • 问题二:是不是所有的问题都可以用计算的方法来解决
    • 这个需要可计算性理论:如果存在一种算法,当定义域中任意一个给定的x,都能计算出值,那么这个函数就是可计算的
  • 现在假设我们的问题是可以用计算机解决的,那么要如何用计算机解决呢?

第一步,上机前的准备:1、建立数学模型、2、确定计算方法

  • 例如,现在我们的问题是:计算正弦交流电的实时电压
  • 数学模型:
  • 有这个数学模型,我们便能得出任何时刻正弦交流电的电压
  • 但是,普通的计算机在指令集中,没有给出 sin x 怎么计算,指令集中不会提供这样的指令。所以要确定计算方法
  • 确定计算方法:
    • sin x 的计算方法:
    • 根号x 的计算方法:
    • 两个公式都是一个迭代的过程,会一直算下去,直到相邻两次计算结果的差值满足了用户要求的精度
  • 然后就可以编制解题程序
    • 程序:指的是运算的全部步骤,由指令构成
    • 指令:每一个步骤
      • 或者多个微指令 (多个微步骤
    • 示例:编写程序: ax² + bx + c
      • 假设a、b、c、x,这些操作数都被保存到了内存中

        • 用取数指令,从内存中取 x 至运算器中 [ 运算器的累加器(acc)中 ]
        • 用取数指令,从内存中取 x,和累加器中的 x 用乘法指令 做乘法。现在得出了 x 的平方,这个值覆盖保存在累加器中
        • 用取数指令,从内存中取出a,将 x的平方 和 a 用乘法指令做乘法。此时累加器中保存的是 ax²
        • 将累加器中的 ax² ,用存数指令保存到给定的存储器中
        • 用取数指令,从内存中取出b,放到累加器中
        • 用取数指令,从内存中取出x,将 b 和 x 用乘法指令做乘法。将得到的 bx 保存到累加器中
        • 用取数指令,从内存中取出 ax² ,将 bx 和 ax² 用加法指令,将结果保存到累加器中
        • 用取数指令,从内存中取出 c ,和累加器中的值 做乘法,得到结果,保存到累加器中
      • 步骤太多,可以将算法进行简化:(ax+b)x + c

        • 用取数指令,从内存中取 x 至累加器中
        • 用取数指令,从内存中取 a,和累加器中的值进行乘法指令,得到 ax ,保存在累加器中
        • 用取数指令,从内存中取 b,和累加器中的值进行加法指令,得到 ax+b ,保存在累加器中
        • 用取数指令,从内存中取 x ,和累加器中的值进行乘法指令,得到 (ax+b)x ,保存在累加器中
        • 用取数指令,从内存中取 c,和累加器中的值进行加法指令,得到结果,保存在累加器中
      • 可以看到,优化前的算法用了八条指令才完成,而优化后的只需要五条指令。而且优化后的算法需要的存储空间将更小

      • 指令格式举例

        • 取数 a
          • 这个指令是:把内存单元中的 a ,保存到运算器的累加器中(acc,在指令中是默认的,不需要特殊指出)
          • 假设这个指令一共有16位,000001 0000001000,
            • 其中的六位表示操作,即000001表示取数
            • 0000001000表示这个数所在内存单元的位置,即第八位
        • 存数 β
          • 这个指令是:把acc中的数据,保存到内存中的β
        • 加 γ
          • 这个指令是:将acc中的值,和内存中的 γ 相加,将值保存到acc中
      • 程序清单:ax² + bx + c

第二步,计算机的解题过程

存储器的基本组成
  • 是一个存储体
  • 存储体要能够保存指令和数据
  • 存储体要支持访问,能够取出指令或数据
  • 存储体由若干个存储单元构成,存储单元存放一串二进制(指令和数据)
    • 指令和数据构成的二进制代码,被称为存储字
    • 这个二进制代码的位数,被称为存储字长
    • 每个存储单元有一个地址号,需要访问时按这个地址号寻访
    • 存储单元是一个电子设备,由多个存储元件构成
  • 寄存器MAR(存储器地址寄存器)
    • 反映存储单元的个数
    • 保存了存储单元的地址或者存储单元的编号
  • 寄存器MDR(存储器数据寄存器)
    • 反映存储字长
    • 存放的是指令和数据
运算器的基本组成和操作过程(累加型)
  • 运算器的功能就是完成运算
  • 运算器的核心是算术逻辑单元(Arithmetic and Logic Unit,简称 ALU)
  • 通常是一个组合电路,组合电路的特点是,如果输入被撤销,那么输出结果也会被撤销
  • 要想ALU能够完成算术逻辑功能、并对结果保存,那么就一定要在ALU的输入端加上寄存器
    • 寄存器保存参与运算的数据,所以需要两个寄存器作为输入数据的保存设备
    • 一个就是前面提到的acc(运算器的累加器)
    • 另一个是数据寄存器,也称为 X
    • 还需要一个寄存器MQ:例如在乘法运算当中,结果的长度是操作数的两倍,为了能够把乘法的结果都保存下来,所以还需要另外的寄存器。也称之为 乘商寄存器
加法操作过程
  • 指令:加 M
    • 这个指令只有一个操作数,另一个操作数隐藏在了acc寄存器当中
    • 说明这个操作前,需要先有一个输入指令,将一个数输入到acc中,为加法做准备
  • 所以初始状态,在acc中有一个被加数
    然后指令中的M加数在内存单元中的地址
  • 下一步是把加数 从内存单元中按这个地址取出,保存到X寄存器当中
  • 下一步就是ALU执行运算,将寄存器ACC寄存器X 中的值相加,将结果保存在寄存器ACC 当中
减法操作过程
  • 指令:减 M
  • 和加法相似
乘法操作过程
  • 指令:乘 M
  • 初始状态,在寄存器ACC 中有一个被乘数
  • 第一步,按地址M ,将乘数从内存单元中取出,放到寄存器MQ
    于此同时,这条指令还要按照规定,将被乘数寄存器ACC 中转移到寄存器X
  • 乘法的实现和现实中公式很像,是通过累加和位移的方式实现的;所以要有一个寄存器保存累加的内容;并且累加之前,要清理寄存器。这个寄存器就是ACC,所以此时要清理ACC寄存器。
  • 此时计算寄存器X寄存器MQ 相乘
    • 将结果的高位放在寄存器ACC 中,低位放在寄存器MQ
  • 扩展:这些操作寄存器的先后顺序,是由控制器控制的
除法操作过程
  • 指令:除 M
  • 初始状态,在寄存器ACC 中有一个被除数
  • 第一步,按地址M ,将除数从内存单元中取出,放到寄存器X
  • 然后执行除法操作:[ACC] ➗ [X],将结果 保存在寄存器MQ 中,余数 保存到寄存器ACC 当中
控制器的基本结构
  • 控制器的功能:
    • 解释一条指令:从取值到分析,到取操作数、到真正的执行指令、到保存结果。的全过程
    • 保证指令的按序执行
控制器的基本组成
  • 完成一条指令分为三部分
    • 取指令:把内存单元中保存的指令取出来,送到控制器当中
      • 取指令需要知道这条指令的地址,指令保存在内存单元当中,所以需要指令地址来确定是哪个单元。
      • 所以需要有寄存器PC ,也就是程序计数器。寄存器PC 中保存了当前要执行的那条指令的地址
        • PC寄存器 要能在这条指令执行完成之后,提供下一条执行指令。也就是所谓的:(PC)+1 ------> PC
    • 分析指令:把指令的操作码部分送给控制单元进行分析
      • 要把指令存起来,然后再取操作码部分进行分析。所有需要一个寄存器IR,这个寄存器存放当前欲执行的指令。
      • 控制单元从寄存器IR中取出操作码去分析
    • 执行指令:由控制单元 控制相应的执行部件 去完成这条指令所需要的操作
      • 操作控制是由CU 来完成的,负责发出控制信号
主机
  • 存储器、运算器、控制器,共同构成了上文说的计算机的主机
主机完成一条指令的过程
取数
  • 取指令:
    • PC 将指令地址给到 MAR
    • MAR 将指令地址给到 存储体
    • 在控制器的控制下,存储体将 该地址指定的存储单元 中的那条指令取出来,放到MDR中
    • MDR 中的指令给到 IR
  • 分析指令:
    • IR 将指令中的操作码部分给到CU,由CU控制各种信号 去执行指令要求的各种操作
  • 执行指令
    • 因为是取数指令,所以在控制器的控制下,需要把指令中的数据地址部分给到存储器,即:IR 将 指令的数据地址部分 给到MAR
    • 然后MAR将 数据地址 给到 存储体
    • 存储体 将所在地址的值,给到 MDR
    • MDR 将值给到 ACC
存数
  • 取指令:
    • PC 将指令地址给到 MAR
    • MAR 将指令地址给到 存储体
    • 在CU的控制下,按地址从存储体的存储单元中把这条指令取出,给到MDR
    • MDR 中的指令,给到IR
  • 分析指令:
    • IR中的指令,给到CU,进行分析
  • 执行指令
    • 是存数指令,在CU的控制下,IR中的 指令数据地址码部分,给到MAR
    • 然后MAR将 数据地址 给到 存储体。这个地址所在的空间,就是我们的数据值存放的地方
    • ACC 中的值(就是要存的值) 给到MDR
    • MDR的值给到存储体,完成存储
示例: ax² + bx + c 程序的运行过程
  • 由输入设备 将程序和数据保存到计算机中
  • 要执行这个程序,控制器必须知道这个程序的首地址。所以要把程序的首地址 放到PC寄存器当中
  • 启动程序运行
    • 执行第一条指令:取x的值
      • 取指令阶段
        • PC 将取数指令地址给到 MAR(给完之后,PC中的指令会+1,变成下一条指令)
        • MAR将值给到存储体
        • 存储体将指令给到MDR
        • MDR 给到IR
      • 分析指令阶段
        • 指令的操作码部分给到CU:OP(IR) -> CU
        • 这里的OP表示操作码部分,对应的Ad指数据的地址码部分
      • 执行指令阶段
        • IR把 指令中的数据地址部分,给到 MAR
        • MAR 将地址给到存储体
        • 存储体将真实的值给到MDR
        • MDR将数据给到ACC
    • 此时执行完了第一条指令,后续的操作也类似...

计算机硬件的主要技术指标

  • 机器字长

    • CPU一次能处理数据的位数
    • 与CPU中的寄存器位数有关
    • 例如:cpu可以对两个八位二进制数做加法,得到的还是一个八位的二进制数。这种情况下cpu一次能处理的数据的位数是八位
    • 通常情况下,机器字长和cpu寄存器的位数是相等的
  • 运算速度,指令的执行速度

    • 主频
    • 核数
    • 吉普森法
    • CPI :执行一条指令所需的时钟周期数
      • 计算机里面的时间是离散,就是机器时钟,由时钟进行驱动
      • CPI指的是执行一条指令需要多少时钟周期
    • MIPS:每秒能够执行的百万条指令数
    • FLOPS:每秒浮点运算次数
  • 存储容量:存放二进制信息的总位数

    • 主存容量
      • 存储单元个数 * 存储字长
        • 结果就是主存能够存放多少位的二进制数信息
        • 例如:MAR为10(可寻址 2的十次方 个单元) ,MDR为8(每个单元为 8 位 = 1 字节 / Byte)
        • 说明这个存储体中所有的存储单元要进行地址编码的话,地址需要10位,也就是2的十次方,记为1k
        • 每个存储单元当中保存了八位的二进制数信息,就可以把它写为:1k * 8位
        • 也可以用字节数表示:
        • 单位是K,仅仅是MAR的大小
        • 单位是KB,就是 MAR 和 MDR位数的相乘
  • 教材推荐:唐朔飞·计算机组成原理(第2版)·高等教育出版社

  • 学习资料

相关推荐
JERRY. LIU1 天前
为什么焊接金丝时,烙铁头不能长时间接触金丝
硬件架构·射频工程·pcb工艺
Aaron15882 天前
基于VU13P在人工智能高速接口传输上的应用浅析
人工智能·算法·fpga开发·硬件架构·信息与通信·信号处理·基带工程
Bigbig.2 天前
驱动工程师面试题 - 操作系统1
linux·开发语言·面试·硬件架构
Aaron15883 天前
全频段SDR干扰源模块设计
人工智能·嵌入式硬件·算法·fpga开发·硬件架构·信息与通信·基带工程
夜月yeyue4 天前
Linux内存映射
linux·单片机·嵌入式硬件·硬件架构
YJlio4 天前
RAMMap 学习笔记(15.2):Processes / Priority / Summary——从“谁在用”和“谁更重要”看物理内存
开发语言·笔记·python·学习·django·pdf·硬件架构
fiveym5 天前
CPU睿频与核心核心问题全解析
运维·硬件架构
YJlio5 天前
Sysinternals 学习笔记(15.0):系统信息工具总览——RAMMap、RU、CoreInfo 等一网打尽
开发语言·笔记·python·学习·django·pdf·硬件架构
Aaron15885 天前
基于RFSOC+VU13P在5G波束成形中的技术应用分析报告
人工智能·算法·5g·fpga开发·硬件架构·信息与通信·基带工程