计算机组成原理(Computer Organization)相关内容。一级标题下为基础内容导图(列表),其余为重点内容详解。本学科疑难点多而杂,请仔细阅读。
1 计算机系统概述
发展历程:
- 第1代:电子管
- 第2代:晶体管
- 第3代:中小规模集成电路
- 第4代:超大规模集成电路
系统组成:
- 运算器:计算机的执行部件,用于对数据进行加工处理。
- 控制器:计算机的指挥中心,由其控制各部件自动协调地进行工作。
- 存储器:计算机的存储部件,用于存放程序和数据。
- 输入设备:将程序和数据以机器所能识别和接受的信息形式输入到计算机
- 输出设备:将计算机处理的结果以某些形式输出。
性能指标(主要指标详见后述):
- 机器字长:计算机进行一次整数运算所能处理的二进制数据的位数。
- 数据通路带宽:数据总线一次所能并行传递信息的位数。
- 主存容量:主存储器所能存储信息的最大容量。
- 运算速度:
- 吞吐量:系统在单位时间内处理请求的数量。
- 响应时间:从用户提交请求到系统首次产生响应并获得其所需要的结果所用的时间。
- 时钟周期:节拍脉冲或
T周期,CPU中最小的时间单位。 - 主频:机器内部主时钟的频率,时钟周期的倒数。
- CPI:执行一条指令所需的时钟周期数。
- 执行时间:运行一个程序所花费的时间。
- MIPS:每秒执行多少百万条指令。
- FLOPS:每秒执行多少次浮点运算,另有MFLOPS、GFLOPS等。
1.1 冯·诺依曼机和存储程序
冯·诺依曼在研究EDVAC机时提出了存储程序的概念,存储程序的思想奠定了现代计算机的基本结构,以此概念为基础的各类计算机通称为冯·诺依曼机,其特点如下:
- 计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备5大部件组成。
- 指令和数据以同等地位存储在存储器中,并可按地址寻访。
- 指令和数据均用二进制码表示。
- 指令由操作码和地址码组成:操作码用于表示操作的性质,地址码用于表示操作数在存储器中的位置。
- 指令在存储器内按顺序存放。通常,指令是顺序执行的,在特定条件下可根据运算结果或根据设定的条件改变执行顺序。
- 早期的冯·诺依曼机以运算器为中心,输入/输出设备通过运算器与存储器传送数据;现代计算机以存储器为中心。
存储程序的基本思想为将指令以二进制码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,之后就按该程序的规定顺序执行其他指令,直至程序执行结束。

1.2 计算机的工作过程
计算机的工作过程分为以下三个步骤:
- 把程序和数据装入主存储器。
- 将源程序转换成可执行文件。
- 从可执行文件的首地址开始逐条执行指令。
相关概念:
- 寄存器/部件:
- PC(Program Counter,程序计数器):存放下一条要执行指令的地址,取指时把地址送入MAR,自动自增。
- MAR(Memory Address Register,存储器地址寄存器):存放要访问的内存单元地址,送到地址总线,用于寻址。
- 主存(Memory):存放指令和数据。
- MDR(Memory Data Register,存储器数据寄存器):存放从内存读出/写入内存的数据或指令,连接CPU与内存。
- IR(Instruction Register,指令寄存器):存放当前正在执行的指令,指令从MDR送入IR。
- 累加器(Accumulator):运算器核心寄存器,存放操作数、运算中间结果、最终结果。
- 指令/控制:
- 操作码(Operation Code):指令中表示做什么操作(如加、减、取数、跳转)。
- 地址码(Address Code):指令中表示操作数的地址,用于找数据。
- 控制单元(Control Unit,CU):控制器核心,解析指令、产生控制信号,指挥全机各部件工作。
1.3 编译和解释
在计算机系统结构中,翻译的方式分为两种——编译和解释:
- 编译型语言的程序在执行之前,需要进行专门的编译过程,将程序编译成机器语言的文件,例如
.exe文件。只要源程序不改动,以后要运行时就无需重新编译。 - 解释型语言的程序不需要编译,而是在运行程序时逐句翻译,不生成目标程序。解释型语言没执行一次就要翻译一次,效率比较低。
Java是一种半编译半解释的解释型语言,并非直接编译成机器语言(二进制语言),而是编译成字节码(.class文件)后再用解释方式执行。编译后的.class文件属于中间代码,并不是.exe可执行程序这种二进制文件,故还需要JVM(Java虚拟机)进行解释。整个过程:.java文件 → 编译成.class字节码文件 → 由JVM解释执行。
C语言编译过程分为四个步骤:
- 由
.c文件到.i文件——预处理:将#include包含的头文件直接拷贝到.c文件中,再将#define定义的宏进行替换,同时删除代码中没用的注释。 - 由
.i文件到.s文件——编译 - 由
.s文件到.o文件——汇编 - 由
.o文件到可执行文件——链接:将翻译成的二进制内容与需要用到的库绑定在一起。

1.4 指令执行过程
程序中第一条指令的地址置于PC中。根据PC取出第一条指令,经过译码、执行步骤等,控制计算机各功能部件协同运行,完成这条指令的功能,并计算下一条指令的地址。用新得到的指令地址继续读出第二条指令并执行,直至程序结束位置。本节以取数指令(即将指令地址码指示的存储单元中的操作数取出后送至运算器的累加器ACC中)为例进行说明,其信息流程如下:
- 取指令:PC → MAR → M → MDR → IR
- 根据PC取指令至IR,将PC的内容送至MAR;MAR中的内容直接送至地址线,同时控制器将读信号送至读/写信号线;主存根据地址线上的地址和读信号,从指定存储单元读出指令,送到数据线上;MDR从数据线接收指令信息,并传至IR中。
- 分析指令:OP(IR) → CU
- 指令译码并送出控制信号。控制器根据IR中指令的操作码,生成相应的控制信号,送到不同的执行部件。在本例中,IR中是取数指令,因此读控制信号被送到总线的控制线上。
- 执行指令:Ad(IR) → MAR → M → MDR → ACC
- 执行取数操作。将IR中指令的地址码送至MAR;MAR中的内容送至地址线,同时控制器将读信号送至读/写信号线;从主存指定存储单元读出操作数,并通过数据线送至MDR;最后传至ACC中。
此外,每取完一条指令,还须为取下一条指令做准备,形成下一条指令的地址,即PC <- PC + 1。
1.5 主要性能指标
机器字长:计算机进行一次整数运算(顶点整数运算)所能处理的二进制数据的位数,通常与CPU的寄存器位数、加法器有关。因此机器字长一般等于内部寄存器的大小。字长越长,数的表示范围越大,计算精度越高。计算机字长通常选定为字节(8位)的整数倍。
数据通路带宽:数据总线一次所能并行传送信息的位数。这里所说的数据通路宽度是指外部数据总线的宽度,它与CPU内部的数据总线宽度(内部寄存器的大小)可能不同。各子系统通过数据总线连接形成的数据传送路径称为数据通路。
主存容量:主存储器所能存储信息的最大容量,通常以字节来衡量,也可用字数 × 字卡(如512K×16位)来表示。其中,MAR的位数反映存储单元的个数,MAR的位数反映可寻址范围的最大值(不一定是实际存储器的存储容量)。
运算速度:
- 吞吐量和响应时间
- 吞吐量:系统在单位时间内处理请求的数量。它取决于信息能多快地输入内存,CPU能多快地取指令,数据能多快地从内存取出或存入,以及所得结果能多快地从内存送给一台外部设备。几乎每步都关系到主存,因此系统吞吐量主要取决于主存的存取周期。
- 响应时间:从用户向计算机发送请求到系统对该请求做出响应、用户获得所需结果的等待时间。通常包括CPU时间(运行一个程序所花费的时间)与等待时间(用于磁盘访问、存储器访问、I/O操作、操作系统开销等的时间)。
- CPU时钟周期和主频
- CPU时钟周期:通常为节拍脉冲或
T周期,即主频的倒数。是CPU中最小的时间单位,每个动作至少需要1个时钟周期。 - 主频:机器内部时钟的频率。
- CPU时钟周期:通常为节拍脉冲或
- CPI(Clock-cycle Per Instruction):执行一条指令所需的时钟周期数。
2 数据的表示和运算
数制与编码:
- 数值:BCD码,用4位二进制来表示一位十进制数,有冗余状态。
- 字符:
- ASCII码:采用7位二进制数表示大小写字母、数字和专用符号。
- 汉字编码:包括输入编码、汉字内码、汉字字形码。
- 校验:
- 奇偶校验码:在原编码上加一个校验位,检验整个检验码中1的个数是否为奇数或偶数。
- 海明校验码:按某种规律分成若干组,每组安排一个校验位进行奇偶性测试,产生多位检测信息,并得出出错位置。
- 循环冗余校验码:在
K位信息码后再拼接R位检验码,利用模2除法检验编码正确性。
定点数:
- 表示:
- 原码:用机器数的最高位表示该数的符号,其余的各位表示数的绝对值。
- 反码:正数与原码一样,负数除符号位外其余各位是原码的按位取反。
- 补码:正数与原码一样,负数是反码的末位加1。
- 移码:在真值
X上加上一个常数(偏置值),通常这个常数取2^n。
- 计算:移位、原码以及补码下的加减乘除。
浮点数:
- 表示:
- 组成:阶符、阶码、数符和尾数。
- 规格化:规定尾数的最高数位必须是一个有效值。
- IEEE754标准:尾数用采取隐藏位策略的原码表示,且阶码用移码表示的浮点数。
- 加减步骤:对阶、尾数求和、规格化。
算术逻辑单元:
- 一位全加器:最基本的加法单元,输入两位加数及低位的进位,输出和与高位进位。
- 串行加法器:一位全加器的简单相连,串行进位。
- 并行加法器:使用先行进位提高加法器的运算速度。
- ALU:功能较强的组合逻辑电路,能进行多种算术运算和逻辑运算。
2.1 IEEE754标准浮点数
按照
二进制表示的意义