# IO 的基本概念与分类

# IO 设备介绍

将数据 Input/Output(输入 / 输出)计算机的外部设备

# 按使用特性分类

  1. 人机交互类外部设备
  2. 存储设备
  3. 网络通信设备

# 按传输速率分类

  1. 低速设备
  2. 中速设备
  3. 高速设备

# 按信息交换的单位分类

  1. 块设备:传输快,可寻址
  2. 字符设备:传输慢,不可寻址,常采用中断驱动方式

# IO 控制器

# 主要功能

  1. 接受和识别 CPU 发出的命令
  2. 向 CPU 报告设备的状态
  3. 数据交换
  4. 地址识别

# 组成

  1. CPU 与控制器之间的接口:实现控制器与 CPU 之间的通信
  2. IO 逻辑:负责识别 CPU 发出的命令,并且向设备发出命令
  3. 控制器与设备之间的接口:实现控制器与设备之间的通信

# 两种寄存器编址方式

  1. 内存映射
    1. 控制器中的寄存器与内存统一编制
    2. 可以采用对内存进行操作的指令来对控制器进行操作
  2. 寄存器独立编制
    1. 控制器中的寄存器独立编制
    2. 需要设置专门的指令来操作控制器

# IO 控制方式

# 程序直接控制

image-20230205104431199

image-20230205104501761

# 中断驱动方式

image-20230205104546398

image-20230205104559832

# DMA 方式

image-20230205104715129

image-20230205104727405

image-20230205104737587

# 通道控制方式

image-20230205104808679

image-20230205104819218

# 比较

image-20230205104849045

# IO 软件层次结构

# IO 核心子系统

# IO 调度

image-20230205105150007

# 设备保护

image-20230205105214189

# 假脱机技术(SPOOLing 技术)

# 脱机技术概述

image-20230205105324293

# 假脱机技术 —— 输入井与输出井

image-20230205105403908

# 假脱机技术 —— 输入 / 输出缓冲区

image-20230205105517503

# 设备的分配与回收

# 考虑因素

  1. 固有属性:独占设备,共享设备,虚拟设备(SPOOLing)
  2. 分配算法:先来先服务,优先级高者优先,短任务优先等
  3. 安全性:安全分配方式,不安全分配方式

# 静态分配与动态分配

  1. 静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
  2. 动态分配:进程运行过程中动态申请设备资源

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

  1. 设备控制表(DCT):每个设备对应一张 DCT,关键字段:类型 / 标识符 / 状态 / 指向 COCT 的指针 / 等待队列指针
  2. 控制器控制表(COCT):每个控制器对应一张 COCT,关键字段:状态 / 指向 CHCT 的指针 / 等待队列
  3. 通道控制表(CHCT):每个控制器对应一张 CHCT,关键字段:状态 / 等待队列指针
  4. 系统设备表(SDT):记录整个系统中所有设备的情况,每个设备对应一个表目,关键字段:设备类型 / 标识符 / DCT / 驱动程序入口

# 设备分配步骤

  1. 根据进程请求的物理设备查找 SDT,根据 SDT 找到 DCT 并分配设备,根据 DCT 找到 COCT 并分配控制器,根据 COCT 找到 CHCT 找到 CHCT 分配通道
  2. 只有设备,控制器,通道三者都分配成功时,这次设备才算分配成功,之后便可启动 IO 设备进行数据传送
  3. 缺点:用户编程必须使用物理设备名,若换了一个物理设备,则程序无法运行,若进程的物理设备正在忙碌,即便使系统中还有同类型设备,进程也必须阻塞等待

# 设备分配步骤的改进

  1. 用户编程时使用逻辑设备名申请设备,操作系统负责实现逻辑设备名到物理设备名的映射(通过 LUT)
  2. 逻辑设备表的设置问题
    1. 整个系统只有一张 LUT:各用户所用逻辑设备名不允许重复
    2. 每个用户一张 LUT:各个用户的逻辑设备名可重复

# 缓冲区管理

# 缓冲区概念

  1. 一般利用内存作为缓冲区
  2. 缓解 CPU 与设备的速度矛盾,减少对 CPU 的中断频率,解决数据粒度不匹配的问题,提高 CPU 与 IO 设备之间并行性

# 单缓冲

  1. 设备 -(T)- 缓冲区 -(M)- 工作区 -(C)- 处理
  2. 处理一块数据平均耗时 Max(C,T)+M
  3. 分析问题的初始状态:工作区满,缓冲区空

# 双缓冲

  1. 处理一块数据平均耗时 Max(T,C+M)
  2. 分析问题初始状态:工作区空,一个缓冲区满,一个缓冲区空

# 循环缓冲

多个缓冲区链接成循环队列,in 指针指向第一个空缓冲区,out 指针指向第一个满缓冲区

# 缓冲池

  1. 三个队列:空缓冲队列、输入队列、输出队列
  2. 四个工作缓冲区
    1. 用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区
    2. 用于收容输出数据的工作缓冲区、用于提取输出数据的工作缓冲区
更新于 阅读次数

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

Baozi 微信支付

微信支付

Baozi 支付宝

支付宝

Baozi 微信

微信