此内容是对《计算机组成原理(第三版)》一书的知识点总结和一些个人理解,为个人后续快速回顾所用,如有错误,感谢指出。
第一篇 概论
第一章 计算机系统概论
1.1 计算机系统简介
1.1.1 计算机的软硬件概念
计算机系统由“硬件”和“软件”两部分组成。
硬件是指计算机的实体部分;软件则由具有各类特殊功能的程序组成。计算机性能的好坏取决于“软”“硬”件功能的总和。
计算机的软件通常分为系统软件和应用软件两类。
系统软件(系统程序)主要用来管理整个计算机系统,监视服务,使系统资源得到合理调度,高效运行。它包括:标准程序库、语言处理程序、操作系统、服务程序、数据库管理系统、网络软件等;应用软件(应用程序):是用户根据任务需要所编制的各种程序。
1.1.2 计算机系统的层次结构
一共6层,第一、二层属于硬件层;第三至六层属于软件层,操作系统层作为软硬件的接口,起到承上启下的作用。由下到上,下层为上层提供支撑,上层是下层的功能扩展;每层都有独立指令集与实现方式 。
1.第一层(最底层)微程序机器层
属于硬件层级,是计算机最底层的结构。该层级使用微指令编程,由硬件电路直接执行微指令,通过微指令控制计算机硬件的电路运行,是所有指令执行的基础。
2.第二层 传统机器语言层
面向CPU的机器指令层级,使用0、1组成的二进制机器语言。该层级的机器指令,由底层微程序机器层的微程序进行解释执行,可直接被CPU识别与运行。
3.第三层 操作系统层(OS)
承上启下的核心过渡层级。向下可管理、调度计算机硬件资源,向上为上层语言和应用程序提供统一调用接口。该层级依托机器语言实现功能,统一软硬件的运行规则。
4.第四层 汇编语言层
面向程序员的低级符号语言,摒弃了二进制代码。使用ADD、SUB、MUL、DIV等符号代表加、减、乘、除等运算,用符号标识存储单元地址。编写好的汇编程序,需要通过汇编程序翻译为机器语言程序后才能执行。
5.第五层 高级语言层
日常编程使用的程序设计语言,如C、Java、Python等,语法简洁、可读性强、脱离硬件底层。高级语言程序无法直接运行,需要通过编译或解释程序,翻译、转换为底层可识别的低级语言代码执行。
6.第六层(最顶层)应用语言层(应用程序层)
面向普通用户的最高层级,无需编程基础。以各类实用应用软件为主,例如浏览器、办公软件、设计工具等,依托下层所有层级的软硬件支撑运行,直接服务于用户的各类使用需求。
1.1.3 计算机组成和计算机体系结构
计算机体系结构:计算机系统的属性(即概念性结构与功能特性),如传统机器的属性,包括指令集、数据类型、存储器寻址技术、I/O机理等,大都属于抽象的属性。站在不同计算机系统的层次结构看到的计算机属性也是各不相同的。
计算机组成:是指如何实现计算机体系结构所体现的属性,某种方式或者操作。
两台机器指令系统相同时,只能认为它们具有相同的计算机体系结构,它们的计算机组成不一定相同。
1.2 计算机的基本组成
1.2.1+2 冯·诺依曼计算机和现代计算机的特点
1.冯·诺依曼计算机特点
- 计算机由运算器、存储器、控制器和输入输出设备五大部件组成。
- 指令和数据以同等地位存放于存储器内,并可按地址寻访。
- 指令和数据均用二进制表示。
- 指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置。
- 指令在存储器内按顺序存放。在特定条件下,可根据运算结果或根据设定的条件改变执行顺序。
- 机器以运算器为中心,输入输出设备与存储器间的数据传输通过运算器完成。
2.计算机五大部件的功能
- 运算器用来完成算术运算和逻辑运算(与或非),并将运算的中间结果暂存在运算器内。
- 存储器用来存放数据和程序。程序:全部指令。指令:其中一步操作。
- 控制器用来控制、指挥程序和数据的输入、运行以及处理运算结果。
- 输入设备将人们熟悉的信息形式转换为为机器能识别的信息形式。
- 输出设备可将计算机运算结果转换为人们熟悉的信息形式。如打印机输出。
计算机的五大部件在控制器的统一指挥下,有条不紊的工作。运算器和控制器通常被统称为中央处理器,也就是CPU。输入输出设备简称为I/O设备。
现代计算机可认为由三大部分组成:CPU,I/O设备及主存储器。CPU与主存储器合起来又可以称为主机,I/O设备又可称为外部设备。结构如下图所示。
请注意,冯·诺依曼计算机是以运算器为中心,而现代计算机已转化为以存储器为中心。
1.2.3 计算机的工作步骤
1.上机前的准备
(1)建立数学模型
(2)确定计算方法
(3)编制解题程序
指令=操作码+地址码
2.计算机的工作过程
(1)主存储器
主存储器(简称主存/内存)包括存储体、各种逻辑部件及控制电路等。存储体由许多存储单元组成,每个存储单元又包含若干个存储元件(存储基元/存储元),每个存储元件能寄存一位二进制代码“0”或“1”。
一个存储单元可存储一串二进制代码,称这串二进制代码为一个存储字,这串二进制代码的位数称为存储字长。
存储体-存储单元-存储元件之间的关系可以这样理解,主存是一个单身公寓社区,存储体是里面的一栋供社区里的人居住的楼房,存储单元是其中的一层,而存储元件是这一层里面的一间房子,且只能住一个人。房间里住人可以看做“1”,不住人可以看做为“0”。每层的总住户数可以看做存储字长, 而每一层也都有自己的编号,可以看做是存储单元的标号,也就是存储单元的地址号。
主存的工作方式就是按存储单元的地址号来实现对存储字各位的存入、写入、取出和读出。
①指令和数据都是由存储单元地址号来反映,取一条指令和取一个数据的操作完全可视为是相同的,这样就可以使用一套控制线路来完成两种截然不同的操作。
②主存中必须配备两个寄存器MAR和MDR。
MAR(存储器地址寄存器):用来存放预访问的存储单元的地址,其位数对应存储单元的个数。(eg.MRA为10位,则有2的10次方个存储单元。)
MDR(存储器数据寄存器):用来存放从存储体某单元取出的代码或者准备往某存储单元存入的代码,其位数与存储字长相等。
区分存储单元的个数和存储字长的区别:
1.存储单元个数,相当于问一个抽屉一共有多少个格子(数量)。它决定这个存储器寻址范围(最多能访问多少个单元)。
由地址线位数决定它的数量,如果地址线 有n根,则存储单元个数为2的n次方个。
2.存储字长,每一个格子里面能存多少个大小相同的物品(格子的宽度)。它决定每次读/写操作,能取出多少位数据。
eg.存储字长16位,每一个存储单元里面能放16个bit位。
存储器总容量 = 存储单元个数 × 存储字长
1byte(1个字节)=8bit(8位二进制代码)例如,4字节数据就是32位二进制代码。存储字长、指令字长、数据字长必须是字节的整数倍。
(2)运算器
运算器最少包括3个寄存器(现代寄存器内部往和一个算数逻辑单元(ALU)。
三个寄存器分别是累加器(ACC)、乘商寄存器(MQ)和操作数寄存器(X)。
寄存器:临时存放数据的存储单元。
(3)控制器
操作器由程序计数器(PC)、指令寄存器(IR)和控制单元组成(CU)。
用他们来完成一条指令操作的三个阶段:PC-取指,IR-分析,CU-执行。
(4)I/O
I/O子系统包括各种I/O设备(输入/输出设备)及其相应的接口。每一种I/O设备都由I/O接口与主机联系,它接收CU发出的各种命令,并完成相应的操作。
1.3计算机硬件的主要技术指标
1.3.1 机器字长
机器字长是指CPU一次能处理的数据位数通常与CPU的寄存器位数有关。字长越长,数的表示范围越大,精度也越高。
机器字长对于机器的运算速度和硬件的造价都有影响。
1.3.2 存储容量
存储器的存储容量包括主存容量和辅存容量。主存容量CPU可以直接访问,储存容量需要调入主存后再访问。
存储容量 = 存储单元个数 × 存储字长
计算如下图。
MDR:存储器数据寄存器
MAR:存储器地址寄存器
1.3.3 运算速度
吉普森法:综合考虑每条指令的执行时间以及它们在全部操作中所占的百分比
IPS:每秒多少条指令
MIPS:每秒₋₋₋百万条指令,用来衡量CPU指令执行速度
CPI:每条指令所需要的时钟周期
FLOPS:每秒浮点运算次数,是衡量CPU/GPU算力的指标