重温一下考研时对于计算机结构的学习,脑海里能立刻想到的好像也就是8086了~~
计算机结构
硬件结构
冯诺依曼结构
提出“存储程序”概念,将指令以二进制形式先输入计算机的主存储器,然后按其在存储器中的首地址执行程序中的第一条指令,以后就按照该程序的规定顺序执行其他执行。
- 指令和数据以同等地址存储与存储器,可按地址寻访
- 指令由操作码和地址码组成
- 以运算器为中心,不光执行数据处理,还要执行数据交换
现代计算机
以存储器为中心
硬件部件
存储器:
- 存储单元:每个存储单元存放一串二进制代码
- 存储字(word):存储单元中二进制代码的组合
- 存储字长:单元中二进制代码的位数
- 存储元:存储二进制的电子元件,每个存储元可存1bit
存储器的基本组成:
主存储器、MAR、MDR、存储体。
MAR:存储器地址寄存器反映存储单元的个数
MDR:存储器数据寄存器反映存储字长
运算器:
实现算数运算(加减乘除)+逻辑运算
3个寄存器+1个核心部件(ALU)
控制器:
控制器的基本组成
- 完成一条指令的步骤:取指令(PC)、分析指令(IR)、执行指令(CU)
- PC:存放当前欲执行指令的地址,具有计数功能(PC)+1→PC
- IR:保存当前要执行的指令
- CU:控制单元,分析指令,给出控制信号
主机完成一条指令的过程
实例:
高级语言:y=a*b+c; 对应底层的硬件操作:
层次结构
系统总线
总线的基本概念
总线是连接各个部件的信息传输线,是各个部件共享的传输介质。
总线上信息的传送的两种方式:串行和并行
总线结构
单总线
不支持并发传输
双总线结构以CPU为中心
以存储器为中心的双总线结构
三总线结构
四总线结构
总线的分类
按总线功能
片内(片上)总线:芯片内部的总线,如apb,ahb,axi
系统总线:计算机各部件之间的信息传输线
片间总线:
微处理器和各外围芯片(如存储器RAM、ROM)之间通信的总线,属于芯片级互联
系统总线:
soc中各插件板和系统板之间的总线,属于插件板级的互联
- 数据总线:双向与机器字长、存储字长有关
- 地址总线:单向与存储地址、I/O地址有关,由CPU发出
- 控制总线:有出有入,存储器读、存储器写、总线允许、中断确认
通信总线(外设总线)
如IEEE488,USB,RS232
用于计算机系统之间或计算机系统与其他系统(如控制仪表、移动通信等)之间的通信,也被称为外部总线
- 传输方式:串行通信总线、并行通信总线。
也可以简单分为片内总线,和外设总线。soc中常用片内总线AMBA,外设总线如IIC,SPI,PCIE
按数据传输格式
串行:如i2c
优点:成本低,传输距离长,节省布线空间
缺点:数据发送和接收的时候,要拆卸和装配,考虑串行和并行转换的问题
并行:如apb
优点:时序逻辑简单,电路实现容易
缺点:布线;成本;串扰,无法持续提高工作频率;
按时序控制方式:同步和异步
总线的性能指标
比较关键的两个性能指标
注意:总线并不是每个时钟都进行数据传送
总线仲裁
基本概念
- 主设备 (模块):多个主设备同时竞争总线控制权,以某种方式选择一个主设备优先获得总线控制权称为总线仲裁
- 从设备(模块):响应从主设备发来的总线命令
总线判优控制的两种方式
集中式
链式查询
“总线忙”信号的建立者是获得总线控制权的设备
优先级由离总线控制器的距离决定,离的越近优先级越高
计数器定时查询
独立请求方式
总线部件发送总线占用请求,在控制器中排队
总线控制器按一定优先次序决定批准哪个请求并回复响应信号
分布式
无需中央仲裁,每个模块都有自己的仲裁器和仲裁号
发送总线请求时共享仲裁号到仲裁总线,每个仲裁器将从仲裁总线上的仲裁号和自己的仲裁号进行比较;
如果仲裁总线上的优先级高,则总线请求不予响应,并撤销仲裁号;
否则仲裁号保留,设备获得使用权
总线传输
同步定时方式:
采用同一的时钟信号来协调发送和接收方的传送定时关系;
时钟产生相等的时间间隔,每个间隔构成一个总线周期。一个总线周期中,发送方和接收方可进行一次数据传输
异步定时方式:tcp
无统一时钟,没有固定时间间隔,完全依靠双方相互制约的握手信号来实现定时控制
半同步通信:
统一时钟的基础上,增加一个“等待”响应信号wait
分离式通信
对总线空闲周期进行利用
总线标准
CPU
功能:
- 指令控制:完成取指令,分析指令和执行指令的操作,即程序的顺序执行。
- 操作控制:CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。
- 时间控制:对各种操作加以时间上的控制。
- 数据加工:对数据进行算数和逻辑运算。
- 中断处理:对计算机运行过程中出现的异常情况及特殊请求进行处理。
控制器的工作原理:
根据指令操作码、指令的执行步骤(微命令序列)和条件信号来形成当前计算机各部件要用到的控制信号。计算机整机各硬件系统在这些控制信号的控制下协同运行,产生预期的执行结果。
- 运算器部件通过数据总线与内存储器、输入输出设备传送数据。
- 输入输出设备通过接口电路与总线相连接。
- 内存储器、输入输出设备从地址总线接收地址信息,从控制总线得到控制信号,通过数据总线与其他部件传送数据。
- 控制器部件从数据总线接收指令信息,从运算器部件接收指令转移地址,送出指令地址到地址总线,还要向系统中的部件提供它们运行所需要的控制信号。
控制器的主要功能
- 从主存中取出一条指令并指出下一条指令在主存的位置。
- 对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作。
- 指挥并控制CPU、主存、输入输出之间的数据流动方向。
CPU的控制方式
- 同步控制方式
系统有一个统一的时钟,所有的信号均来自这一统一的时钟信号。
控制电路简单,但运行速度慢。 - 异步控制方式
不存在基准时标信号,各部件按自身固有的速度工作,通过应答方式进行联络。
运行速度快,但控制电路比较复杂。 - 联合控制方式
介于同步、异步之间的一种折中。对各种不同的指令的微操作实行大部分采用同步控制,小部分采用异步控制的办法。
硬布线控制单元设计步骤:
- 列出微操作命令的操作时间表。根据微操作节拍安排,列出微操作命令的操作时间表(包含各个机器周期,节拍下的每条指令完成的为操作控制信号)。
- 进行微操作信号综合。对微操作信号进行综合分析、归类,根据微操作时间表可写出各微操作控制信号的逻辑表达式并进行适当的简化。
- 画出微操作命令的逻辑图。根据逻辑表达式可画出对应每个微操作信号的逻辑电路图,并用逻辑门电路实现。
硬布线和微程序控制器的特点
- 硬布线控制器的特点:
速度快(控制器的速度取决于电路延迟),一旦设计完成后,就不能通过其他额外修改添加新功能(将控制部件视为专门产生固定时序控制信号的逻辑电路,用最少元件和取得最高速度作为设计目标)。 - 微程序控制器:
具有规整性,灵活性,可维护性等优点,但由于微程序控制器采用了存储程序原理,所以每条指令都要从控制存储器中取一次,影响速度。
指令流水线
理想情况:
- 各阶段花费时间相同
- 每个阶段结束后能立即进入下一阶段
I/O系统
I/O接口
功能
主机和外设之间的交接界面,通过接口可以实现主机和外设之间的信息交换
- 实现主机和外设的通信联络控制
- 进行地址译码和设备选择
- 实现数据缓冲
- 信号格式的转换
- 传输控制命令和状态信息
实际接口的具体操作:
- 设备选址
- 传送命令
- 传输数据
- 反映I/O设备的工作状态
实例
cpu同外设之间的信息传送实质是对接口中的某些寄存器(即端口)进行读或写。
如传送数据是对数据端口DBR进行读写操作。以控制外设输入为例
- cpu通过地址线定位外设
- 接口接收地址后,设备选址电路判断是否是此设备
- 接口向cpu反馈设备状态
- 若设备已就绪,cpu发送控制命令
- 命令寄存器暂存命令并转换为外设的控制信号
- 接口向外设发送控制命令
- 外设向接口输入数据
- 传输结束后外设向接口发送完成输入状态信号
- 接口封信状态标记,向cpu反馈输入完成(中断请求)
- cpu收到中断信号,向接口返回中断响应
- 接口向cpu发送中断类型号,告诉cpu之前执行的是什么操作
- cpu接收中断类型号,取走接口放到数据线上的数据
接口和端口
I/O方式
中断方式对cpu查询等待的改进:cpu查询等待阶段,在外设准备期间,cpu可以继续执行主程序
DMA方式对cpu查询等待的改进:cpu控制的部分,交由DMA控制器
程序查询方式
中断方式
程序中断是指咋计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,cpu暂时终止先行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后cpu又自动返回到现行程序的断点处,继续执行原程序
中断流程:
中断请求
中断源向cpu发送中断请求
中断响应
响应中断条件,对于多个中断源发送的信号,进行中断判优
中断处理
中断隐指令:保存断点等
中断服务程序。
中断标记请求
每个中断源设置请求标记触发器INTR,当其状态为“1时”,表示中断源有请求。
这些触发器可组成中断请求标记寄存器,该寄存器可以集中在cpu中,也可以分散在各个中断源中。
对于外中断,cpu是在统一的时刻,即每条指令执行阶段结束前向接口发出中断查询信号,以获取I/O的中断请求,也就是说,cpu响应中断的时间是在每条指令执行阶段的结束时刻
cpu响应中断必须满足以下3条件:
- 中断源中有中断请求
cpu允许中断即开中断
一条指令执行完毕,无跟紧迫任务
中断判优:
软件 or 硬件
硬件排队器:可以在cpu,也可以在中断源中
软件:查询程序
中断隐指令
- 关中断:保护中断现场(cpu主要寄存器中的内容),期间不被新的中断打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕后能接着执行
- 保存断点:将程序计数器pc保存起来,可以存入堆栈,也可以存入指定单元
- 引出中断服务程序。取出中断服务程序的入口地址并传送给程序计数器(PC)
中断服务程序
保护现场:
保存程序断点(pc),隐指令完成
保存通用寄存器和状态寄存器内容
中断服务
主体部分,执行中断代码
恢复现场
取指令,把之前保存的信息送回寄存器
关中断
多重中断
也称嵌套中断