第五章 设备管理 5.1 I/O系统 5.2 I/O控制方式 5.3 缓冲管理 5.4 设备分配 5.5 设备处理 5.6 磁盘存储器管理
5.1 I/O 系 统 5.1.1 I/O设备 1.设备管理的任务与功能 设备管理的任务 按用户提出的要求完成I/O操作 尽量提高输入输出设备的利用率 设备管理的功能 分配设备 缓冲管理 虚拟设备技术 设备无关性
2. I/O设备的类型 按用户和系统分类 按信息交换的单位分类 按设备的共享属性 按设备硬件物理特性分类 按传输速率分类
1)按用户和系统分类 系统设备(一般是标准设备) 在操作系统生成时已登记于系统中标准设备 用户设备(一般为非标准设备) 在系统生成时未登入系统的非标准设备
2)按信息交换的单位分类 字符设备(character device) 以字符为单位进行输入输出设备 一般指慢速设备(打印机) 块设备(block device) 以块为单位进行输入输出设备
3)按设备的共享属性 独享设备: 为保证传递信息的连贯性,通常这类设备一经分配给某一作业,就在作业整个运行期间都为它占用。 共享设备 允许多个用户同时共享的设备 虚拟设备 通过SPOOLING技术把原来独享的设备改造成能为多个用户共享的设备
4)按设备硬件物理特性分类 顺序存取设备 存取时间与物理上当前位置有关 直接存取设备 存取时间与物理上的当前位置关系不大
5)按传输速率分类 低速设备 传输速率仅为每秒几个字节至数百个字节 中速设备 传输速度在每秒数千个字节至数十万个字节 高速设备 传输速度在每秒数百个千 字节至千兆字节
5.1.2 I/O设备和设备控制器 I/O设备一般由机械和电子两部分组成,通常将这两部分分开处理,以提供更加模块化、更加通用的设计。 电子部分称作设备控制器或适配器(Device Controller或Adapter)。 机械部分就是设备本身,控制器通过电缆与设备内部相连。
1.设备控制器的功能 1)接收和识别CPU发来的多种不同命令; 2)实现CPU与控制器之间、控制器和设备之间的数据交换; 3)记录和报告设备的状态。 4)地址识别。识别控制器控制的每个设备的地址 5)数据缓冲。缓和cpu和外设的速度差异 6)差错控制。负责差错检查,保证数据传输的正确性
2.设备控制器的组成
(1)设备控制器与处理机的接口 采用三总线结构:数据线,地址线,控制线 (2)设备控制器与设备的接口 一个控制器可连接多个外设:通常有3种信号:数据,控制,状态 (3)I/O逻辑 实现对设备的控制
5.1.3 I/O通道 1. I/O通道(I/O Channel) 计算机中设计了一个专门负责外设I/O的处理器,置于CPU和设备控制器之间,称这个I/O处理器为I/O通道。 设计目的是:建立独立的I/O操作,使数据的传送独立于CPU,并尽量使有关I/O操作的组织、管理及结束也独立,以保证CPU有更多时间进行数据处理。
通道通过执行通道程序,并与设备控制器一起共同实现对I/O设备的控制。 通道程序是由一系列的通道指令(或称为通道命令)所构成。通道指令和一般的机器指令不同,在它的每条指令中通常包含下列信息:操作码,内存地址,计数,通道程序结束位P,记录结束标志R。
2. 通道类型 1) 字节多路通道(Byte Multiplexor Channel) 图 5-3 字节多路通道的工作原理
2) 数组选择通道(Block Selector Channel) 数组选择通道用于连接多台高速设备,但由于它只含有一个分配型子通道,在一段时间内只能执行一道通道程序, 控制一台设备进行数据传送, 致使当某台设备占用了该通道后,便一直由它独占, 即使是它无数据传送,通道被闲置, 也不允许其它设备使用该通道, 直至该设备传送完毕释放该通道。可见,这种通道的利用率很低。
3) 数组多路通道(Block Multiplexor Channel) 数组多路通道是将数组选择通道传输速率高和字节多路通道能使各子通道(设备)分时并行操作的优点相结合而形成的一种新通道。它含有多个非分配型子通道, 因而这种通道既具有很高的数据传输速率,又能获得令人满意的通道利用率。也正因此,才使该通道能被广泛地用于连接多台高、中速的外围设备,其数据传送是按数组方式进行的。
3. “瓶颈”问题 单通路I/O系统
多通路I/O系统
5.2 I/O控制方式 I/O控制方式主要有三种: 程序I/O方式 中断驱动I/O控制方式 直接存储访问DMA控制方式 I/O通道控制方式
中断机构和中断处理程序 中断在操作系统中有着特殊重要的地位,它是多道程序得以实现的基础,没有中断,就不可能实现多道程序,因为进程之间的切换是通过中断来完成的。另一方面,中断也是设备管理的基础,为了提高处理机的利用率和实现CPU与I/O设备并行执行,也必需有中断的支持。中断处理程序是I/O系统中最低的一层,它是整个I/O系统的基础。
5.2.1 中断简介 1. 中断和陷入 1) 中断 2. 中断向量表和中断优先级 1) 中断向量表 3. 对多中断源的处理方式 2) 陷入 2) 中断优先级 3. 对多中断源的处理方式 屏蔽(禁止)中断 2) 嵌套中断
对多中断的处理方式
5.2.2 中断处理程序 当一个进程请求I/O 操作时,该进程将被挂起,直到I/O设备完成I/O操作后,设备控制器便向CPU发送一个中断请求,CPU响应后便转向中断处理程序,中断处理程序执行相应的处理,处理完后解除相应进程的阻塞状态。
中断现场保护示意图
5.3 缓 冲 管 理 5.3.1 缓冲的引入 缓和CPU与I/O设备间速度不匹配的矛盾。 5.3 缓 冲 管 理 5.3.1 缓冲的引入 缓和CPU与I/O设备间速度不匹配的矛盾。 (2) 减少对CPU的中断频率, 放宽对CPU中断响应时间的限制。 (3) 提高CPU和I/O设备之间的并行性。
利用缓冲寄存器实现缓冲
5.3.2 单缓冲和双缓冲 1. 单缓冲(Single Buffer) 单缓冲工作示意图
单缓冲是OS提供的一种最简单的缓冲。当用户进程发出一个I/O请求时,OS便在主存中分配一个缓冲区。 对于单缓冲,缓冲区属于临界资源,即不允许多个进程同时对一个缓冲区进行操作。因此,单缓冲虽然能匹配设备和CPU的处理速度,但无法实现设备与设备之间的并行操作。
以块设备为例: 假如磁盘把数据送入缓冲器时间为T,数据从缓冲 区传送到用户区为M,数据计算处理时间为C. 则不用缓冲器处理时间为T+C 用单缓冲器处理时间max(C,T)+M (M远小于T或C)
2. 双缓冲(Double Buffer) 双缓冲工作示意图
双缓冲提供两个缓冲区。 但双缓冲只是一种说明设备与设备、CPU与设备并行操作的简单模型,并不能用于实际系统中的并行操作 双缓冲情况下,系统处理时间MAX(T,C)
5.3.3 循环缓冲 1. 循环缓冲的组成 循环缓冲
2. 循环缓冲区的使用 Getbuf过程:当计算机进程需要缓冲区中的数据,调用Getbuf过程,使用Nextg指针,把缓冲器G改成缓冲区C,指针下移。 (2) Releasebuf过程:计算进程提取完缓冲数据,调用Releasebuf过程,把工作缓冲器C改成空缓冲器R。
3. 进程同步 Nexti指针追赶上Nextg指针。 (2) Nextg指针追赶上Nexti指针。
5.3.4 缓冲池(Buffer Pool) 1. 缓冲池的组成 对于既可用于输入又可用于输出的公用缓冲池, 其中至少应含有以下三种类型的缓冲区:① 空(闲)缓冲区; ② 装满输入数据的缓冲区; ③ 装满输出数据的缓冲区。 为了管理上的方便,可将相同类型的缓冲区链成一个队列,于是可形成以下三个队列: (1) 空缓冲队列emq。 (2) 输入队列inq。 (3) 输出队列outq。
工作缓冲区: 收容输入数据的工作缓冲区 hin 提取输入数据的工作缓冲区sin 收容输出数据的工作缓冲区 hout 提取输出数据的工作缓冲区sout
2. 缓冲区的工作方式 图 5-15 缓冲区的工作方式
3.缓冲池的管理 管理缓冲池的步骤如下: take-buf(type):从3种缓冲区队列中按一定的规则取出一个缓冲区。 add-buf(type, number):把缓冲区按一定的规则插入相应的缓冲队列。 get-buf(type, number):申请缓冲区。 put-buf(type, work-buf):将工作缓冲区放入相应缓冲区队列。 其中,type为缓冲队列类型, number为缓冲区号, work-buf为工作缓冲区类型。
输入过程: 输入进程调用 get-buf(em, number),将空白缓冲区作 为输入缓冲区hin,当hin装满输入数据,系统调用put- buf(in, hin)将该缓冲区插入输入缓冲区队列in。 get-buf(in, number)从输入缓冲队列取出装满数据的 缓冲区,将其作为工作缓冲区sin,当CPU取完数据,系 统调用put-buf(em, sin)将缓冲区释放并插入空白队 列em中。
输出过程: 输出进程调用get-buf(em, number),将空白缓冲区作为 输出缓冲区hout,当hout装满数据,系统调用put- buf(out, hout)将该缓冲区插入输出缓冲区队列out。 get-buf(out, number)从输出缓冲队列取出装满数据的 缓冲区,将其作为工作缓冲区sout,当sout中数据输出完 毕,系统调用put-buf(em, sout),将缓冲区释放并插入 空白队列em中
5.4 设 备 分 配 5.4.1 设备分配中的数据结构 1. 设备控制表DCT 设备控制表
2. 控制器控制表、 通道控制表和系统设备表 COCT、 CHCT和SDT表
5.4.2 设备分配时应考虑的因素 1. 设备的固有属性 独享设备。 (2) 共享设备。 (3) 虚拟设备。
2. 设备分配算法 先来先服务。 (2) 优先级高者优先。
3. 设备分配中的安全性 安全分配方式 2) 不安全分配方式
5.4.3 SPOOLing技术 1. 什么是SPOOLing 虚拟设备:通过共享设备模拟独占设备的动作,使独占设备成为共享设备。 SPOOLing(Simultaneaus Periphernal Operating On-Line)技术为实现虚拟设备的技术,或称为假脱机技术。
2. SPOOLing系统的组成 输入井和输出井 磁盘上开辟的两大存储空间 ,输入井收容外部设备输入的数据,输出井收容用户程序的输出的数据。 输入缓冲区和输出缓冲区 输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。 程序工作的输入进程SPi和输出进程SPO 井管理程序 用于控制作业与磁盘井之间的信息交换
输入进程Spi模拟脱机输入时的外围控制机,将用户要求 的数据从输入机通过输入缓冲区再送到输入井,当CPU需 要输入数据时,直接从输入井读入内存。 输出进程SPO模拟脱机输出时外围控制机,把用户要求输 出的数据,先从内存送到输出井,待输出设备空闲时, 再将输出井中数据经过输出缓冲区送到输出设备上。
输入进程 SP i 输出进程 o 输入缓冲区 B 输出缓冲区 输入井 输出井 磁盘 输入设备 输出设备 SPOOLing系统的组成
3. 共享打印机 打印机共享的SPOOLing技术 由输出进程在输出井中申请一个空闲盘块区,并将要打印的数据送入其中 输出进程再为用户进程申请一张空白的用户请求打印表,并将用户的打印要求添入其中,再将该表挂到请求打印队列上 如果还有进程要求打印输出,系统仍可接受其请求,也同样为该进程重复(1)、(2) 打印队列
4. SPOOLing系统的特点 提高了I/O的速度。 (2) 将独占设备改造为共享设备。 (3) 实现了虚拟设备功能。
5.5 设 备 处 理 5.5.1 设备驱动程序的功能和特点 1. 设备驱动程序的功能 5.5 设 备 处 理 5.5.1 设备驱动程序的功能和特点 1. 设备驱动程序的功能 (1) 接收由I/O进程发来的命令和参数, 并将命令中的抽象要求转换为具体要求,例如,将磁盘块号转换为磁盘的盘面、 磁道号及扇区号。 (2) 检查用户I/O请求的合法性,了解I/O设备的状态,传递有关参数,设置设备的工作方式。
(3) 发出I/O命令,如果设备空闲,便立即启动I/O设备去完成指定的I/O操作;如果设备处于忙碌状态,则将请求者的请求块挂在设备队列上等待。 (4) 及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理。 (5) 对于设置有通道的计算机系统,驱动程序还应能够根据用户的I/O请求,自动地构成通道程序。
2. 设备处理方式 (1) 为每一类设备设置一个进程,专门用于执行这类设备的I/O操作 . (2) 在整个系统中设置一个I/O进程,专门用于执行系统中所有各类设备的I/O操作。 (3) 不设置专门的设备处理进程,而只为各类设备设置相应的设备处理程序(模块), 供用户进程或系统进程调用。
3. 设备驱动程序的特点 (1) 驱动程序主要是指在请求I/O的进程与设备控制器之间的一个通信和转换程序。 (2) 驱动程序与设备控制器和I/O设备的硬件特性紧密相关, 因而对不同类型的设备应配置不同的驱动程序。 (3) 驱动程序与I/O设备所采用的I/O控制方式紧密相关。 (4) 由于驱动程序与硬件紧密相关, 因而其中的一部分必须用汇编语言书写。
5.5.2 设备驱动程序的处理过程 将抽象要求转换为具体要求 2. 检查I/O请求的合法性 3. 读出和检查设备的状态 3. 读出和检查设备的状态 4. 传送必要的参数 5. 工作方式的设置 6. 启动I/O设备
5.6 磁盘存储器管理 5.6.1 磁盘性能简述 1. 数据的组织和格式
磁盘的格式化 Gap 1 2 3 Field 17 7 41 515 20 ID Data 29 Sector 2 3 Field 17 7 41 515 20 ID Data 29 Sector Physical Sector 0 Physical Sector 1 Physical Sector 29 Bytes Synch Byte Track # Head Bytes 1 CRC 512 600 Bytes/Sector 磁盘的格式化
2. 磁盘的类型 1) 固定头磁盘 这种磁盘在每条磁道上都有一读/写磁头,所有的磁头都被装在一刚性磁臂中。通过这些磁头可访问所有各磁道,并进行并行读/写,有效地提高了磁盘的I/O速度。 这种结构的磁盘主要用于大容量磁盘上。 2) 移动头磁盘 每一个盘面仅配有一个磁头,也被装入磁臂中。为能访问该盘面上的所有磁道,该磁头必须能移动以进行寻道。可见,移动磁头仅能以串行方式读/写,致使其I/O速度较慢;但由于其结构简单, 故仍广泛应用于中小型磁盘设备中。
存取装置 主轴 动臂 盘片 柱面 磁道 读写头
3. 磁盘访问时间 定位一个物理记录需要三个参数: 柱面号 磁头号 扇区号
1) 寻道时间Ts 这是指把磁臂(磁头)移动到指定磁道上所经历的时间。该时间是启动磁臂的时间s与磁头移动n条磁道所花费的时间之和, 即 Ts=m×n+s 其中,m是一常数,与磁盘驱动器的速度有关,对一般磁盘, m=0.2;对高速磁盘,m≤0.1,磁臂的启动时间约为2 ms。 这样,对一般的温盘, 其寻道时间将随寻道距离的增加而增大, 大体上是5~30 ms。
2) 旋转延迟时间Tτ 这是指定扇区移动到磁头下面所经历的时间。对于硬盘,典型的旋转速度大多为5400 r/min,每转需时11.1 ms,平均旋转延迟时间Tτ为5.55 ms;对于软盘,其旋转速度为300 r/min或600 r/min,这样,平均Tτ为50~100 ms。
3) 传输时间Tt 这是指把数据从磁盘读出或向磁盘写入数据所经历的时间。 Tt的大小与每次所读/写的字节数b和旋转速度有关: 其中,r为磁盘每秒钟的转数;N为一条磁道上的字节数, 当一次读/写的字节数相当于半条磁道上的字节数时,Tt与Tτ相同, 因此, 可将访问时间Ta表示为:
5.6.2 磁盘调度 先来先服务FCFS(First-Come, First Served) 5.6.2 磁盘调度 先来先服务FCFS(First-Come, First Served) 最短寻道时间优先SSTF(Shortest Seek Time First) 扫描(SCAN)算法 循环扫描(CSCAN)算法 N-Step-SCAN和FSCAN调度算法 策略评价: 吞吐量 平均响应时间 响应时间的可预期性
1. 先来先服务FCFS(First-Come, First Served) 按磁盘请求的等待队列的先后次序排序。 例:有如下的一个磁盘请求序列,其磁道号为:55,58,39,18,90,160,150,38,184,读写头一开始在100磁道。
特点:无法对访问优化,吞吐量较低,响应时间较高 25 50 75 100 125 150 175 199 特点:无法对访问优化,吞吐量较低,响应时间较高
2. 最短寻道时间优先SSTF(Shortest Seek Time First) 选择请求队列中柱面号最接近磁头当前所在的柱面的访问要求为下一个服务对象
特点:吞吐量较好,平均响应时间较低,响应时间不可预期性。中间磁道的访问优于内外两侧。 25 50 75 100 125 150 175 199 特点:吞吐量较好,平均响应时间较低,响应时间不可预期性。中间磁道的访问优于内外两侧。
3. 扫描(SCAN)算法 1) 进程“饥饿”现象 SSTF算法虽然能获得较好的寻道性能, 但却可能导致某个进程发生“饥饿”(Starvation)现象。因为只要不断有新进程的请求到达, 且其所要访问的磁道与磁头当前所在磁道的距离较近,这种新进程的I/O请求必须优先满足。对SSTF算法略加修改后所形成的SCAN算法, 即可防止老进程出现“饥饿”现象。
2) SCAN算法 按磁臂前进方向最接近磁头当前所在柱面的访问要求为下一个服务对象。
特点:吞吐量较好,平均响应时间较低,两侧的访问频率低于中间磁道,但不象SSTF严重。 25 50 75 100 125 150 175 199 特点:吞吐量较好,平均响应时间较低,两侧的访问频率低于中间磁道,但不象SSTF严重。
4. 循环扫描(CSCAN)算法 循环扫描策略是单向反复扫描。
5. N-Step-SCAN和FSCAN调度算法 N步SCAN算法是将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法依次处理这些子队列。 而每处理一个队列时又是按SCAN算法,对一个队列处理完后,再处理其他队列。 当正在处理某子队列时,如果又出现新的磁盘I/O请求,便将新请求进程放入其他队列,这样就可避免出现粘着现象。 当N值取得很大时,会使N步扫描法的性能接近于SCAN算法的性能; 当N=1时, N步SCAN算法便蜕化为FCFS算法。
2) FSCAN算法 FSCAN算法实质上是N步SCAN算法的简化, 即FSCAN只将磁盘请求队列分成两个子队列。一个是由当前所有请求磁盘I/O的进程形成的队列,由磁盘调度按SCAN算法进行处理。在扫描期间,将新出现的所有请求磁盘I/O的进程, 放入另一个等待处理的请求队列。这样,所有的新请求都将被推迟到下一次扫描时处理。
磁盘调度策略很多,各有利弊。如何选择相应调度策略与磁盘的使用环境因素有关。 磁盘调度的一个趋势是使用多个磁盘(磁盘阵列RAID)一起工作,特别对高端系统很有用。 增加磁盘高速缓存 优化物理块的分布 虚拟盘(用内存空间去仿真磁盘)
假定磁盘转速为20ms/圈,磁盘格式化时每个磁盘被划分成10个扇区,今有10个逻辑记录(每个记录的大小刚好与扇区大小相等)存放在同一磁道上,处理程序每次从磁盘读出一个后要花4ms进行处理,现要求顺序处理这10个记录,若磁头现在正处于首个逻辑记录的试点位置。请问:(1) 按逆时针方向安排10个逻辑记录(磁盘顺时针方向转),处理程序处理完这10个记录所花的时间是多少?(2) 按最优化分布重新安排这10个逻辑记录,写出记录的安排,并计算出所需要处理的时间。
数据处理时间=磁盘访问时间+数据实际处理时间 磁盘访问时间=寻道时间+旋转延迟时间+数据传输时间 1)读一个逻辑记录需2ms时间,读出记录后还需要4ms时间进行处理,故当磁头处于某记录的始点时,处理它共需6ms时间。逻辑记录是按逆时针方向安排的,因此系统处理完一个逻辑记录后将磁头转到下一个逻辑记录的始点需要16ms时间。从而可以计算出处理程序处理完这10个逻辑记录所需的时间为:6+9*(2*8+6)=204ms 2)按最优化分布重新按排这10个逻辑记录,可使处理程序处理完一个记录后,磁头刚好转到下一个记录的始点,此时,按逆时针方向安排的逻辑记录顺序分别为:记录1、记录8、记录5、记录2、记录9、记录6、记录3、记录10、记录7、记录4,而需要的处理时间为6*10=60ms。
某移动臂磁盘共有200个磁道,磁道编号 为0-199,磁头在140道上服务完后,现在 正在143道上进行读/写操作,此间有如下 按时间先后排列的请求序列: 1、88 2、147 3、91 4、177 5、94 6、150 7、102 8、175 9、130 试给出:用SSTF和扫描策略时的磁盘请求 服务次序 。
某文件占10个磁盘块,现要把文件磁盘块逐个读入主存缓冲区,并送用户区进行分析。假设一个缓冲区与一个磁盘块大小相同,把一个磁盘块读入缓冲区的时间为100US,将缓冲区的数据传送到用户区的时间是50US,CPU对一块数据进行分析的时间按为50US,在单缓冲区和双缓冲区结构下,读入并分析完该文件的时间分别是多少?
单缓冲区下,当上一个磁盘块读入用户区完成 时,下一个磁盘块才能开始读入,则最后一块磁 盘块读入完毕的时间为10*(MAX(C,T)+M)=10*150=1500 加上处理最后一个磁盘块的时间为50 总计1500+50=1550
双缓冲区下,不存在等待磁盘块从缓冲区读入用 户区的问题,则最后一块磁盘块读入完毕的时间、 为:10*max(C+M,T)=10*100=1000 加上处理最后一块所需要的时间50+50 总计为1000+100=1100