news 2026/8/11 17:20:49

计算机组成原理(25) 第六章 - iO方式1-程序查询方式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
计算机组成原理(25) 第六章 - iO方式1-程序查询方式

程序查询方式(Programmed I/O, PIO)

程序查询方式是最基础、最简单的 I/O 控制方式,核心逻辑是CPU 通过软件指令主动轮询外设状态,直到外设准备好数据后,再执行读写操作。整个过程中,CPU 全程参与,无任何硬件自动干预。

一、 核心原理与关键前提

1. 核心思想

CPU 与外设的交互完全由用户程序或系统程序控制,CPU 不断执行读状态寄存器指令,判断外设是否处于“就绪” 状态

  • 若外设未就绪(如打印机正在打印、键盘无输入),CPU 继续循环查询,原地等待
  • 若外设就绪(如打印机缓冲区空、键盘有按键按下),CPU 执行读/写数据寄存器指令,完成一次数据传输。

2. 关键硬件前提

外设必须提供两个核心寄存器,且这两个寄存器需被 CPU 寻址:

寄存器类型作用典型状态位
状态寄存器存储外设的工作状态,供 CPU 查询- 忙(BUSY):外设正在工作,不可操作- 就绪(READY):外设已准备好数据,可读写- 错误(ERROR):传输过程中出现故障
数据寄存器暂存 CPU 与外设之间传输的数据- 输入时:外设将数据写入数据寄存器,CPU 读取- 输出时:CPU 将数据写入数据寄存器,外设读取

二、 完整工作流程(以 CPU 从外设读数据为例)

程序查询方式的流程可分为3 个步骤,全程由 CPU 主导:

  1. 初始化阶段CPU 向外设发送启动命令(如启动键盘扫描、启动 ADC 采样),外设开始工作。

  2. 循环查询阶段(核心)

​ // 伪代码:程序查询方式读外设 while(1) { // 步骤1:读取外设状态寄存器 status = read(STATUS_REGISTER); // 步骤2:判断就绪位是否置位 if(status & READY_BIT) { break; // 外设就绪,退出循环 } // 外设未就绪,继续循环等待 } ​
  • 此阶段 CPU无任何其他任务可执行,完全被查询操作占用。

3. 数据传输阶段

CPU 执行数据读写指令,完成一次数据传输:

// 读取外设数据寄存器中的数据 data = read(DATA_REGISTER); // 可选:清除外设就绪位,触发外设下一次工作 write(STATUS_REGISTER, status & ~READY_BIT);

三、 优缺点分析

1. 优点

优点具体说明
硬件逻辑极简无需中断控制器、DMA 控制器等额外硬件,仅需外设提供状态 / 数据寄存器,成本极低
软件编程简单控制逻辑直观,无复杂的中断服务程序、寄存器配置,适合入门级嵌入式开发
时序完全可控CPU 主导所有操作,可精确控制数据传输的时间点,适合对时序要求简单的场景

2. 缺点

缺点具体说明
CPU 利用率极低90% 以上的时间 CPU 都在循环查询,无法执行其他任务,相当于 “原地空转”
实时性极差若外设响应慢(如低速打印机),CPU 会被长期占用,导致其他任务延迟甚至卡顿
传输效率低仅支持单字节 / 单字传输,每次传输都要经历 “查询→传输” 的完整流程,不适合大批量数据传输
CPU 负担重系统中外设数量越多,CPU 需轮询的设备越多,负担呈线性增长

四、 适用场景

程序查询方式的局限性决定了它仅适用于简单、低速、外设数量少的系统:

  1. 入门级嵌入式系统:如 51 单片机控制 LED 灯闪烁、读取单个按键状态;
  2. 低速外设的单次操作:如读取温度传感器的一个采样值、向数码管发送一个显示字符;
  3. 教学演示场景:用于讲解 I/O 控制的基本原理,帮助理解 CPU 与外设的交互逻辑。

反例:不适合硬盘读写、网卡数据收发、视频流传输等高速、大批量数据传输场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 17:19:53

Stable Diffusion模型下载器中文版完整使用指南

Stable Diffusion模型下载器中文版完整使用指南 【免费下载链接】sd-webui-model-downloader-cn 项目地址: https://gitcode.com/gh_mirrors/sd/sd-webui-model-downloader-cn 为什么选择这个下载工具 在AI绘画创作过程中,获取高质量的模型是至关重要的环节…

作者头像 李华
网站建设 2026/8/3 13:23:01

KinhDown百度网盘下载工具:提升下载效率的智能解决方案

还在为百度网盘的下载速度而苦恼吗?KinhDown作为一款专为优化百度网盘下载体验而生的工具,通过智能多线程技术和连接优化算法,让大文件下载变得轻松高效。无论你是需要下载工作资料、学习资源还是娱乐内容,这款免费工具都能为你带…

作者头像 李华
网站建设 2026/7/31 9:23:41

微信视频号直播数据捕获全攻略:wxlivespy技术解析与应用实践

微信视频号直播数据捕获全攻略:wxlivespy技术解析与应用实践 【免费下载链接】wxlivespy 微信视频号直播间弹幕信息抓取工具 项目地址: https://gitcode.com/gh_mirrors/wx/wxlivespy 在当今直播电商蓬勃发展的时代,微信视频号已成为众多商家和内…

作者头像 李华
网站建设 2026/7/15 15:45:17

虚拟机中vivado安装实战案例(VMware环境)

在虚拟机里跑Vivado?我用VMware搭了一套丝滑的FPGA开发环境 最近接手一个Zynq项目,手头没有专用工作站,又不想在主力机上折腾双系统。怎么办?干脆在 VMware Workstation 里装个Ubuntu虚拟机,把Xilinx Vivado整个搬进…

作者头像 李华
网站建设 2026/8/10 4:08:47

Windows安卓应用革命性安装方案:APK Installer开启全新移动体验

你是否曾经希望在Windows电脑上直接运行手机应用?是否厌倦了笨重的安卓模拟器?现在,一款突破性的工具彻底改变了传统安装方式,让你无需虚拟机即可轻松部署APK文件。无论是开发者测试应用,还是普通用户想在电脑上使用手…

作者头像 李华
网站建设 2026/7/19 6:19:25

anything-llm能否检测重复内容?文档去重算法实践

Anything LLM 能否检测重复内容?文档去重算法实践 在企业知识库日益膨胀、个人文档不断积累的今天,一个看似简单却极易被忽视的问题正在悄悄影响着大语言模型(LLM)问答系统的质量——重复内容泛滥。 你有没有遇到过这种情况&#…

作者头像 李华