这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

概述

计算机组成原理的基本概念,可能会在选择题中考察,看到题目能够选出答案即可。
# 计算机系统概述

## 计算机系统层次结构

- 计算机系统的基本组成
- 计算机硬件的基本结构
- 计算机软件和硬件的关系
- 计算机系统的工作原理

## 计算机性能指标

1 - 计算机系统层次结构

⭐ 中优先级
选择题中频考点,需要熟悉下 冯诺依曼结构 和 计算机几个层次的语言。

计算机体系结构

硬件 系统和 软件 系统共同构成了一个完整的计算机系统。硬件指的是有形的物理设备,是计算机系统中实际物理装置的总称。软件指的是在硬件上运行的程序和相关的数据及文档。

硬件 和 软件 关系:硬件是计算机的物理部分,它提供了运行软件所需的基础设施,而软件则是 指令集,指导 硬件如何工作以执行特定的任务。

计算机硬件

冯诺依曼结构

冯·诺依曼提出的 “存储程序” 的思想奠定了当代计算机的基本结构,以此概念为基础的各类计算机通称为 冯·诺依曼机,其特点如下:

  1. 计算机 硬件 系统由 运算器、存储器、控制器、输入设备 和 输出设备 5 大部件 组成。
  2. 指令和数据 以同等地位存储在 存储器 中,形式上没有区别,但计算机应能区分它们。
  3. 指令和数据均用 二进制代码 表示,指令包含操作码和地址码,操作码指出操作的类型,地址码指出操作数的地址。
  4. 以 运算器 为中心,其他部件配合其工作。
存储器
运算器
控制器
输入设备
输出设备
数据流
控制流
指令流

其中 五大部件  的具体功能如下:

  1. 运算器(ALU):负责算术运算(加减乘除)和逻辑运算(与或非)。
  2. 控制器(CU):从 存储器 中读取指令,解码并控制其他部件协同工作。
  3. 存储器(Memory):存储程序指令和运算数据(如内存、硬盘)。
  4. 输入设备(Input):接收外部数据(如键盘、鼠标)。
  5. 输出设备(Output):将结果反馈给用户(如显示器、打印机)。

计算机软件

系统软件和应用软件

  1. 系统软件 (System Software)
    • 定义:系统软件 是直接运行在 硬件 上的 软件,为其他 软件 提供一个运行和执行的平台。
    • 功能:
      • 管理和控制计算机 硬件,使其能够与 应用软件 进行交互。
      • 提供 应用软件 开发的基础服务和接口。
  2. 应用软件(Application Software)
    • 定义:应用软件 是构建在 系统软件 之上,为用户提供特定功能或执行特定任务的 软件。
    • 功能:
      • 解决用户的具体问题或满足特定需求。
      • 提供与用户的直接交互界面。

三个级别的语言

  1. 机器语言 (Machine Language):
    • 定义:这是 计算机硬件 直接理解和执行的语言,它是用 二进制代码 表示的(通常是 0 和 1)。
    • 特点:
      • 与特定计算机架构紧密相关。
      • 非常低级:每条机器代码对应 硬件 的一个操作。
      • 对于人类来说,阅读和编写是困难的。
  2. 汇编语言 (Assembly Language):
    • 定义:这是一种低级编程语言,它使用符号和助记符(而非 二进制代码)来代表机器语言的指令。
    • 特点:
      • 与特定计算机架构紧密相关。
      • 比机器语言更容易理解和编写。
      • 需要一个汇编器来将汇编代码转换为机器代码。
  3. 高级语言 (High-Level Language):
    • 定义:这是为了更方便地编写和理解计算机程序而设计的语言。它们与特定的 硬件平台 相对独立。
    • 特点:
      • 抽象度高,语法通常更接近自然语言或数学符号。
      • 可以在不同的 硬件平台 上运行,只需适当地 编译 或 解释。
      • 需要一个 编译器 或 解释器 来将高级语言代码转换为机器代码(或执行)。

三种语言的关系可以参照下图理解:

ProgrammingLanguageLevelscluster_high高级语言 (High-Level Language)cluster_assembly汇编语言 (Assembly Language)cluster_machine机器语言 (Machine Language)HighLevel高级语言• Python, Java, C++• 接近自然语言• 硬件独立• 抽象度高Compiler编译器(Compiler)HighLevel->Compiler编译Interpreter解释器(Interpreter)HighLevel->Interpreter解释Examples💻 代码示例:━━━━━━━━━━━━━print('Hello World')for i in range(10):   print(i)━━━━━━━━━━━━━Examples->HighLevelAssembly汇编语言• 符号和助记符• 架构相关• 比机器语言易读Assembler汇编器(Assembler)Assembly->Assembler汇编AsmExamples💾 代码示例:━━━━━━━━━━━━━MOV AX, 5ADD AX, 3INT 21h━━━━━━━━━━━━━AsmExamples->AssemblyMachine机器语言• 二进制代码 (0,1)• CPU直接执行• 硬件相关Hardware计算机硬件CPU, 内存, 存储Machine->Hardware直接执行BinaryExamples⚙️ 代码示例:━━━━━━━━━━━━━━━━━━10110000 0110000101001000 11000111━━━━━━━━━━━━━━━━━━BinaryExamples->MachineCompiler->Machine生成Interpreter->Machine逐行转换Assembler->Machine转换Abstract抽象程度Abstract->HighLevel高Abstract->Assembly中Abstract->Machine低

计算机系统的工作原理

从源程序到可执行程序

  1. 预处理(Preprocessing):预处理器 会执行宏替换、文件包含、条件编译等任务,仅限于某些语言,比如 C 和 C++。预处理后得到预处理后的源程序。
  2. 编译(Compilation):编译器 将预处理后的源程序转换为 汇编语言代码。
  3. 汇编(Assembly):汇编器 将汇编语言代码转换为 目标文件,其中包含机器代码以及重定位、符号等信息。
  4. 链接(Linking):链接器 将一个或多个目标文件与所需的库文件链接在一起,生成一个可执行文件,并完成符号解析和地址重定位等工作。
  5. 加载和执行(Loading & Execution):当你运行可执行文件时,操作系统的 加载器 会将程序装入内存,并完成必要的运行时准备。随后 CPU 从程序入口开始取指、译码并执行指令。

整个工具链流程如下图所示,每一阶段由对应的工具产出下一阶段的输入文件:

hello.c源代码hello.i预处理代码hello.s汇编代码hello.o目标文件hello (a.out)可执行文件预处理器编译器汇编器链接器 + 库gcc -Egcc -Sgcc -cgcc / ld加载器 → CPU 执行
# 预处理:.c → .i
gcc -E hello.c -o hello.i

# 编译:.c/.i → .s
gcc -S hello.c -o hello.s

# 汇编:.s → .o
gcc -c hello.s -o hello.o

# 链接:.o → 可执行文件
gcc hello.o -o hello

# 加载并执行
./hello

需要注意的是,gcc 本身是一个 编译驱动程序,会自动调用预处理器、编译器、汇编器和链接器。因此,直接执行:

gcc -c hello.c -o hello.o

实际上会自动完成:

hello.c → 预处理 → 编译 → 汇编 → hello.o

2 - 计算机性能指标

🔥 高优先级
在选择题中会直接考查,也会在解答题间接考查,每个计算机性能指标都要深入掌握。

CPU 指标

时钟周期

时钟周期(Clock Cycle)是计算机中 CPU 执行指令的基本时间单位,由系统时钟产生的一个“高低电平”变化(通常称为 脉冲)所定义。

计算机内部有一个 晶体振荡器,通常采用石英晶体,利用其压电效应产生规律的 脉冲信号 。石英晶体在施加电压时会发生机械振动,而机械振动反过来又会产生电压。通过在电路中合理配置电容和电感元件,晶体振荡器能够在特定频率上持续振荡,形成稳定的机器脉冲源。

C0C1L1R1

原始的脉冲信号 是一个连续的 模拟信号,在计算机系统中,这个模拟信号通常不会直接使用。为了适配数字电路的需要,晶体振荡器 产生的 模拟信号 会经过整形和分频电路处理,转换为方波形式的 数字脉冲信号,用于同步计算机中各个硬件组件的操作。时钟脉冲信号 的宽度,即连续两个 脉冲 之间的时间间隔,称为 时钟周期。

原始连续模拟信号
离散数字信号
整形和分频
注意

计算机中所有的设备都使用相同的时钟周期么?

不一定。某些组件(如 CPU 和 内存 等)需要同步工作,但不同的设备可能使用不同的时钟周期。

因此计算机内部的设备之间的同步方式可以分为 同步 和 异步 两种。同步设备 使用相同的时钟信号,而 异步设备 则使用不同的时钟信号或不使用时钟信号。

主频

主频(CPU Frequency),是指中央处理器(CPU)的 时钟频率 (Clock Frequency),表示 CPU 每秒可以执行多少个基本 时钟周期。时钟周期 和 主频 互为倒数:

其单位通常是 MHz(兆赫)或 GHz(千兆赫)。它决定了 时钟振荡 的快慢:

  • 1 Hz:每秒 次 时钟振荡
  • 1 MHz = 次/秒
  • 1 GHz = 次/秒

比如,一个 3.0 GHz 的 CPU,主频是 3,000,000,000 Hz,意味着它每秒经历 30 亿 个 时钟周期。

指令执行指标

CPI

CPI(Cycle Per Instruction):也称 指令周期,即一条指令所需要的平均 时钟周期。

下图展示了 指令周期、机器周期 和 时钟周期 三者的关联:

时钟
周期
机器周期
(取指令)
机器周期
(译码)
机器周期
(执行)
机器周期
(执行)
指令周期

三者具有层级关系:时钟周期 < 机器周期 < 指令周期。

  • 时钟周期 是硬件层面的最小时间单位。
  • 机器周期 是由多个 时钟周期 组成,用于完成一个基本操作(如取指令、存储数据)。
  • 指令周期 是由多个 机器周期 组成,用于完成一条指令的执行。
IPC

IPC(Instruction Per Cycle):也称 每周期指令,即每个 时钟周期 执行的平均指令数,是 CPI 的 倒数。

IPS

IPS(Instruction Per Second):也称 每秒指令数,即每秒平均能够执行多少条指令。

MIPS

MIPS(Million Instructions Per Second):也称 每秒百万指令数,即每秒能够执行 多少个 百万的指令。

浮点运算指标

FLOPS

FLOPS(Floating-point Operations Per Second,每秒浮点运算次数)是衡量计算机浮点运算性能的指标,它表示处理器每秒能执行的浮点运算次数,通常用来评估 GPU 或 AI 芯片 的性能。

  • MFLOPS(Million FLOPS): 百万( )次每秒
  • GFLOPS(Giga FLOPS): 十亿次( )每秒
  • TFLOPS(Tera FLOPS): 万亿次( )每秒
  • PFLOPS(Peta FLOPS): 千万亿次( )每秒
  • EFLOPS(Exa FLOPS): 百亿亿次( )每秒
  • ZFLOPS(Zetta FLOPS): 万亿亿次( )每秒

每次指标提升都是 ,比如 。

FLOPS_unitsMFLOPSMFLOPSMillion = 10^6GFLOPSGFLOPSGiga = 10^9MFLOPS->GFLOPS×10³TFLOPSTFLOPSTera = 10^12GFLOPS->TFLOPS×10³PFLOPSPFLOPSPeta = 10^15TFLOPS->PFLOPS×10³EFLOPSEFLOPSExa = 10^18PFLOPS->EFLOPS×10³ZFLOPSZFLOPSZetta = 10^21EFLOPS->ZFLOPS×10³legend注:1 FLOP = 1 次浮点运算每级相差 10^3(千倍)

计算机指标

字长

字长(Word Length)指的是计算机在内部一次操作中所能处理的 二进制数字位数。例如,一个 32 位 的 CPU 一次可以处理 32 位 的数据。

数据通路带宽

数据通路带宽(Data Bus Width) 是 CPU 和 内存 之间传输数据的宽度,通常以 位 为单位表示。比如,64 位 的数据总线意味着每个 时钟周期 内,可以传输 64 位 的数据。

主存容量

主存储器 能够存储信息的最大容量,通常用 字节 来衡量。

MAR 的 位数 反映了 可寻址范围 的最大值(不一定是存储器的实际容量),与 地址总线 的 位数 一致。

这里主要看清题目中的 按字节寻址 和 按字寻址,内存空间 / 寻址单位 = 可寻址范围,通过 可寻址范围 计算 MAR 的 位数。

比如主存地址空间大小为 128KB= B,字长16 位(2B),按字寻址,则 MAR 位数为16。

吞吐量

吞吐量(Throughput)表示在 单位时间 内,系统可以完成的 任务数量。在计算机网络中,它可能表示 数据的传输速率;在 计算 中,它可能表示 每秒执行的操作数。