计算机体系结构 2月19日 – 天气:阴转小雪
1. 冯诺依曼计算机体系结构
冯诺依曼将计算机分为了五大部分,分别是:
- 控制器:主要负责协调指令到执行
- 运算器:负责算数和逻辑运算
- 存储器:负责存储在指令执行过程中产生的一些中间变量
- 输出输出设备:用于接收用户输入并将结果显示给用户
冯诺依曼计算机体系结构由一下特点:
-
冯·诺依曼计算机主要由五大部件组成,分别是:运算器、控制器、存储器、输入设备和输出设备;
-
冯诺依曼体系结构的指令和数据均采用二进制码表示;
-
指令和数据以同等地位存放于存储器中,均可按地址寻访;
-
指令由操作码和地址码组成,操作码用来表示操作的性质,地址码用来表示操作数所在存储器中的位置;
-
指令在存储器中按顺序存放,通常指令是按顺序执行的,特定条件下,可以根据运算结果或者设定的条件改变执行顺序;
-
机器以运算器为中心,输入输出设备和存储器的数据传送通过运算器。
其中,控制器和运算器成为CPU,而CPU+主存成为主机。
2. 主存储器
主存储体有三部分组成:
- 存储体:实际保存内容的记忆体
- MAR:地址寄存器。
- MDR:数据寄存器。
还有一些其他的概念需要知道:
- 存储单元:用于存储一串二进制的数据,是寻址的最小单元
- 存储字长:存储单元中二进制数据的位数
- 存储字:存储单元中存储的二进制的数据
- 机器字长:CPU一次所能处理的最大二进制位数
其中,MAR的位数决定了存储单元的长度。比如一个长度为4的MAR,那么对应的存储单元的个数就是16个。
MDR决定了每一个存储单元可以存储的二进制的位数。因此对于一个长度为16位的MDR,所对应的存储字长位16。
3. CPU
CPU主要由运算器和控制器组成,下面是运算器的一些基本结构:
- ACC:累加器
- MQ:乘商寄存器,用于在乘除运算时存放操作数和运算结果
- X:通用操作数寄存器,用于存放操作数
- ALU:算数逻辑单元,使用复杂电路实现算数和逻辑运算
- DR:数据缓存寄存器
- PSW:程序状态字,用于保存程序运行的状态
对于控制器来说,主要组成由:
- CU:控制单元,负责分析指令并给出控制信号
- IR:指令寄存器,存放当前正在执行的指令
- PC:程序计数器,存放下一条待执行的指令,有自动加一的功能
- AR:地址寄存器,存放当前CPU所要访问的内存地址
- ID:指令译码器,对操作码进行分析
4. Flynn分类法
主要就是记住不同类型的英文缩写。重点掌握第三条的特点是仅仅理论存在,在实际上不可行。
5. 指令系统
指令指的是计算机执行某一种操作的命令,是计算机运行的最小单位。
一台计算机中所有的指令的集合称为指令系统,也叫做指令集。
指令建立了计算机软件与硬件之间沟通的桥梁。
一条指令由两部分构成:
- 操作码:指定要进行的操作,可以是加减运算,系统中断等等
- 地址码:指定要操作的对象的,可能是对象本身,也可能是对象在内存中或寄存器中的存储的地址
指令可以没有地址码,但是必须有操作码。比如系统中断指令就不需要地址码
寻找指令的方式由叫做寻址方式,分为一下两步:
- 指令寻址:指令寻址就是从PC中获取下一条需要执行的指令
- 数据寻址:当分析完毕需要执行的指令时,如果指令中包含了操作码,则需要根据操作码去获取到真正要操作的数据,这一过程称之为地址寻址。
常见的七种寻址方式:
在计算机科学中,寻址方式是指计算机处理器中用于获取内存地址的方法。以下是七种常见的寻址方式:
-
立即寻址(Immediate Addressing):指令中包含要操作的数据本身的值,而不是该数据的地址。例如,
ADD #5
意味着将寄存器中的值与立即数5相加。- 实际操作的数据即不存储在内存中,也不存储于内存中。
- 不访问内存和寄存器。
-
直接寻址(Direct Addressing):指令中包含要操作数据的内存地址。例如,
LOAD 500
意味着从内存地址500中加载数据到寄存器中。- 实际操作的数据存储于内存中。
- 访问一次内存。
-
间接寻址(Indirect Addressing):指令中包含一个地址,该地址存储了要操作数据的内存地址。例如,
LOAD (500)
意味着从存储在地址500处的内存中加载数据到寄存器中。- 实际操作的数据存储于内存中。
- 访问两次内存。第一次取地址,第二次根据地址找到操作数。
-
寄存器寻址(Register Addressing):指令中包含一个寄存器的编号,该寄存器中存储了要操作的数据。例如,
LOAD R1
意味着将寄存器R1中的数据加载到另一个寄存器中。- 实际操作的数据存储于寄存器中。
- 只访问一次寄存器。
-
寄存器间接寻址(Register Indirect Addressing):指令中包含一个寄存器的编号,该寄存器中存储了要操作数据的内存地址。例如,
LOAD (R1)
意味着从寄存器R1中存储的内存地址中加载数据到寄存器中。- 实际操作的数据存储于内存中。
- 需要首先访问寄存器获取到内存地址。然后根据内存地址获取操作数。
-
相对寻址(Relative Addressing):指令中包含一个相对于程序计数器(PC)的偏移量,该偏移量用于计算要操作数据的地址。例如,
JUMP 10
意味着将程序控制转移到当前位置加上10的地址处。- 实际操作的数据存储于内存中。
- 需要访问一次内存
-
基址寻址(Base Addressing):指令中包含一个基址寄存器的编号和一个偏移量,该偏移量用于计算要操作数据的地址。例如,
LOAD 10(R1)
意味着从存储在寄存器R1中的基址加上偏移量10处加载数据到寄存器中。- 实际操作的数据存储于内存中。
- 需要首先从寄存器中获取基址,根据基址和偏移量获取内存地址。然后访问内存根据地址取出操作数。
一般计算机的指令系统主要分为了CISC和RISC,下面是一个简答的对比:
6. 流水线计算题
7. 存储系统的层次结构
根据距离CPU的远近程度,划分了一下层级:
其中cache的作用是为了解决CPU和主存不一致的问题而建立的。
需要注意的问题
- cache的作用是为了解决CPU和主存不一致的问题而建立的。
- cache中存储的是内存中的部分数据
- CPU先去cache中搜索数据,如果存在则直接返回。如果不存在,则到内存中搜索。同时将搜索到的数据存放到cache中