您好,欢迎访问三七文档
操作系统原理金海溶blue1879@163.com(MSN)办公室:JK329第9章设备管理输入/输出设备输入/输出功能的组织操作系统设计问题输入/输出缓冲磁盘调度RAID磁盘高速缓冲第9章设备管理各种设备及其应用程序如此众多,所以很难开发一种通用的、一致的输入/输出解决方案对于输入/输出,最关键的问题是性能计算机系统处理器的速度在不断提高,如果一个处理器仍然不够快,SMP可以提供多个处理器来加快处理速度内部存储器访问速度尽管没有处理器速度提高得快,但它也在不断提高,而且,通过聪明地使用一级、两级甚至更多级内部cache,主存访问时间应该可以跟上处理器的速度但输入/输出仍然面临着重要的性能挑战,特别是磁盘存储第9章设备管理磁盘输入/输出,介绍多磁盘请求的调度方法,通过利用磁盘访问的物理特性来提高响应时间。这是用户所能觉察到的一个关键性能因素使用磁盘阵列来提高性能和可靠性磁盘cache输入/输出设备计算机系统输入/输出外部设备大体可分为:I/O类外设:适合与计算机用户通信,例如打印机、终端(显示器和键盘、鼠标等),传感器等存储类型的设备:应用于存储程序和数据,如磁盘设备,磁带,光盘等网络通信设备:适合与远程设备通信,例如调制解调器,各种网络接口等输入/输出设备各类输入/输出外部设备之间有很大差别,主要包括数据率:数据传送速率可能会相差几个数量级020406080100120140160键盘鼠标调制解调器软盘激光打印机扫描仪光盘以太网硬盘图形显示设备千兆位以太网101102103104105106107108109典型的输入/输出设备数据率§6.1输入/输出设备各类输入/输出外部设备之间有很大差别,主要包括数据率:数据传送速率可能会相差几个数量级应用程序:设备的用途对软件、操作系统策略以及支持实用程序都有影响。例如,用于文件操作的磁盘需要文件管理软件的支持等;不同使用情况隐含着不同的特权,从而可能有不同的优先级控制的复杂度:相对而言,打印机接口比较简单,而磁盘接口要复杂得多。这些差别影响到控制该设备的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设备和I/O操作所需要的由于设备之间的差异,实际中很难真正实现通用性。所能做的是用一种层次化的、模块化的方法设计I/O功能。这种方法在低层例程中隐藏了大部分设备I/O的细节,使得用户进程和操作系统高层可以通过一些通用的功能,如读、写、打开、锁定、解锁等来查看I/O设备输入/输出缓冲在各种缓冲方法中,有时需要区别两类I/O设备:面向块的I/O设备在块中保存信息,块的大小通常是固定的,并且一次只传送一块。通常,可以通过块号访问数据。磁盘和磁带都是面向块的设备面向流的I/O设备面向流的设备传送字节流数据,没有使用块结构。终端、打印机、通信端口、鼠标和其他指示设备以及大多数不是辅存的其他设备,都是面向流的操作系统提供的最简单的类型是单缓冲区当一个用户进程发出I/O请求时,操作系统给该操作分配一个主存空间称为缓冲区。输入传送进入系统缓冲区。当传送完成时,进程把该块移到用户空间,并立即请求另一块。这称作预读。这样做是希望最终会需要这个块相对于没有系统缓冲的情况,此方法通常会提高速度。用户进程可以在下一块数据正在读入时,处理这一块数据。由于输入发生在系统存储空间中而不是用户进程存储器中,故而操作系统可以把该进程换出。但这种技术增加了操作系统的逻辑复杂度单缓冲区•单缓冲区可以用于面向块的输出–当准备把数据发送到一台设备时,首先把它们从用户空间复制到系统缓冲区,最终是从系统缓冲区中被写出的。发请求的进程现在可以自由地继续进行,或者在必要时换出•对于面向流的I/O,在每次传送一行的方式下,或者每次传送一个字节的方式下可以使用单缓冲方案–每次传送一行适合于上卷式终端。对于这类终端,用户每次输入一行,用回车表示到达行尾,并且输出到终端时也是类似的每次输出一行。行式打印机是这类设备的一个例子单缓冲区双缓冲可以通过给操作系统指定两个系统缓冲区来实现对单缓冲方案进行改进当一个进程往这一个缓冲区中传送数据(从这个缓冲区中取数据)时,操作系统正在清空(填充)另一个缓冲区,这种技术称作双缓冲或缓冲交换12循环缓冲双缓冲方案可以平滑I/O设备和进程之间的数据流如果某个特定进程的性能是关注的焦点,常常会希望相关I/O操作能够跟得上这个进程。如果这个进程突然快速执行了大量的I/O,仅有双缓冲就不够了,在这种情况下,通常使用多于两个的缓冲区来解决这个问题当使用两个以上的缓冲区时,这组缓冲区被称作循环缓冲区,其中的每一个缓冲区是这个循环缓冲区的一个单元INOUT缓冲的作用缓冲是用来平滑I/O请求的峰值的一种技术,但是当进程的平均请求大于I/O设备的服务能力时,缓冲再多也不能让I/O设备与这个进程一直并驾齐驱即使有多个缓冲区,所有的缓冲区终将被填满,进程在处理完每块数据后不得不等待。但是,在多道程序环境中,当存在多种I/O活动和多种进程活动时,缓冲是提高操作系统效率和单个进程性能的一种工具磁盘调度处理器速度和主存速度的提高远远超过了磁盘访问速度的提高,并且可以预见将来这个差距还会继续增大。因此,磁盘存储子系统的性能是至关重要的磁盘系统的性能与文件系统的设计问题紧密相关盘面盘片磁头臂运动方向读/写磁头(每个盘面一个)磁盘驱动器的组成磁盘性能参数磁盘I/O的实际操作细节取决于计算机系统、操作系统以及I/O通道和磁盘控制硬件的特性等待设备等待通道寻道旋转延迟数据传送设备忙磁盘I/O传送的一般时序图磁盘调度策略考虑在多道程序环境中的一种典型情况,操作系统为每个I/O设备维护一条请求队列。因此对一个磁盘,队列中可能有来自多个进程的许多I/O请求(写和读)如果按随机顺序从队列中选择项目,那么磁道完全是被随机访问的,这种情况下的性能最差最简单的调度是先进先出(FIFO),这意味着按顺序处理队列中的项目。这个策略具有公平性,每个请求都会按照接收到的顺序得到处理磁盘调度策略对于FIFO,如果有多个进程竞争一个磁盘,这种技术在性能上往往接近于随机调度。因此,需要考虑一些更复杂的调度策略磁盘调度策略•优先级–优先级方法不会优化磁盘的使用率,但可以满足操作系统的其他目标–通常比较短的批作业和交互作业比需要较长计算时间的长作业的优先级高。这就使得大量的短作业能够迅速地通过系统,从而可以提供比较好的交互响应时间。但是,长作业可能不得不等待过长的时间磁盘调度策略•后进先出(LIFO)–取最近请求的策略有许多优点。在事务处理系统中,把设备给最近的用户会导致磁头臂在一个顺序文件中移动时移动得很少,甚至不移动。利用这种局部性可以提高吞吐量,减小队列长度–只要一个作业积极地使用文件系统,它就可以尽可能快地得到处理–但如果由于工作量大而使磁盘保持忙状态,就有可能出现饿死的情况。当一个作业已经往队列中送入一个加请求,并且错过了磁头位置时,该作业就可能永远得不到磁头,除非它前面的队列变为空磁盘调度策略最短服务时间优先SSTF策略选择使磁头臂从当前位置开始移动最少的磁盘I/O请求。因此,SSTF策略总是选择导致最小寻道时间的请求。当然,总是选择最小寻道时间并不能保证平均寻道时间最小,但是,它能提供比FIFO更好的性能。由于磁头臂可以向两个方向移动,因此可以使用一种随机选择算法解决距离相等的情况磁盘调度策略SCAN算法(电梯调度算法)SCAN要求磁头臂仅仅沿一个方向移动,并在途中满足所有未完成的请求,直到它到达这个方向上的最后一个磁道为止。然后倒转服务方向,沿相反方向扫描,同样按顺序完成所有请求磁盘调度策略C-SCAN算法C-SCAN要求磁头臂从0磁道向里移动,并在途中满足所有未完成的请求,直到它到达这个方向上的最后一个磁道,在返回时,直接快速的移至起始端,而不响应任何服务请求,接着再进行下一次的扫描磁盘调度策略其他算法LOOKC-LOOK磁盘调度策略磁盘共400磁道,若磁头的当前位置为100,磁头正向磁道号增加方向移动,现有一磁盘读写请求队列,23,376,205,132,19,61,190,398,29,4,18,40,若分别采用FCFS、SSTF、SCAN,C-SCAN调度算法,求访问顺序和磁头移动道数。解04181923294061100132190205376398400FCFS1011519126047328SSTF1098765401231112SCAN131211109870123456C-SCAN78910111213140123456FCFS:23,376,205,132,19,61,190,398,29,4,18,40磁头移动道数=(100-23)+(376-23)+(376-205)+(205-132)+(132-19)+(61-19)+(190-61)+(398-190)+(398-29)+(29-4)+(18-4)+(40-18)=1596RAID设想:如果使用一个组件对性能只能提高这么多,那么可以通过使用多个并行的组件来获得额外的性能提高在磁盘存储器的情况下,就产生了独立、并行运行的磁盘阵列通过多个磁盘,多个独立的I/O请求可以并行地进行处理,只要它们所需要的数据驻留在不同的磁盘中此外,如果要访问的数据块分布在多个磁盘上,I/O请求也可以并行地执行RAIDRAID,独立磁盘冗余阵列,是关于多磁盘数据库设计的一个标准方案RAID方案包括从0到6的7层,层不仅仅是层次关系,还表明了不同的设计结构提高磁盘访问的速度增强磁盘的可靠性RAIDRAID设计结构有三个共同的特性:RAID是一组物理磁盘驱动器,操作系统把它看作是一个单个的逻辑驱动器数据分布在物理驱动器阵列中使用冗余的磁盘容量保存奇偶检验信息,从而保证当一个磁盘失败时,数据具有可恢复性不同的RAID级中,第二和第三个特性的细节不同;RAID0不支持第三个特性RAID•RAID策略是用多个小容量驱动器代替大容量磁盘驱动器,并且以这样的一种方式分布数据,使得能同时从多个驱动器访问数据,因而提高了I/O的性能,并使得能够很容易地增加容量•RAID特有的贡献是有效地解决了对冗余的要求–尽管RAID允许多个磁头和动臂机构同时操作,以达到更高的I/O速度和数据传送率,但使用多个设备增加了失败的可能性–为补偿可靠性的降低,RAID通过存储奇偶校验信息使得能够从一个磁盘的失败中恢复丢失的数据RAID0•RAID0并不是RAID家庭中的真正成员,因为它没有用冗余数据来提高性能•对于RAID0,用户数据和系统数据分布在阵列的所有磁盘中,这比使用单个大磁盘有显著的优势:–当两个不同的I/O请求为两块不同的数据挂起时,很有可能被请求的块在不同的磁盘上,因此这两个请求可以并行发出,从而减少了I/O排队等待的时间ABCRAID0无冗余ABCRAID1备份存储ABCABCRAID2存储类型错误校验码DpppABCRAID3bit_interleaved奇偶校验pABCRAID4block_inte
本文标题:OS-09设备管理
链接地址:https://www.777doc.com/doc-1307238 .html