软考中级软件设计师高频考点:总线带宽计算与中断DMA数据传送方式真题详解(附历年真题·百度网盘)
🎯所属考纲模块:专题一 计算机体系结构与硬件系统(考点 05:总线与中断系统)
🏷️考查题型:上午综合知识单选题(1~2 分),偶有计算题
📌核心知识点:总线分类与总线带宽三要素计算、总线仲裁方式、中断响应全过程与中断向量、DMA 与中断的五大差异、DMA 三种传送方式
💻实操验证环境:Python 3.10+(文内附总线带宽与 DMA 传输开销的可执行计算脚本)
本文核心知识点目录
- 软考中级软件设计师高频考点:总线带宽计算与中断DMA数据传送方式真题详解(附历年真题·百度网盘)
- 一、 总线的分类与三组信号线
- 两个必背结论
- 二、 总线带宽的三种考法
- 计算公式
- 三种典型题型
- 三、 总线仲裁:谁能先用总线
- 四、 中断系统:从请求到返回的完整链路
- 1. 中断处理的标准五步
- 2. 中断向量与中断向量表
- 3. 中断嵌套与中断屏蔽
- 4. 中断响应条件
- 五、 DMA:不经过 CPU 的数据传送
- 1. DMA 与中断的五大差异
- 2. DMA 控制器的组成
- 3. DMA 的三种传送方式
- 4. DMA 传输开销计算
- 六、 真题切片精讲
- 💡 真题切片一(总线带宽计算)
- 💡 真题切片二(中断响应顺序)
- 💡 真题切片三(DMA 特点辨析)
- 七、 代码验证:带宽与 DMA 开销计算
- 八、 易错点清单
- 附:相关真题与复习资料
在软考的"计算机硬件"板块里,总线、中断、DMA 三者经常被打包成一道概念辨析题出现。很多同学复习时会背"中断是程序控制、DMA 是硬件控制",但一到"总线带宽怎么算"“DMA 到底需不需要 CPU 参与”"中断响应时 CPU 做了什么"这类细节题,就立刻露怯。
这篇文章把总线、中断、DMA 三条线拆开讲清楚,并配一段能直接算出结果的 Python 代码,把"带宽"和"传输开销"这两个高频计算点彻底固化。
一、 总线的分类与三组信号线
总线(Bus)是计算机各部件之间传送信息的公共通路。按层次和用途,常见分类如下:
| 分类方式 | 类型 | 说明 |
|---|---|---|
| 按位置层次 | 片内总线 | 芯片内部的总线 |
| 系统总线 | 连接 CPU、内存、I/O 接口的主干总线 | |
| 通信总线 | 计算机之间或计算机与外设之间的总线(如 USB) | |
| 按传送信息 | 数据总线(DB) | 双向,宽度决定一次传送的位数 |
| 地址总线(AB) | 单向,宽度决定可寻址空间2^n | |
| 控制总线(CB) | 传送控制信号、时序信号、状态信号 |
两个必背结论
- 地址总线宽度决定寻址空间:若地址总线为
n位,则最大寻址空间为2^n个存储单元。例如 32 位地址总线最大寻址2^32 = 4GB。 - 数据总线宽度决定一次传输的数据量:32 位数据总线一次可并行传送 4 字节。
⚠️ 易错点:题目问"最大寻址空间"看地址总线,问"一次传输多少数据"看数据总线,两者不要混用。
二、 总线带宽的三种考法
总线带宽(Bus Bandwidth)指单位时间内总线上可传送的数据量,单位通常是MB/s或GB/s。
计算公式
总线带宽 = 总线宽度(字节) × 总线频率 × 每周期传送次数其中:
- 总线宽度:数据总线位数 ÷ 8(换算成字节);
- 总线频率:总线时钟频率;
- 每周期传送次数:普通总线为 1;若采用双沿传输(DDR)则为 2。
三种典型题型
题型一:基础带宽计算
某总线数据线宽度为 32 位,总线时钟频率为 66MHz,每个时钟周期传送 1 次数据,则总线带宽为( )。
A. 66MB/s B. 132MB/s C. 264MB/s D. 528MB/s
解析:
总线宽度 = 32 / 8 = 4 字节 总线带宽 = 4 × 66MHz × 1 = 264MB/s答案:C
题型二:双沿传输
若上题总线采用双沿传输(每个时钟周期的上升沿和下降沿各传送一次),则带宽翻倍为
528MB/s。
题型三:给出传输总量求时间
在带宽为 264MB/s 的总线上传输 1MB 数据,理想情况下需要约( )。
1MB ÷ 264MB/s ≈ 3.79ms
三、 总线仲裁:谁能先用总线
当多个主设备(CPU、DMA 控制器、I/O 处理器)同时请求总线时,需要仲裁机制决定使用权。常见方式:
| 仲裁方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 链式查询 | 请求信号沿链路逐级传递,离仲裁器近的优先级高 | 结构简单、线少 | 优先级固定、故障敏感 |
| 计数器定时查询 | 仲裁器用计数器轮询各设备编号 | 优先级可灵活改变 | 需要额外地址线 |
| 独立请求 | 每个设备有独立的请求线和响应线 | 响应快、优先级灵活 | 控制线多、成本高 |
按仲裁器的分布,又可分为集中式仲裁和分布式仲裁。软考以概念辨析为主,记住"链式简单但慢、独立请求快但贵"即可。
四、 中断系统:从请求到返回的完整链路
1. 中断处理的标准五步
中断请求 → 中断判优 → 中断响应 → 中断服务 → 中断返回中断响应是硬件自动完成的部分,顺序非常固定:
- 关中断:清除中断允许标志 IF,防止响应过程被打断;
- 保存断点:把当前 PC(下一条指令地址)和程序状态字 PSW 压栈;
- 识别中断源:通过中断向量(或中断类型号)确定是哪个设备发出的请求;
- 取中断向量:从中断向量表中取出对应中断服务程序的入口地址;
- 转中断服务程序执行。
中断服务程序执行完毕后,通过中断返回指令恢复断点和现场,开中断,继续原程序。
2. 中断向量与中断向量表
- 中断向量:中断服务程序的入口地址(有的体系是入口地址 + 程序状态字);
- 中断向量表:集中存放所有中断向量的内存区域,通常位于内存低地址端;
- 中断类型号:CPU 用来查表的索引,
向量地址 = 中断向量表基址 + 中断类型号 × 每项字节数。
🔑 记忆:中断向量是"入口地址",中断向量表是"入口地址的目录"。
3. 中断嵌套与中断屏蔽
- 中断嵌套:高优先级中断可以打断低优先级中断的服务程序;
- 中断屏蔽字:通过设置屏蔽位,有选择地允许或禁止某些中断源;
- 中断优先级:一般由硬件排队器决定,I/O 设备越高速、越实时,优先级越高。
4. 中断响应条件
CPU 响应中断必须同时满足:
- 有中断请求;
- CPU 处于开中断状态(IF = 1);
- 当前指令执行完毕(不是每条指令中间都能响应);
- 没有更高级别的中断请求。
五、 DMA:不经过 CPU 的数据传送
DMA(Direct Memory Access,直接存储器存取)的核心思想是:让专门的 DMA 控制器接管总线,在主存与外设之间直接搬运数据,整个传输过程不经过 CPU。
1. DMA 与中断的五大差异
| 对比项 | 中断方式 | DMA 方式 |
|---|---|---|
| 数据传送控制者 | CPU 执行中断服务程序 | DMA 控制器硬件 |
| 数据是否经过 CPU | 经过(CPU 参与搬运) | 不经过 |
| CPU 干预时机 | 每次传送都要干预 | 只在开始和结束时干预 |
| 适用场景 | 随机事件、低速设备 | 高速块设备(磁盘、网卡) |
| 传输速度 | 较慢(有程序开销) | 快(硬件直传) |
🔑 一句话:中断是"CPU 亲自动手",DMA 是"CPU 派个助手自己搬"。
2. DMA 控制器的组成
一个典型的 DMA 控制器包含:
- 内存地址寄存器(MAR):存放数据在主存中的起始地址;
- 字计数器(WC):记录还需传送的字数,减到 0 表示传输结束;
- 数据缓冲寄存器:暂存传送中的数据;
- 控制/状态寄存器:存放控制命令和状态信息。
3. DMA 的三种传送方式
| 传送方式 | 工作机制 | 特点 |
|---|---|---|
| 停止 CPU 访存 | DMA 传输期间 CPU 不能访问主存 | 控制简单,但 CPU 效率低 |
| 周期挪用(周期窃取) | DMA 在每个存储周期结束时"偷"一个周期 | 兼顾 CPU 与 DMA,最常用 |
| 交替访问 | CPU 与 DMA 交替使用存储周期 | 效率高,但硬件复杂 |
4. DMA 传输开销计算
DMA 并非完全零开销:每次传送一个字(或一个数据块)都要占用一个存储周期,同时还要付出总线请求、响应的时间。
例:某系统采用周期挪用方式,每个存储周期为 0.5μs,DMA 每次传送 4 字节,现需传输 4KB 数据,则 DMA 占用总线的时间约为:
传送次数 = 4KB / 4B = 1024 次 占用时间 = 1024 × 0.5μs = 512μs
若题目再给出"CPU 每 1μs 需要访存一次",就可以进一步算出 DMA 对 CPU 的访存影响比例(0.5/1 = 50%的周期被挪用)。
六、 真题切片精讲
💡 真题切片一(总线带宽计算)
某计算机总线的数据线宽度为 16 位,总线时钟频率为 100MHz,每个时钟周期传送 1 次数据,则该总线的带宽为( )。
A. 100MB/s B. 200MB/s C. 400MB/s D. 800MB/s
解题步骤:
- 数据线 16 位 = 2 字节;
- 带宽 = 2 × 100MHz × 1 = 200MB/s。
正确答案:B
💡 真题切片二(中断响应顺序)
在中断响应过程中,CPU 首先完成的操作是( )。
A. 保存断点 B. 关中断 C. 识别中断源 D. 转中断服务程序
解题步骤:
- 中断响应的第一步是关中断,防止在保存现场的过程中被新的中断打断;
- 随后依次是保存断点、识别中断源、取中断向量并转服务程序。
正确答案:B
💡 真题切片三(DMA 特点辨析)
以下关于 DMA 方式的叙述中,错误的是( )。
A. DMA 方式下数据传送不经过 CPU
B. DMA 方式适用于高速块设备的成批数据传送
C. DMA 方式下每传送一个数据都需要 CPU 执行一次中断服务程序
D. DMA 控制器需要包含内存地址寄存器和字计数器
解题步骤:
- A、B、D 都是 DMA 的标准特征;
- C 错,DMA 的特点是不需要 CPU 逐次干预,CPU 只在传输开始前初始化和传输结束后处理,逐次中断是中断方式的做法。
正确答案:C
七、 代码验证:带宽与 DMA 开销计算
defbus_bandwidth(data_bits:int,freq_mhz:float,per_cycle:int=1)->float:"""总线带宽,返回 MB/s。data_bits 为数据总线位数,per_cycle 为每周期传送次数"""bytes_per_transfer=data_bits/8returnbytes_per_transfer*freq_mhz*per_cycledefdma_bus_time(total_bytes:int,bytes_per_transfer:int,cycle_us:float)->float:"""DMA 占用总线时间(μs),按"每次传送占用一个存储周期"计算"""times=total_bytes/bytes_per_transferreturntimes*cycle_usdefdma_cpu_ratio(dma_cycle_us:float,cpu_mem_interval_us:float)->str:"""DMA 周期挪用对 CPU 访存的影响比例"""ratio=dma_cycle_us/cpu_mem_interval_us*100returnf"DMA 占用约{ratio:.1f}% 的访存周期"if__name__=="__main__":# 32 位 @ 66MHz,单沿print("32bit/66MHz/单沿 =",bus_bandwidth(32,66),"MB/s")# 264# 32 位 @ 66MHz,双沿print("32bit/66MHz/双沿 =",bus_bandwidth(32,66,2),"MB/s")# 528# 4KB 数据,每次 4B,存储周期 0.5μsprint("DMA 占用时间 =",dma_bus_time(4096,4,0.5),"μs")# 512print(dma_cpu_ratio(0.5,1.0))输出与手算结果一致,可以直接用来验证真题答案。
八、 易错点清单
- 地址总线 ≠ 数据总线:前者决定能访问多大空间,后者决定一次传多少数据。
- 总线带宽单位换算:位数先除以 8 换成字节,再乘频率。
- 双沿传输要乘 2,题目若说"每个时钟周期传送 2 次"同理。
- 中断响应第一步是关中断,不是保存断点。
- 中断向量是入口地址,中断向量表是入口地址的集合。
- DMA 不需要逐次中断,CPU 只在传输前后干预。
- 周期挪用是"偷"一个存储周期,不是停止 CPU。
附:相关真题与复习资料
本文涉及的总线带宽、中断系统与 DMA 传送专项历年真题解析已归档,需要可自取:
百度网盘: https://pan.baidu.com/s/1SwVEmITKHveCupjP_VH7pA 提取码: rk02 备用通道: https://pan.quark.cn/s/bd0eb7dd5673