Linux教程

《操作系统》:05输入输出(IO)管理

本文主要是介绍《操作系统》:05输入输出(IO)管理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

I/O 设备的基本概念与分类

什么是 I/O 设备

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

按使用特性分类

  • 人机交互类外部设备
  • 存储设备
  • 网络通信设备

按传输速率分类

  • 低速设备
  • 中速设备
  • 高速设备

按信息交换的单位分类

  • 块设备(传输快,可寻址)
  • 字符设备(传输慢,不可寻址,常采用中断驱动方式)

I/O 控制器

主要功能

  • 接受和识别 CPU 发出的命令(要有控制寄存器)
  • 向 CPU 报告设备的状态(要有状态寄存器)
  • 数据交换(要有数据寄存器,暂存输入/输出的数据)
  • 地址识别(由 I/O 逻辑实现)

组成

  • CPU 与控制器之间的接口(实现控制器与 CPU 之间的通信)
  • I/O 逻辑(负责识别 CPU 发出的命令,并向设备发出命令)
  • 控制器与设备之间的接口(实现控制器与设备之间的通信)

两种寄存器编址方式

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

假脱机技术/SPOOLing技术

脱机技术

  • 外围控制机+更高速的设备 - 磁带
  • 作用:缓解设备与 CPU 的速度矛盾,实现预输入、缓输出

假脱机技术

  • 又叫 SPOOLing 技术,用软件的方式模拟脱机技术
  • 输入井和输出井:模拟脱机输入/输出时的磁带
  • 输入进程和输出进程:模拟脱机输入/输出时的外围控制机
  • 输入缓冲区和输出缓冲区:内存中的缓冲区,输入、输出时的 "中转站”

共享打印机

用 SPOOLing 技术将独占式的打印机 “虚拟” 成共享打印机

设备的分配与回收

应考虑的因素

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

静态分配与动态分配

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

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

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

设备分配的步骤

  1. 根据进程请求的物理设备名查找 SDT
  2. 根据 SDT 找到 DCT 并分配设备
  3. 根据 DCT 找到 COCT 并分配控制器
  4. 根据COCT找到CHCT并分配通道

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

缺点:用户编程时必须使用 “物理设备名”,若换了一个物理设备,则程序无法运行。若进程请求的物理设备正在忙租,则的使系护中还有同类型的设备,进程也必须阻塞等待

设备分配步骤的改进

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

缓冲区管理

缓冲区的概念

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

单缓冲

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

双缓冲

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

循环缓冲

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

缓冲池

  • 三个队列:空缓冲队列、输入队列、输出队列
  • 四种工作缓冲区
    • 用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区
    • 用于收容输出数据的工作缓冲区用于提取输出数据的工作缓冲区
这篇关于《操作系统》:05输入输出(IO)管理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!