计算机系统概述
1.1 计算机发展历程
1.1.1 计算机硬件的发展
计算机的发展经历了四代:
| 代次 | 年代 | 逻辑元件 | 主存储器 | 特点 |
|---|---|---|---|---|
| 第一代 | 1946-1957 | 电子管 | 延迟线、磁鼓 | 机器语言,体积大,成本高,速度低 |
| 第二代 | 1958-1964 | 晶体管 | 磁芯存储器 | 出现高级语言和编译程序,操作系统雏形 |
| 第三代 | 1965-1971 | 中小规模集成电路 | 半导体存储器 | 分时操作系统,高速缓存、虚拟存储器概念出现 |
| 第四代 | 1972至今 | 大规模/超大规模集成电路 | 半导体存储器 | 微处理器,并行、流水线等技术 |
重要规律:
- 摩尔定律:价格不变时,集成电路上可容纳的晶体管数目约每隔18个月增加一倍,性能提升一倍。
- 半导体存储器发展:从单芯片1KB到现在的1GB以上。
- 微处理器发展:从Intel 4004(4位)到Core i7(64位),机器字长不断增长。
1.1.2 计算机软件的发展
- 机器语言 → 汇编语言 → 高级语言(FORTRAN、PASCAL、C++、Java等)。
- 系统 软件:操作系统(Windows、UNIX、Linux)、编译程序等。
1.2 计算机系统层次结构
1.2.1 计算机系统的组成
计算机系统由硬件系统和软件系统共同构成。
- 硬件:物理设备的总称。
- 软件:程序、数据及相关文档。
软硬件逻辑等价性:某一功能既可用软件实现,又可用硬件实现,在逻辑功能上是等价的。硬件实现速度快,软件实现灵活。
1.2.2 计算机硬件
冯·诺依曼机基本思想
核心是“存储程序”概念。特点:
- 采用“存储程序”工作方式。
- 硬件由运算器、存储器、控制器、输入设备、输出设备五大部分组成。
- 指令和数据以同等地位存储在存储器中,形式上无区别,但计算机能 区分。
- 指令和数据均用二进制代码表示。
- 指令由操作码和地址码组成。
计算机的功能部件
(1)输入设备:将程序和数据输入计算机(键盘、鼠标等)。
(2)输出设备:将处理结果输出(显示器、打印机等)。
(3)存储器
- 主存储器(主存):CPU可直接访问。按地址存取。
- 存储体:存放二进制信息。
- MAR(存储器地址寄存器):存放访存地址。MAR的位数反映最大可寻址的存储单元个数(如10位MAR可寻址2^10=1024个单元)。
- MDR(存储器数据寄存器):暂存从存储器中读或写的信息。MDR的位数通常等于存储字长。
- 注意:MAR和MDR虽然属于存储器部分,但在现代计算机中通常存在于CPU中。
(4)运算器
- 核心是ALU(算术逻辑单元)。
- 包含通用寄存器(如ACC累加器、MQ乘商寄存器、X操作数寄存器等)。
- 包含PSW(程序状态寄存器),存放标志信息(溢出、进位、负、零等)。
(5)控制器
- PC(程序计数器):存放下一条指令的地址,具有自动加1功能。
- IR(指令寄存器):存放当前指令。
- CU(控制单元):分析指令并发出微操作命令序列。
通常将运算器和控制器集成在同一芯片上,称为CPU(中央处理器)。CPU和主存构成主机,其他为外设。
1.2.3 计算机软件
- 系统软件:操作系统、数据库管理系统、语言处理程序等。
- 应用软件:为解决具体应用问题而编制的程序。
三个级别的语言
| 语言类型 | 特点 | 执行方式 |
|---|---|---|
| 机器语言 | 二进制代码,计算机唯一可直接执行的语言 | 直接执行 |
| 汇编语言 | 用助记符代替二进制,需汇编程序转换为机器语言 | 汇编后执行 |
| 高级语言 | 接近自然语言,需编译/解释 | 编译或解释后执行 |
翻译程序
- 汇编程序:汇编语言 → 机器语言。
- 解释程序:逐条翻译并立即执行,不生成目标文件。
- 编译程序:将高级语言一次全部翻译为汇编或机器语言程序。
软/硬件逻辑功能等价性:如浮点数运算既可 用硬件浮点运算器实现,也可用软件子程序实现。
1.2.4 计算机系统的层次结构
| 层次 | 名称 | 实现方式 |
|---|---|---|
| 第5层 | 高级语言层 | 编译程序支持 |
| 第4层 | 汇编语言层 | 汇编程序支持 |
| 第3层 | 操作系统层 | 操作系统(混合层) |
| 第2层 | 传统机器语言层 | 微程序解释指令系统 |
| 第1层 | 微程序机器层 | 硬件直接执行微指令 |
- 裸机:没有配备软件的纯硬件系统。
- 虚拟机:第3~5层,由软件实现的机器。
- ISA(指令集体系结构):软件与硬件之间的接口,是软件可见部分。
1.2.5 计算机系统的工作原理
“存储程序”工作方式:程序执行前先送入主存,启动后自动逐条执行指令。
从源程序到可执行文件的四个阶段(以GCC为例):
- 预处理:处理
#include、#define等,生成.i文件。 - 编译:将
.i文件编译为汇编语言文件.s。 - 汇编:将
.s文件转换为可重定位目标文件.o(二进制)。 - 链接:将多个
.o文件和库函数链接为可执行文件。
指令执行过程举例(取数指令):
- 取指令:PC → MAR → 主存 → MDR → IR
- 分析指令:OP(IR) → CU
- 执行指令:Ad(IR) → MAR → 主存 → MDR → ACC
- 计算下条指令地址:(PC) + 1 → PC
注意:(PC)表示PC中的内容,PC→MAR表示数据通路,括号省略;但运算时不能省略,如(PC)+1→PC。
1.3 计算机的性能指标
1.3.1 主要性能指标
1. 机器字长
- 计算机进行一次整数运算所能处理的二进制数据的位数。
- 通常等于通用寄存器位数、ALU宽度。
- 字长越长,数的表示范围越大,精度越高。
2. 数据通路带宽
- 数据总线一次并行传送信息的位数。可能与CPU内部数据总线宽度不同。
3. 主存容量
- 主存储器所能存储的最大信息量,通常以字节为单位。
- MAR位数决定最大存储单元个数,MDR位数决定存储字长。
例:MAR为16位,MDR为32位,则存储容量 = 2^16 × 32位 = 64K × 32位。
4. 运算速度
-
吞吐量:单位时间内处理请求的数量。主要取决于主存存取周期。
-
响应时间:从用户发送请求到获得响应的时间。包括CPU时间和等待时间。
-
主频与CPU时钟周期:
- 时钟周期 = 1 / 主频,是CPU工作的最小时间单位。
- 主频越高,执行指令越快。
-
CPI(Cycle Per Instruction):执行一条指令所需的平均时钟周期数。
-
CPU执行时间 = CPU时钟周期数 / 主频 = 指令条数 × CPI / 主频。
-
IPS(Instructions Per Second) = 主频 / 平均CPI。常用MIPS(百万条指令/秒)。
-
MIPS = 指令条数 / (执行时间 × 10^6) = 主频 / (CPI × 10^6)。
注意:不同机器的指令集不同,MIPS不能直接比较性能。 -
FLOPS:每秒执行的浮点运算次数。
MFLOPS(10^6)、GFLOPS(10^9)、TFLOPS(10^12)、PFLOPS(10^15)、EFLOPS(10^18)、ZFLOPS(10^21)。
5. 基准程序
- 专门用来进行性能评价的一组程序,反映实际负载的性能。但可能被针对性优化。
1.3.2 几个专业术语
- 系列机:具有相同体系结构、基本指令系统的多个型号计算机。
- 兼容:软件或硬 件的通用性,通常在同一系列不同型号间存在。
- 固件:将程序固化在ROM中组成的部件,具有软件特性、硬件速度,如部分操作系统固化在ROM中。
1.4 常见问题和易混淆知识点
1. 翻译程序、汇编程序、编译程序、解释程序的区别
- 翻译程序:将高级语言转换为机器语言的软件统称。
- 汇编程序:汇编语言 → 机器语言。
- 编译程序:高级语言 → 汇编/机器语言(一次翻译,生成目标文件)。
- 解释程序:高级语言 → 逐条翻译并立即执行,不生成目标文件。
2. 透明性
- 在计算机中,透明是指“看不到”,即某个事物或属性对某类用户不存在。例如,高级语言程序员看不到浮点数格式,但对机器语言程序员则不透明。IR、MAR、MDR对各类程序员都透明。
3. 字、字长、机器字长、指令字长、存储字长的区别
- 字长(机器字长):CPU内部整数运算数据通路的宽度。
- 字:用来表示被处理信息的单位,如x86中字=16位。
- 指令字长:一条指令中包含的二进制代码位数。
- 存储字长:一个存储单元中二进制代码的位数。
- 三者可以相等也可以不等,但都是字节的整数倍。
4. 计算机体系结构与计算机组成的区别
- 体系结构(指令集体系结构,ISA):机器语言或汇编语言程序员所看到的属性(指令集、数据类型、寻址方式等),抽象。
- 计算机组成:如何实现体系结构,包含对程序员透明的硬件细节。例如,是否具备乘法指令是结构问题,如何实现乘法是组成问题。
5. 基准程序执行越快,机器性能越好吗?
- 一般情况下是,但基准程序可能存在频度差异,且可能被针对性优化,因此不能完全代表所有应用。
1.5 复习提示
本章是组成原理的概述,常出选择题,也可能结合后续章节出综合题。重点掌握:
- 冯·诺依曼机的特点(存储程序、五大部件等)。
- 计算机硬件组成(CPU、主存、外设)及各部件的作用。
- 计算机性能指标(主频、CPI、CPU执行时间、MIPS、FLOPS)及其计算。
- 翻译程序(汇编、编译、解释)的区别。
- 软硬件逻辑等价性、系列机、兼容、固件等概念。