计算机系统概述
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