目录
5.2.2最短寻道时间优先调度算法SSTF(Shortest Seek Time First)
一、I/O系统的功能、模型与接口
I/O系统管理的主要对象:I/O设备(机械部分)和对应的设备控制器(电子部分)
I/O系统的主要任务:完成用户提出的I/O请求、提高I/O速率、改善I/O设备的
1.1I/O系统的基本功能
(1)能够隐藏物理设备的细节
抽象为少量的读写命令,read、write (避免直接面对种类繁多、差异性巨大的硬件)
(2)能够保证OS与设备无关
使用抽象的逻辑设备名来使用设备
(3)能够提高处理机和I/O设备的利用率
尽可能让处理机和I/O设备并行操作
(处理机能快速响应用户的I/O请求)
(尽量减少每个I/O设备运行时处理机的干预时间)
(4)能够对I/O设备进行控制
①轮询 ②中断 ③直接存储器访问DMA ④I/O通道
(5)能够确保对设备的正确共享
①独占设备 ② 共享设备
(6)能够处理错误
①临时性 ②持久性
1.2I/O系统的层次结构与模型
层次结构:
各种I/O模块之间的层次视图:
I/O系统的上、下接口:
I/O系统接口(上接口:面向用户)
软件/硬件接口(下接口:面向硬件)
在上、下接口之间是I/O系统
I/O系统的分层 :
①中断处理程序 ② 设备驱动程序 ③ 与设备无关的I/O软件 (3+1:即,用户层软件)
1.3I/O系统的接口
1. 块设备接口:
(1)块设备:数据的存取和传输都是以数据块为单位的设备,如磁盘、光盘,通常采用DMA I/O方式。可寻址,速率高。
(2)隐藏了磁盘的二维结构 (磁道号和扇区号)
(3) 将抽象命令映射为低层操作:如收到读磁盘命令时,先将抽象命令中的逻辑块号转换为磁盘的盘面、磁道和扇区等
2. 流设备(字符设备)接口:
(1)字符设备:数据的存取和传输都是以字符为单位的设备,如键盘、打印机。 不可寻址,速率低。 通常采用中断驱动I/O方式。
(2)get和put操作:字符设备采用顺序存取方式。
get操作用于从字符缓冲区取得一个字符(到内存),并将它返回给调用者。
put操作用于将一个新字符(从内存)输出到字符缓冲区网络。
(3)in-control指令:包含许多参数,每个参数均表示一个与具体设备相关的特定功能。
3. 网络通信接口:
OS提供相应的网络软件和网络通信接口,以使计算机能通过网络同网络上的其他计算机进行通信,或上网浏览信息。
二、I/O设备和设备控制器
2.1I/O设备
1.I/O设备的类型
(1)按使用特性分类:存储设备、I/O设备
(2)按传输速率分类:
低速设备:键盘、鼠标器、语音的输入和输出等
中速设备:行式打印机、激光打印机等
高速设备:磁带机、磁盘机、光盘机等
(3)按信息交换单位分类:块设备、字符设备
(4)按设备的共享属性分类:独占设备、共享设备
2. 设备与控制器之间的接口
通常,设备并不是直接与CPU进行通信,而是与设备控制器通信,因此,在设备与设备控制器之间应有一接口,在该接口中有三类信号各对应一条信号线。
2.2设备控制器
主要功能:控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。
设备控制器是CPU与I/O设备之间的接口,接收从CPU发来的命令,并去控制I/O设备工作。
设备控制器是一个可编址的设备:
当仅控制一个设备时,它只有一个唯一的设备地址
若控制器可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备
1.设备控制器的基本功能
功能:(1)接收和识别命令 (2)数据交换 (3)标识和报告设备的状态
(4)地址识别 (5)数据缓冲区 (6)差错控制
2.设备控制器的组成
(1) 设备控制器与处理机的接口:实现CPU与设备控制器之间的通信,包括数据线、地址线和控制线
(2) 设备控制器与设备的接口:一个设备控制器可以连接一个或多个设备
(3) I/O逻辑:实现对设备的控制
2.3内存映像I/O
驱动程序将抽象I/O命令转换成具体的命令和参数等装入设备控制器的相应寄存器,由控制器执行这些命令,具体实施对I/O设备的控制。具体方法:
1. 采用特定I/O指令:访问内存和设备需要两种不同的指令。
2. 采用内存映像I/O形式:
在编址上不再区分内存单元地址和设备控制器中的寄存器地址,统一编址 k 。 k在0~n-1范围时,为内存地址;若k>=n时,为某控制器的寄存器地址。
统一了访问方法,简化了I/O编程。
2.4I/O通道
1. I/O通道的引入
目的:使一些原来由CPU处理的I/O任务转由通道来承担,从而把CPU从繁杂的I/O任务中解脱出来
通道与普通处理机:
通道是特殊处理机
不同点: 指令类型单一(通道硬件比较简单);没有自己的内存(与CPU共享内存)
2. I/O通道类型
(1)字节多路通道:按字节交叉方式工作的通道
(2)数组选择通道:可以连接多台高速设备,但在一段时间内只允许一台设备传输数据,传输率高
(3)数组多路通道:结合前两者优点,含有多个非分配型子通道
3.“瓶颈”问题
通道不足,造成“瓶颈”现象:通道价格昂贵(特殊处理机)
解决办法:
增加设备到CPU间的通路而不增加通道。
多通路方式不仅解决了“瓶颈”问题,而且提高了系统的可靠性。(不真实存在)
单通路I/O系统:
多通路I/O系统:
增加设备到CPU间的通路而不增加通道
多通路方式不仅解决了“瓶颈”问题,而且提高了系统的可靠性
2.5I/O设备的控制方式
1.使用轮询的可编程I/O方式(基本不用)
(1)由CPU定时发出询问,询问设备是否忙,进程进入忙等
(2)不忙即进行I/O,否则转(1)
实现容易,但效率偏低,CPU会长期处于忙等待
2.使用中断的可编程I/O方式(广泛采用)
当某进程要启动某个I/O设备工作时,便由CPU向相应的设备控制器发出一条I/O命令,然后立即返回继续执行原来的任务。设备控制器于是按照该命令的要求去控制指定的I/O设备。此时,CPU与I/O设备并行操作。
3.直接存储器访问(DMA)方式
DMA的引入:进一步减少CPU对I/O设备的干预
数据传输的基本单位是数据块
所传送的数据是从I/O设备直接送入内存的,或者相反
仅在传送一个或多个数据块的开始和结束时,才须CPU干预
4.I/O通道控制方式
引入:是DMA方式的发展,可进一步减少CPU的干预。
是对一组数据块以读/写及有关的控制和管理为单位干预;
可实现CPU、通道和I/O设备三者的并行操作。
通道程序:由一系列通道指令所构成的。
通道指令不同于CPU指令。
指令包含:操作码、内存地址、计数、通道程序结束位P、记录结束位R。
知识回顾
三、I/O软件
中断简介:
1.中断和陷入:
中断(Interrupt)是指CPU对I/O设备发来的中断信号的一种响应
陷入(Trap)是指CPU内部事件所引起的中断
2.中断向量表:
中断向量表存放每个设备的中断处理程序的入口地址,并为每个设备的中断请求作为一个中断号,对应于中断向量表中的一个表项
3.中断优先级:系统为每个中断源规定不同的优先级
对多中断源的处理方式:
中断源:引起中断的事件
当处理机正在处理一个中断时,又来了一个新的中断请求,有两种处理方式: 屏蔽(禁止)中断、嵌套中断
3.1中断处理程序
(1)测定是否有未响应的中断信号 (2)保护被中断进程的CPU现场
(3)转入相应的设备处理程序 (4)处理中断 (5)恢复CPU现场并退出中断
Linux系统中断处理:
采用了上半部和下半部机制:
上半部:中断处理程序。
简单快速,执行时禁止一些或全部中断。
下半部:一些虽然与中断有关但是可以延后执行的任务。
稍后执行,执行时可以响应所有的中断。
中断处理程序的设计: 注册中断 处理中断 注销中断
3.2设备驱动程序
1. 设备驱动程序的功能
接收上层软件发来的抽象I/O请求,再把它们转换为具体要求后,发送给设备控制器,启动设备去执行
2. 设备驱动程序的特点
① 实现与设备无关的软件和设备控制器直接通信和转换的程序
② 与设备控制器以及I/O设备特性紧密相关
③ 基本部分固化在ROM中
④ 与I/O设备所采用的I/O控制方式紧密相关
⑤ 允许可重入
3.设备处理方式
① 为每类设备设置一个进程,专门用于执行这类设备的I/O操作
② 在整个系统中设置一个I/O进程,专门用于执行系统中各类设备的I/O操作
③ 不设置专门的设备处理进程,而只为各类设备设置相应的设备驱动程序
4.设备驱动程序的处理过程
①将抽象要求转换为具体要求 ② 对服务请求进行校验
③ 检查设备的状态 ④ 传送必要的参数 ⑤ 启动I/O设备
5.设备驱动程序的框架
(1)设备驱动程序与外界的接口
①设备驱动程序与操作系统内核的接口
②设备驱动程序与系统引导的接口
③设备驱动程序与设备的接口
(2)设备驱动程序的组成
①设备驱动程序的注册与注销
②设备的打开与释放
③设备的读/写操作
④设备的控制操作
⑤ 设备的中断与轮询
3.3与设备无关的I/O软件
以物理设备名使用设备:非常不灵活,使用不方便。
引入了逻辑设备名:
逻辑设备是抽象的设备名,如/dev/printer。
可实现I/O重定向(指用于I/O操作的设备可以更换,而不必改变应用程序)。
逻辑设备名到物理设备名的转换:
必须具备将逻辑设备名转换为物理设备名的功能
系统配备逻辑设备表
3.3.1与设备无关软件的共有操作
1. 提供设备驱动程序的统一接口 2. 缓冲管理 3. 差错控制
4. 独占设备的分配与回收 5. 提供独立于设备的逻辑数据块
3.3.2设备分配
数据结构:
设备控制表DCT– 记录设备的情况
控制器控制表COCT、通道控制表CHCT和系统设备表SDT
设备分配时应考虑的因素:
独占设备、共享设备、虚拟设备的分配策略
分配算法:先来先服务、优先级高者优先
安全性考虑:安全分配、不安全分配
独占设备的分配程序:
基本分配程序:分配设备、分配控制器、分配通道
分配程序改进
(1)设备控制表DCT
(2)控制器控制表、通道控制表
(3)系统设备表SDT
3.3.3逻辑设备名映射到物理设备名
在应用程序中请求使用I/O设备时,应使用逻辑设备名;而系统只识别物理设备名
逻辑设备表LUT:用于将逻辑设备名映射为物理设备名
包含:逻辑设备名、物理设备名和设备驱动程序入口地址
设置方式:整个系统一张LUT;每个用户一张LUT
3.3.4I/O调度
调度一组I/O请求:
就是按照确定好的顺序来执行I/O操作;
提高计算机效率。
通过I/O调度可以:
改善系统整体性能;
在进程间公平共享设备访问;
减少完成I/O调度所需的平均等待时间。
实现:为每个设备维护一个请求等待队列。
3.4用户层的I/O软件
大部分I/O软件都放在OS内部,仍有一小部分在用户层
3.4.1系统调用和库函数
1. 系统调用:应用程序通过系统调用间接调用OS中的I/O过程,对I/O设备进行操作。
2. 库函数:Win32 API 、C 语言或UNIX系统中,系统调用与库函数,几乎一一对应。
3.4.2假脱机系统
1. 假脱机技术
为了缓和CPU的高速性与I/O设备的低速性间的矛盾而引入了脱机输入、脱机输出技术。
利用一个程序模拟脱机输入时的外围控制机功能,把低速I/O设备上的数据传送到高速磁盘上。
用另一道程序模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备。
外围操作与CPU对数据的处理同时进行,这种在联机情况下实现的同时外围操作称为SPOOLing (Simultaneous Peripheral Operations On-Line),或假脱机技术。
2. SPOOLing系统的组成
输入井和输出井:
在磁盘上开辟的两个大存储空间
输入井:模拟脱机输入时的磁盘设备,用于暂存输入设备输入的数据。
输出井:模拟脱机输出时的磁盘,用于暂存用户程序的输出数据。
输入缓冲区和输出缓冲区:
缓和CPU和磁盘之间速度不匹配的矛盾
输入缓冲区:用于暂存由输入设备送来的数据,以后再传送到输入井。
输出缓冲区:用于暂存从输出井送来的数据,以后再传送给输出设备。
3.SPOOLing系统的Demo
4.SPOOLing系统的工作原理
5.SPOOLing系统的特点
以打印机为例:(1)提高了I/O的速度 (2)将独占设备改造为共享设备
(3)实现了虚拟设备功能
6.假脱机打印机系统
打印机属于独占设备。利用SPOOLing技术,可将之改造为一台可供多个用户共享的设备,从而提高设备的利用率,也方便了用户。
共享打印机技术已被广泛用于多用户系统和局域网络(添加方法)中:
① 磁盘缓冲区:磁盘空间,暂存用户程序的输出数据
② 打印缓冲区:设在内存,暂存从磁盘缓冲区送来的数据
③ 假脱机管理进程和假脱机打印进程
假脱机管理进程为每个要求打印的用户数据建立一个假脱机文件,并放入文件队列中
假脱机打印进程依次对队列中的文件进行打印
假脱机打印系统的组成:
共享打印机:
假脱机管理进程:
在磁盘缓冲区中为之申请一个空闲盘块,并将要打印的数据送入其中暂存。
为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入表中,再将该表挂到假脱机文件队列上。
假脱机打印进程:
当打印机空闲时,进程从请求打印队列的队首取出一张请求打印表,根据表中的要求将要打印的数据,从输出井传送到内存缓冲区,再由打印机进行打印。
打印完,进程再次察看请求打印队列,若非空,重复上述工作,直到队列为空。此后进程才将自己阻塞起来。仅当下次再有打印请求时,进程才被唤醒。
7.守护进程(daemon)
方案修改:取消假脱机管理进程,为打印机建立一个守护进程,由它执行一部分原来的假脱机管理进程的功能。
守护进程是允许使用打印机的唯一进程。
知识回顾
四、缓冲区管理
现代操作系统中,几乎所有的I/O设备在与CPU交换数据时,都用了缓冲区。
缓冲区是一个存储区域,可以由专门的硬件组成;更多的是利用内存。
缓冲管理的主要功能是组织好这些缓冲区,并提供获得和释放缓冲区的手段。
4.1缓冲的引入
引入缓冲的主要原因:
1. 缓和CPU与I/O设备间速度不匹配的矛盾
2. 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
3. 解决数据粒度不匹配的问题
4. 提高CPU与I/O设备之间的并行性
4.2单缓冲与双缓冲
单缓冲
每当用户进程发出一I/O请求时,操作系统便在主存中为之分配一缓冲区。
在块设备输入时,
T:从磁盘把一块数据输入到缓冲区的时间
M:操作系统将该缓冲区中的数据传送到工作区的时间 C:CPU对这块数据处理的时间。
当T>C时,系统对每一块数据的处理时间为M+T(C忽略)
反之,则为M+C
系统对每一块数据的处理时间为:Max(C,T)+M
单缓冲工作示意图:
缓冲区不能又读又写(T、M/C、M不并行)
双缓冲:
双缓冲机制(缓冲对换)。
在设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。
此时操作系统可以从第一缓冲区移出数据,并送入用户进程。接着由CPU对数据进行计算。
在双缓冲时,系统处理一块数据的时间可以粗略地认为是Max(C,T),如果C>T,则可使CPU不必等待设备输入。
双缓冲工作示意图:
4.3环形缓冲区
当输入与输出若两者的速度相差悬殊,双缓冲的效果则不够理想,不过可以随着缓冲区数量的增加,使情况有所改善。
引入多缓冲机制,可将多个缓冲组织为循环缓冲。
1. 环形缓冲区的组成:
(1)多个缓冲区:
在循环缓冲中包含多个缓冲区,其每个缓冲区的大小相同。
作为输入的多缓冲区可分为三种类型:
用于装输入数据的空缓冲区R
已装满数据的缓冲区G
计算进程正在使用的现行工作缓冲区C
(2)多个指针:
作为输入的缓冲区可设置3个指针:
用于指示计算进程下一个可用缓冲区G的指针Nextg
指示输入进程下次可用的空缓冲区R的指针Nexti
用于指示计算进程正在使用的缓冲区C的指针Current
2. 环形缓冲区的使用:
Getbuf过程:
计算进程要使用缓冲区的数据时调用该过程,将指针Nextg所指示的缓冲区提供给进程使用,修改Nextg和Current指针。
输入进程要使用空缓冲装数据时调用该过程,将指针Nexti所指示的缓冲区提供给进程使用,修改Nexti。
Releasebuf过程:
当计算进程把C缓冲区中的数据提取完毕时,调用过程,将缓冲区C释放。
当输入进程把缓冲区装满时,调用过程,将该缓冲区释放,并将其改为可用缓冲区G。
进程间的同步问题:Nexti指针追赶上Nextg指针; Nextg指针追赶上Nexti指针
4.4缓冲池
当系统较大时,将会有许多循环缓冲,这不仅要消耗大量的内存空间,而且利用率不高。
为了提高缓冲区的利用率,引入公用缓冲池,在池中设置了多个可供若干个进程共享的缓冲区。
1.缓冲池的组成:
对于既可用于输入又可用于输出的公用缓冲池:
空闲缓冲队列emq:空缓冲区所链成的队列。
输入队列inq:装满输入数据的缓冲区所链成的队列。
输出队列out:装满输入数据的缓冲区所链成的队列。
4种工作缓冲区:收容输入缓冲区、提取输入缓冲区、收容输出缓冲区、提取输出缓冲区。
2.缓冲池的工作方式:
Getbuf和putbuf过程:
对缓冲池中的队列进行操作
既可实现互斥又可保证同步
工作方式:收容输入、提取输入、收容输出、提取输出
4.5缓存(Cache)
缓存是保存数据副本的高速内存区域:CPU缓存、磁盘缓存、光驱缓存等。
CPU缓存(高速缓存):
为了缓和CPU运行速率与内存读/写速率不匹配的矛盾;
当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;若没有找到,则从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据库调入缓存中。
缓存和缓冲:
缓冲可以保存数据项的唯一的现有版本。
缓存只是提供一个位于其他地方的数据项的更快存储副本。
有时,同一个内存区,既可以是缓冲,也可以是缓存。
五、磁盘性能概述和磁盘调度
5.1磁盘性能概述
磁盘的结构:
盘面(磁头):磁盘设备可包含一或多个盘片,每个盘片分为一个或两个盘面,每个面上有一个读写磁头。
磁道(柱面):每个盘面可分成若干条磁道。
扇区:每条磁道逻辑上分成若干个大小相同的扇区。每个扇区的大小相当于一个盘块(数据块)。
每条磁道上可存储相同数目的二进制位。
磁盘密度即每英寸中所存储的位数,显然是内层磁道的密度较外层磁道的密度高。
磁盘容量计算:
1. 数据的组织和格式:
为了在磁盘上存储数据,必须先将磁盘格式化。
如每条磁道含有30个固定大小的扇区,每个扇区容量为600个字节,其中512个字节存放数据,其余的用于存放控制信息。
每个扇区包括2个字段:
标识符字段:其中一个字节的SYNCH具有特定的位图像,作为该字段的定界符,利用磁道号、磁头号及扇区号三者来标识一个扇区;CRC字段用于段校验。
数据字段:存放512个字节的数据。
磁盘的格式化:
2.磁盘的类型:
分类1:硬盘、软盘
分类2:单片盘、多片盘
分类3:
固定头磁盘:每个磁道上都有一个读写磁头
并行方式读/写,有效提高磁盘的I/O速度
主要用于大容量磁盘
移动头磁盘:每个盘面仅配有一个磁头,能移动寻道
串行方式读/写,I/O速度较慢
广泛应用于中、小型磁盘设备中
磁盘访问时间:
磁盘在工作时是以恒定速率旋转。
为了读写:
磁头必须移动到所要求的磁道上
并等待所指定的扇区的开始位置旋转到磁头下
开始读写数据
磁盘的访问时间:(1)寻道时间 (2)旋转延迟时间 (3)传输时间
(1)寻道时间Ts:
把磁臂(磁头)移动到指定磁道上所经历的时间。
启动磁臂的时间k
磁头移动n条磁道所花费的时间
(2)磁盘访问时间(平均旋转延迟时间Tτ ):
(3)传输时间Tt:把数据从磁盘读出或向磁盘写入数据所经历的时间
访问时间Ta:
5.2早期的磁盘调度算法
5.2.1先来先服务调度算法FCFS
最简单的磁盘调度算法。
根据进程请求访问磁盘的先后次序进行调度。
优点:公平、简单,每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。
缺点:由于未对寻道进行优化,致使平均寻道时间可能较长。 FCFS仅适用于请求磁盘I/O的进程数目较少的场合。
FCFS示例:
5.2.2最短寻道时间优先调度算法SSTF(Shortest Seek Time First)
选择这样的进程,其要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,但不保证平均寻道时间最短
SSTF的平均每次磁头移动的距离,明显低于FCFS的距离,因而SSTF比FCFS寻道性能更好
SSTF示例:
5.2.3基于扫描的磁盘调度算法SCAN
进程“饥饿”现象:SSTF寻道性能好,但可能导致某个进程发生“饥饿”现象。改进SSTF后,可防止进程出现“饥饿”现象。
SCAN算法:也称:电梯调度算法。
不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头当前的移动方向。
磁臂从磁盘的一端向另一段移动,沿途响应服务请求。当到达另一端时,磁头改变移动方向,继续处理。磁头在磁盘上来回扫描。
SCAN示例:
5.2.4循环扫描调度算法CSCAN
CSCAN算法提供比SCAN算法更为均匀的等待时间。
磁头从磁盘一段移到另一端,随着移动不断的处理请求。不过,当磁头移到另一端时,马上返回到磁盘开始,返回时并不处理请求。
将柱面当作一个环链,将最后柱面和第一柱面相连。
CSCAN示例:
5.2.5CLOOK
C-SCAN的一种形式。
磁头只移动到一个方向上最远的请求为止。接着,它马上回头,而不是继续到磁盘的尽头。
5.2.6NStepSCAN和FSCAN调度算法
NStepSCAN算法:
“磁臂粘着”现象:进程反复请求对某一磁道的I/O操作;
将磁盘请求队列分为若干个长度为N的子队列;
按FCFS算法依次处理子队列;
每个子队列使用SCAN算法。
FSCAN算法:
是N步SCAN算法的简化;
请求队列分为两个子队列: 一是当前所有请求队列,按SCAN算法调度; 二是扫描期间,新出现的请求队列,推迟到下一次扫描时处理。
标签:慕课,操作系统,缓冲,进程,缓冲区,磁盘,CPU,输入,设备 From: https://blog.csdn.net/w18781614420/article/details/139372385