I/O设备的基本概念和分类
- 什么是I/O设备:将数据Input/Output(输入/输出)计算机的外部设备
- 按使用特性分类
- 人机交互类外部设备
- 存储设备
- 网络通信设备
- 按传输速率分类
- 低速设备
- 中速设备
- 高速设备
- 按信息交换的单位分类
- 块设备(传输快,可寻址)
- 字符设备(传输慢,不可寻址,常采用中断驱动方式)
I/O控制器
- 主要功能
- 接受和识别CPU发出的命令(要有控制寄存器)
- 向CPU报告设备的状态(要有状态寄存器)
- 数据交换(要有数据寄存器,暂存输入/输出的数据)
- 地址识别(由I/O逻辑实现)
- 组成
- CPU与控制器之间的接口(实现控制器与CPU之间的通信)
- I/O逻辑(负责识别CPU发出的命令,并向设备发出命令)
- 控制器与设备之间的接口(实现控制器与设备之间的通信)

两种寄存器编址方式
- 内存映像I/O
- 控制器中的寄存器与内存统一编址
- 可以采用对内存进行操作的指令来对控制器进行操作
- 寄存器独立编址
- 控制器中的寄存器独立编址
- 需要设置专门的指令来操作控制器
![两种寄存器]()
- 内存映像I/O
I/O控制方式
- 程序直接控制方式
- 完成一次读/写的过程:CPU发出I/O命令后需要不断轮询
- CPU干预频率:极高
- 每次I/O的数据传输单位:字
- 数据流向
- 设备$\Rightarrow$CPU$\Rightarrow$内存
- 内存$\Rightarrow$CPU$\Rightarrow$设备


中断驱动方式
- 完成一次读/写的过程:CPU发出I/O命令后可以做其他事,本次I/O完成后设备控制器发出中断信号
- CPU干预频率:高
- 每次I/O的数据传输单位:字
- 数据流向
- 设备$\Rightarrow$CPU$\Rightarrow$内存
- 内存$\Rightarrow$CPU$\Rightarrow$设备
![中断驱动方式]()
DMA方式
- 完成一次读/写的过程:CPU发出I/O指令后可以做其他事,本次I/O完成后设备控制器发出中断信号
- CPU干预频率:中
- 每次I/O的数据传输单位:块
- 数据流向
- 设备$\Rightarrow$内存
- 内存$\Rightarrow$设备
![DMA]()
![DMA]()
通道控制方式
- 完成一次读/写的过程:CPU发出I/O命令后可以做其他事。通道会执行通道程序以完成I/O,完成后通道向CPU发出中断信号
- CPU干预频率:低
- 每次I/O的数据传输单位:一组块
- 数据流向
- 设备$\Rightarrow$内存
- 内存$\Rightarrow$设备

- 优缺点
- 每一个阶段的优点都是解决了上一阶段的最大缺点
- 总体来说,整个发展过程就是要尽量减少CPU对I/O过程的干预,把CPU从繁杂的I/O控制事务中解脱出来,以便更多地去完成数据处理任务
I/O软件层次结构
- 用户层软件:实现与用户交互的接口,向上提供方便易用的库函数
- 设备独立性软件
- 向上层提供统一的调用接口(如read/write系统调用)
- 设备的保护
- 差错处理
- 设备的分配与回收
- 数据缓冲区管理
- 建立逻辑设备名到物理设备名的映射关系,根据设备类型选择调用相应的驱动程序
- 设备驱动程序:设置设备寄存器、检查设备状态
- 中断处理程序:进行中断操作
- 硬件:执行I/O操作,有机械部件、电子部件组成


输入/输出应用程序接口&设备驱动程序接口
- 输入/输出应用程序接口

- 阻塞/非阻塞I/O
- 阻塞I/O:应用程序发出I/O系统调用,==进程需转为阻塞态等待==
- 非阻塞I/O:应用程序发出I/O系统调用,系统调用可迅速返回,==进程无需阻塞等待==
- 设备驱动程序接口:若各公司开发的设备驱动程序接口不统一,则操作系统很难调用设备驱动程序

- 统一标准的设备驱动程序接口:操作系统规定号设备驱动的接口标准,各厂商必须按要求开发设备驱动程序

I/O核心子系统
- I/O调度:用某种算法确定一个好的顺序来处理各个I/O请求
- 设备保护
- 操作系统要实现==文件保护功能==
- 在UNIX系统中,==设备被看作是一种特殊的文件==,每个设备也会有对应的FCB

假脱机技术
- 脱机技术
- 外围控制机+更高速的设备——磁带
- 作用:缓解设备与CPU的速度矛盾,实现预输入、缓输出
- 假脱机技术
- 又叫SPOOLing技术,用软件的方式模拟脱机技术
- 输入井和输出井——模拟脱机输入/输出时的磁带
- 输入进程和输出进程——模拟脱机输入/输出时的外围控制机
- 输入缓冲区和输出缓冲区——内存中的缓冲区,输入、输出时的“中转站”

- 共享打印机:用SPOOLing技术将独占式的打印机“虚拟”成共享打印机
设备的分配与回收
应考虑的因素
- 固有属性:独占设备、共享设备、虚拟设备(SPOOLing)
- 分配算法:先来先服务、优先级高者优先、短任务优先等
- 安全性:安全分配方式、不安全分配方式
静态分配与动态分配
- 静态分配:进程运行前为其分分配全部所需资源,运行结束后归还资源
- 动态分配:进程运行过程中动态申请设备资源
设备分配管理中的数据结构
- 设备控制表(DCT):每个设备对应一张DCT,关键字段:类型/标识符/状态/指向COCT的指针/等待队列指针
- 控制器控制表(COCT):每个控制器对应一张COCT,关键字段:状态/指向CHCT的指针/等待队列指针
- 通道控制表(CHCT):每个控制器对应一张CHCT,关键字段:状态/等待队列指针
- 系统设备表(SDT):记录整个系统中所有设备的情况,每个设备对应一个表目,关键字段:设备类型/标识符/DCT/驱动程序入口
设备分配的步骤
- 根据进程请求的物理设备名查找SDT
- 根据SDT找到DCT并分配设备
- 根据DCT找到COCT并分配控制器
- 根据COCT找到CHCT并分配通道
- 缺点
- 用户编程时必须使用“物理设备名”,若换了一个物理设备,则程序无法运行。
- 若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待
设备分配步骤的改进
- 用户编程时使用逻辑设备名申请设备,操作系统负责实现从逻辑设备名到物理设备名的映射(通过LUT)
- 逻辑设备表的设置问题
- 整个系统只有一张LUT:各用户所用的逻辑设备名不允许重复
- 每个用户一张LUT:各个用户的逻辑设备名可重复
缓冲区管理
- 缓冲区的概念
- 一般利用内存作为缓冲区
- 缓解CPU与设备的速度矛盾、减少对CPU的中断频率、解决数据粒度不匹配的问题、提高CPU与I/O设备之间的并行性
- 单缓冲^1
- 设备-(T)-缓冲区-(M)-工作区-(C)-处理
- 处理一块数据平均耗时Max(C, T) + M
- 分析问题的初始状态:工作区满,缓冲区空
- 双缓冲
- 处理一块数据平均耗时Max(T, C+M)
- 分析问题的初始状态:工作区空,一个缓冲区满,另一个缓冲区空
- 循环缓冲:多个缓冲区链接成循环队列,in指针指向第一个空缓冲区,out指针指向第一个满缓冲区
- 缓冲池
- 三个队列:空缓冲队列、输入队列、输出队列
- 四种工作缓冲区
- 用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区
- 用于收容输出数据的工作缓冲区、用于提取输出数据的工作缓冲区
磁盘的结构
- 磁盘、磁道、扇区的概念
- 磁盘由表面涂有磁性物质的圆形盘片组成
- 每个盘片被划分为一个个磁道,每个磁道又划分为一个个扇区
- 如何在磁盘中读/写数据:磁头移动到目标位置,盘片旋转,对应扇区划过磁道才能完成读/写
- 盘面、柱面的概念
- 磁盘有多个盘片“摞”起来,每个盘片有两个盘面
- 所有盘面中相对位置相同的磁道组成柱面
- 磁盘的物理地址:(柱面号, 盘面号, 扇区号)
- 磁盘的分类
- 根据磁头是否可移动
- 固定头磁盘(每个磁道有一个磁头)
- 移动头磁盘(每个盘面只有一个磁头)
- 根据盘片是否可更换
- 固定盘磁盘
- 可换盘磁盘
- 根据磁头是否可移动
磁盘调度算法
- 一次磁盘读/写操作需要的时间
- 寻找时间(寻道时间):启动磁臂,移动磁头所花的时间
- 延迟时间:将目标扇区转到磁头下面所花的时间
- 传输时间:读/写 数据花的时间
- 磁盘调度算法
- 先来先服务(FCFS):按访问请求到达的先后顺序进行处理
- 最短寻找时间优先(SSTF)
- 每次都优先响应距离磁头最近的磁道访问请求
- 贪心算法的思想,能保证眼前最优,但无法保证总的寻道时间最短
- 缺点:可能导致饥饿
- 扫描算法(电梯算法,SCAN)
- 只有磁头移动到最边缘的磁道时才可以改变磁头移动方向
- 缺点:对各个位置磁道的响应频率不平均
- 循环扫描算法(C-SCAN):只有磁头朝某个方向移动时才会响应请求,移动到边缘后立即让磁头返回起点,返回途中不响应任何请求
- LOOK算法:SCAN算法的改进,只要在磁头移动方向上不再有请求,就立即改变磁头方向
- C-LOOK算法:C-SCAN算法的改进,只要在磁头移动方向上不再有请求,就立即改变磁头方向
减少磁盘延迟时间的方法
- 交替编号
- 具体做法:让编号相邻的扇区在物理上不相邻
- 原理:读取完一个扇区后需要一段时间处理才可以继续读入下一个扇区
- 错位命名
- 具体做法:让相邻盘面的扇区编号“错位”
- 原理:与“交替编号”的原理相同。“错位命名法”可降低延迟时间
- 磁盘地址结构的设计
- 理解为什么要用==(柱面号, 盘面号, 扇区号)==
- 理解为什么不用(盘面号, 柱面号, 扇区号)
- 原因:在读取地址连续的磁盘块时,前者更不需要移动磁头
磁盘的管理
- 磁盘初始化
- 低级格式化/物理格式化:划分扇区
- 磁盘分区(C盘、D盘、E盘)
- 逻辑格式化:建立文件系统(建立根目录文件、建立用于存储空间管理的数据结构)
- 引导块
- 计算机启动时需要运行初始化程序(自举程序)来完成初始化
- ROM中存放很小的自举装入程序
- 完整的自举程序存放在初始块(引导块)中
- 坏块的管理
- 简单的磁盘:逻辑格式化时将坏块标记出来
- 复杂的磁盘:磁盘控制器维护一个坏块链,并管理备用扇区



