计算机系统 = 硬件系统 + 软件系统
| 组成部分 | 说明 |
|---|---|
| 硬件系统 | CPU、主存、I/O设备、总线、接口 |
| 软件系统 | 系统软件(操作系统、编译程序等)、应用软件 |
计算机系统用于执行程序来处理数据,其核心功能包括:
1946年,冯·诺依曼提出了存储程序计算机的设计思想,其核心要点包括:
计算机能自动依次执行指令,无需人工干预
五大基本部件
输入/输出部件:与用户交互
指令和数据用二进制表示
便于逻辑运算实现
指令分为操作码和地址码
┌─────────────┐
│ ALU │
│ (运算器) │
└──────┬──────┘
│
┌────────────┼────────────┐
│ │ │
┌─────┴─────┐ ┌──┴───┐ ┌─────┴─────┐
│ 通用寄存器 │ │标志寄存器│ │ 控制器 │
│ (GPRs) │ │ (PSW) │ │ (CU) │
└─────┬─────┘ └──────┘ └───┬──────┘
│ │
└───────────┬───────────┘
│
┌─────┴─────┐
│ 总线 │
└─────┬─────┘
│
┌────────────────┼────────────────┐
│ │ │
┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐
│ 输入设备 │ │ 主存 │ │ 输出设备 │
│ (Input) │ │ (Memory) │ │ (Output) │
└───────────┘ └───────────┘ └───────────┘
| 寄存器 | 全称 | 作用 |
|---|---|---|
| PC | Program Counter | 程序计数器,存放下一条指令地址 |
| IR | Instruction Register | 指令寄存器,存放当前指令 |
| MAR | Memory Address Register | 主存地址寄存器 |
| MDR | Memory Data Register | 主存数据寄存器 |
| GPRs | General Purpose Registers | 通用寄存器组 |
| PSW | Program Status Word | 程序状态字寄存器,存放标志位 |
| 标志位 | 全称 | 说明 |
|---|---|---|
| ZF | Zero Flag | 结果为0时置1 |
| SF | Sign Flag | 结果为负时置1 |
| OF | Overflow Flag | 溢出时置1 |
| CF | Carry Flag | 进位/借位时置1 |
| PF | Parity Flag | 结果最低字节1的个数为偶数时置1 |
从下到上,计算机系统可分为多个层次:
| 层次 | 类型 | 说明 |
|---|---|---|
| 6 | 应用语言机器级 | 使用高级语言编程 |
| 5 | 高级语言机器级 | 编译器翻译高级语言 |
| 4 | 汇编语言机器级 | 汇编器翻译汇编语言 |
| 3 | 操作系统级 | 操作系统管理资源 |
| 2 | 机器语言机器级 | 硬件直接执行 |
| 1 | 微程序机器级 | 微指令解释执行 |
软件和硬件之间接口的完整定义
包括: - 指令集(支持的指令) - 操作数类型和表示 - 寻址方式 - 寄存器集 - 存储模型 - 中断和异常处理
实现ISA的电路逻辑结构
相同ISA可能有不同微架构: - 例:Intel x86处理器有多种微架构(Skylake、Ice Lake等) - 不同微架构性能不同,但执行相同指令
源代码(.c)
↓ 预处理器
预处理后的源程序(.i)
↓ 编译器
汇编语言程序(.s)
↓ 汇编器
可重定位目标文件(.o)
↓ 链接器
可执行目标文件
| 类型 | 输入 | 输出 | 作用 |
|---|---|---|---|
| 预处理器 | 源程序(.c) | 预处理后的源程序(.i) | 处理#include、#define等 |
| 编译器 | 预处理后源程序(.i) | 汇编程序(.s) | 翻译成汇编语言 |
| 汇编器 | 汇编程序(.s) | 可重定位目标文件(.o) | 翻译成机器语言 |
| 链接器 | 多个.o文件 | 可执行文件 | 合并并重定位 |
execve()系统调用单位时间内所完成的工作量
从作业提交到作业完成所用的时间
程序本身执行所用的CPU时间
不包括: - I/O等待时间 - 操作系统调度开销
例:主频1GHz → 时钟周期 = 1ns
执行一条指令所需的时钟周期数
用户CPU时间 = 程序总时钟周期数 × 时钟周期
= 程序总时钟周期数 ÷ 时钟频率
= 指令数 × CPI × 时钟周期
程序总时钟周期数 = Σ(CPIi × Ci)
= 指令数 × 综合CPI
综合CPI = Σ(CPIi × Fi)
= 程序总时钟周期数 ÷ 程序总指令条数
MIPS = 主频 ÷ CPI
= 指令数 ÷ (执行时间 × 10^6)
例题1:基础计算
某程序在机器M上运行,指令条数为10^8条,综合CPI=1.25,时钟频率为4GHz。求执行时间。
解:
时钟周期 = 1 / 4GHz = 0.25ns
程序总时钟周期数 = 10^8 × 1.25 = 1.25 × 10^8
执行时间 = 1.25 × 10^8 × 0.25ns = 0.3125s
例题2:MIPS计算
某计算机主频100MHz,CPI=5,求MIPS。
解:
MIPS = 100MHz / 5 = 20 MIPS
例题3:综合CPI计算
某程序含三类指令,比例和CPI如下: - A类:40%,CPI=1 - B类:30%,CPI=2 - C类:30%,CPI=3 求综合CPI。
解:
综合CPI = 0.4×1 + 0.3×2 + 0.3×3
= 0.4 + 0.6 + 0.9
= 1.9
例题4:指令条数与执行速度
假设两台计算机M1和M2,M1主频2GHz,M2主频3GHz。 程序P在M1上执行需要10s,在M2上执行需要8s。 判断哪台计算机性能更好。
解:
M1性能 = 10s
M2性能 = 8s
M2执行更快,所以M2性能更好
注意:不能仅凭主频判断性能!
例题5:优化对性能的影响
某编译器优化后,A类指令(占43%,CPI=1)减少50%,其他指令不变。 原CPI=1.57,问优化后CPI变化。
解:
优化后A类比例 = 43% ÷ 2 = 21.5%
其他总比例 = 57%
归一化:
- A类 = 21.5 / 78.5 ≈ 27.4%
- B类 = 21 / 78.5 ≈ 26.7%
- C类 = 12 / 78.5 ≈ 15.3%
- D类 = 24 / 78.5 ≈ 30.6%
新CPI ≈ 0.274×1 + 0.267×2 + 0.153×2 + 0.306×2
≈ 1.73
系统中某组件改进后,整个系统能获得的最大性能提升
加速比 S = 1 / (1 - α + α/k)
其中:
- α = 可改进部分占整体的比例
- k = 该部分改进后的加速比
例题:
某程序运行需要100s,其中20s可优化(加速比k=5),求整体加速比。
解:
α = 20/100 = 0.2
S = 1 / (1 - 0.2 + 0.2/5) = 1 / (0.8 + 0.04) = 1 / 0.84 ≈ 1.19
| 方法 | 说明 |
|---|---|
| 时钟频率 | 主频越高,潜在性能越好 |
| MIPS | 每秒执行百万条指令数 |
| MFLOPS | 每秒执行百万次浮点运算 |
| 基准程序 | 运行标准化测试程序比较性能 |
冯·诺依曼计算机的核心思想是( ) A. 采用二进制 B. 存储程序 C. 五大部件 D. ASCII编码
下列寄存器中,用于存放下一条指令地址的是( ) A. IR B. PC C. MAR D. MDR
用户CPU时间是指( ) A. 程序从开始到结束的总时间 B. 程序本身执行所用的CPU时间 C. I/O操作所占用的时间 D. 系统调度所占用的时间
主频为2GHz,时钟周期为( ) A. 0.5ns B. 2ns C. 0.5μs D. 2μs
下列性能指标中,不能单独用来评价计算机性能的是( ) A. 时钟频率 B. MIPS C. CPI D. 指令条数
冯·诺依曼结构计算机的五大基本部件包括:主存储器、____、控制器、通用寄存器和输入/输出部件。
计算机系统的层次结构中,定义了软件和硬件之间接口的是______。
CPI表示执行一条指令所需的______。
用户CPU时间的计算公式为:用户CPU时间 = ______ × 时钟周期。
MIPS = 主频 ÷ ______。
简述冯·诺依曼体系结构的主要特点。
解释ISA和微架构的区别。
简述计算机系统的层次结构。
为什么说"时钟频率越高,计算机性能越好"这个说法不完全正确?
MIPS
某程序在机器A上运行需要10s,A的时钟频率为1GHz。将其移植到机器B,要求运行时间缩短到6s。已知程序在B上的时钟周期数是A上的1.2倍,问B的时钟频率至少应为多少?
第1题:
程序总时钟周期数 = 10^6 × 2.5 = 2.5 × 10^6
用户CPU时间 = 2.5 × 10^6 / 500MHz = 5ms
MIPS = 500MHz / 2.5 = 200 MIPS
第2题:
A时钟周期数 = 10s × 1GHz = 10G
B时钟周期数 = 10G × 1.2 = 12G
B时钟频率 = 12G / 6s = 2GHz