I/O系统管理的主要对象
➢ I/O设备和对应的设备控制器
I/O系统的主要任务
➢ 完成用户提出的I/O请求
➢ 提高I/O速率
➢ 改善I/O设备的利用率
I/O系统的上、下接口
➢ I/O系统接口(上接口)
➢ 软件/硬件接口(下接口)
➢ 在上、下接口之间是I/O系统
I/O系统的分层
➢ 中断处理程序
➢ 设备驱动程序
➢ 与设备无关的I/O软件
块设备接口
块设备:数据的存取和传输都是以数据块为单
位的设备,如磁盘、光盘,通常采用DMA I/O方式
隐藏了磁盘的二维结构
将抽象命令映射为低层操作
⚫ 如收到读磁盘命令时,先将抽象命令中的逻辑块号转换为磁盘的盘面、磁道和扇区等
流设备(字符设备)接口
字符设备:数据的存取和传输都是以字符为单位的设备,如键盘、打印机。
不可寻址。
通常采用中断驱动I/O方式。
get和put操作:字符设备采用顺序存取方式。
➢ get操作用于从字符缓冲区取得一个字符(到内存),并将它返回给调用者。
➢ put操作用于将一个新字符(从内存)输出到字符缓冲区网络。
网络通信接口:
➢ OS提供相应的网络软件和网络通信接口,以使计算机能通过网络同网络上的其他计算机进行通信,或上网浏览信息。
通常,设备并不是直接与CPU进行通信,而是与设备控制器通信,因此,在设备与设备控制器之间应有一接口,在该接口中有三类信号各对应一条信号线。
设备控制器
主要功能:控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换
设备控制器是CPU与I/O设备之间的接口,接收从CPU发来的命令,并去控制I/O设备工作
设备控制器是一个可编址的设备
➢ 当仅控制一个设备时,它只有一个唯一的设备地址
➢ 若控制器可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备
设备控制器的组成
设备控制器与处理机的接口
➢ 实现CPU与设备控制器之间的通信,包括数据线、地址线和控制线
设备控制器与设备的接口
➢ 一个设备控制器可以连接一个或多个设备
I/O逻辑
➢ 实现对设备的控制
I/O通道的引入
目的:使一些原来由CPU处理的I/O任务转由通道来承担,从而把CPU从繁杂的I/O任务中解脱出来
通道与普通处理机
➢ 通道是特殊处理机
➢ 不同点:
p 指令类型单一
p 没有自己的内存(与CPU共享内存)
I/O通道类型
字节多路通道:按字节交叉方式工作的通道
数组选择通道:可以连接多台高速设备,但在一段时间内只允许一台设备传输数据,传输率高
数组多路通道:结合前两者优点,含
有多个非分配型子通道
通道不足,造成“瓶颈”现象
➢ 通道价格昂贵
解决办法:
➢ 增加设备到CPU间的通路而不增加通道
➢ 多通路方式不仅解决了“瓶颈”问题,而且提高了系统的可靠性
I/O设备的控制方式
1.使用轮询(Poll)的可编程I/O方式
① 由CPU定时发出询问,询问设备是否忙,进程进入忙等
② 不忙即进行I/O,否则转①
➢ 实现容易,但效率偏低,CPU会长期处于忙等待
2.使用中断(Interrupt)的可编程I/O方式(广泛采用)
➢ 当某进程要启动某个I/O设备工作时,便由CPU向相应的设备控制器发出一条I/O命令,然后立即返回继续执行原来的任务。设备控制器于是按照该命令的要求去控制指定的I/O设备。此时,CPU与I/O设备并行操作。
3. 直接存储器访问(DMA,Direct-Memory Access)方式
➢ DMA的引入:进一步减少CPU对I/O设备的干预
p 数据传输的基本单位是数据块
p 所传送的数据是从I/O设备直接送入内存的,或者相反
p 仅在传送一个或多个数据块的开始和结束时,才须CPU干预
4. I/O通道控制方式
引入:是DMA方式的发展,可进一步减少CPU的干预。
p 是对一组数据块以读/写及有关的控制和管理为单位干预;
p 可实现CPU、通道和I/O设备三者的并行操作。
通道程序:由一系列通道指令所构成的。
p 通道指令不同于CPU指令。
p 指令包含:操作码、内存地址、计数、通道程序结束位P、记录结束位R
中断简介
中断和陷入
➢ 中断(Interrupt)是指CPU对I/O设备发来的中断信号的一种响应
➢ 陷入(Trap)是指CPU内部事件所引起的中断
中断向量表
➢ 中断向量表存放每个设备的中断处理程序的入口地址,并为每个设备的中断请求作为一个中断号,对应于中断向量表中的一个表项
中断优先级
➢ 系统为每个中断源规定不同的优先级
对多中断源的处理方式
◼ 中断源:引起中断的事件
◼ 当处理机正在处理一个中断时,又来了一个新的中断请求,有两种处理方式:
➢ 屏蔽(禁止)中断
➢ 嵌套中断
设备驱动程序概述
设备驱动程序的功能
➢ 接收上层软件发来的抽象I/O请求,再把它们转换为具体要求后,发送给设备控制器,启动设备去执行设备驱动程序的特点
➢ 实现与设备无关的软件和设备控制器直接通信和转换的程序
➢ 与设备控制器以及I/O设备特性紧密相关 ➢ 基本部分固化在ROM中
➢ 与I/O设备所采用的I/O控制方式紧密相关 ➢ 允许可重入
设备处理方式
➢ 为每类设备设置一个进程,专门用于执行这类设备的I/O操作
➢ 在整个系统中设置一个I/O进程,专门用于执行系统中各类设备的I/O操作
➢ 不设置专门的设备处理进程,而只为各类设备设置相应的设备驱动程序
设备驱动程序与外界的接口
◼ 设备驱动程序与操作系统内核的接口
◼ 设备驱动程序与系统引导的接口
◼ 设备驱动程序与设备的接口
设备驱动程序的组成
◼ 设备驱动程序的注册与注销
◼ 设备的打开与释放
◼ 设备的读/写操作
◼ 设备的控制操作
◼ 设备的中断与轮询
与设备无关软件的基本概念
以物理设备名使用设备
➢ 非常不灵活,使用不方便
引入了逻辑设备名
➢ 逻辑设备是抽象的设备名,如/dev/printer
➢ 可实现I/O重定向(指用于I/O操作的设备可以更换,而不必改变应用程序)
逻辑设备名到物理设备名的转换
➢ 必须具备将逻辑设备名转换为物理设备名的功能
➢ 系统配备逻辑设备表
在应用程序中请求使用I/O设备时,应使用逻辑设备名;而系统只识别物理设备名
逻辑设备表LUT:用于将逻辑设备名映射为物理设备名
➢ 包含:逻辑设备名、物理设备名和设备驱动程序入口地址
➢ 设置方式:整个系统一张LUT;每个用户一张LUT
大部分I/O软件都放在OS内部,仍有一小部分在用户层
假脱机技术
为了缓和CPU的高速性与I/O设备的低速性间的矛盾而引入了脱机输入、脱机输出技术。
➢ 利用一个程序模拟脱机输入时的外围控制机功能,把低速I/O设备上的数据传送到高速磁盘上
➢ 用另一道程序模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备
外围操作与CPU对数据的处理同时进行,这种在联机情况下实现的同时
外围操作称为SPOOLing (Simultaneous Peripheral Operations On Line),或假脱机技术
输入井和输出井
➢ 在磁盘上开辟的两个大存储空间
➢ 输入井:模拟脱机输入时的磁盘设备,用于暂存输入设备输入的数据
➢ 输出井:模拟脱机输出时的磁盘,用于暂存用户程序的输出数据
输入缓冲区和输出缓冲区
➢ 缓和CPU和磁盘之间速度不匹配的矛盾
➢ 输入缓冲区:用于暂存由输入设备送来的数据,以后再传送到输入井。
➢ 输出缓冲区:用于暂存从输出井送来的数据,以后再传送给输出设备
提高了I/O的速度
将独占设备改造为共享设备
实现了虚拟设备功能
假脱机打印机系统
打印机属于独占设备。利用SPOOLing技术,可将之改造为一台可供多个用户共享的设备,从而提高设备的利用率,也方便了用户。
共享打印机技术已被广泛用于多用户系统和局域网络(添加方法)中
◼ 磁盘缓冲区:磁盘空间,暂存用户程序的输出数据
◼ 打印缓冲区:设在内存,暂存从磁盘缓冲区送来的数据
◼ 假脱机管理进程和假脱机打印进程
➢ 假脱机管理进程为每个要求打印的用户数据建立一个假脱机文件,并放入文件队列中
➢ 假脱机打印进程依次对队列中的文件进行打印
缓冲区管理
现代操作系统中,几乎所有的I/O设备在与CPU交换数据时,都用了缓冲区
缓冲区是一个存储区域,可以由专门的硬件组成;更多的是利用内存
缓冲管理的主要功能是组织好这些缓冲区,并提供获得和释放缓冲区的手段
单缓冲
◼ 每当用户进程发出一I/O请求时,操作系统便在主存中为之分配一缓冲区
◼ 在块设备输入时,
➢ T:从磁盘把一块数据输入到缓冲区的时间
➢ M:操作系统将该缓冲区中的数据传送到工作区的时间
➢ C:CPU对这块数据处理的时间。
➢ 当T>C时,系统对每一块数据的处理时间为M+T(C忽略)
➢ 反之,则为M+C
➢ 系统对每一块数据的处理时间为:Max(C,T)+M
双缓冲
环形缓冲区
当输入与输出若两者的速度相差悬殊,双缓冲的效果则不够理想,不过可以随着缓冲区数量的增加,使情况有所改善。
引入多缓冲机制,可将多个缓冲组织为循环缓冲。
多个缓冲区
➢ 在循环缓冲中包含多个缓冲区,其每个缓冲区的大小相同。
➢ 作为输入的多缓冲区可分为三种类型
⚫ 用于装输入数据的空缓冲区R
⚫ 已装满数据的缓冲区G
⚫ 计算进程正在使用的现行工作缓冲区C
多个指针
➢ 作为输入的缓冲区可设置3个指针
⚫ 用于指示计算进程下一个可用缓冲区G的指针Nextg
⚫ 指示输入进程下次可用的空缓冲区R的指针Nexti
⚫ 用于指示计算进程正在使用的缓冲区C的指针Current
缓冲池
缓存(Cache)
缓存是保存数据副本的高速内存区域:
➢ CPU缓存、磁盘缓存、光驱缓存等。
CPU缓存(高速缓存):
➢ 为了缓和CPU运行速率与内存读/写速率不匹配的矛盾;
➢ 当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;若没有找到,则从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据库调入缓存中。
缓存和缓冲:
➢ 缓冲可以保存数据项的唯一的现有版本。
➢ 缓存只是提供一个位于其他地方的数据项的更快存储副本。
➢ 有时,同一个内存区,既可以是缓冲,也可以是缓存。
磁盘性能简述
磁盘的结构
➢ 盘面(磁头):磁盘设备可包含一或多个盘片,每个盘片分为一个或两个盘面,每个面上有一个读写磁头
➢ 磁道(柱面):每个盘面可分成若干条磁道
➢ 扇区:每条磁道逻辑上分成若干个大小相同的扇区。每个扇区的大小相当于一个盘块(数据块)
➢ 每条磁道上可存储相同数目的二进制位
➢ 磁盘密度即每英寸中所存储的位数,显然是内层磁道的密度较外层磁道的密度高
容量=柱面×磁头×扇区,每扇区存放512B数据
为了在磁盘上存储数据,必须先将磁盘格式化
如每条磁道含有30个固定大小的扇区,每个扇区容量为600个字节,其中512个字节存放数据,其余的用于存放控制信息
每个扇区包括2个字段:
➢ 标识符字段:其中一个字节的SYNCH具有特定的位图像,作为该字段的定界符,利用磁道号、磁头号及扇区号三者来标识一个扇区;CRC字段用于段校验
➢ 数据字段:存放512个字节的数据
磁盘的访问时间
➢ 寻道时间 ➢ 旋转延迟时间 ➢ 传输时间
传输时间Tt
访问时间Ta
先来先服务FCFS
最简单的磁盘调度算法
根据进程请求访问磁盘的先后次序进行调度。
优点:公平、简单,每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。
缺点:由于未对寻道进行优化,致使平均寻道时间可能较长。FCFS仅适用于请求磁盘I/O的进程数目较少的场合。
最短寻道时间优先SSTF
选择这样的进程,其要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,但不保证平均寻道时间最短
进程“饥饿”现象
➢ SSTF寻道性能好,但可能导致某个进程发生“饥饿”现象。改进SSTF后,可防止进程出现“饥饿”现象。
SCAN算法
➢ 也称:电梯调度算法。
➢ 不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头当前的移动方向。
➢ 磁臂从磁盘的一端向另一段移动,沿途响应服务请求。当到达另一端时,磁头改变移动方向,继续处理。磁头在磁盘上来回扫描。
循环扫描算法CSCAN
CSCAN算法提供比SCAN算法更为均匀的等待时间。
磁头从磁盘一段移到另一端,随着移动不断的处理请求。不过,当磁头移到另一端时,马上返回到磁盘开始,返回时并不处理请求。
将柱面当作一个环链,将最后柱面和第一柱面相连。
NStepSCAN算法:
➢ “磁臂粘着”现象:进程反复请求对某一磁道的I/O操作;
➢ 将磁盘请求队列分为若干个长度为N的子队列;
➢ 按FCFS算法依次处理子队列;
➢ 每个子队列使用SCAN算法。
FSCAN算法:
➢ 是N步SCAN算法的简化;
➢ 请求队列分为两个子队列:
⚫ 一是当前所有请求队列,按SCAN算法调度;
⚫ 二是扫描期间,新出现的请求队列,推迟到下一次扫描时处理。