当前位置: 首页 > news >正文

I/O 控制方式

        I/O 控制方式的演进目标是减少 CPU 干预,提升 I/O 与 CPU 的并行度,以下是四种方式的对比分析:

1. 程序直接控制方式(轮询)

原理

  • CPU 发送 I/O 指令后,循环查询设备状态(如while (device.busy);)。
  • 例:从磁盘读 1 字节 → CPU 不断问“好了没?”,直到设备准备好。
  • 流程图
  • CPU → 发读命令 → 轮询设备状态 → 读数据 → 继续(全程独占 CPU)

    优缺点
    ✅ 简单易实现(无硬件中断支持时可用)。
    ❌ CPU 利用率极低(大部分时间浪费在等待)。
    ❌ 设备与 CPU 串行(设备慢则 CPU 空转)。


2. 中断驱动方式

原理

  • CPU 发 I/O 指令后,转去执行其他任务(进程阻塞/换出--主动打断CPU运行请求服务,从而解放CPU)。
  • 设备就绪(如数据读入控制器),发中断通知 CPU。
  • CPU 响应中断,处理数据(从设备→内存)。
  • 流程图

 

CPU → 发读命令 → 执行其他任务 → 设备中断 → CPU 处理中断(读数据)→ 恢复进程

优缺点
✅ CPU 利用率提升(等待时不阻塞,可做其他事)。
✅ 设备与 CPU 并行(数据准备阶段 CPU 忙,完成时中断处理)。
❌ 仍以字节/字为单位处理(如读 1MB 需 1M 次中断,开销大)。
❌ 数据需经 CPU 寄存器中转(设备→CPU→内存)。


3. DMA(直接存储器存取)方式

原理

  • 硬件(DMA 控制器)接管数据块传输(如磁盘读扇区到内存)。
  • CPU 初始化 DMA(设置 MAR(内存地址)、DC(字数)、CR(命令))。
  • DMA 控制器直接操作总线,设备⇨内存(无需 CPU 干预,仅块开始/结束中断)。
  • 流程图

CPU → 发 DMA 命令(设 MAR=0x1000, DC=1024)→ DMA 读设备 → 直存内存 0x1000 → 完成中断

特点

  • 数据块传输(例:一次读 512 字节扇区)。
  • 无 CPU 中转(设备⇔内存直达)。
  • 少量 CPU 干预(仅块开始(初始化)、结束(中断处理))。

优缺点
✅ 大幅提升 I/O 速率(块传输减少中断次数,如 1MB 只需 1 次 DMA 中断 vs 1M 次中断驱动)。
✅ CPU 效率高(初始化后可继续运算)。
❌ 需专用硬件(DMA 控制器)。
❌ 灵活性受限(CPU 需指定块大小、内存位置)。


4. 通道控制方式

原理

  • 专属 I/O 处理器(通道),执行通道程序(存于内存,类似 CPU 指令)。
  • CPU 发通道指令(如“执行通道程序 0x2000,操作磁盘”)。
  • 通道独立管理多设备 I/O(例:同时读磁盘、写磁带),完成后中断。

与 DMA 对比

对比项

DMA

通道

控制粒度

块(需 CPU 告知大小、位置)

程序(通道自行决定)

设备数量

单设备(1 控制器→1 设备)

多设备(1 通道→多设备)

指令类型

简单(读、写块)

丰富(类似 CPU 指令集)

缺点

  • 最高并行度:CPU、通道、多设备可并行工作(例:CPU 计算,通道读磁盘+写网卡)。
  • ✅ 灵活(通道程序可定制复杂 I/O 逻辑)。
  • ❌ 硬件成本高(需通道处理器)。
  • ❌ 编程复杂(需写通道程序)。

核心对比表

方式

CPU 干预度

数据单位

传输路径

中断频率

适用场景

程序直接控制

高(全程轮询)

字/字节

设备→CPU→内存

无(轮询)

简单低速设备(如早期终端)

中断驱动

中(仅中断时)

字/字节

设备→CPU→内存

高(每字中断)

中低速设备(如键盘)

DMA

低(块首尾)

数据块(扇区)

设备⇨内存(直达)

低(每块中断)

高速块设备(磁盘、SSD)

通道

极低(指令级)

自定义(程序)

多设备并行

极低(程序完)

大型主机多设备并发(IBM zSeries)


总结

I/O 控制方式的进化是硬件复杂度与软件效率的平衡:

  • 简单设备(键盘)用中断驱动(性价比高)。
  • 磁盘等高速块设备用 DMA(块传输减少开销)。
  • 大型系统(服务器)用 通道(多设备并行,释放 CPU)。

        理解每种方式的数据单位CPU 干预时机硬件需求,能准确分析 I/O 性能瓶颈(如“系统中断数过高→是否该用 DMA?”)。

一句话记忆:轮询忙等待,中断省 CPU,DMA 传块快,通道管多台! ✨

http://www.dtcms.com/a/298819.html

相关文章:

  • docker部署的ragflow服务迁移 数据卷迁移
  • 内存优化:从堆分配到零拷贝的终极重构
  • Web前端:JavaScript 随机点名系统案例详解
  • 肺癌预测模型实战案例
  • C51:用DS1302时钟读取和设置时间
  • 静电释放检测误报率↓79%:陌讯多模态融合算法实战解析
  • 算法:数组part02: 209. 长度最小的子数组 + 59.螺旋矩阵II + 代码随想录补充58.区间和 + 44. 开发商购买土地
  • 2025年ASOC SCI2区TOP,无人机集群路径规划与任务分配的组合优化在多障碍战场环境中的应用,深度解析+性能实测
  • 汽车功能安全 -- TC3xx Error Pin监控机制
  • Post-Training on PAI (5): PAI-EasyDistill, PAI 自研大模型蒸馏框架
  • JAVA知识点(二):数据库
  • rk3588跑通速腾雷达RS16的ros点云读取
  • 装修进度管理系统功能对比:主流工具9选
  • Apipost:离线可用+AI全栈覆盖,国产API开发协作工具新标杆
  • HTTP响应状态码详解
  • 通过Deepseek找工作
  • java-方法的综合练习
  • 屏幕适配--像素篇
  • 100条常用SQL语句大全
  • Linux系统编程——进程
  • 两个MCU互联采集数据
  • kubesphere安装使用
  • 手写数组洗牌算法
  • Vue2 element cascader级联选择器懒加载编辑时回显数据
  • 【VLAs篇】06:从动作词元化视角谈VLA模型的综述
  • 异常(全)
  • which soffice soffice not found
  • Wordpress主题配置
  • 2025年7月24日·AI今日头条
  • KNN算法:从原理到实战全解析