ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

软考中级软件设计师高频考点:总线带宽计算与中断DMA数据传送方式真题详解(附历年真题·百度网盘)

软考中级软件设计师高频考点:总线带宽计算与中断DMA数据传送方式真题详解(附历年真题·百度网盘)

软考中级软件设计师高频考点:总线带宽计算与中断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)传送控制信号、时序信号、状态信号

两个必背结论

  1. 地址总线宽度决定寻址空间:若地址总线为n位,则最大寻址空间为2^n个存储单元。例如 32 位地址总线最大寻址2^32 = 4GB。
  2. 数据总线宽度决定一次传输的数据量: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. 中断处理的标准五步

中断请求 → 中断判优 → 中断响应 → 中断服务 → 中断返回

中断响应是硬件自动完成的部分,顺序非常固定:

  1. 关中断:清除中断允许标志 IF,防止响应过程被打断;
  2. 保存断点:把当前 PC(下一条指令地址)和程序状态字 PSW 压栈;
  3. 识别中断源:通过中断向量(或中断类型号)确定是哪个设备发出的请求;
  4. 取中断向量:从中断向量表中取出对应中断服务程序的入口地址;
  5. 转中断服务程序执行。

中断服务程序执行完毕后,通过中断返回指令恢复断点和现场,开中断,继续原程序。

2. 中断向量与中断向量表

  • 中断向量:中断服务程序的入口地址(有的体系是入口地址 + 程序状态字);
  • 中断向量表:集中存放所有中断向量的内存区域,通常位于内存低地址端;
  • 中断类型号:CPU 用来查表的索引,向量地址 = 中断向量表基址 + 中断类型号 × 每项字节数。

🔑 记忆:中断向量是"入口地址",中断向量表是"入口地址的目录"。

3. 中断嵌套与中断屏蔽

  • 中断嵌套:高优先级中断可以打断低优先级中断的服务程序;
  • 中断屏蔽字:通过设置屏蔽位,有选择地允许或禁止某些中断源;
  • 中断优先级:一般由硬件排队器决定,I/O 设备越高速、越实时,优先级越高。

4. 中断响应条件

CPU 响应中断必须同时满足:

  1. 有中断请求;
  2. CPU 处于开中断状态(IF = 1);
  3. 当前指令执行完毕(不是每条指令中间都能响应);
  4. 没有更高级别的中断请求。

五、 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

解题步骤:

  1. 数据线 16 位 = 2 字节;
  2. 带宽 = 2 × 100MHz × 1 = 200MB/s。

正确答案:B

💡 真题切片二(中断响应顺序)

在中断响应过程中,CPU 首先完成的操作是( )。
A. 保存断点 B. 关中断 C. 识别中断源 D. 转中断服务程序

解题步骤:

  1. 中断响应的第一步是关中断,防止在保存现场的过程中被新的中断打断;
  2. 随后依次是保存断点、识别中断源、取中断向量并转服务程序。

正确答案:B

💡 真题切片三(DMA 特点辨析)

以下关于 DMA 方式的叙述中,错误的是( )。
A. DMA 方式下数据传送不经过 CPU
B. DMA 方式适用于高速块设备的成批数据传送
C. DMA 方式下每传送一个数据都需要 CPU 执行一次中断服务程序
D. DMA 控制器需要包含内存地址寄存器和字计数器

解题步骤:

  1. A、B、D 都是 DMA 的标准特征;
  2. 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))

输出与手算结果一致,可以直接用来验证真题答案。


八、 易错点清单

  1. 地址总线 ≠ 数据总线:前者决定能访问多大空间,后者决定一次传多少数据。
  2. 总线带宽单位换算:位数先除以 8 换成字节,再乘频率。
  3. 双沿传输要乘 2,题目若说"每个时钟周期传送 2 次"同理。
  4. 中断响应第一步是关中断,不是保存断点。
  5. 中断向量是入口地址,中断向量表是入口地址的集合。
  6. DMA 不需要逐次中断,CPU 只在传输前后干预。
  7. 周期挪用是"偷"一个存储周期,不是停止 CPU。

附:相关真题与复习资料

本文涉及的总线带宽、中断系统与 DMA 传送专项历年真题解析已归档,需要可自取:

百度网盘: https://pan.baidu.com/s/1SwVEmITKHveCupjP_VH7pA 提取码: rk02 备用通道: https://pan.quark.cn/s/bd0eb7dd5673
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进