计算机的发展
什么是计算机系统
计算机系统 = 硬件 + 软件
计算机硬件是计算机的实体, 如主机、外设等, 而计算机软件是由具有各类特殊功能的程序组成
计算机性能的好坏取决于"软"、"硬"件功能的总和
硬件的发展
发展阶段 | 时间 | 逻辑元件 | 速度(次/秒) | 内存 | 外存 |
第一代 | 1946-1957 | 电子管 | 几千-几万 | 汞延迟线、磁鼓 | 穿孔卡片、纸带 |
第二代 | 1958-1964 | 晶体管 | 几万-几十万 | 磁芯存储器 | 磁带 |
第三代 | 1964-1971 | 中小规模集成电路 | 几十万-几百万 | 半导体存储器 | 磁带、磁盘 |
第四代 | 1972-现在 |
大规模、超大规模 集成电路 |
上千万-万亿 | 半导体存储器 |
磁盘、磁带、光盘、 半导体存储器 |
- 第一代: 电子管时代, 体积超大、耗电量超大, 使用机器语言编程
- 逻辑元件: 电子管
第二代: 晶体管时代, 体积、功耗降低, 出现面向过程的程序设计语言: FORTRAN, 有了操作系统雏形
- 逻辑元件: 晶体管
- 第三代: 中小规模集成电路时代, 将元件集成在基片上, 计算机主要用于科学计算等专业领域, 高级语言迅速发展, 开始有了分时操作系统
- 逻辑元件: 中小规模集成电路
- 第四代: 大规模、超大规模集成电路时代, 开始出现"微处理器"、微型计算机、个人计算机(PC)萌芽, 出现操作系统(Windows, Linux, MacOS)
- 逻辑元件: 大规模、超大规模集成电路
- 1947年, 贝尔实验室发明了"晶体管" - 晶体管之父: 威廉.肖克利(1956年诺贝尔物理学奖得主) - 1955年, 肖克利在硅谷创建肖克利实验室股份有限公司 - 摩尔、罗伯茨、克莱纳、诺伊斯、格里尼克、布兰克、郝尔尼、拉斯特 - 1959年, 八叛徒(traitorous eight)创立了仙童半导体公司 - 1968年, 摩尔等人离开仙童, 创建了Intel - 1969年, 仙童销售部负责人桑德斯离开仙童, 创立了AMD
摩尔定律: 揭示了信息技术进步的速度
- 集成电路上可容纳的晶体管数目, 约每隔18个月便会增加一倍, 整体性能也将提升一倍
微处理器的发展
微型计算机的发展以微处理器技术为标志
微处理器 | 机器字长 | 年份 | 晶体管数目 |
8080 | 8位 | 1974 | |
8086 | 16位 | 1979 | 2.9万 |
80286 | 16位 | 1982 | 13.4万 |
80386 | 32位 | 1985 | 27.5万 |
80486 | 32位 | 1989 | 120.0万 |
Pentium | 64位 | 1993 | 310.0万 |
Pentium pro | 64位 | 1995 | 550.0万 |
Pentium II | 64位 | 1997 | 750.0万 |
Pentium III | 64位 | 1999 | 950.0万 |
Pentium IV | 64位 | 2000 | 4200.0万 |
机器字长: 计算机一次整数运算所能处理的二进制位数
软件的发展
- 第一代软件(1946-1953): 第一代软件是用机器语言编写的, 机器语言是内置在计算机电路中的指令,由0和1组成。
- 第二代软件(1954-1964): 当硬件变得更强大时,就需要更强大的软件工具使计算机得到更有效地使用。汇编语言向正确的方向前进了一大步,但是程序员还是必须记住很多汇编指令。
- 第三代软件(1965-1970): 在这个时期,由于用集成电路取代了晶体管,处理器的运算速度得到了大幅度的提高,处理器在等待运算器准备下一个作业时,无所事事。因此需要编写一种程序,使所有计算机资源处于计算机的控制中,这种程序就是操作系统。
- 第四代软件(1971-1989): 20世纪70年代出现了结构化程序设计技术,Pascal语言和Modula-2语言都是采用结构化程序设计规则制定的,Basic这种为第三代计算机设计的语言也被升级为具有结构化的版本,此外,还出现了灵活且功能强大的C语言。
- 第五代软件(1990-至今): 第五代软件中有三个著名事件:在计算机软件业具有主导地位的Microsoft公司的崛起、面向对象的程序设计方法的出现以及万维网(World Wide Web)的普及。
目前的发展趋势
"两级分化": 一级是微型计算机向更微型分化、网络化、高性能、多用途方向发展; 另一极是巨型机向更巨型化、超高速、并行处理、智能化方向发展
计算机硬件的基本组成
早期冯诺依曼机
第一台计算机ENIAC, 需要程序员手动接线来控制计算, 这样计算速度就被手动操作给抵消了, 因此冯诺依曼提出了存储程序的概念
"存储程序"的概念是指将指令以二进制代码的形式事先输入计算机的主存储器, 然后按其在主存储器中的首地址执行程序的第一条指令, 以后就按该程序的规定顺序执行其他指令, 直至程序执行结束
第一台采用冯诺依曼结构的计算机EDVAC(Electronic Discrete Variable Automatic Computer)
在计算机系统中, 软件和硬件在逻辑上是等效的。
Eg: 对于乘法运算, 可以设计一个专门的硬件电路实现乘法运算, 也可以用软件的方式, 执行多次加法运算来实现
冯诺依曼计算机的特点
1. 计算机由五大部件组成
2. 指令和数据以同等地位存于存储器, 可按地址寻访
3. 指令和数据用二进制表示
4. 指令由操作码和地址码组成
5. 存储程序
6. 以运算器为中心(输入/输出设备与存储器之间的数据传送通过运算器完成)
现代计算机的结构
现代计算机: 以存储器为中心, 运算器和控制器可以集成在同一个部件上, 整合了运算器和控制器的部件称为CPU, 即CPU = 运算器 + 控制器
各个硬件的工作原理
主存储器的基本组成
例如:
MAR = 4位 -> 总共有2^4个存储单元 MDR = 16位 -> 每个存储单元可存放16bit, 1个字(word) = 16bit 易混淆: 1个字节(Byte) = 8bit 1B=1个字节, 1b=1个bit
运算器的基本组成
运算器: 用于实现算术运算(如: 加减乘除)、逻辑运算(如与或非)
- ACC(Accumulator): 累加器, 用于存放操作数, 或运算结果
- MQ(Multiple-Quotient Register): 乘商寄存器, 在乘、除运算时, 用于存放操作数或运算结果
- X: 通用的操作数寄存器, 用于存放操作数
- ALU(Arithmetic and Logic Unit): 算术逻辑单元, 通过内部复杂的电路实现算术运算、逻辑运算
加 | 减 | 乘 | 除 | |
ACC | 被加数、和 | 被减数、差 | 乘积高位 | 被除数、余数 |
MQ | 乘数、乘数低位 | 商 | ||
X | 加数 | 减数 | 被乘数 | 除数 |
控制器的基本组成
CU(Control Unit): 控制单元, 分析指令, 给出控制信息
IR(Instruction Register): 指令寄存器, 存放当前执行的指令
PC(Program Counter): 程序计数器, 存放下一条指令地址, 有自动加1功能
完成一条指令: - 取指令 PC - 分析指令 IR - 执行指令 CU 执行
计算机的工作过程
int a=2, b=3, c=1, y=0; void main(){ y = a*b+c; }
将上述高级语言的代码编译装入主存
初始: (PC)=0, 指向第一条指令的存储地址 #1: (PC)->MAR, 导致(MAR) = 0 #3: M(MAR)->MDR, 导致(MDR) = 000001 0000000101 #4: (MDR)->IR, 导致(IR) = 000001 0000000101 #5: OP(IR)->CU, 指令的操作码送到CU, CU分析后得知, 这是"取数"指令 #6: Ad(IR)->MAR, 指令的地址码送到MAR, 导致(MAR)=5 #8: M(MAR)->MDR, 导致(MDR)=0000000000000010=2 #9: (MDR)->ACC, 导致(ACC)=0000000000000010=2 取指令(#1~#4) 分析指令(#5) 执行取数指令(#6~#9) 上一条指令取值后PC自动+1, (PC)=1; 执行后, (ACC)=2 #1: (PC)->MAR, 导致(MAR) = 1 #3: M(MAR)->MDR, 导致(MDR) = 000100 0000000110 #4: (MDR)->IR, 导致(IR) = 000100 0000000110 #5: OP(IR)->CU, 指令的操作码送到CU, CU分析后得知, 这是"乘法"指令 #6: Ad(IR)->MAR, 指令的地址码送到MAR, 导致(MAR)=6 #8: M(MAR)->MDR, 导致(MDR)=0000000000000011=3 #9: (MDR)->MQ, 导致(MQ)=0000000000000011=3 #10: (ACC)->x, 导致(X)=2 #11: (MQ)*(X)->ACC, 由ALU实现乘法运算, 导致(ACC)=6, 如果乘积太大, 则需要MQ辅助存储 取指令(#1~#4) 分析指令(#5) 执行乘法指令(#6~#9) 上一条指令取值后PC自动+1, (PC)=2; 执行后, (ACC)=6 #1: (PC)->MAR, 导致(MAR) = 2 #3: M(MAR)->MDR, 导致(MDR) = 000011 0000000111 #4: (MDR)->IR, 导致(IR) = 000011 0000000111 #5: OP(IR)->CU, 指令的操作码送到CU, CU分析后得知, 这是"加法"指令 #6: Ad(IR)->MAR, 指令的地址码送到MAR, 导致(MAR)=7 #8: M(MAR)->MDR, 导致(MDR)=0000000000000001=1 #9: M(MDR)->X, 导致(X)=0000000000000001=1 #10: (ACC)+(X)->ACC, 导致(ACC)=7, 由ALU实现加法运算 取指令(#1~#4) 分析指令(#5) 执行加法指令(#6~#9) 上一条指令取值后PC自动+1, (PC)=3; 执行后, (ACC)=7 #1: (PC)->MAR, 导致(MAR) = 3 #3: M(MAR)->MDR, 导致(MDR) = 000010 0000001000 #4: (MDR)->IR, 导致(IR) = 000010 0000001000 #5: OP(IR)->CU, 指令的操作码送到CU, CU分析后得知, 这是"存数"指令 #6: Ad(IR)->MAR, 指令的地址码送到MAR, 导致(MAR)=8 #7: (ACC)->MDR, 导致(MDR)=7 #9: (MDR)->地址为8的存储单元, 导致y=7 取指令(#1~#4) 分析指令(#5) 执行存数指令(#6~#9) 上一条指令取值后PC自动+1, (PC)=4 #1: (PC)->MAR, 导致(MAR)=3 #3: M(MAR)->MDR, 导致(MDR)=000110 0000000000 #4: (MDR)->IR, 导致(IR)=000110 0000000000 #5: OP(IR)->CU, 指令的操作码送到CU, CU分析后得知, 这是"停机"指令 (利用中断机制通知操作系统终止该进程) 取指令(#1~#4) 分析指令(#5) 执行停机指令
CPU区分指令和数据的依据: 指令周期的不同阶段
计算机系统的多级层次结构
计算机系统的层次结构
- 高级语言机器: 用编译程序翻译成汇编语言程序, 如y=a*b+c
- 汇编语言机器: 用汇编程序翻译成机器语言程序, LOAD 5 MUL 6 ...
- 操作系统机器: 向上提供"广义指令"(系统调用)
- 用机器语言的机器: 执行二进制指令, 如0000010000000101(取数指令)、0001000000000110(乘法指令)
- 微指令系统: 由硬件直接执行微指令, 微指令1、微指令2、微指令3、......
编译程序: 将高级语言编写的源程序全部语句一次完全翻译成机器语言程序, 而后再执行机器语言程序(只需翻译一次)
解释程序: 将源程序的一条语句翻译成对对应于机器语言的语句, 并立即执行。紧接着再翻译下一句(每次执行都要翻译)
计算机的性能指标
存储器的性能指标
MAR位数反映存储单元的个数(最多支持多少个), MDR位数=存储字长=每个存储单元的大小
总容量 = 存储单元个数 * 存储字长 bit(1Byte = 8bit) = 存储单元个数 * 存储字长/8 Byte
Eg: MAR为32位, MDR为8位 总容量 = 2^32 * 8 bit = 4GB
CPU的性能指标
i9-9900KF*3.6GHz*8核16进程 i5-9400F*2.9GHz*6核6进程 i7-9700KF*3.6GHz*8核8进程 i5-9600KF*3.7GHz*6核6进程 i3-9100F*3.6GHz*4核4进程 i7-9700KF*3.0GHz*8核8进程
CPU主频: CPU内数字脉冲信号振荡的频率
CPU主频(时钟频率)=1/CPU时钟周期(单位: Hz)
CPI(Clock cycle Per Instruction): 执行一条指令所需的时钟周期数(不同的指令, CPI不同。甚至相同的指令, CPI也可能有变化)
执行一条指令的耗时 = CPI * CPU时钟周期
CPU执行时间(整个程序的耗时) = CPU时钟周期数/主频 = (指令条数*CPI)/主频
IPS(Instructions Per Second): 每秒执行多少条指令, IPS=主频/平均CPI
FLOPS(Floating-point Operations Per Second): 每秒执行多少次浮点数运算
系统整体的性能指标
数据通路带宽: 数据总线一次所能并行传送信息的位数(各硬件部件通过数据总线传输数据)
吞吐量: 指系统在单位时间内处理请求的数量。它取决于信息能多快的输入内存, CPU能多快地取出指令, 数据能多快地从内测取出或存入, 以及所得结果能多快地从内存送给一台外部设备。这些步骤中的每一步都关系到主存, 因此, 系统吞吐量主要取决于主存的存取周期
响应时间: 指从用户向计算机发送一个请求, 到系统对该请求作出响应并获得它所需要的结果的等待时间。通常包括CPU时间(运行一个程序锁花费的时间)与等待时间(用于磁盘访问、存储器访问、I/O操作、操作系统开销等时间)
基准程序是用来测量计算机处理速度的一种实用程序. 以便于被测量的计算机性能可以与运行相同程序的其他计算机性能进行比较(Eg: 鲁大师)