计算机发展历程
从1946年第一代计算机ENIAC问世以来,计算机发展经历四代。
计算机硬件发展
- 第一代计算机:电子管时代
- 第二代计算机:晶体管时代
- 第三代计算机:中小规模集成电路
- 第四代计算机:超大规模集成电路
计算机软件发展
计算机语言的发展经历了面向机器的机器语言和汇编语言、面相问题的高级语言。其中高级语言的发展促进了软件的发展。从科学计算和工程计算的FORTRAN、结构化程序设计PASCAL到面向对象的C++和适应网络环境的Java等等。
计算机指令和数据流分类
- SISD(单指令流,单数据流):即传统冯诺依曼体系计算机
- SIMD(单指令流,多数据流):阵列处理器和向量处理器等
- MISD(多指令流,单数据流):不存在,为啥不存在,因为指令是多个,数据流是一个,多个指令对同一个数据会有冲突
- MIMD(多指令流,多数据流):当前的多处理器和多计算机系统
计算机系统层次结构
硬件组成
早期冯诺依曼体系计算机主要特点
- 硬件系统由运算器、控制器、存储器、输入设备、输出设备组成
- 指令和数据以同等地位存储在存储器内,并可以按地址访问
- 指令和数据用二进制表示
- 指令由操作码和地址码组成
- 指令在存储器内顺序存放
- 早起冯诺依曼体系计算机以计算器为中心,IO设备通过运算器和存储器传送数据
现代计算机体系结构:以存储器为核心
计算机功能部件
- 输入设备:键盘、鼠标、扫描仪等
- 输出设备:显示器、打印机等
- 存储器:包括主存、外存;主存由很多存储单元组成,每个存储单元可以存储一串二进制代码,代码位数叫存储字长,可以是一个字节。主存的工作方式是按照存储单元的地址进行存取的。主存主要由存储体、地址寄存器(MAR)和数据寄存器(MDR)组成。地址寄存器存地址,经过地址译码后找到对应的存储单元;数据寄存器是主存和其他部件的中介机构,用于暂存要从存储器中读或写的信息。所以MAR的位数决定存储单元的个数,MDR的位数就是存储字长的位数。
- 运算器:对数据进行加工处理的,完成算数运算和逻辑运算。主要有算术逻辑单元(ALU)、通用寄存器组如累加器(ACC)、乘商寄存器(MQ)、操作数寄存器(X)等等,此外还有程序状态寄存器(PSW),保存各类运算结果状态信息。
- 控制器:由程序计数器(PC)、指令寄存器(IR)和控制单元(CU)组成。PC存放要执行指令的地址,与主存的MAR有一条直接通路;IR存放当前的指令,内容来自于主存的MDR。
软件分类
- 系统软件:操作系统、DBMS、语言处理程序、分布式软件系统、网络软件系统、标准库程序、服务性程序等。
- 应用软件:为解决某个应用领域编制的程序。
计算机性能指标
- 机器字长:计算机进行一次整数运算所能处理的二进制位数,一般机器字长等于内部寄存器
- 主存容量:MAR是16位,MDR是32位,则有2的16次方个存储单元,一个存储单元存32位,则存储容量为64K*32位。
- 吞吐量:系统在单位时间内处理请求的数量。
- CPI:一条指令需要几个时钟周期。
- CPU执行时间:运行一个程序所花费的时间。
- MIPS:一秒钟能执行几百万条指令。等于主频除以CPI
- MFLOPS:一秒钟能执行几百万次浮点数运算。
计算机工作过程
- 把程序和数据存储到存储器中
- 从程序的起始地址开始运行程序
- 从程序的首地址从内存中取出第一条指令,经过译码、执行步骤等控制计算机各功能部件协同工作,完成这条指令,并计算下一条指令的地址。
- 用新得到的指令地址继续读出第二条指令并执行,直到程序结束为止,每一条指令都是取指令、译码、执行指令的过程
以取数指令(将指令地址码中的数据取出送到ACC寄存器)的信息流程如下:
- 取指令:PC-->MAR-->M-->MDR-->IR
- 分析指令:IR-->CU
- 执行指令:IR-->MDR-->M-->MDR-->ACC
举个例子
存储器的基本组成
运算器的基本组成和操作
控制器的基本组成
说明
- 翻译程序:将高级语言源程序翻译成机器语言程序(目标代码)的软件
- 编译程序:是翻译软件的一种,将高级语言一次全部翻译成目标程序,每次执行程序时,只要执行目标程序,因此只要源程序不变,就不需要重新编译。
- 解释程序:是翻译软件的一种,将源程序的一条语句翻译成对应的机器目标代码,并立即执行,然后翻译下一条源程序语句并执行,直至所有源程序语句全部被翻译并执行完。所以解释程序的执行过程是翻译一句执行一句,并且不会生成目标程序。
- 汇编程序:也是一种语言翻译程序,它是把汇编语言源程序翻译成机器语言程序。是一种面向机器语言的低级语言。
- 机器字长:计算机能直接处理的二进制数据的位数,机器字长一般等于内部寄存器的大小,决定了计算机运算精度。
- 指令字长:一个指令字中包含二进制代码的位数。
- 存储字长:一个存储单元存储二进制代码的长度。必须是字节的整数倍。