Appearance
408 > ### 计算机组成原理 > #### 程序查询方式
一、定位信息
| 项目 | 内容 |
|---|---|
| 知识单元编号 | CO-06-05 |
| 所属章节 | 第六章 总线与I/O系统 |
| 核心主题 | 程序查询方式的工作原理、流程与特点 |
| 考试权重 | ★★☆(基础考点,常与其他I/O方式对比出题) |
| 前置知识 | CO-06-04 I/O接口 |
| 后续衔接 | CO-06-06 中断方式、CO-06-07 DMA方式 |
二、知识点讲解
2.1 程序查询方式的基本概念
程序查询方式(Programmed I/O) 又称程序控制I/O方式或轮询方式,是最基本的I/O数据传送方式。在这种方式下,CPU通过执行程序不断查询外设的状态,当检测到外设"就绪"时,CPU才执行数据传送操作。
其核心思想是:CPU主动询问,外设被动等待。CPU在整个I/O过程中始终参与,不能做其他工作。
2.2 程序查询方式的工作流程
程序查询方式的典型工作流程如下:
┌─────────────────┐
│ CPU发出设备地址 │ ← 选择要查询的设备
│ 和读/写命令 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ CPU读取状态寄存器│ ← 查询设备状态
└────────┬────────┘
│
▼
┌─────────────────┐
│ 设备就绪? │
│ 是 → 执行数据传送│
│ 否 → 继续轮询 │ ← 忙等待(Busy Waiting)
└────────┬────────┘
│
▼
┌─────────────────┐
│ 传送完成? │
│ 是 → 结束 │
│ 否 → 返回查询 │
└─────────────────┘详细步骤:
- CPU发出设备选择信号:通过地址总线发送设备地址,选中目标设备接口
- CPU发出命令字:通过控制总线发送读/写命令到接口的控制寄存器
- CPU读取状态寄存器:通过数据总线读取接口的状态寄存器内容
- 判断设备状态:检查"就绪位"(Ready)是否为1
- 若未就绪:返回步骤3继续轮询(忙等待)
- 若就绪:CPU执行数据传送(从数据缓冲寄存器读取或写入数据)
- 判断是否完成:若还有数据要传送,返回步骤3;否则结束
2.3 程序查询方式的特点
优点:
- 实现简单,不需要额外的硬件支持
- 控制逻辑简单,易于理解和编程
- 可靠性高,数据传送完全由程序控制
缺点:
- CPU利用率极低:CPU在轮询等待期间不能执行其他任务,大量时间浪费在查询状态上
- 实时性差:外设准备好后必须等待CPU查询到才能传送,不能及时响应
- 不适合多设备环境:CPU需要逐一查询各设备,设备越多,每个设备的响应延迟越大
- 不能处理紧急事件:低优先级的设备查询可能延迟高优先级设备的响应
2.4 程序查询方式的适用场景
- CPU速度远高于外设速度,且外设数量少
- 对实时性要求不高的简单系统
- 嵌入式系统中简单的I/O控制
- 作为理解其他I/O方式的基础
2.5 程序查询方式的效率分析
设:
- T_query = 一次状态查询的时间
- T_transfer = 一次数据传送的时间
- T_device = 外设准备好一次数据的时间
则 CPU 用于数据传送的时间占比为:
其中 N 是查询次数(取决于外设速度与查询速度的比值)。通常 N 很大,导致CPU效率极低。
三、记忆辅助
程序查询 = "CPU自己问":CPU主动轮询设备状态,设备准备好就传,没准备好就一直问。CPU全程参与,不能干别的。
核心缺点一句话:"CPU忙着问,没空干别的" → CPU利用率低、实时性差。
工作流程三步循环:"发命令→读状态→判断就绪",不就绪就一直循环。
与中断方式对比:程序查询是"我去找你",中断方式是"你来找我"。
四、例题精解
例题1
题目:某系统采用程序查询方式从磁盘读取数据。磁盘每次传输一个扇区(512字节),磁盘转速为7200转/分,平均寻道时间为8ms。CPU查询一次状态需要1μs,数据传送一次(1字节)需要0.5μs。求CPU读取一个扇区数据的效率(CPU用于数据传送的时间占总时间的比例)。
四步解题:
Step 1 审题:程序查询方式,读取512字节,磁盘参数已知,求CPU效率。
Step 2 知识定位:程序查询方式下,CPU在等待期间不断查询状态,效率 = 数据传送时间 / 总时间。
Step 3 计算:
磁盘等待时间(旋转延迟):
- 转速 7200转/分 = 120转/秒
- 平均旋转延迟 = 1/(2×120) ≈ 4.17ms
总等待时间(不含数据传送):
- 寻道时间 + 旋转延迟 = 8ms + 4.17ms = 12.17ms
查询次数估算:
- 等待期间查询次数 = 12.17ms / 1μs = 12170次
- 查询总时间 = 12170 × 1μs = 12.17ms
数据传送时间:
- 512字节 × 0.5μs/字节 = 256μs = 0.256ms
CPU效率 = 数据传送时间 / (查询时间 + 传送时间) = 0.256ms / (12.17ms + 0.256ms) = 0.256 / 12.426 ≈ 2.06%
Step 4 答案:CPU效率约为 2.06%,说明程序查询方式下CPU绝大部分时间在"忙等待",效率极低。
例题2
题目:某系统有两个外设A和B,采用程序查询方式进行I/O。设备A每10ms准备好一个数据,设备B每5ms准备好一个数据。CPU查询每个设备需要1μs,数据传送需要2μs。若CPU轮流查询A和B,求:(1) 设备A和设备B的最大响应延迟;(2) 这种方式有何问题?
四步解题:
Step 1 审题:两设备轮流查询,分析响应延迟。
Step 2 知识定位:程序查询方式下,设备准备好后必须等到CPU查询到它时才能传送数据。
Step 3 分析:
一个完整查询周期 = 查询A + 传送A(若就绪) + 查询B + 传送B(若就绪)
- 最坏情况(都就绪):1μs + 2μs + 1μs + 2μs = 6μs
- 最好情况(都不就绪):1μs + 1μs = 2μs
设备A的最大响应延迟 = 从A准备好到CPU下次查询A的时间
- 最坏情况:A刚好在CPU查询完A之后准备好,需要等待一个完整周期
- 最大延迟 ≈ 一个查询周期 ≈ 6μs(远小于A的10ms数据间隔,可接受)
设备B的最大响应延迟:
- 最大延迟 ≈ 6μs(同理,远小于B的5ms数据间隔)
问题分析:
- 在设备数量增加时,查询周期变长,每个设备的响应延迟增大
- 如果有100个设备,最坏情况下响应延迟可能达到几百微秒
- CPU效率随设备数量增加而降低
Step 4 答案: (1) 设备A和B的最大响应延迟均约为 6μs(一个完整查询周期) (2) 问题:设备数量增加时,查询周期变长,响应延迟增大;CPU效率进一步降低;不适合大量高速设备。
五、考情分析
| 维度 | 分析 |
|---|---|
| 出题频率 | 近10年约出现5-6次 |
| 题型 | 选择题(特点辨析)、计算题(效率分析) |
| 难度 | ★★☆(概念简单,计算需细心) |
| 考查重点 | 程序查询的工作流程;CPU效率计算;与中断方式的对比 |
| 命题趋势 | 常与中断、DMA方式对比出综合题 |
六、易错点
程序查询≠程序中断:两者都是程序控制的I/O方式,但程序查询是CPU主动轮询,中断是设备主动通知CPU。关键词区别:查询→"轮询/忙等待";中断→"中断请求/中断服务"。
CPU效率低的根源:不是因为数据传送慢,而是因为等待期间CPU在不断查询状态(忙等待),这些查询时间是"浪费"的。
查询次数的计算:查询次数 = 外设准备时间 / 单次查询时间。这个数字通常很大(上万次),是效率低的直接原因。
程序查询方式的"实时性差":不是说数据传得慢,而是说设备准备好后不能立即被CPU响应,必须等到CPU查询到它。
七、来源标注
| 来源 | 说明 |
|---|---|
| 《计算机组成原理》(唐朔飞) | 第8章 I/O系统,程序查询方式 |
| 《计算机组成原理》(蒋本珊) | 第7章 程序查询方式 |
| 408统考大纲 | 第六章 总线与I/O系统 - 程序查询方式 |
| 历年真题 | 2010/2013/2016/2019年相关题目 |