计算机系统概述
计算机常见术语简写
- 中央处理器-CPU:Central Processing Unit
- 程序计数器-PC:Program Counter
- 指令寄存器-IR:Instruction Register
- 控制单元-CU:Control Unit
- 算数逻辑单元-ALU:Arithmetic Logic Unit
- 累加器-ACC:Accumulator
- 乘商寄存器-MQ:Multiplier-Quotient Register
- 寄存器地址寄存器-MAR:Memory Adress Register
- 寄存器数据寄存器-MDR:Memory Data Register
- 主寄存器-MM:Memory Register
计算机系统层次结构
1. 计算机系统的组成
- 计算机系统的组成 = 计算机硬件 + 计算机软件
需要注意的是计算机软件中包含了系统软件+应用软件
2. 计算机的组成
计算机由运算器、控制器、存储器、输入设备及输出设备五大部分构成,现代计算机通常把运算器和控制器集成在一个芯片上,合称为中央处理器。
而在微处理器面世之前,运算器和控制器分离,而且存储器的容量很小,因此设计成以运算器为中心的结构,其他部件都通过运算器完成信息的传递。
3. 计算机硬件
1. 冯.诺依曼机基本思想
存储程序的思想奠定了现代计算机的基本结构,以此概念为基础的各类计算机称为冯.诺依曼机。
冯.诺依曼机特点:
- 采用“存储程序”的工作方式。
- 计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备5大部件组成。
- 指令和数据以同等地位存储在存储器中,形式上没有区别,但计算机应能区分它们。
- 指令和数据的特点:
- 均用二进制代码表示
- 指令由操作码和地址码组成
- 操作码指出操作的类型
- 地址码指出操作数的地址
存储程序的基本思想是:
- 将事先编制好的程序和原始数据送入主存后才能执行,
- 一旦程序被启动,就不须操作人员的干预,计算机会自动逐条执行指令,直至程序执行结束。
2. 计算机的功能部件
- 输入设备:例如鼠标,摄像头,键盘
- 输出设备:例如打印机,显示器
- 存储器:
- 主存储器(内存储器)
- 辅助存储器(外存储器)
CPU能够直接访问的存储器是主存储器,如何想要访问辅存储器,必须将辅存储器中的数据调入主存储器中。
主存储器的工作方式:按存储单元的地址进行存取这种存储方式称为按地址存取方式。
主存储器的最基本组成如图所示。存储体存放,二进制信息,1. 地址寄存器(MAR)存放访问地址,经过地址译码后找到对应的存储单元。2. 数据寄存器(MDR)由于暂存从存储器中读或写的信息,3. 时序控制逻辑用于产生存储器操作所需的各种时序信号。
存储体中包含许多存储单元,每个存储单元包含很多存储元件,每个存储元件存储一位二进制信息。存储单元存储的内容是存储字,存储字长可以是1B的或字节的偶数倍
存储体 (包含)-> 多个存储单元 (包含)-> 多个存储元件:0|1 (构成)-> 一个存储字
一个存储单元通常存储一个存储字
MAR用于寻址,其位数对应着存储单元的个数,如果MAR为10位,则有2^{10}的存储单元能够被寻找到,记为1K。
- MAR的长度与PC(程序计数器,Program Counter)的长度相等。
- MDR的长度与存储的字长相等,一般为字节的2次幂的整数倍。
MAR寻找的是存储单元\一个存储字
MDR(内存数据寄存器,Memory Data Register)的长度与存储字长相等原因
MDR(内存数据寄存器)的长度与存储字长相等是因为:
- MDR用于存储从内存中取出的数据或将要写入内存的数据。
- 存储器的基本存储单位是存储字(如8位、16位、32位或64位等)。MDR必须能够容纳一个完整的存储字,以确保数据读写的完整性。
- 若MDR长度小于存储字长,则无法一次传输完整的数据;若长度大于存储字长,则增加了硬件资源浪费。
MAR(内存地址寄存器,Memory Address Register)的长度与PC(程序计数器,Program Counter)的长度相等原因
MAR(内存地址寄存器)的长度与PC(程序计数器)的长度相等是因为:
- MAR用于存储当前访问的内存地址,PC用于存储当前或下一条指令的地址。
- 地址总线的位宽决定了系统能访问的最大内存范围。MAR和PC的长度必须与地址总线宽度匹配。
- 在取指令时,PC的值会加载到MAR,用于通过地址总线访问内存。因此,MAR和PC必须能够存储相同范围的地址。
- 这种一致性简化了硬件设计,避免了数据转换或截断的问题。
注意:MAR与MDR虽然是存储器的一部分,但是在现代的计算机中却是存在于CPU中 的;另外,Cache(高速缓存)也存于CPU中。
- 运算器
运算器是计算机的执行部件,用于进行算术运算和逻辑运算。算术运算是按算术运算规则进行的运算,如加、减、乘、除;逻辑运算包括与、或、非、异或、比较、移位等运算。
运算器的核心是算术逻辑单元(Arithmetic and Logical Unit,ALU)。运算器包含若干通用寄存器,用于存储操作数和中间结果,如累加器(ACC)、乘商寄存器(MQ)、操作数寄存器(X)、变址寄存器(IX)、基址寄存器(BR)等,其中前 3 个寄存器是必须具备的。
运算器中的核心是ALU , 必备的寄存器是MQ、X、ACC
运算器内还有程序状态寄存器(PSW),也称标志寄存器,用于存放 ALU 运算得到的一些标志信息或处理机的状态信息,如结果是否溢出、有无产生进位或借位、结果是否为负等。
- 控制器
控制器是计算机的指挥中心,由其“指挥”各部件自动协调地进行工作。控制器由程序计数器(PC)、指令寄存器(IR)和控制单元(CU)组成。
-
PC 用来存放当前欲执行指令的地址:
- 具体自动加 1 的功能(这里的“1”指一条指令的长度),即自动形成下一条指令的地址。它与主存的 MAR 之间有一条直接通路。
-
IR 用来存放当前的指令,其内容来自主存的 MDR:
- 指令中的操作码 OP(IR) 送至 CU,用以分析指令并发出各种微操作命令序列;而地址码 Ad(IR) 送往 MAR,用以取操作数。
一般将运算器和控制器集成到同一个芯片上,称为中央处理器(CPU)。CPU 和主存储器共同构成主机, 而除主机之外的其他硬件装置(外存、I/O 设备等)统称为外部设备,简称外设。
- 各个部件运行的逻辑
PC 提供当前待执行指令的地址,地址通过内部连接或总线送至 MAR,同时 PC 增加以指向下一条指令。-> 内存通过地址总线接收 MAR 中的地址,取出对应指令,通过数据总线传送到 MDR。-> MDR 将指令传递至 IR(指令寄存器),CU 解码 IR 中的指令,将其分解为操作码(OP)和地址码(Ad)。-> CU 将操作码(OP)送至控制单元,生成相应的微操作信号,通过控制总线发送指令。 -> CU 根据指令中的寻址方式,对地址码(Ad)进行处理(如基址、偏移量计算等),计算得到的最终地址送入 MAR,指示操作数的内存地址。-> 内存通过 MAR 指定的地址返回操作数,并通过数据总线传送至 MDR。-> MDR 根据指令类型,将操作数送至累加器(ACC),或直接送入 ALU,CU 提供相应的控制信号。-> ALU 接收操作数和 CU 的控制信号进行运算,运算结果存入累加器(ACC),或通过 MDR 和数据总线写回内存(由 MAR 提供目标地址)。 -> 运算完成后,ALU 更新状态标志位(如溢出、进位、零标志等),这些状态被存入 PSW。-> 若需写回结果,MAR 提供目标地址,MDR 将数据通过总线传输至内存或加载至目标寄存器。
补充
CPU 和主存之间通过一组总线相连,总线中有地址、控制和数据 3 组信号线。MAR 中的地址信息会直接送到地址线上,用于指向读/写操作的主存储单元;控制线中有读/写信号线,指出数据是从 CPU 写入主存还是从主存读出到 CPU。根据是读操作还是写操作来控制 MDR 中的数据是直接送到数据线上还是将数据线上接收的数据收到 MDR 中。
4. 计算机软件
1. 系统软件和应用软件
软件按其功能分类:系统软件和应用软件
-
系统软件主要有:操作系统(OS)、(Mysql)数据库管理系统(DBMS)、语言处理程序、分布式软件系统、网络软件系统、标准库系统、服务性程序等。
-
应用软件:常见的IDE,开发工具,APP都是
2. 三个级别的语言
-
机器语言:即二进制代码语言,需要程序员记忆二进制指令,是计算机唯一可直接识别和执行的语言。
-
汇编语言:用助记符代替二进制指令,便于记忆和理解,但需通过汇编程序将其转为机器语言才能执行。
-
高级语言:如C、C++、Java等,便于编程人员设计和解决问题,需通过编译器或解释器转为机器语言后运行。
翻译过程分类:
- 汇编程序:将汇编语言转为机器语言。
- 解释程序:边解释边执行源代码。
- 编译程序:将高级语言编译成可执行的机器语言程序。
5. 计算机系统的层次结构
- 第1级:硬件层
- 直接执行微指令,是计算机的物理基础。
- 第2级:传统机器语言层
- 由硬件支持,使用机器指令系统,由微程序解译硬件指令。
- 第3级:操作系统机器层(混合层)
- 由操作系统程序实现。操作系统程序是由机器指令和广义指令组成的,这些广义指令是为了扩展机器功能而设置的,是由操作系统定义和解释的软件指令,所以这一层也称混合层
- 第4级:汇编语言层
- 使用符号化指令编程,通过汇编器转换为低级指令。
- 第5级:高级语言层
- 提供用户友好的编程语言,需通过编译器转化为低级语言。
- 第3~5层称为虚拟机,每一层的虚拟机都是不关心下层如何运行,只需要按照规则使用下层即可,种层次化设计大大简化了程序设计和系统开发,提高了灵活性和效率
- 纯硬件没有软件的机器称为裸机
6. 计算机系统的工作原理
- 存储程序的工作方式
“存储程序“工作方式规定,程序执行前,需要将程序所含的指令和数据送入主存,一旦程序被启动执行,就无须操作人员的干预,自动逐条完成指令的取出和执行任务。
程序执行前,先将程序第一条指令的地址存放到PC中,取指令时,将PC的内容作为地址访问主存。在每条指令执行过程,都需要计算下条将执行指令的地址,并送至PC。若当前指令为顺序型指令,则下条指令地址为PC的内容加上当前指令的长度;若当前指令为转跳型指令,则下条指令地址为指令中指定的目标地址。当前指令执行完后,根据PC的值到主存中取出的是下条将要执行的指令,因而计算机能周而复始地自动取出并执行一条一条的指令。
- 从源程序到可执行文件
在计算机中编写的C语言程序,都必须被转换为一系列的低级机器指令,这些指令按照一种称为可执行目标文件的格式打好包,并以二进制磁盘文件的形式存放起来。
以UNIX系统中的GCC编译器程序
-
预处理阶段预处理器(cpp)对源程序中以字符#开头的命令进行处理,例如将#include命令后面的.h文件内容插入程序文件。输出结果是一个以.i为扩展名的源文件hello.i。
-
编译阶段:编译器(ccl)对预处理后的源程序进行编译,生成一个汇编语言源程序hello.s。汇编语言源程序中的每条语句都以一种文本格式描述了一条低级机器语言指令。
-
汇编阶段:汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成一个称为可重定位目标文件的hello.o,它是一种二进制文件,因此用文本编辑器打开会显示乱码.
-
链接阶段:链接器(Id)将多个可重定位目标文件和标准库函数合并为一个可执行目标文件,或简称可执行文件。本例中,链接器将hello.o和标准库函数printf所在的可重定位目标模块printf.o合并,生成可执行文件hello。最终生成的可执行文件被保存在磁盘上。
-
指令执行进程的描述
可执行文件代码段是由一条一条机器指令构成的,指令是用0和1表示的一串0/1序列,用来指示CPU完成一个特定的原子操作。例如:取数指令从存储单元中取出一个数据送到CPU的寄存器中,存数指令将CPU寄存器的内容写入一个存储单元,ALU指令将两个寄存器的内容进行某种算术或逻辑运算后送到一个CPU寄存器中,等等。指令的执行过程在第5章中详细描述。下面以取数指令(送至运算器的ACC中)为例来说明,其信息流程如下:
-
取指令:PC->MAR->M->MDR->IR
- 根据PC取指令到IR,将PC的内容送MAR,MAR中的内容直接送地址线,同时控制器将读信号送读/写信号线,主存根据地址线上的地址和读信号,从指定存储单元读出指令,送到数据线上,MDR从数据线接收指令信息,芥传送到IR中。
-
分析指令:OP(IR)->CU
- 指令译码并送出控制信号。控制器根据IR中指令的操作码,生成相应的控制信号,送到不同的执行部件。在本例中,IR中是取数指令,因此读控制信号被送到总线的控制线上。
-
执行指令:Ad(IR)->MAR->M->MDR->ACC
-
取数操作。将IR中指令的地址码送MAR,MAR中的内容送地址线,同时控制器将读信号送读/写信号线,从主存中读出操作数,并通过数据线送至MDR,再传送到ACC中。
-
每取完一条指令,还须为取下条指令做准备,计算下条指令的地址,即(PC)+1->PC。
-
注意:(PC)指程序计敏器PC中存放的内容PC->MAR应理解为(PC)->MAR,即程序计数器中的值经过数据通路送到MAR,也即表示数据通路时括号可省略(因为只是表示数据流经的途径,而不强调数据本身的流动)但运算时括号不能省略,即(PC)+1->PC不能写为PC+1->PC,当题目中(PC)->MAR的括号未省略时,考生最好也不要省略。
计算机的性能指标
1. 计算机的主要性能指标
1. 字长
字长是指计算机进行一次整数运算(即定点整数运算)所能处理的二进制数据的位数,通常与CPU的寄存器位数、加法器有关。因此,字长一般等于内部寄存器的大小,字长越长,数的表示范围越大,计算精度越高。计算机字长通常选定为字节(8位)的整数供。
2. 数据
通路带密数据通路带宽是指数据总线一次所能并行传送信息的位数。这里所说的数据通路宽度是指外部数据总线的宽度,它与CPU内部的数据总线宽度.(内部寄存器的大小)有可能不同。
注意:各个子系统通过数据总线连接形成的数据传送路径称为数据通路.
3. 主存容量
主存容量是指主存储器所能存储信息的最大容量,通常以字节来衡量,也可用字数x字长(如512Kx16位)来表示存储容量。其中,MAR的位数反映了存储单元的个数,MDR的位数反映了存储单元的字长。例如,MAR为16位,表示2^{16}=65536,即此存储体内有65536个存储单元(可称为64K内存,1K=1024),若MDR为32位,表示存储容量为64Kx32位。
4. 运算速度
-
吞吐量和响应时间
-
吞吐量:指系统在单位时间内处理请求的数量。它取决于信息能多快地输入内存,CPU能多快地取指令,数据能多快地从内存取出或存入,以及所得结果能多快地从内存送给一台外部设备。几乎每步都关系到主存,因此系统吞吐量主要取决于主存的存取周期。
-
响应时间:指从用户向计算机发送一个请求,到系统对该请求做出响应并获得所需结果的等待时间。通常包括CPU时间(运行一个程序所花费的时间)与等待时间(用于磁盘访问、存储器访问、IO操作、操作系统开销等的时间)。
-
-
主频和CPU时钟周期
- 主频(CPU时钟频率):机器内部主时钟的频率,是衡量机器速度的重要参数。对于同一个型号的计算机,其主频越高,完成指令的一个执行步骤所用的时间越短,执行指令的速度越快。例如,常用CPU的主频有1.8GHz、2.4GHz、2.8GHz等。
-
CPU时钟周期:通常为节拍脉冲或T周期,即主频的倒数,它是CPU中最小的时间单位,执行指令的每个动作至少需要1个时钟周期,
注意:CPU时钟周期=1/主频,主频通常以Hz(赫典)为单位,1Hz表示每秒1A,
-
CPI(Cycle Per Instruction),即执行一条指令所需的时钟周期数。
- 不同指令的时钟周期数可能不同,因此对于一个程序或一台机器来说,其CPI指该程序或该机器指令集中的所有指令执行所需的平均时钟周期数,此时CPI是一个平均值。
-
CPU执行时间,指运行一个程序所花费的时间。
-
\text { CPU 执行时间 }=\mathrm{CPU} \text { 时钟周期数/主频 }=(\text { 指令条数 } \times \mathrm{CPI}) / \text { 主频 }
-
上式表明,CPU的性能(CPU执行时间》取决于三个要素:(1)主频(时钟频率);(2)每条指令执行所用的时钟周期数(CP1);(3)指令条数。
-
-
MIPS(Million Instructions Per Second)
定义:每秒执行的百万条指令数。
计算公式为:
其中:
主频:CPU 时钟频率(单位:Hz)。
CPI:每条指令平均时钟周期数(Cycles Per Instruction)。
- MFLOPS, GFLOPS, TFLOPS 等
这些指标用来衡量浮点操作性能,表示每秒执行的浮点运算次数(浮点数操作/秒)。常见单位:
- MFLOPS:每秒百万浮点操作数。
- GFLOPS:每秒十亿浮点操作数。
- TFLOPS:每秒一万亿浮点操作数。
计算公式:
单位换算:
-
MFLOPS(Million Floating-point Operations Per Second),即每秒执行多少百万次浮点运算。
- 1 \mathrm{MFLOPS}=10^6 浮点操作/秒
-
GFLOPS(Giga Floating-point Operations Per Second),即每秒执行多少十亿次浮点运算。
- 1 \mathrm{GFLOPS}=10^9 浮点操作/秒
-
TFLOPS(Tera Floating-point Operations Per Second),即每秒执行多少万亿次浮点运算。
- 1 \mathrm{TFLOPS}=10^{12} 浮点操作/秒
-
此外1 PFLOPS =10^{15} 浮点操作/秒,1 \mathrm{EFLOPS}=10^{18} 浮点操作/秒
注意点
-
性能评估:
- MIPS 的高低可能受到指令集架构影响,因为不同指令集的复杂性不同。
- FLOPS 更适用于衡量科学计算、图形处理等领域的浮点运算性能。
-
单位前缀换算:
- K 表示 10^3, M 表示 10^6, G 表示 10^9, T 表示 10^{12} 。
注意:在揣述存储容量、文件大小等时,K、M、G、T通常用2的幂次表示,如1Kb=2^{10}b:在描述诵玄、频率茵时,K、M、G、T通常用10的幂次表示,如1kb/s=10^3b/s.通常前者用大写的K,后者用小写的k,侄其他前缀均为大写,表示的含义取决于所用的场景。
5. 基准程序
基准程序(Benchmarks)是专门用来进行性能评价的一组程序,能够很好地反映机器在运行实际负载时的性能
6. 字、字长、机器字长、指令字长、存储守长的区别和联系是什么
字、字长、机器字长、指令字长、存储守长的区别和联系是什么?在通常所说的“某16位或32位机器“中,16、32指的是字长,也称机器字长。所谓字长。通常是指CPU内部用于蔚数运算的数据通路的宽度,因此字长等于CPU内部用于整数运算的运算器位数和通用寄存器宽度,它反映了计算机处理信息的能力。字和字长的概念不同。字用来表示被处理信息的单位,用来度量数据类型的宽度,如x86机器中将一个字定义为16位。
-
指令字长:一个指令字中包含的二进制代码的位数。
-
存储字长:一个存储单元存储的二进制代码的长度。
指令字长一般取存储字长的整数倍,若指令字长等于存储字长的2倍,则需要2个访存周期来取出一条指令;若指令字长等于存储字长,则取指周期等于机器周期。
早期的存储字长一般与指令字长、字长相等,因此访问一次主存便可取出一条指令或一个数据。随着计算机的发展,指令字长、字长都可变,但必须都是字节的整数倍。