I/O 控制方式

发布于:2025-07-26 ⋅ 阅读:(11) ⋅ 点赞:(0)

        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 传块快,通道管多台! ✨


网站公告

今日签到

点亮在社区的每一天
去签到