# I/O 硬件基本原理

# I/O 设备的概念

I/O 就是 “输入 / 输出” ( Input/Output )

I/O 设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。

  • i 设备:鼠标、键盘、写字板、麦克风

  • o 设备:显示器、耳机

  • 输入输出设备:云盘

# I/O 设备分类

  • 传输速度:低速、中速、高速
  • 信息交换单位:块设备和字符设备
  • 共享属性:独占设备、共享设备、虚拟设备

# 设备控制器

# 概念

CPU 无法直接控制 I/O 设备的机械部件,因此 I/O 设备还要有一个电子部件作为 CPUI/O 设备机械部件之间的 “中介”,用于实现 CPU 对设备的控制,这就是 I/O 控制器

# 功能

image-20250520142258017

# 组成

image-20250520142346791


# I/O 软件基本原理

# I/O 软件层次关系

image-20250520143122256

  • 以下各项任务是在四个 I/O 软件层的哪一层完成的?

    • 为一个磁盘读操作计算磁道、扇区、磁头
    • 向设备寄存器写命令
    • 检查用户是否允许使用设备
    • 将二进制整数转换成 ASCII 码以便打印
  • 解答

    • 设备驱动程序
    • 设备驱动程序
    • 设备无关软件
    • 用户程序
  • 注意

    将系统调用参数翻译成设备操作命令的任务是由设备无关软件完成的,而不是设备驱动程序

# 设备驱动程序

# 功能

  • 将抽象 I/O 请求转换为对物理设备的请求
  • 检查 I/O 请求的合法性
  • 初始化设备
  • 启动设备
  • 发出 I/O 命令
  • 响应中断请求
  • 构造通道程序

# 特点

  • I/O 进程与设备控制器之间的通信程序
  • 驱动程序与 I/O 设备的特性紧密相关
  • I/O 控制方式紧密相关
  • 与硬件紧密相关

# 组成

  • 自动配置和初始化的子程序:检测所要驱动的硬件设备是否存在、是否正常。如果该设备正常,则对该设备及其相关的设备驱动程序需要的软件状态进行初始化。在初始化的时候被调用一次
  • 服务于 I/O 请求的子程序:调用该子程序是系统调用的结果。执行该部分程序时,系统仍认为是和调用进程属同一个进程,只是由用户态变成核心态,具有进行此系统调用的用户程序的运行环境,可在其中调用 sleep() 等与进程运行环境有关的函数。
  • 中断服务子程序:系统来接收硬件中断,再由系统调用中断服务子程序。因为设备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务子程序的时候,都带有一个或多个参数,以唯一标识请求服务的设备。

# 共性

  • 核心代码
  • 核心接口:设备驱动必须为内核提供一个标准接口
  • 核心机制与服务:可以使用标准的内核服务如内存分配、中断发送和等待队列等
  • 动态可加载:在内核模块发出加载请求时加载,不再使用时卸载
  • 动态性:若某个设备的驱动为一个空过程时,不会对系统造成危害,只是会占用少量系统内存

# I/O 控制方式

# 程序控制(轮询)方式

  • 概念

    CPU 代表进程向 I/O 模块发出指令, 然后进入忙等状态, 直到操作完成之后进程才能够继续执行

  • 工作流程、

    ① 应用程序提出了一个读数据的请求;

    ② 设备驱动程序检查设备的状态;

    ③ 如果状态正常,就给设备发出相应的控制命令;

    ④ 不断地去测试这个设备是否完成了这次执行过程实际上就是一个轮询;

    ⑤ 设备控制器完成操作,把数据送给应用程序

    ⑥ 应用程序继续进行相应的处理。

    image-20250520144407294

  • 优点:实现简单

  • 缺点:CPU 利用率低,浪费时间

# 中断驱动方式

  • 概念

    引入中断机制。由于 I/O 设备速度很慢,因此在 CPU 发出读 / 写命令后,可将等待 I/O 的进程阻塞,先切换到别的进程执行。当 I/O 完成后,控制器会向 CPU 发出一个中断信号, CPU 检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。处理中断的过程中, CPUI/O 控制器读一个字的数据传送到 CPU 寄存器,再写入主存。接着, CPU 恢复等待 I/O 的进程 (或其他进程) 的运行环境,然后继续执行

  • 工作流程

    ① 用户程序提出 I/O 请求;

    ② 设备驱动程序检查设备的状态;

    ③ 如果设备已经准备好,那么就向设备发出控制命令;

    ④ 将状态记录在设备状态表中,CPU 继续其它工作。

    ⑤ 设备完成工作后向 CPU 发中断信号,转入中断处理程序;

    ⑥ 中断处理程序发现这是一个正常地完成了控制命令的信号后,把结果提交给设备管理程序;

    ⑦ 设备管理程序会从设备状态表里查询是哪一个请求的完成;

    ⑧ 把相应的数据送到应用程序;

    ⑨ 通知应用程序可以继续执行。

    image-20250520152226160

  • 优点:在外设进行数据处理时,CPU 不必等待,可以继续执行该程序或其他程序,提高了 CPU 利用率,可以处理不确定事件。

  • 缺点:每次输入 / 输出一个数据都要中断 CPU,多次中断浪费 CPU 时间,只适于数据传输率较低的设备。

中断处理过程

  • 关中断
  • 保存现场(包括断点)
  • 转入设备中断处理程序
  • 进行中断处理
  • 恢复被中断进程的现场
  • 开中断
  • 返回断点(断点在哪里?)

# 直接存储访问 (DMA) 方式

  • 概念

    与 “中断驱动方式” 相比,DMA 有这样几个改进:

    ①数据的传送单位是 “块”。不再是一个字、一个字的传送

    ②数据的流向是从设备直接放入内存,或者从内存直接到设备。不再需要 CPU 干预

    ③仅在传送一个或多个数据块的开始和结束时,才需要 CPU 干预。

  • 工作流程

    image-20250520153556991

  • 优点:

    CPU 只需干预 I/O 操作的开始和结束,而其中的一批数据读写无需 CPU 控制,适于高速设备

  • 缺点:

    • 数据传送的方向、存放数据的内存地址及传送数据的长度等都由 CPU 控制,占用了 CPU 时间。
    • 而且每个设备占用一个 DMA 控制器,当设备增加时,需要增加新的 DMA 控制器。
  • 程序中断方式具有对异常事件的处理能力,而 DMA 控制方式适用于数据块的传输。

# I/O 通道控制方式

  • 概念

    DMA 方式的发展,减少了 CPU 干预。而 I/O 通道把对一个数据块的读写干预,减少为对一组数据块读写的干预。

    I/O 通道是专门负责输入输出的处理器,独立于 CPU ,有自己的指令体系。可执行由通道指令组成的通道程序,因此可以进行较为复杂的 I/O 控制。通道程序通常由操作系统所构造,放在内存里。

  • 工作流程

    image-20250520155624998

  • 优点:

    • 执行一个通道程序可以完成几组 I/O 操作,与 DMA 相比,减少了 CPU 干预。\
    • DMA 控制器通常只能控制一台或者少数几台同类设备;而一个通道可同时控制多种设备。
  • 缺点:费用较高

# 总结比较

image-20250520155840331

# 缓冲技术

# 概念

缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合

image-20250520160537846

  • 当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;
  • 当缓冲区为空时,可以往缓冲区冲入数据。但必须把缓冲区充满以后,才能从缓冲区把数据传出。

# 单缓冲

一个缓冲区, CPU 和外设轮流使用,一方处理完之后接着等待对方处理。

image-20250522125426008

image-20250522125459328

假设有 N 块数据,单块数据的处理时间为 t1 = T+M+C ,平均耗时为 t2 = max(C, T)+M

则全部处理完的时间为 t1 + (N-1)*t2

# 双缓冲

两个缓冲区, CPU 和外设都可以连续处理而无需等待对方。要求 CPU 和外设的速度相近

image-20250522130538881

image-20250522130645615

# 环形缓冲

多个缓冲区, CPU 和外设的处理速度可以相差较大。可参见 “生产者-消费者问题”

image-20250522131308598

# 缓冲池

缓冲池由系统中共用的缓冲区组成。缓冲区整体利用率较高

image-20250522131428954

# 设备分配

由于外设资源的有限,需解决进程间的外设共享问题,以提高外设资源的利用率。设备分配是对进程使用外设过程的管理

# 设备分配时应考虑的因素

  • 设备固有属性:独享、共享、虚拟设备
  • 设备分配算法:先来先服务、优先级高者优先
  • 设备分配中的安全性 (safety):死锁问题
    • 安全分配(同步):在设备分配中防止死锁,进程发出 I/O 请求之后,进入阻塞,直到 I/O 完成。 CPUI/O 串行工作,打破了死锁条件,但是效率低。
    • 不安全分配(异步):设备在分配时不考虑可能产生的死锁,进程发出 I/O 请求后,仍然继续运行,可继续请求其他 I/O 设备。需要进行安全性检查,但进程执行效率相对较高
  • 设备独立性:
    • 用户程序的设备独立性:用户程序使用逻辑设备名,系统实际执行时,映射到物理设备名。
    • I/O 软件的设备独立性:除了直接与设备打交道的低层软件外,其余部分软件不依赖于设备,可提高设备管理软件效率。

# 数据结构

  • 设备控制表( DCT

    每个设备一张,描述设备特性和状态。反映设备的特性、设备和控制器的连接情况

  • 控制器控制表( COCT

    每个设备控制器一张,描述 I/O 控制器的配置和状态。如 DMA 控制器所占用的中断号、 DMA 数据通道的分配

  • 通道控制表( CHCT

    每个通道一张,描述通道工作状态。

  • 系统设备表( SDT

    系统内一张,反映系统中设备资源的状态,记录所有设备的状态及其设备控制表的入口

    image-20250522154211333

# 单通路 I/O 系统的设备分配

一个设备对应一个控制器,一个控制器对应一个通道

分配流程

①根据进程请求的物理设备名查找 SDT

②根据 SDT 找到 DCT ,若设备忙碌则将进程 PCB 挂到设备等待队列中,不忙碌则将设备分配给进程。

③根据 DCT 找到 COCT ,若控制器忙碌则将进程 PCB 挂到控制器等待队列中,不忙碌则将控制器分配给进程。

④根据 COCT 找到 CHCT ,若通道忙碌则将进程 PCB 挂到通道等待队列中,不忙碌则将通道分配给进程。

注∶只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可后动 I/O 设备进行数据传送。

# 多通路 I/O 系统的设备分配

一个设备与几个控制器相连,一个控制器与几个通道相连

设备分配的过程类似单通路

# 假脱机技术

利用假脱机技术 ( SPOOLing , 也称为虚拟设备技术)可把独享设备转变成具有共享特征的虚拟设备,从而提高设备利用率

多道程序系统 中,专门利用一道程序( SPOOLing 程序)来完成对设备的 I/O 操作。无需使用外围 I/O 处理机

应用程序实际上是从 SPOOLing 程序的缓冲池中读出数据或把数据送入缓冲池,而不是跟实际的外设进行 I/O 操作

image-20250522152649823

特点

  • 高速虚拟 I/O 操作
  • 独享设备的共享

# OS 设备管理实例

这个考吗?要是不考就不学了

image-20250522161339613

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

CircleCoder 微信支付

微信支付

CircleCoder 支付宝

支付宝

CircleCoder 贝宝

贝宝