计算机层次结构
硬件系统和软件系统共同构成了完整的计算机系统。
计算机硬件
冯诺依曼机
冯诺依曼提出了存储程序的概念:将指令以二进制代码的形式事先输入计算机的主存储器,计算机自动逐条执行指令直至程序结束。
冯诺依曼计算机特点:
- 运算器、存储器、控制器、输入设备、输出设备5大部件组成;
- 指令和数据以同等地位存储于存储器,可以按地址寻访;
- 指令和数据用二进制表示;
- 指令由操作码和地址码组成;
- 存储程序
- 以运算器为中心
现代计算机
冯诺依曼结构以运算器为中心,运算器来负责输入数据到输出数据的流程。现代计算机系统改进了这个方式,以存储器为核心,解放了运算器。
- 计算机 = 主机 + IO设备
- 主机 = CPU + 主存(内存)
- CPU = 运算器 + 控制器
功能部件
存储器
存储器分为主存储器(内存)和辅助存储器(外存)。CPU能够直接访问的是主存,外存数据必须调入主存后才能被CPU访问。
主存由地址寄存器(Memory Address Register -- MAR)和数据计算器(Memory Data Register -- MDR)组成。数据在存储体内按照地址存储。不过在当代计算机系统中,MAR和MDR通常被集成到CPU中了。
- 存储单元:每个存储单元存放一串二进制码;
- 存储字(woed):存储单元中二进制代码的组合;
- 存储字长:存储单元中二进制代码的位数;
- 存储元:存储二进制的电子元件,每个存储单元可存1bit;
- MAR的位数反应存储单元的个数,假设MAR为4位,那么总共有\(2^4\)个存储单元;
- MDR的位数反应存储字长,假设MDR为16位,则每个存储单元可存放16bit,即一个字(word,注意不是byte)=16bit
运算器
运算器用于实现算数运算和逻辑运算
- ACC(Accumulator):累加器,用于存放操作数,或者运算结果;
- MQ(Multiple-Quotient Register):乘商寄存器,在乘、除运算时用于存放操作数或运算结果;
- X:通用的操作数寄存器,用于存放操作数;
- ALU(Arithmetic and Logic Unit):算数逻辑单元,通过内部复杂的电路实现算数运算和逻辑运算,是运算器的核心;
控制器
- CU(Control Unit):控制单元,控制器的核心,分析指令,给出控制信号;
- IR(Instruction Register):指令寄存器,存放当前正在执行的指令
- PC(Program Counter):程序计数器,存放下一条指令的地址,有自动加1的功能。
程序执行过程
完成一条指令的步骤:取指令->分析指令->执行指令
- 根据PC取指令:(PC)->MAR
- 分析指令:M(MAR)->存储体->MDR,(MDR)->IR
- 取指令结束,PC自动+1指向下一条指令
- 分析指令:OP(IR)->CU,取IR中的操作码到CU
- 执行指令,不同的指令具体步骤不一样
计算机软件
软件分为应用软件和系统软件:
- 应用软件是为了解决某个应用领域的问题而编制的程序;
- 系统软件负责管理硬件资源,并向上层应用程序提供基础服务;
三个级别的语言:
- 机器语言
- 汇编语言
- 高级语言
计算机无法识别高级语言,对应的有三种翻译程序:
- 汇编程序:将汇编语言翻译为机器语言程序
- 解释程序:将源程序中的语句直接按照执行顺序翻译为机器指令
- 编译程序:将高级语言翻译为汇编或者机器语言程序
软件在硬件上的逻辑功能是等价的,同一个功能既可以用硬件实现,也可以用软件实现。硬件实现的性能高但成本高,软件实现的成本低但性能低。
指令集体系结构(ISA--Instruction Set Architecturn):软件和硬件之间的界面。设计计算机系统的ISA,就是要定义一台计算机可以支持哪些指令,以及每条指令的作用是什么,每条指令的用法是什么。
层次结构
- 微程序机器层,由硬件直接执行微指令
- 传统机器语言层,执行二进制机器指令
- 操作系统层,向上提供广义指令
- 汇编语言层,提供符号语言,用汇编程序翻译乘机器语言程序
- 高级语言层,面向用户,用编译程序翻译成汇编语言程序
下层是上层的基础,上层是下层的扩展。
源程序到可执行文件
- 预处理阶段:预处理器(cpp)对源程序中以#字符开头的命令进行处理
- 编译阶段:编译器(ccl)对预处理后的源程序进行编译,生成汇编语言源程序
- 汇编阶段:汇编器(as)将汇编语言源程序翻译为机器语言指令,并打包为可重定位目标文件
- 链接阶段:链接器(ld)将多个可重定位目标文件和标准库函数合并为一个可执行目标文件
计算机性能指标
存储器性能指标
- 主存容量
主存容量表达主存储器能存储的最大容量,通常以字节(Byte)来衡量,也可以用字数\(\times\)字长(512K \(\times\) 16位)来表示。
总容量=\(存储单元个数\times存储字长bit = 存储单元个数\times存储字长\div 8 Bytes\)
主存中MAR位数反应存储单元的个数,MDR的位数就是存储字长,表示每个存储单元的大小。
假设MDR为32位,MDR为8位,则总容量为\(2^{32}\times8\)bit=4Gb.
存储容量常用单位:K(\(2^{10}\))、M(\(2^{20}\))、G(\(2^{30}\))、T(\(2^{40}\))
CPU性能指标
- CPU主频:CPU内部数字脉冲信号震荡的频率
代表每秒执行多少个时钟周期数,值越大代表一个操作所需时间越少,CPU运行速度越快
计算方法:CPU主频=\(\frac{1}{CPU时钟周期}\)
时钟周期单位:微秒、纳秒;主频单位:Hz
- CPI:执行一条指令所需要的时钟周期数
不同的指令,CPI不同;甚至相同的指令,CPI也可能发生变化。因此CPI是一个平均值。
\(CPI = \frac{时钟周期数量}{指令数量}\)
- CPU执行时间:运行一个程序所花费的时间
\(CPU执行时间=\frac{CPU时钟周期数}{主频}=\frac{指令条数\times CPI}{主频}=时钟周期数\times时钟周期\)
- MIPS:每秒执行多少百万条指令
\(MPIS=\frac{指令条数}{执行时间\times 10^6} = \frac{主频}{CPI\times 10^6}\)
- FLOPS:每秒执行多少次浮点运算
常见单位:KFLOPS(\(10^3\))、MFLOPS(\(10^6\)、百万)、GFLOPS(\(10^9\)、十亿)、TFLOPS(\(10^{12}\)、万亿)、PFLOPS(\(10^{15}\))、EFLOPS(\(10^{18}\))、ZFLOPS(\(10^{21}\))
系统整体的性能指标
- 数据通路宽带:数据总线依次所能并行传送信息的位数,指的是外部数据总线的宽度,不是CPU内部数据总线的宽度;
- 吞吐量:系统在单位时间内处理请求的数量,主要取决于主存的存取周期
- 响应时间:用户向计算机发送一个请求,到系统对该请求做出相应并获得结果所需要的等待时间
- 基准程序:用来测量计算机处理速度的一种使用程序,就是常见的跑分软件
1 | 主频高的CPU一定比主频低的CPU快吗? |