6.1 总线基本概念
6.1.1 总线定义与特点
总线:一组共享的信息传输线,实现多个部件之间的数据交换。
分时:同一时刻只允许一个设备向总线发送信号,其余发送设备等待。
共享:多个设备可以在不同时刻发送;接收端可以同时接收总线上的相同信息。
6.1.2 总线分类
1)按位置(功能)分类
片内总线:芯片(CPU)内部总线,连接片内寄存器、ALU。
系统总线:CPU 外部,连接 CPU、主存、I/O 接口;分为数据线、地址线、控制线。
通信总线(外部总线):计算机和其他外部系统之间通信。
2)按数据传输方式
串行总线:逐位顺序传送;适合远距离;多数通信总线为串行。
并行总线:多位同时传输;缺点:长线传输存在串扰,各位信号不同步到达;适合近距离;多数系统总线为并行。
高频条件下,并行总线串扰严重,速率不一定高于串行总线。
3)按时序控制
同步总线:统一时钟,时钟节拍内完成总线操作。
异步总线:无统一时钟,依靠请求、应答握手信号完成通信。
6.1.3 系统总线三种结构
单总线结构:CPU、主存、I/O 全部挂接同一组系统总线;主存与 I/O 统一编址。缺点:全部设备争抢同一总线,系统传输效率低。
双总线结构:将系统总线拆分为独立的主存总线、I/O 总线,把低速I/O设备剥离至I/O总线,避免和高速主存、CPU争抢总线资源。
优点:大幅提升系统整体工作效率;
缺点:两类总线之间需要通道(专用处理器)完成数据转接,增加硬件成本。
三总线结构
主存总线:CPU ↔ 主存
I/O 总线:CPU ↔ 外设
DMA 总线:主存 ↔ 高速外设(DMA 专用通路)
6.1.4 总线性能指标
总线宽度:数据总线根数,一个总线周期同时传输的二进制位数。
总线带宽:单位时间总线上传输的数据位数,代表传输速率。
信号线数:地址线 + 数据线 + 控制线的总和。
总线复用:一根信号线分时传输多种信号;典型:地址、数据线复用。
总线负载:总线上可挂载的设备数量,负载能力有限。
总线时钟频率 / 时钟周期:互为倒数;总线时钟周期是总线的基础时间单位。
总线传输周期(总线周期):完成一次主存 / I/O 端口访问的完整时间,包含若干总线时钟周期。
6.1.5 总线事务、主设备、从设备
总线事务:一对设备之间,从请求总线到完成数据交换的完整操作序列。
主设备:获得总线控制权,发起传输请求的设备(CPU、DMA 控制器)。
从设备:响应主设备,被动完成通信的设备。
一个总线传输周期内,只能有一个主设备,仅和一个从设备通信。
总线事务五个阶段:
总线请求:主设备发出使用总线申请
总线仲裁:多个请求时,仲裁逻辑选出获得总线控制权的设备
设备寻址:主设备把从设备地址、命令送上总线
数据传输:主从设备完成数据交互
总线释放:主设备释放总线,撤出总线信息
猝发(突发)传送:只发送首地址,连续传输内存中一批连续地址单元的数据;相比普通传输效率更高。
6.1.6 总线通信(总线定时)
同步通信:同步定时,统一时钟,所有操作严格对齐时钟节拍。
异步通信:无公共时钟,依靠请求、应答握手信号;分为三种互锁方式
不互锁:请求、应答信号各自独立撤销,不需要等待对方信号。
半互锁:主设备发出请求,必须收到从设备应答之后,才撤销请求。
全互锁:主发请求 → 从发应答 → 主收到应答后再给从一个确认,双方信号互相约束。
半同步通信:既有统一时钟;又可以通过等待信号适配不同速度模块。
分离式通信:总线周期拆分为两个子周期
- 主模块一获得总线,发送地址 + 命令,释放总线(第一段事务结束)。
- 从模块内部开始准备数据;总线空闲,主模块二可以使用总线发起新的总线请求。
- 从模块准备完毕后,主模块一需要重新竞争总线,拿到总线之后,完成数据的传送(第二段事务)。
6.2 I/O 设备基础
6.2.1 I/O 设备按信息交换单位分类
字符设备:以字符为单位传输;不可寻址;中断驱动;例:键盘。
块设备:以数据块为单位;可随机寻址读写;速率高;支持 DMA;例:硬盘、光盘。
6.2.2 显示器
屏幕尺寸:对角线长度,单位英寸。
分辨率:屏幕像素总数 = 横向像素数 × 纵向像素数;像素即屏幕光点。
刷新:光点显示时间很短,需要重复扫描维持画面。
刷新频率:每秒扫描屏幕完整画面次数,常见 60‑120Hz。
VRAM 显示存储器(显存):DRAM 实现,存储屏幕每一个像素色彩信息。
显存容量 = 分辨率 × 灰度级位数
显存带宽 = 显存容量 × 帧频(刷新频率)
灰度级:黑白代表明暗;彩色代表颜色等级;灰度级越高图像越真实。
6.2.3 外存储器
磁盘存储器:容量大;读出不破坏数据;数据可长期保存。
SSD 固态硬盘:由固态电子存储芯片阵列制成,分为两类存储介质:①基于闪存;②基于 DRAM。读写速度远优于传统机械磁盘,无机械结构,稳定性更强。
6.3 I/O 接口
I/O 接口:主机与外设之间的逻辑部件,协调主机与外设通信。
主机侧:并行传输;
外设侧:可串行 / 并行(USB 等)。
区分:I/O 接口是整套逻辑部件;I/O 端口是 CPU 可直接访问的寄存器。一个接口可包含多个 I/O 端口,每个端口分配独立地址。
6.3.1 I/O 接口四大功能
数据缓冲:解决主机与外设速度差异,缓冲数据。
数据格式转换:串‑并转换、模数 A/D、数模 D/A 转换。
控制与定时:接收系统总线控制、定时信号;协调主机与外设动作时序,管控通信。
错误与状态检测:状态寄存器保存设备状态、出错信息;CPU 读取状态寄存器获知外设情况。
状态寄存器、控制寄存器访问时间错开,数据流错开,可以合并为状态‑控制寄存器。
6.3.2 I/O 接口分类
按传送方式:并行接口、串行接口(外设侧)
按主机控制方式:程序查询接口、中断接口、DMA 接口
按可编程性:可编程接口(程序修改接口功能)、不可编程接口
6.3.3 I/O 端口编址方式
① 独立编址(I/O 映射)
主存地址空间、I/O 端口地址空间相互独立,地址编号可以重叠,必须使用专用I/O指令才能访问I/O端口。
优点:I/O端口占用地址线少,寻址速度快;访存指令与I/O指令完全区分,程序逻辑清晰、便于调试检查。
缺点:CPU需要单独配置存储器、I/O设备两套读写控制信号,总线控制逻辑复杂,需要配套专用硬件保护机制。
② 统一编址(存储器映射)
I/O端口与主存单元共用同一个地址空间,无需专门的I/O指令,直接使用常规访存指令即可访问I/O端口。
优点:可复用所有访存指令的寻址方式和硬件保护机制,CPU访问I/O设备灵活便捷,无需额外硬件设计。
缺点:I/O端口会占用一部分主存地址空间,缩减可用的主存寻址范围。
6.4 程序中断方式
6.4.1 中断系统基本功能
每条指令执行结束,取下一条指令前,检测中断请求。
中断判优:多中断源同时请求,优先响应高优先级。
保护断点与现场:PC、PSW、通用寄存器等。
中断屏蔽机制:控制哪些中断可以被嵌套打断。
6.4.2 程序中断产生背景
程序查询方式中,CPU与外设串行工作,CPU长期空闲等待外设完成操作,资源利用率极低。
中断方式完美解决该问题:CPU启动外设工作后,无需原地等待,可继续执行其他程序,实现CPU与外设并行工作;外设完成数据传输后,主动向CPU发送中断请求,CPU响应中断,跳转执行中断服务程序处理数据,处理完成后返回原程序继续执行。
6.4.3 中断判优的两种实现
软件查询判优:CPU响应中断后,按照预设优先级顺序,依次轮询中断请求寄存器的状态,先查询到的中断源优先响应。
优点:硬件结构简单,无需专用判优电路;修改中断优先级仅需调整软件查询顺序,灵活度高。
缺点:串行查询耗时久,中断响应速度慢,效率较低。
硬件判优(向量中断):依靠专用硬件判优线路和优先级编码器,自动识别同时生效的中断请求,筛选出优先级最高的中断源,输出对应中断类型号,直接定位中断服务程序入口地址,无需软件轮询。响应速度极快,是主流计算机采用的判优方式。
通用中断优先级排序(考研必考):DMA请求 > I/O中断请求;高速设备 > 低速设备;实时设备 > 普通设备;输入设备 > 输出设备。
6.4.4 中断响应条件
存在中断源发出中断请求;
CPU 处于开中断;
当前指令执行完毕,进入中断周期。
中断隐指令:硬件自动执行,无对应的机器指令;保存断点,把中断服务程序入口送入 PC。
6.4.5 获取中断服务程序入口地址
软件方法:类似软件查询,查到中断源后跳转执行对应服务程序;入口地址由程序员指定;缺点:查询时间长。
硬件方法(中断向量法):硬件自动得到中断向量;中断向量存放中断服务程序入口;全部中断向量存放在中断向量表。
6.4.6 现场保护与恢复
旧现场:PC、PSW、中断屏蔽字,硬件自动压栈。
新现场:从向量表取出中断服务程序入口、新状态字;通用寄存器由软件指令压栈保护。
恢复现场:保护现场逆过程。
6.4.7 多重中断(中断嵌套)
条件:
CPU 进入中断服务程序后,要开中断;
出现优先级更高的中断请求,CPU立即暂停当前中断服务程序,转去处理更高优先级的中断,实现中断嵌套。
6.4.8 中断屏蔽技术
可屏蔽中断:开中断才响应,可以通过程序屏蔽。
非屏蔽中断:关中断状态下依然可以响应;电源掉电、异常属于非屏蔽中断。
每个中断源配备独立的mask屏蔽触发器,用于控制中断是否生效。
主程序运行,同时来了 1#、3#、4# 三个中断请求。
同时收到 1、3、4 中断请求硬件响应优先级,先响应1#,进入 1# 中断服务程序。 1# 的屏蔽字屏蔽 2、3、4,所以 3#、4# 被挡住,不能打断 1#。
1# 执行结束返回主程序。 现在还挂着未处理的 3#、4# 请求,硬件响应 3#,进入 3# 服务程序。 3# 屏蔽字:开放 1#、2#,屏蔽 4#。 此时来了2# 中断,2# 处理优先级高于 3#,于是2# 打断 3#,CPU 切到 2# 中断服务。
2# 运行期间,屏蔽 3#、4#;允许 1#。2# 执行完,回到被打断的 3# 继续执行。
3# 执行完毕,回到主程序。现在剩下 4# 未处理,进入 4# 服务程序。 4# 全部开放,期间来了 1# 中断,1# 打断 4#;1# 运行完,回到 4#,4# 结束回到主程序。
中断服务程序执行完,不是一定回到最原始主程序;而是回到 “被它打断的那一层程序”,在中断返回的那一瞬间,才会检查有没有新中断请求。
两个优先级区分
中断响应优先级:硬件排队电路决定,不可修改。
中断处理优先级:多重中断实际执行顺序,通过中断屏蔽字动态修改,被称为软排队器。
6.5 DMA(直接存储器存取)
6.5.1 DMA 产生背景
中断方式:CPU 与外设可以并行,但是中断服务程序内部的数据搬运阶段 CPU 需要参与;高速块设备会频繁触发中断,CPU 开销大。
DMA:依靠 DMA 控制器硬件,建立外设 ↔ 主存直接通路;数据块传输阶段完全不需要 CPU 干预。
适用:块设备(硬盘等)。
CPU 只参与:预处理(启动)、后处理(善后)。
主存开辟缓冲区,存放外设交互的数据。
6.5.2 DMA 控制器功能
接收外设 DMA 请求,向 CPU 发出总线请求。
获取总线控制权。
设置主存起始地址、传输计数、读写方向。
输出读写控制信号,完成硬件数据传输。
数据块传输完毕,发出 DMA 完成信号。
6.5.3 DMA 与主存三种分时访问方式
停止 CPU 访存:DMA 请求到来,直接停止 CPU 访问主存,DMA 独占总线直到传输结束。
交替分时访存:CPU 工作周期切分成时间片,CPU、DMA 交替使用主存。
周期挪用法(周期窃取):CPU与DMA分时复用主存,按需占用、互不冲突。三种工作场景:①CPU不访存:DMA直接占用总线访问主存,无冲突、无等待;②CPU正在访存:DMA等待当前存取周期结束,再占用总线传输数据;③CPU与DMA同时请求访存:DMA优先级高于CPU,强行窃取当前周期,避免高速外设数据丢失。
6.5.4 DMA 完整工作三阶段
预处理:CPU 程序完成设置主存首地址、传输长度、读写方向,启动 DMA;之后 CPU 继续运行其他程序。
数据传输:DMA 控制器硬件完成,CPU 不介入。
后处理:DMA 传输结束,向 CPU 发中断;CPU 在指令结束后的中断周期响应中断,执行中断服务程序做校验、善后。
预处理全部由 CPU 完成(对应传送参数设置、寻道、查找扇区,CPU 配置 DMA 控制器的各项参数并下发 I/O 命令)尚未进行真正的数据搬运;
之后进入 DMA 传送阶段,扇区就绪后由 DMA 控制器接管总线,完成磁盘与内存之间大批量数据的直接高速搬运,CPU 可以并行执行其他程序;
数据传送结束后进入后处理阶段,DMA 向 CPU 发出中断请求,CPU 执行中断服务程序完成数据校验、错误处理、状态清理等善后工作。
6.5.5 DMA 与程序中断对比
DMA:仅预处理、后处理需要 CPU 介入;数据搬运硬件完成;中断方式数据搬运需要 CPU 执行服务程序。
DMA 请求优先级高于中断请求。
DMA 适合大批量块数据;中断适合字符设备。