I/O系统的功能、模型和接口
-
I/O系统的基本功能
- 隐藏物理设备的细节
- 与设备的无关性
- 提高处理机和I/O设备的利用率
- 对1/0 设备进行控制
- 确保对设备的正确共享
- 独占设备,进程应互斥地访问这些设备
- 共享设备,在一段时间内允许多个进程同时访问的设备
- 错误处理
-
I/O系统的层次结构和模型
-
I/O 软件的层次结构
-
I/O系统中各种模块之间的层次视图
-
-
I/O系统接口
在I/O系统与高层之间的接口中,根据设备类型的不同,又进一步分为:- 块设备接口
- 流设备接口(字符设备接口)
- 网络通信接口
I/O设备和设备控制器
-
I/O设备
- I/O设备的类型
- 按使用特性分类
I/O设备按照使用特性分为存储设备和I/O设备,其中I/O设备又可分为输入设备、输出设备和交互式设备 - 按传输速率分类
从设备的传输速率上I/O设备又分为低速设备、中速设备和高速设备 - 信息交换的单位
I/O设备按照信息交换的单位分为块设备和字符设备
- 按使用特性分类
- 设备与控制器之间的接口
设备并不是直接与CPU进行通信,而是与设备控制器通信,因此,在I/O设备中应含有与设备控制器间的接口,在该接口中有三种类型的信号,各对应一条信号线。三种信号线中只有数据线是双向的
- I/O设备的类型
-
设备控制器
- 设备控制器的基本功能
- 接收和识别命令
- 数据交换
- 标识和报告设备的状态
- 地址识别
- 数据缓冲区
- 差错控制
- 设备控制器的组成
- 设备控制器与处理机的接口
- 设备控制器与设备的接口
- I/O逻辑
- 设备控制器的基本功能
-
I/O通道
- I/O通道设备的引入
- 定义
I/O通道是专门负责输入/输出的处理机 - 与一般处理机的差别
- 其指令类型单一
- 通道没有自己的内存,通道程序是放在主机的内存中的,即通道与CPU共享内存
- 定义
- 通道类型
根据信息交换方式的不同,可把通道分成以下三种类型:- 字节多路通道
- 数组选择通道
- 数组多路通道
- I/O通道设备的引入
中断机构和中断处理程序
中断在操作系统中有重要的地位,没有中断,就不可能实现多道程序,进程之间的切换是通过总段来实现的
为了提高处理机的利用率和实现CPU和I/O设备并行执行,必须有中断支持
中断处理程序是I/O系统中最低的一层,是整个I/O系统的基础
- 中断简介
- 中断和陷入
- 中断
中断是指CPU对I/O设备发来的中断信号的一种响应。中断是由外部设备引起的,故又称外中断 - 陷入
- 定义
陷入是指一种由CPU内部事件所引起的中断,也称为内中断。 - 与中断的区别:
中断和陷入的主要区别是信号的来源,即是来自CPU外部,还是CPU内部
- 定义
- 中断
- 对多中断源的处理方式
- 屏蔽(禁止)中断
- 嵌套中断
- 中断和陷入
- 中断处理程序
中断处理程序的处理过程可分成以下几个步骤:- 测定是否有未响应的中断信号
- 保护被中断进程的 CPU 环境
- 转入相应的设备处理程序
- 中断处理
- 恢复CPU的现场并退出中断
设备驱动程序
- 设备驱动程序概述
- 设备驱动程序的功能
- 接收由与设备无关的软件发来的命令和参数,并将命令中的抽象要求转换为与设备相关的低层操作序列
- 检査用户I/O请求的合法性,了解I/O设备的工作状态,传递与I/O设备操作有关的参数,设置设备的工作方式
- 发出I/O命令,如果设备空闲,便立即启动I/O设备,完成指定的I/O操作;如果设备忙碌,则将请求者的请求块挂在设备队列上等待
- 及时响应由设备控制器发来的中断请求,并根据其中断类型,调用相应的中断处理程序进行处理
- 设备驱动程序的特点
- 驱动程序是实现在与设备无关的软件和设备控制器之间通信和转换的程序
- 不同类型的设备应配置不同的驱动程序
- 驱动程序与I/O设备所采用的I/O控制方式紧密相关
- 有很多驱动程序的基本部分已经固化在ROM中
- 驱动程序应允许可重入
- 设备处理方式
- 为每一类设备设置一个进程
- 在整个系统中设置一个I/O进程
- 不设置专门的设备处理进程,而只为各类设备设置相应的设备驱动程序,供用户或系统进程调用
- 设备驱动程序的功能
- 设备驱动程序的处理过程
- 将抽象要求转换为具体要求
- 对服务请求进行校验
- 检查设备的状态
- 传送必要的参数
- 启动I/O设备
- 对I/O设备的控制方式
-
程序I/O方式
此时CPU和I/O设备只能串行工作
-
使用中断的可编程I/O方式
此时,CPU与I/O设备并行操作 -
直接存储器访问方式(DMA)
-
DMA方式的特点
- 数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次传送至少一个数据块
- 所传送的数据是从设备直接送入内存的,或者相反
- 仅在传送一个或多个数据块的开始和结束时才需CPU干预,整块数据的传送是在控制器的控制下完成的
-
DMA控制器的组成
DMA控制器由主机与DMA控制器的接口;DMA 控制器与块设备的接口;I/O控制逻辑三部分组成。
-
DMA工作过程
DMA方式在内存和I/O设备之间开辟直接数据通道
-
-
I/O通道控制方式
- I/O通道控制方式的特点
- 数据传输的基本单位是一组数据块
- 实现了CPU、通道和I/O设备三者的并行操作
- 通道程序
通道程序是由一系列通道指令(或称为通道命令)所构成的
- I/O通道控制方式的特点
-
与设备无关的I/O软件
- 基本概念
- I/O重定向
所谓I/O重定向,是指用于I/操作的设备可以更换(即重定向),而不必改变应用程序 - 设备无关性
即应用程序独立于具体使用的物理设备
- I/O重定向
- 与设备无关的软件
- 设备驱动程序的统一接口
- 缓冲管理
- 差错控制
- 对独立设备的分配与回收
- 独立于设备的逻辑数据块
- 设备分配
-
设备分配中的数据结构
-
设备控制表DCT
系统为每一个设备都配置了一张设备控制表,用于记录设备的情况
-
控制器控制表、通道控制表和系统设备表
- 控制器控制表(COCT)
系统为每一个控制器都设置了用于记录控制器情况的控制器控制表 - 通道控制表(CHCT)
每个通道都有一张通道控制表 - 系统设备表(SDT)
记录了系统中全部设备的情况,每个设备占一个表目
- 控制器控制表(COCT)
-
-
设备分配时应考虑的因素
- 设备的固有属性
- 独占设备的分配策略
- 共享设备的分配策略
- 虚拟设备的分配策略
- 设备分配算法
- 先来先服务
- 优先级高者优先
- 设备分配中的安全性
- 安全分配方式
- 不安全分配方式
- 设备的固有属性
-
独占设备的分配程序
首先分配设备,其次分配控制器,最后分配通道
-
- 逻辑设备名到物理设备名映射的实现
- 逻辑设备表LUT
在逻辑设备表的每个表目中包含了三项:逻辑设备名、物理设备名和设备驱动程序的入口地址 - 逻辑设备表的设置问题
- 在整个系统中只设置一张LUT
- 为每个用户设置一张LUT
- 逻辑设备表LUT
用户层的I/O软件
- 系统调用与库函数
-
系统调用
系统调用将CPU的状态从用户态转换到核心态
-
库函数
内核提供了OS的基本功能,而库函数扩展了OS内核,使用户能方便取得操作系统的服务
-
- 假脱机(SPOOLing)系统
-
假脱机技术(Simultaneaus Periphemal Operating OnLine,SPOOLing技术)
把在联机情况下外围操作与CPU对数据的处理同时进行的技术称为SPOOLing技术或称为假脱机技术 -
SPOOLing的组成
SPOOLing系统主要由以下四部分构成:
- 输入井和输出井
输入井和输出并是在磁盘上开辟出来的两个存储区域 - 输入缓冲区和输出缓冲区
这是在内存中开辟的两个缓冲区,用于缓和CPU和磁盘之间速度不匹配的矛盾 - 输入进程(预输入进程)和输出进程(缓输出进程)。
- 井管理程序
用于控制作业与磁盘井之间信息的交换
- 输入井和输出井
-
SPOOLing系统的特点
- 提高了I/O的速度
- 将独占设备改造为共享设备
- 实现了虚拟设备功能
-
缓冲区管理
-
缓冲的引入
- 缓和CPU与I/O设备间速度不匹配的矛盾
- 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
- 解决数据粒度不匹配的问题
- 提高CPU和I/O设备之间的并行性
-
单缓冲区和双缓冲区
-
单缓冲区
假定从磁盘把一块数据输入到缓冲区的时间为T,OS将该缓冲区中的数据传送到用户区的时间为M,而CPU对这一块数据处理(计算)的时间为C。T和C是可以并行的。
单缓冲区处理每块数据的用时为 max(C,T)+M
-
双缓冲区
双缓冲区处理一块数据的用时为max(C+M,T)
-
-
环形缓冲区
在环形缓冲中包括多个缓冲区,其每个缓冲区的大小相同。作为输入的多缓冲区可分为三种类型:- 用于装输入数据的空缓冲区R
- 已装满数据的缓冲区G
- 计算进程正在使用的现行工作缓冲区C
-
缓冲池
- 缓冲池的组成
- 缓冲区的组成
缓冲池管理多个缓冲区,每个缓冲区由用于标识和管理的缓冲首部以及用于存放数据的缓冲体两部分组成 - 三个队列
- 空白缓冲队列emq
- 输入队列inq
- 输出队列outq
- 四种工作缓冲区
- 用于收容输入数据的工作缓冲区
- 用于提取输入数据的工作缓冲区
- 用于收容输出数据的工作缓冲区
- 以及用于提取输出数据的工作缓冲区
- 缓冲区的组成
- 缓冲区的工作方式
缓冲区可以工作在如下四种工作方式
- 缓冲池的组成
磁盘存储器的性能和调度
- 磁盘性能简述
- 数据的组织和格式
-
磁盘的结构和布局
-
磁盘格式化
为了在磁盘上存储数据,必须先将磁盘低级格式化
-
- 磁盘的类型
- 固定头磁盘
- 移动头磁盘
- 磁盘访问时间
可把对磁盘的访问时间分成以下三部分- 寻道时间
T
s
T_{s}
Ts
假设s为启动磁臂的时间;m是与磁盘驱动器速度有关的常数;n为磁头移动的磁道数
T s = m × n + s T_{s}=m \times n + s Ts=m×n+s - 旋转延迟时间
L
t
L_{t}
Lt
假设磁盘的旋转速度为r
L t = 1 2 r L_{t} = \frac{1}{2r} Lt=2r1 - 传输时间
T
t
T_{t}
Tt
假设每次所读/写的字节数为b,一条磁道上的字节数为N
T t = b r N T_{t} = \frac{b}{r N} Tt=rNb - 因此,总的平均访问时间
T
a
T_{a}
Ta
T a = T s + 1 2 r + b r N T_{a}=T_{s} + \frac{1}{2r}+ \frac{b}{rN} Ta=Ts+2r1+rNb
- 寻道时间
T
s
T_{s}
Ts
- 数据的组织和格式
- 早期的磁盘调度算法
- 先来先服务(FCFS)算法
FCFS算法根据进程请求访问磁盘的先后次序进行调度 - 最短寻道时间优先(SSTF)算法
- SSTF算法每次选择与当前磁头所在的磁道距离最近的磁道,以使每次的寻道时间最短
- SSTF算法不能保证平均寻道时间最短,可能导致优先级低的进程发生“饥饿”现象
- 基于扫描的磁盘调度算法
- 扫描((SCAN)算法
扫描算法在磁头当前移动方向上选择与当前磁头所在磁道距离最短的磁道 - 循环扫描(CSCAN)算法
为了减少 SCAN 的延迟,CSCAN算法规定磁头单向移动,到尽头后直接返回到另一端的开始位置。
- 扫描((SCAN)算法
- LOOK和CLOOK调度算法
- LOOK 算法
LOOK算法是对SCAN算法的一种改进,由于SCAN算法的磁头要走到磁盘尽头才会转换方向,而实际上并不需要走到尽头,只需要走到该方向上最后一个请求即可。- 优点:
相比 SCAN,LOOK 可以减少磁头的无效移动,从而提高效率。 - 缺点:
尽管 LOOK 比 SCAN 更有效,但它仍然可能遇到请求的分布不均匀的问题,导致某些区域的请求可能被延迟很长时间。
- 优点:
- CLOOK算法
CLOOK同理是一种对CSCAN算法的改进。
CSCAN(Circular SCAN)算法与 SCAN 类似,但是它在到达磁盘的一个端点后,并不反向扫描,而是回到磁盘的另一端继续扫描。CLOOK 算法对 CSCAN 进行了优化,避免了磁头的无效移动。- 原理
CLOOK算法会扫描请求列出的柱面,直到没有更多的请求,接着磁头会跳到最远的请求位置,而不是回到最初的位置。
磁头从当前的位置向一个方向移动,直到扫描到最远的请求柱面。
然后,磁头跳跃到请求队列中的最小请求柱面,并重新开始扫描。 - 优点
CLOOK只跳转到请求的最小位置,而不是回到磁盘的最远端,减少了磁头的无效移动,因此在磁头的移动距离上比 CSCAN 更有效。 - 缺点:
虽然CLOOK通过避免回到最远端来减少了无效移动,但它仍然依赖于请求的分布情况,可能导致某些区域的请求处理延迟
- 原理
- LOOK 算法
- 先来先服务(FCFS)算法