1. 计算机系统简介
1.1. 计算机的软硬件概念
计算机系统由硬件+软件两大部分组成;
硬件:计算机的实体部分;各种光、电、机设备的实物组成,如主机、外设;
软件:看不见,摸不着,人们实现编制的具有各类特殊功能的程序组成;
1.2. 计算机系统的层次结构
对于现代计算机来说,其通常由用户用高级语言编写程序(源程序),将它和数据一起送入计算机内,再由计算机将其翻译成机器能够识别的机器语言程序(目标程序),机器自动运行该机器语言程序,并且将计算结果输出;
在之前,早期的计算机只有机器语言,当时用户必须要用二进制代码来编写程序;这种编写程序难度很大,操作过程也极其容易出错,但是用户编写的机器语言程序可以直接在机器上执行;直接执行机器语言的机器称为实际机器 M1;
在 20 世纪 50 年代开始出现了符号式的程序设计语言,即汇编语言;编写之后,将其翻译成实际机器语言,这个翻译过程由机器系统软件中的汇编程序来进行;
尽管有了虚拟机器 M2 使用户编程更为方便,但是本质上看,汇编语言仍然是一种面向实际机器的语言,每一条语言都与机器语言的某一条语句一一对应;因此,汇编仍然要求程序员对实际机器 M1 的内部组成和指令系统非常熟悉;这导致,汇编语言摆脱不了实际机器的指令系统,因此没有通用性,每台机器必须要有一种与之相对应的汇编语言;后面 20 世纪 60 年代,先后开始出现面向问题的高级语言;
将高级语言程序翻译成机器语言程序的软件叫做翻译程序;翻译程序有两种:一种是编译程序,另一种是解释程序;编译程序:将用户编写的高级语言程序(源程序)的全部语句一次全部翻译成机器语言程序,再后执行机器语言程序;只需要源程序不变,无需再进行翻译了;例如:FORTRAN、Pascal 等语言;解释程序:将源程序的一条语言翻译成机器语言的一条语句,并且立即执行;接着继续翻译,继续执行;如此重复直至完成所有的全部翻译任务;特点是:翻译一次执行一次,下次再重复执行,也需要重新翻译;例如:BASIC 的翻译就有解释程序和编译程序两种;
由于软件发展,使实际机器 M1 向上延伸构成了各级虚拟机器,同理,机器 M1 内部也可以向下延伸而形成下一级的微程序机器 M0;机器 M0 是直接将机器 M1 的每一条机器指令翻译成一组微指令,即构成一个微程序;
其中,在 M1 和 M2 之间还有一级虚拟机器,由操作系统软件构成的;操作系统提供了在汇编语言和高级语言的使用和实现过程中所需的某些基本操作,且控制并管理计算机系统全部硬件和软件资源的作用;
2. 计算机的基本组成
2.1. 冯·诺依曼计算机的特点
- 计算机由运算器、存储器、控制器、输入设备和输出设备五大部件构成;
- 指令和数据以同等地位存放于存储器内,并可按地址寻访;
- 指令和数据均用二进制表示;
- 指令由操作码和地址码组成,操作码表示操作的性质,地址码用来表示操作数在存储器中的位置;
- 指令在存储器内按照顺序存放;通常,指令是顺序执行的,在特定条件下,可根据运算结果或根据设定的条件改变执行顺序;
- 机器以运算器为中心,输入输出设备与存储器间的数据传送通过运算器完成;
2.2. 计算机硬件框图
各个部件的作用:
- 运算器:完成算术运算和逻辑运算,并且将运算的中间结果暂存在运算器内;
- 存储器:用来存放数据和程序;
- 控制器:控制、指挥程序和数据的输入、允许运行以及处理运算结果;
- 输入设备:将人熟悉的信息转换成机器可以识别的信息;
- 输出设备:将机器运算结果转换成人们熟悉的信息形式;
因为运算器和控制器联系十分紧密,在大规模集成电路制作工艺出现后,两大部件往往集成在同一芯片上,因此,通常将它们合起来统称为 中央处理器(CPU);输入输出设备简称为:I/O 设备;
2.3. 计算机的工作步骤
通常计算机解决问题包含两大步骤,一是上机前准备,另一个是上机运行;
2.3.1. 上机前准备
- 建立数学模型;
- 确定计算方法;
- 编制解题程序;
2.3.2. 计算机的工作过程
设计到主存储器、运算器、控制器、I/O 设备等;
3. 计算机硬件的主要技术指标
3.1. 机器字长
指 CPU 一次可以处理数据的位数;通常与 CPU 的寄存器位数有关;字长越长,数的表示范围越大,精度也越高;机器字长也会影响机器的运算速度,倘若 CPU 字长较短,又要运算位数较多的数据,那么需要经过两次或多次的运算才能完成,则影响机器的运算速度;
机器字长对硬件的造假也有较大影响;它会直接影响加法器、数据总线以及存储字长的位数;所以机器字长的确定不能但从精度和数的表示范围来考虑;
3.2. 存储容量
存储器的容量应该包括主存容量和辅存容量;主存容量是指:主存存放二进制代码的总位数,即:存储容量 = 存储单元个数 x 存储字长
;
3.3. 运算速度
计算机的运算速度与许多因素有关,比如说:CPU 主频,执行啥操作,主存的本身速度等等;早期用完成一次加法或乘法所需的时间来衡量运算速度,即普通法,显然是很不合理的;后来采用吉普森(Gibson)法,综合考虑每条指令的执行时间及它们在全部操作中所占百分比,即:T_M = \sum_{i=1}^n f_i t_i ;其中 T_M 为机器运行速度;f_i 代表第 i 种指令站全部操作的百分比数;t_i 为第 i 种指令的执行时间;
目前机器的运算速度普遍采用单位时间内执行指令的平均条数来衡量,即:MIPS(Million Instcuction Per Second,百万条指令每秒) 作为计量单位;或者 FLOPS (Floating Point Operation Per Second,浮点运算次数每秒) 来衡量运算速度;