一、计算机系统概述

计算机层次结构

硬件系统和软件系统共同构成了完整的计算机系统。

计算机硬件

冯诺依曼机

冯诺依曼提出了存储程序的概念:将指令以二进制代码的形式事先输入计算机的主存储器,计算机自动逐条执行指令直至程序结束。

冯诺依曼计算机特点:

  • 运算器、存储器、控制器、输入设备、输出设备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的功能。

程序执行过程

完成一条指令的步骤:取指令->分析指令->执行指令

  1. 根据PC取指令:(PC)->MAR
  2. 分析指令:M(MAR)->存储体->MDR,(MDR)->IR
  3. 取指令结束,PC自动+1指向下一条指令
  4. 分析指令:OP(IR)->CU,取IR中的操作码到CU
  5. 执行指令,不同的指令具体步骤不一样

计算机软件

软件分为应用软件和系统软件:

  • 应用软件是为了解决某个应用领域的问题而编制的程序;
  • 系统软件负责管理硬件资源,并向上层应用程序提供基础服务;

三个级别的语言:

  1. 机器语言
  2. 汇编语言
  3. 高级语言

计算机无法识别高级语言,对应的有三种翻译程序:

  1. 汇编程序:将汇编语言翻译为机器语言程序
  2. 解释程序:将源程序中的语句直接按照执行顺序翻译为机器指令
  3. 编译程序:将高级语言翻译为汇编或者机器语言程序

软件在硬件上的逻辑功能是等价的,同一个功能既可以用硬件实现,也可以用软件实现。硬件实现的性能高但成本高,软件实现的成本低但性能低。

指令集体系结构(ISA--Instruction Set Architecturn):软件和硬件之间的界面。设计计算机系统的ISA,就是要定义一台计算机可以支持哪些指令,以及每条指令的作用是什么,每条指令的用法是什么。

层次结构

  1. 微程序机器层,由硬件直接执行微指令
  2. 传统机器语言层,执行二进制机器指令
  3. 操作系统层,向上提供广义指令
  4. 汇编语言层,提供符号语言,用汇编程序翻译乘机器语言程序
  5. 高级语言层,面向用户,用编译程序翻译成汇编语言程序

下层是上层的基础,上层是下层的扩展。

源程序到可执行文件

  1. 预处理阶段:预处理器(cpp)对源程序中以#字符开头的命令进行处理
  2. 编译阶段:编译器(ccl)对预处理后的源程序进行编译,生成汇编语言源程序
  3. 汇编阶段:汇编器(as)将汇编语言源程序翻译为机器语言指令,并打包为可重定位目标文件
  4. 链接阶段:链接器(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
2
3
4
5
6
7
8
9
10
主频高的CPU一定比主频低的CPU快吗?
不一定,速度还和CPI有关


AB两个CPU的平均CPI相同,那么A一定更快吗?
不一定,还需要看指令系统,假如A不支持乘法指令B支持,那么A执行乘法时就需要多次加法来实现乘法操作


基准成宿执行的越快说明机器性能越好吗?
不一定,基准程序中的语句存在频度差异,运行结果不能完全说明问题。