I/O控制器

I/O设备和CPU的"中介"

功能

image-20240523102804245

组成

image-20240523103235805
  • 一个I/O控制器可能会对应多个设备

  • 数据寄存器, 控制寄存器, 状态寄存器可能有多个(如: 每个控制/状态寄存器对应一个具体的设备), 且这些寄存器都要有相应的地址, 才能方便CPU操作. 有的计算机会让这些寄存器占用内存地址的一部分, 称为内存映像I/O; 另一些计算机则采用I/O专用地址, 即寄存器独立编址

    image-20240523103925336

I/O控制方式

即: 用什么样的方式来控制I/O设备的数据读/写

  • 注意点

    • 完成一次读/写操作的流程
    • CPU干预的频率
    • 数据传送的单位
    • 数据的流向
    • 主要缺点和主要优点

程序直接控制方式

  • 完成一次读/写操作的流程

    image-20240523105421531
    • 轮询

      image-20240523105709277
  • CPU干预的频率

    • 很频繁, I/O操作开始之前, 完成之后需要CPU介入, 并且在等待I/O完成的过程中CPU需要不断地轮询检查
  • 数据传送的单位

    • 每次读/写一个字
  • 数据的流向

    • 读操作(数据输入) : I/O设备 -> CPU -> 内存
    • 写操作(数据输出) : 内存 -> CPU -> I/O设备
    • 每个字的读/写都需要CPU的帮助
  • 主要缺点和主要优点

    • 优点 : 实现简单
    • 缺点 : CPU和I/O设备只能串行工作, CPU需要一直轮询检查, 长期处于"忙等"状态, CPU利用率低

中断驱动方式

  • 完成一次读/写操作的流程

image-20240523111303700
  • CPU干预的频率

    • 每次I/O操作开始之前和完成之后需要CPU介入
    • 等待I/O完成的过程中CPU可以切换到别的进程执行
  • 数据传送的单位

    • 每次读/写一个字
  • 数据的流向

    • 读操作(数据输入) : I/O设备 -> CPU -> 内存
    • 写操作(数据输出) : 内存 -> CPU -> I/O设备
  • 主要缺点和主要优点

    • 优点 : I/O控制器会通过中断信号主动报告I/O已完成, CPU不再需要不停轮询. CPU和I/O设备可并行工作, CPU利用率得到明显提升
    • 缺点 : 每个字在I/O设备与内存之间的传输, 都需要经过CPU. 而频繁的中断处理会消耗较多的CPU时间

DMA方式

直接存储器存取

  • 完成一次读/写操作的流程

    image-20240523112514122 image-20240523112814217
  • CPU干预的频率

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

    • 每次读/写一个或多个块(每次读写的只能是连续的多个块, 且这些块读入内存后在内存中也必须是连续的)
  • 数据的流向 (不再需要经过CPU)

    • 读操作(数据输入) : I/O设备 -> 内存
    • 写操作(数据输出) : 内存 -> I/O设备
  • 主要缺点和主要优点

    • 优点 : 数据传输以"块"为单位, CPU介入频率进一步降低. 数据的传输不再需要先经过CPU再写入内存, 数据传输效率进一步增加, CPU和I/O设备的并行性得到提升
    • 缺点 : CPU每发出一条I/O指令, 只能读/写一个或多个连续的数据块

通道控制方式

  • 完成一次读/写操作

    image-20240523115323203 image-20240523115416271
  • CPU干预的频率

    • 极低, 通道会根据CPU的指示执行相应的通道程序, 只有完成一组数据块的读/写后才需要发出中断信号, 请求CPU干预
  • 数据传送的单位

    • 每次读/写 一组数据块
  • 数据的流向 (在通道的控制下进行)

    • 读操作(数据输入) : I/O设备 -> 内存
    • 写操作(数据输出) : 内存 -> I/O设备
  • 主要缺点和主要优点

    • 缺点 : 实现复杂, 需要专门的通道硬件支持
    • 优点 : CPU, 通道, I/O设备可并行工作, 资源利用率很高

I/O软件层次结构

image-20240523171743548

用户层软件

image-20240523172015010

设备独立性软件

  • 与设备的硬件特性无关的功能几乎都在这一层实现

  • 主要实现的功能

    • 向上层提供统一的调用接口
    • 设备的保护
      • 与文件保护类似, 访问权限
    • 差错处理
    • 设备的分配与回收
      • 临界资源
    • 数据缓冲区管理
      • 可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异
    • 建立逻辑设备名到物理设备名的映射关系; 根据设备类型选择调用相应的驱动程序

设备驱动程序

image-20240523172709588

中断处理程序

image-20240523173235229

输入/输出管理

输入/输出应用程序接口

image-20240523174716641
  • 阻塞I/O

    • 应用程序发出I/O系统调用, 进程需转为阻塞态等待
  • 非阻塞I/O

    • 应用程序发出I/O系统调用, 系统调用可迅速返回, 进程无需等待

设备驱动程序接口

image-20240523175211786

I/O核心子系统

image-20240524164845741

I/O调度

  • 用某种算法确定一个好的顺序来处理各个I/O请求

设备保护

  • 设备可被看作是一种特殊的文件, 而文件有文件保护功能

假脱机技术(SPOOLing技术)

  • 将独占式设备虚拟成共享式设备

image-20240524165913731 image-20240524170250336

设备分配与回收

设备分配时应考虑的因素

  • 设备的固有属性

    • 独占设备
    • 共享设备
    • 虚拟设备
  • 设备分配算法

  • 设备分配中的安全性

    • 安全分配方式 : 为进程分配一个设备后就将进程阻塞, 本次I/O完成后才能将进程唤醒
      • 一个时段内每个进程只能使用一个设备
      • CPU和I/O设备只能串行工作
    • 不安全分配方式 : 进程发出I/O请求后, 系统为其分配I/O设备, 进程可继续执行, 之后还可以发出新的I/O请求. 只有某个I/O请求得不到满足时才将进程阻塞

静态分配与动态分配

  • 静态分配

    • 进程运行前为其分配全部所需资源, 运行结束后归还资源
  • 动态分配

    • 进程运行过程中动态申请设备资源

设备分配管理中的数据结构

image-20240524171746586
  • 设备控制表(DCT)

    image-20240524171431909
  • 控制器控制表(COCT)

    image-20240524171529429
  • 通道控制表(CHCT)

    image-20240524171640848
  • 系统设备表(SDT)

    image-20240524171726421

设备分配的步骤

image-20240524171943972

设备分配步骤的改进方法

image-20240524172017506 image-20240524192636562

缓冲区管理

image-20240524193437176

单缓冲

image-20240524194224496

双缓冲

image-20240524194944444

循环缓冲

image-20240524195214029

缓冲池

image-20240524201730198

磁盘

磁盘的结构

  • 磁盘、磁道、扇区

    image-20240525133955257
  • 如何在磁盘中读/写数据

    image-20240525134144532
  • 盘面、柱面

    image-20240525134321623
  • 磁盘的物理地址

    image-20240525134437152

磁盘调度算法

先来先服务(FCFS)

image-20240525135515442

最短寻找时间优先(SSTF)

image-20240525140038898

扫描算法/电梯算法(SCAN)

image-20240525140447165

LOOK调度算法

image-20240525140709097

循环扫描算法(C-SCAN)

image-20240525140917117

C-LOOK算法

image-20240525141018440

减少磁盘延迟时间的方法

image-20240525141410186

交替编号

image-20240525141959256

错位命名

image-20240525142833943

磁盘的管理

磁盘初始化

image-20240525143130106

引导块

image-20240525143433193

坏块

image-20240525143621311

固态硬盘SSD

image-20240525143753408