Skip to content

(一)IO 管理基础

1. IO 设备

1.1. IO 设备基本概念

  • 一般由执行 IO 操作的机械部件和控制 IO 操作的电子部件组成;

    • 执行 IO 的机械部件称为 IO 设备

    • 管理 IO 的电子部件称为:设备控制器/适配器或 IO 接口

1.2. IO 设备分类

  • 使用特性:IO 设备,存储设备;

  • 传输速率:低速设备,高速设备;

1.3. IO 接口/端口

  • CPU 只能通过设备控制器间接与 IO 设备通信

  • IO 设备应含有和设备控制器通信的接口,该接口中有三种类型信号,各对应一条信号线

    • 数据信号;

    • 控制信号;

    • 状态信号;

  • 基本功能

    • 接收/识别命令;

    • 数据交换;

    • 标识和报告 IO 设备的状态;

    • 识别地址;

    • 数据缓冲;

    • 差错控制;

  • 组成部分

    • 设备控制器 CPU 的接口;

    • 设备控制器 IO 设备的接口;

    • IO 逻辑(在上述二者中间)

  • 图示

    img_NhR1O1aREX

    • CPU 控制器接口里的数据/控制/状态寄存器也称为 IO 端口

2. IO 控制方式

  • 主要三种:轮询,中断,DMA(Direct Memory Access);

    img_5bDup6uiVX

2.1. 轮询

  • 启动 IO 后,CPU 置位状态寄存器的 busy 标志;

  • 然后不断测试 busy 标志位:若 busy 为 1 则表示 IO 设备还在工作,为 0 表示 IO 设备已经完成;

  • 测试到 busy 为 0 后,再从数据寄存器中取出数据,然后再启动下一次 IO,直到所有数据传输完成;

2.2. 中断

  • 启动 IO 时,CPU 向设备控制器发出 IO 命令,然后立即返回执行原来的任务

  • 设备控制器完成工作后,触发 CPU 的 IO 中断,CPU 再进行处理;

  • CPU 和设备控制器是并行工作

2.3. DMA 直接存储器访问

  • 普通 IO 是以字节为单位,每 IO 一个字节,设备控制器都要触发一次 CPU 中断,效率较低;

  • DMA 的特点

    • IO 的单位变为数据块,CPU 与 IO 设备每次至少传输一个数据块

    • IO 设备的数据直接送入内存,CPU 的数据也是直接由内存送入 IO 设备控制器

    • 仅在一个或多个数据块传输完成时,才触发 CPU 中断进行处理,提高了 CPU 利用率;

  • DMA 控制器的组成

    img_1L5reG2LuW

    • CPU DMA 控制器接口;

    • DMA 控制器 块设备接口;

    • IO 逻辑;

  • DMA 工作过程(例如:从磁盘读入一个数据块)

    • 预处理:CPU 向控制器发送读命令(送入寄存器 CR 中),同时将起始地址送入地址寄存器 MAR 中;

    • 数据传输:CPU 启动 DMA 控制器,进行数据传输;

    • 后处理:传输完成后,控制器触发 CPU 中断,进行相关处理;

3. IO 软件层次结构

  • 通常是四个层次:用户层、设备独立性软件、设备驱动、中断处理程序

    img_YI5AJclpVA

3.1. 中断处理程序

  • 层次结构中的最底流程层,实现 CPU 和 IO 设备并行,是整个 IO 系统的基础;

  • 中断处理流程

    • 进程申请 IO 时,该进程挂起,CPU 启动 IO 相关操作;

    • IO 设备完成操作后,向 CPU 发送中断请求;

    • CPU 收到中断请求,转向中断处理程序,执行相应处理;

    • 处理完毕,解除进程阻塞状态;

  • 中断处理程序

    • 检测是否有未响应的中断请求;

    • 保护被中断进程的 CPU 上下文;

    • 转入相应的设备处理程序,处理中断;

    • 退出中断,恢复 CPU 现场;

3.2. 驱动

  • 设备处理程序又称为设备驱动程序,实现高层次 IO 软件和设备控制器之间的通信

  • 主要功能

    • 高层次 IO 软件的请求 低层次设备控制器的指令;

    • 检查 IO 请求的合法性

    • 检查 IO 设备的工作状态,传递 IO 设备操作有关的参数,设置 IO 设备工作方式;

    • 管理和发送 IO 命令:若 IO 设备空闲则立即启动,若忙碌,应管理一个请求队列;

    • 响应设备控制器的中断请求,并调用对应的中断处理程序

  • 特点

    • 和硬件密切相关,不同类型的设备,其驱动程序也不同;

    • 可以为多个终端设备配置一个驱动程序

    • 因为和硬件密切相关,其中的一部分必须采用汇编语言书写

    • 允许可重入:允许驱动程序一次调用完成前被再次调用;

  • 设备处理方式

    • 为每一类设备专门设置一个进程,执行此类设备 IO 操作;

    • 整个 OS 只设置一个进程,管理和执行所有设备 IO 操作;

    • OS 提供对应的模块,供用户和系统进程调用;

  • 工作过程

    • 将上层软件的请求转换为具体指令;

    • 校验 IO 请求合法性;

    • 检查 IO 设备状态;

    • 传递必要的 IO 操作参数;

    • 启动 IO 设备;

3.3. 设备独立软件

  • 设备独立性:也称为设备无关性指应用程序进行的操作不局限于某种特定的物理设备

  • 设备调用方式:

    • 1)使用物理设备名:早期 OS 中使用,deprecated;

    • 2)使用逻辑设备名:如 /dev/printer

  • 设备驱动程序的统一接口

    • 每个设备驱动程康与OS之间都有着相同或相近的接口,使添加一个新的设备驱动程序变得容易,同时在很大程度上方便了设备驱动程序的开发;

    • 将抽象的设备名映射到适当的驱动程序上(或具体的物理设备名),并进一步可以找到相应物理设备的驱动程序入口;

    • 其他功能:设备保护,禁止用户直接访问设备,以防止无权访问的用户使用;

  • 缓冲管理

    • 为了缓和 CPU 高速和 IO 设备低速之间的矛盾,现代 OS 中都分别为字符设备和块设备配置了相应的缓冲区

    • 多种形式:如单缓冲区、双缓冲区、循环缓冲区、公用缓冲池等;

  • 差错控制

    • 设备中有着许多的机械和电气部分,比主机更容易出现故障;

    • IO 设备的错误可分为两类:(1) 暂时性,(2) 持久性;

  • 独立设备的分配和回收

    • 对于独占设备,为了避免诸进程对独占设备的争夺,必须由系统来统一分配,不允许进程自行使用;
  • 逻辑数据块

    • 不同类型的设备,其数据交换单位不同,读取和传输速率也各不相同;

    • 设备独立性软件负责在底层处理这些差异,向上层软件提供大小统一的逻辑数据块;

3.4. 用户层

  • 系统调用

    • 不允许运行在用户态的应用进程去直接调用运行在系统太的 IO 过程;

    • OS 在用户层中引入系统调用,应用程序可以通过它间接调用 OS 中的 IO 过程,操作 IO 设备;

  • 库函数

    • 库函数是实现系统调用的一种方式;

    • 不是所有库函数都是系统调用

    • 库函数与调用程序连接在一起,被嵌入在运行时装入内存的二进制程序中;

    • 例:Windows—Win32 API;

4. IO 应用程序接口

  • 三种接口:块设备、流设备和网络接口

4.1. 块设备接口

  • 例:磁盘设备接口

4.2. 流设备接口

  • 又称为字符设备接口,用于字符型 IO 设备(例如:键盘);

  • 操作:get, put 等;

  • 因字符设备的类型非常多,且差异甚大,系统以统一的方式提供了一种通用的 in-control 指令来处理它们

4.3. 网络设备接口

  • 实现网络通信的功能;