计算机系统的概述
1.1发展历程
1.1.1计算机硬件发展
- 第一阶段**:电子管**计算机 ;
-
第二阶段:晶体管计算机 从1960年到1964年,在计算机中采用了比电子管更先进的晶体管,晶体管比电子管小得多,不需要暖机时间,消耗能量较少,处理更迅速、更可靠。
-
第三阶段:中小规模集成电路计算机 。第三代计算机的特点是体积更小、价格更低、可靠性更高、计算速度更快。
-
第四阶段:大规模集成电路计算机。
1.1.2计算机软件发展
- 机器语言
- 汇编语言
- 高级编程语言
1.1.3计算机发展方向
- 微型计算机朝着更微型化、网络化、高性能、多用途方向发展
- 巨型计算机向更巨型化、 超高速、并行处理、智能化方向发展
1.2计算机系统层次结构
计算机由硬件和软件构成,在计算机系统中,软件和硬件在逻辑上是等效的,软件成本更低,硬件速度更快
1.2.1 早期冯诺依曼计算机特点
- 计算机由五大部分组成
- 指令和数据以同等地位存于存储器,可以按地址寻访
- 指令和数据用二进制表示
- 指令由操作码和地址码组成
- 存储程序
- 以运算器为核心(数据传送必须经过运算器)
1.2.2 现代计算机特点
- 以存储器为核心
- CPU=运算器和控制器
1.2.3计算机的组成
Ⅰ运算器–实现算术运算和逻辑运算
- ACC(累加器):用于存放操作数或运算结果
- MQ(乘商寄存器):在乘除运算时存放操作数和运算结果
- X(通用的操作数寄存器):存放操作数
- ALU(算术逻辑单元):通过内部复杂的电路实现算数运算、逻辑运算
加 | 减 | 乘 | 除 | |
---|---|---|---|---|
ACC | 被加数、和 | 被减数、差 | 乘积高位 | 被除数、余数 |
MQ | 乘数、乘积地位 | 商 | ||
X | 加数 | 减数 | 被乘数 | 除数 |
Ⅱ控制器–指挥程序运行
- PC(程序计数器):存放下一条指令,有自动加一的功能,完成取指令的功能
- IR(指令寄存器):存放当前执行的指令
- CU(控制单元):给出控制信号,分析指令,控制执行指令
Ⅲ主存储器–存放数据和程序
- 存储体:存放数据**,分成一个个存储单元(每个存储单元放一串二进制代码,存储单元中二进制代码的位数叫存储字长)
- MAR(存储地址寄存器)**:MAR位数=存储单元的个数(如,4位的MAR表示总共由2^4个存储单元)
- MDR(存储数据寄存器)**:MDR位数=存储字长(如,16位的MDR表示每个存储单元放16bit,也就是1个字=16bit) 1B=一个字节=8bit 1b=1bit
Ⅳ 输入输出设备
-
输入设备:把信息转成机器能识别的形式、
-
输出设备:将结果转换成人们熟悉的形式
1.2.4 计算机工作过程
比如这段代码的工作过程
int a=2,b=3,c=1,y=0;
void main()
{
y=a*b+c;
}
①把代码编译之后装入主存的存储体当中
主存地址 | 指令(操作码) | 指令(地址码) | 注释 |
---|---|---|---|
0 | 000001 | 0000000101 | 取数a至ACC |
1 | 000100 | 0000000110 | 乘b的ab,存于ACC中 |
2 | 000011 | 0000000111 | 加c的ab+c,存于acc中 |
3 | 000010 | 0000001000 | 将ab+c,存于主存单元 |
4 | 000110 | 0000000000 | 停机 |
5 | 000000 | 0000000010 | 原始数据a=2 |
6 | 000000 | 0000000011 | 原始数据b=3 |
7 | 000000 | 0000000001 | 原始数据c=1 |
8 | 000000 | 0000000000 | 原始数据y=0 |
注意5-8行是合在一起表示数据的,不分操作码地址码,这里写到一起了
②取数(#1-#4 取指令,#5分析指令, #6-#9 执行取数的指令)
#0 首先pc指向第0条指令的存储地址0
#1 把第0条指令地址放到地址寄存器MAR中,使得MAR=0
#2 MAR读出了第0条指令的地址是0,去存储体中找到0号位置
#3 找到之后,把0号位置的指令放到MDR中,(MDR)=000001 0000000101
#4 把找到的指令放到IR中,使得IR=000001 0000000101
#5 把指令的操作码000001放到CU中,CU分析指令后得知这是取数的指令,所取的数字地址在0000000101,也就是5中
#6 AD(IR)->MAR, 把指令的地址码送到MAR中,MAR=5
#7 去存储体中找5号地址对应的数为a=2
#8 M(MAR)->MDR, 把2号地址的数放到MDR中,MDR=0000000010=2
#9 (MDR)->ACC, 把取出来的数字放到ACC中,(ACC)=000000 0000000010=2
③pc自动加1,指向第1条指令(1-4取数指令,5分析指令,6-11乘法指令)
#1 (PC)->MAR, 把pc的指令放到MAR中,使得MAR=1
#2 到存储体中找到1号位置存放的指令
#3 把存储体中找到的指令放到MDR中,MDR=000100 0000000110
#4(MDR)->IR 把MDR中的指令放到指令寄存器中,IR=000100 0000000110
#5 OP(IR)->CU,指令的操作码送到CU,CU分析知道了这是乘法指令
#6 Ad(IR)->MAR,指令的地址码送到MAR,告诉MAR接下来要取地址为6的数,导致MAR=6
#7 到存储体中找地址为6的指令
#8 把地址为6的指令放到MDR中,MDR=000000 0000000011=3
#9 (MDR)->MQ,把乘数3放到MQ中,导致(MQ)=000000 0000000011=3
#10 (ACC)->x,把被乘数2放到操作数寄存器中,(X)=2
#11 (MQ)*(X)->ACC,由ALU实现乘法运算,使得ACC=6,如果乘积太大,需要MQ辅助存储
④pc加1,指向第2条指令(6-10加法指令)
#1 (PC)->MAR, 把pc的指令放到MAR中,使得MAR=2
#2 到存储体中找到2号位置存放的指令
#3 把存储体中找到的指令放到MDR中,MDR=000011 0000000111
#4(MDR)->IR 把MDR中的指令放到指令寄存器中,IR=000011 0000000111
#5 OP(IR)->CU,指令的操作码送到CU,CU分析知道了这是加法指令
#6 Ad(IR)->MAR,指令的地址码送到MAR,告诉MAR接下来要取地址为6的数,导致MAR=7
#7 到存储体中找地址为7的指令
#8 把地址为7的指令放到MDR中,MDR=000000 0000000001=1
#9 (MDR)->X,把乘数3放到X中,导致(X)=000000 0000000001=1
#10(ACC)+(X)->ACC,由ALU实现加法运算,使得ACC=7
⑤pc加1指向第3条指令(存数6-9)
#1 (PC)->MAR, 把pc的指令放到MAR中,使得MAR=3
#2 到存储体中找到3号位置存放的指令
#3 把存储体中找到的指令放到MDR中,MDR=000010 0000001000
#4(MDR)->IR 把MDR中的指令放到指令寄存器中,IR=000010 0000001000
#5 OP(IR)->CU,指令的操作码送到CU,CU分析知道了这是存数的指令
#6 Ad(IR)->MAR,指令的地址码送到MAR,告诉MAR接下来要存地址为1000=8的数,导致MAR=8
#7 (ACC)->MDR,把要存的数据放到MDR当中,导致(MDR)=7
#8 在存储其中找到8号位置
#9 把7这个数存在地址为8的存储单元中,也就得到了结果y=7
⑥pc加1指向第4条指令
#1 (PC)->MAR, 把pc的指令放到MAR中,使得MAR=4
#2 到存储体中找到4号位置存放的指令
#3 把存储体中找到的指令放到MDR中,MDR=000110 0000000000
#4(MDR)->IR 把MDR中的指令放到指令寄存器中,IR=000110 0000000000
#5 OP(IR)->CU,指令的操作码送到CU,CU分析知道了这是停机指令 通过中断机制通知操作系统终止该进程
计算机工作过程总结
- 取数指令 (把pc指令中的地址送到MAR,存储体中找到MAR中的地址对应的指令,把指令送到MDR,MDR再把指令放到IR)
- 分析指令(把IR中的指令送到CU中分析)
- 执行指令 (分析完之后,把IR中的地址码送到MDR,根据需要把数送到运算器对应的地方)
1.2.5计算机系统的层次结构
- 微程序机器M0(微指令系统)–硬件直接执行微指令
- 传统机器M1(机器语言机器)–执行二进制机器指令
- 虚拟机器M2(操作系统机器)–向上提供广义指令
- 虚拟机器M3(汇编语言机器)–用汇编程序把汇编语言翻译成机器语言程序
- 虚拟机器M4(高级语言机器)–用编译程序把高级语言翻译成汇编语言程序
1.3 计算机的性能指标
存储器的性能指标
- 总容量=存储单位个数*存储字长
- MAR位数=存数单位个数
- MDR位数=存储字长=每个存储单位的大小
- 1K=2^10 1M=2^20 1G=2^30 1T=2^40
CPU的性能指标
-
CPU主频:CPU内数字脉冲信号振荡的频率,每秒出现多少时钟周期
CPU主频=1/CPU时钟周期 -
CPI:执行一条指令所需要的时钟周期数
执行一条指令的耗时=CPICPU时钟周期
CPU执行时间=CPU时钟周期数/主频=(指令条数CPI)/主频 -
IPS:每秒执行多少条指令
IPS=主频/平均CPI -
** FLOPS:每秒钟执行多少次浮点运算**
k=1000 M=100000 G=1000 000 000 T=1 000 000 000 000
系统整体的性能指标
- 数据通路带宽:数据总线一次所能并行传送信息的位数(各硬件不见通过数据总线传输数据)
- 吞吐量:系统在单位时间内处理请求的数量
- 响应时间:指用户向计算机发送一个请求,到系统对该请求做出响应并获得它所需要的结果的等待时间