[精选]操作系统设备管理培训课程.pptx
1操作系统第五章 设备管理2013Chap 5.55.92第五章 设备管理5.1 I/O硬件原理 5.2 I/O软件原理 5.3 具有通道的I/O系统5.4 缓冲技术 5.5 驱动调度技术 5.6 设备分配5.7 虚拟设备5.8 Linux设备管理5.9 Windows 2003 I/O系统35.5 驱动调度技术15.5.1 存储设备的物理结构 5.5.2 循环排序 5.5.3 优化分布5.5.4 搜查定位 5.5.5 独立磁盘冗余阵列 5.5.6 提高磁盘I/O速度的一些方法 4 驱动调度技术2驱动调度和驱动调度算法。驱动调度能减少为假设干个I/O请求效劳所需的总时间,提高系统效率、除了I/O请求的优化排序外,信息在辅助存储器上的排列方式,存储空间分配方法都能影响存取访问速度。55.5.1 存储设备的物理结构1顺序存取顺序存取存储设备是严格依赖信息的物理位置进行定位和读写的存储设备 具有存储容量大、稳定可靠、卷可装卸和便于保存等优点 始点块1间隙块2间隙块3间隙块i间隙块i+1末点 磁头(正走,反走,正读,反读,正写,反写,倒带)6存储设备的物理结构2直接存取存储设备磁盘是一种直接随机存取存储设备。每个物理记录有确定的位置和唯一的地址,存取任何一个物理块所需的时间几乎不依赖于此信息的位置。访问磁盘记录参数:柱面号、磁头号、扇区号789Moving-head Disk Mechanism10磁头11多组磁头12Disk Performance Parametersn为了读或者写,磁头必须定位于指定的磁道和该磁道中指定为了读或者写,磁头必须定位于指定的磁道和该磁道中指定的扇区的开始处。磁道选择包括在活动头系统中移动磁头或的扇区的开始处。磁道选择包括在活动头系统中移动磁头或者在固定头系统中选择一个磁头。者在固定头系统中选择一个磁头。n磁头定位到磁道所需要的时间称为寻道时间磁头定位到磁道所需要的时间称为寻道时间seek timeseek time。n在任何一种情况下,一旦选择好磁道,磁盘控制器就开始等在任何一种情况下,一旦选择好磁道,磁盘控制器就开始等待,直到适当的扇区旋转到磁头处。磁头到达扇区开始位置待,直到适当的扇区旋转到磁头处。磁头到达扇区开始位置的时间称为旋转延迟的时间称为旋转延迟rotational delayrotational delay。n寻道时间寻道时间如果有的话如果有的话和旋转延迟的总和称为存取时间和旋转延迟的总和称为存取时间access timeaccess time,这是到达读或者写的位置所需要的时间。,这是到达读或者写的位置所需要的时间。n传送所需的时间是传送时间传送所需的时间是传送时间transfer timetransfer time。13145.5.2循环排序1考虑磁道上保存四个物理块的旋转型设备,旋转1周需时20ms,假定收到以下四个I/O请求。请求次序 记录号 1 读记录4 2 读记录3 3 读记录2 4 读记录1123415循环排序2多种I/O请求排序方法 方法1:按照I/O请求次序读记录4、3、2、1,平均用1/2周定位,再加上1/4周读出记录,总处理时间等于1/2+1/4+33/4=3周,即60毫秒。方法2:如果次序为读记录1、2、3、4。总处理时间等于1/2+1/4+31/4=1.5周,即30毫秒。方法3:如果知道当前读位置是记录3,则采用次序为读记录4、1、2、3。总处理时间等于41/41周,即20毫秒。165.5.3 优化分布1考虑10个逻辑记录A,B,J被存于旋转型设备上,每道存放10个记录,安排如下:物理块 逻辑记录 1-10 A-J A B C D E.处理10个记录的总时间 10毫秒移动到记录A的平均时间+2毫秒 读 记 录 A+4毫 秒 处 理 记 录 A+916毫秒访问下一记录+2毫秒读记录+4毫秒处理记录 214毫秒 17处理10个记录的总时间 10毫秒移动到记录A的平均时间+2毫秒读记录A+4毫秒处理记录A+916毫秒访问下一记录+2毫秒读记录+4毫秒处理记录 214毫秒18优化分布2按照下面方式对信息优化分布物理块 逻辑记录1 A2 H3 E4 B5 I6 F7 C8 J9 G10 D19优化分布3处理10个记录的总时间为10毫秒移动到记录A的平均时间+102毫秒读记录+4毫秒处理记录 =70毫秒205.5.4 搜查定位1移臂调度有假设干策略 1先来先效劳算法 FCFS 2“电梯调度算法 Elevator 3“最短查找时间优先算法SSTF 4“扫描算法 SCAN 5“分步扫描算法 N-steps SCAN 6“单向扫描算法 C-SCAN 未来趋势:SSD硬盘固态硬盘21搜查定位2 先来先效劳算法 磁头臂按照FCFS队列顺序移动,处理队列中的请求,不考虑各I/O请求之间的相对次序和移动臂当前所处位置,进程等待I/O请求的时间会过长,寻道性能较差。公平22搜查定位3“电梯调度算法 电梯调度算法有等待请求?结束请求与当前 柱面相同?处理有最近块号的请求启动C CC C是向里或向外移?是否否向外向外向里向里有比当前柱面小的请求?改变移动方向A A有比当前柱面大的请求?改变移动方向否否处理大于当前柱面号请求中柱面号最小的请求处理小于当前柱面号请求中的柱面号最大的请求移动磁头到指定柱面,登记当前位置启动C CB BB BA A23搜查定位4 SSTF“最短查找时间优先最短查找时间优先算法算法 本算法考虑了各个请求之间的区别,总是先执行查找时间最短的那个磁盘请求,从而,较“先来先效劳算法有较好的寻道性能。存在“饥饿现象。24搜查定位5“扫描扫描算法算法磁头臂每次沿一个方向移动,扫过所有柱面,遇到最近的I/O请求便进行处理,直到最后一个柱面后,再向相反方向移动回来。与“电梯调度算法的不同在于:即使该移动方向暂时没有I/O请求,移动臂也需扫描到头。“最短查找时间优先算法虽有较好寻道性能,但可能会造成进程“饥饿,本算法能克服这一缺点。扫描算法偏爱那些最接近里面或靠外面的请求,对最近扫描跨过去的区域的I/O请求的响应会较慢。25搜查定位6“分步扫描分步扫描 算法算法进程重复请求同一磁道会垄断整个设备,造成“磁头臂的粘性,采用分步扫描可防止这类问题。将I/O请求分成组,每组不超过N个请求,每次选一个组进行扫描,处理完一组后再选下一组,这种调度算法能保证每个存取请求的等待时间不至太长。当N很大时,接近于“扫描算法的性能,当N=1时,接近于“先来先效劳算法的性能。26搜查定位7“循环扫描循环扫描算法算法在磁盘请求对柱面的分布是均匀的情况下,当移动臂移动到头并转向时,靠近磁头一端的请求特少,许多请求集中分布在远离磁头的一端,它们的等待时间就会较长,“循环扫描算法能克服这个缺点,这是为适应不断有大量柱面均匀分布的存取请求进入系统的情况而设计的扫描方式。移动臂总从0号柱面至最大号柱面顺序扫描,然后,直接返回0号柱面重复进行,归途中不再效劳,构成了一个循环。27Disk Scheduling Cont.Several algorithms exist to schedule the servicing of disk I/O requests.We illustrate them with a request queue 0-199.98,183,37,122,14,124,65,67Head pointer 5328FCFSIllustration shows total head movement of 640 cylinders.Total=64029SSTFSelects the request with the minimum seek time from the current head position.SSTF scheduling is a form of SJF scheduling;may cause starvation of some requests.Illustration shows total head movement of 236 cylinders.30SSTF Cont.Total=23631SCAN Cont.Total=208 回到0点32C-SCANProvides a more uniform wait time than SCAN.The head moves from one end of the disk to the other.servicing requests as it goes.When it reaches the other end,however,it immediately returns to the beginning of the disk,without servicing any requests on the return trip.Treats the cylinders as a circular list that wraps around from the last cylinder to the first one.33C-SCAN Cont.34C-LOOKVersion of C-SCANArm only goes as far as the last request in each direction,then reverses direction immediately,without first going all the way to the end of the disk.35C-LOOK Cont.367 Linux磁盘调度算法Linux 2.4磁盘调度采用电梯调度算法。Linux2.6增加两种新磁盘调度算法:最终期限调度算法和预期调度算法,尽力确保处理期限到达的请求获得响应。时限调度算法:预期调度算法:37Linus电梯调度 1如果新请求与队列中等待请求的数据处于同一磁盘扇区或者直接相邻的扇区,则现有请求和新请求合并成一个请求。2如果队列中的请求已经存在很长时间,则新请求将被插入到队列尾部。3如果存在适宜的位置,则新请求将按顺序插入到队列中;如果没有适宜的位置,则新的请求将被插入到队列尾部。38Linus电梯调度电梯调度算法有两个问题,一是由于队列动态更新的原因,一个相距较远的请求可能会延迟相当长的时间;二是由于写请求通常是异步的,而读请求大局部是同步操作,这样一来,在写一个大文件时,很可能堵塞一个读请求很长时间,从而堵塞进程。39时限调度算法 为了克服这些问题,引入时限调度算法,使用三个队列:读FIFO队列、写FIFO队列和电梯排序队列。每个新来请求被放置到电梯排序队列中,该队列与前面所述一致,此外,同样的请求还被放置在FIFO读队列如果是读请求或FIF0写队列如果是写请求中,这样,读和写队列维护一个按请求发生时间为顺序的请求列表。对每个请求都有一个到期时间,对于读请求默认值为0.5秒,对于写请求默认值为5秒;通常,调度程序从排序队列中分派效劳,当一个请求得到满足时,其将从电梯排序队列头部移走,同时也从对应的FIFO队列移走。然而,当FIFO队列头部的请求超过其到期时间时,调度程序将从该FIFO队列中派遣任务,取出到期请求,再加上接下来的几个队列中的请求,当然,任一个请求被效劳时,其也从电梯排序队列中移出。所以,时限调度算法能克服“饥饿和读写不一致的问题。40预期调度算 法 预期调度是对时限调度的补充,当一个读请求被分派时,预期调度程序会将调度程序的执行延迟假设干毫秒取决于配置文件;发出上一条读请求的应用程序有时机发出后继读请求,且该请求发生在相同的磁盘区域;如果没有新请求发生,则调度程序继续使用时限调度算法。41 未来趋势:SSD硬盘solid-state drive俗称固态硬盘42 未来趋势:SSD硬盘43 未来趋势:SSD硬盘44Disk Cache高速缓冲存储器高速缓冲存储器cache memorycache memory通常指一个容量比主存小通常指一个容量比主存小且速度比主存块的存储器,这个存储器位于主存和处理器之且速度比主存块的存储器,这个存储器位于主存和处理器之间。这种高速缓冲存储器通过利用局部性原理,可以减少平间。这种高速缓冲存储器通过利用局部性原理,可以减少平均存储器存取时间。均存储器存取时间。同样的原理适用于磁盘存储器。特别地,一个磁盘高速缓存同样的原理适用于磁盘存储器。特别地,一个磁盘高速缓存是主存中为磁盘扇区设置的一个缓冲区,它包含有磁盘中某是主存中为磁盘扇区设置的一个缓冲区,它包含有磁盘中某些扇区的副本。些扇区的副本。当出现一个请求某一特定扇区的当出现一个请求某一特定扇区的I/OI/O请求时,首先进行检测,请求时,首先进行检测,以确定该扇区是否在磁盘高速缓存中。以确定该扇区是否在磁盘高速缓存中。如果在,则该请求可以通过这个高速缓存来满足;如果在,则该请求可以通过这个高速缓存来满足;如果不在,则把被请求的扇区从磁盘读到磁盘高速缓存中。如果不在,则把被请求的扇区从磁盘读到磁盘高速缓存中。由于访问的局部性现象的存在,当一块数据被取入高速缓存以由于访问的局部性现象的存在,当一块数据被取入高速缓存以满足一个满足一个I/OI/O请求时,很有可能将来还会访问到这一块数据。请求时,很有可能将来还会访问到这一块数据。45希捷希捷 Barracuda 7200 Barracuda 7200转系列转系列3.53.5/3/3TBTB/7200 7200rpm/rpm/6464MM串串参考价格:¥参考价格:¥790790 北京北京 适用类型:台式机适用类型:台式机硬盘容量:硬盘容量:3 3000GB000GB单碟容量单碟容量:缓存:缓存:64M64MB B接口类型:接口类型:Serial ATASerial ATA转速转速/分:分:72007200转转/分分接口速率:接口速率:Serial ATA 300Serial ATA 30046Least Recently Used必须解决的设计问题是替换策略。当一个新扇区被读必须解决的设计问题是替换策略。当一个新扇区被读入磁盘高速缓存时,必须替换出一个已经存在的块。入磁盘高速缓存时,必须替换出一个已经存在的块。这就需要一个页替换算法。这就需要一个页替换算法。最常用算法时最近最少使用算法最常用算法时最近最少使用算法LRULRU:替换在高:替换在高速缓存中未被访问的时间最长的块。逻辑上,高速缓速缓存中未被访问的时间最长的块。逻辑上,高速缓存由一个关于块的栈组成,最近访问过的块在栈顶。存由一个关于块的栈组成,最近访问过的块在栈顶。当高速缓存中的一个块被访问到时,它从栈中当前的位置当高速缓存中的一个块被访问到时,它从栈中当前的位置移到栈顶。移到栈顶。当一个块从辅存中取入时,把位于栈底的那一块移出,并当一个块从辅存中取入时,把位于栈底的那一块移出,并把新到来的块压入栈顶。把新到来的块压入栈顶。当然,并不需要在主存中真正移动这些块,有一个栈指针当然,并不需要在主存中真正移动这些块,有一个栈指针与高速缓存相关联。与高速缓存相关联。475.5.5 独立磁盘冗余阵列1利用一台磁盘阵列控制器统一管理和控制一组磁盘驱动器,组成速度快、可靠性高、性能价格比好的大容量磁盘系统。目的:增加容错性,获得高性能。RAID填补CPU速度快与磁盘设备速度慢之间的间隙,策略是:一组小容量、独立、可并行工作的磁盘组成阵列代替单一大容量磁盘,再加进冗余技术,数据能用多种方式组织和分布存储,于是,独立的I/O请求能被并行处理,数据分布的单个I/O请求也能并行地从多个磁盘同时存取,从而,增加容错性,改进I/O性能。48独立磁盘冗余阵列2 RAID共同特性 RAID是一组物理磁盘驱动器,可被操作系统看作是单一逻辑磁盘驱动器;数据被分布存储在阵列横跨的物理驱动器上;冗余磁盘的作用是保存奇偶校验信息,当磁盘出现失误时它能确保数据的恢复。4950RAID 0RAID0-连续的数据条带每个条带可规定为1个或多个扇区以轮转方式写到全部磁盘上,然后,采用并行交叉存取,减少I/O请求排队时间,适用于大数据量的I/O请求,但并无冗余校验功能,可靠性较差。51RAID 1RAID1-采用镜像盘双份所有数据来提高容错性,读请求拥有最小寻道时间,写请求可并行完成。缺点是容量下降一半,故成本很高。52RAID 2RAID2-采用数据字或字节交叉存放,并行存取获得高性能,使用海明校验码,适合大量顺序数据访问。由于使用多个冗余盘,成本较高。53RAID 3RAID3-是RAID2的简化版本,差异是它仅用一只冗余盘,采用奇偶校验技术。54RAID 4RAID4-采用独立存取磁盘阵列,数据条带交叉存放,访问请求可并行地获得满足,适合有较高I/O请求速度的应用场合,使用一只冗余盘存放奇偶校验码。55RAID 5RAID5-与RAID4的组织类似,但奇偶校验码循环分布在每个盘上使容错性更好。56RAID 6RAID6-采用双重冗余技术,即使有两个数据磁盘发生错误,也可重新生成数据。575.5.6提高磁盘I/O速度的方法提前读 延迟写 虚拟盘 UNIX/Linux提供两种读盘和三种写盘方式:正常读-把磁盘块信息块读入主存缓冲区;提前读-读磁盘当前块时,下一磁盘块也读入主存缓冲区;正常写-把主存缓冲区中的信息写到磁盘块,且写进程应等待写操作完成;异步写-写进程无需等待写盘结束就可返回工作;延迟写-仅在缓冲区首部设置延迟写标志,然后,释放此缓冲区,并把该缓冲区链入空闲缓冲区链表的尾部,当其他进程申请到该缓冲区时,才真正把缓冲区信息写回磁盘块。585.6 设备分配 5.6.1 设备独立性5.6.2 设备分配和设备分配数据结构 595.6.1 设备独立性例:系统拥有A、B两台卡片机,现有作业J2申请一台卡片机,如果它指定使用卡片机A,作业J1已经占用A或者A坏了,虽然系统还有同类设备B是好的且未被占用,但也不能接受作业J2,这样做很不合理。为了解决这一问题,通常用户不指定物理设备,而指定逻辑设备,使得用户作业和物理设备独立开来,再通过其他途径建立逻辑设备和物理设备之间的映射,设备的这种特性称“设备独立性。605.6.1 设备独立性用户不指定特定设备,指定逻辑设备,使得用户作业和物理设备独立开来,通过其它途径建立逻辑设备和物理设备之间对应关系,这种特性为“设备独立性。好处-用户与物理的外围设备无关,系统增减或变更外围设备时程序不必修改;易于对付输入输出设备的故障。615.6.2 设备分配1从设备的特性来看,可以把设备分成独占设备、共享设备和虚拟设备三类:相应的管理和分配外围设备的技术可分成:独占方式、共享方式和虚拟方式。625.6.2 设备分配1对独占型设备,往往采用静态分配,即在作业执行前,将所要求使用的设备全局部配给它,当作业执行中不再需要使用这类设备,或作业结束撤离时,再收回设备。静态分配实现简单,能防止系统死锁,但会降低设备利用率。例如,对打印机采用静态分配,在作业执行前分配给它,但一直到作业产生结果时才使用打印机,这样,尽管这台打印机在大局部时间里处于空闲状态,但是,其他作业却不能使用。635.6.2 设备分配1如果对打印机采用动态分配,在作业执行过程中,要求输出一批信息时,系统才把打印机分配给该作业,当一个文件输出完毕关闭时,系统就收回分配给该作业的打印机。采用动态分配后,在打印机上可能依次输出假设干个作业的信息,由于输出信息以文件为单位,每个文件的头和尾均设有标志,如:用户名、作业名、文件名等,操作员很容易识别输出信息是属于哪个用户,所以,对某些独占使用的设备,采用动态分配方式,不仅是可行的而且也能提高设备利用率。645.6.2 设备分配1常用的I/O设备分配算法 先请求先效劳,优先级高者先效劳等。此外,在多进程请求I/O设备分配时,应防止因循环等待对方所占用的设备而产生死锁,应预先进行性检查。65设备分配2I/O设备分配的实现1设备分配的数据结构:设备类表和设备表。系统中拥有一张设备类表,每类设备对应于表中一栏,包括内容有:设备类、总台数、空闲台数和设备表起始地址等。每一类设备都有各自的设备表,用来登记这类设备中每一台设备的状态,包含的内容有:物理设备名、逻辑设备名、占有设备的进程号、已分配/未分配、好/坏等。66设备分配3I/O设备分配的实现2采用通道结构的系统中,设备分配的数据结构设置:系统设备表、通道控制表、控制器控制表和设备控制表。系统建立一张系统设备表,记录配置在系统中的所有物理设备的情况。每个通道、控制器、设备各设置一张表,记录各自的地址标识符、状态忙/闲、等待获得此部件的进程队列指针、及一次分配后相互勾链的指针,以备分配和执行I/O时使用。675.7 虚拟设备5.7.1 问题的提出 5.7.2 SPOOLING的设计和实现 5.7.3 SPOOLING应用例子 685.7.1 5.7.1 问题的提出 静态分配方式是不利于提高系统效率 联机同时外围设备操作又称作假脱机操作 Simultaneous Peripheral Operation On-Line外围设备同时联机操作695.7.2 斯普林系统的设计和实现1“井是用作缓冲的存储区域,采用井的技术能调节供求之间的矛盾,消除人工干预带来的损失。“预输入程序操作系统将一批作业从输入设备上预先输入到磁盘的输入缓冲区中暂时保存,这称为“预输入,此后,由作业调度程序调度作业执行,作业使用数据时不必再启动输入设备,只要从磁盘的输入缓冲区中读入“缓输出程序作业执行中不必直接启动输出设备,只要将作业的输出数据暂时保存到磁盘的输出缓冲区,当作业执行完毕后,由操作系统组织信息成批输出“井管理程序70作业调度与进程调度的关系 进程调度运运行行就就绪绪等等待待输入状态后备状态完成状态预输预输入完入完成成作业控制作业控制作业调度作业调度选选中并创立进程中并创立进程作业调度作业调度作作业终止并撤离业终止并撤离SPOOLing作业预输入SPOOLing作业缓输出71 预输入程序作业1信息作业n信息输入井作业1结果作业n结果输出井缓输出程序井管理程序运行作业输入设备输出设备作业调度程序斯普林系统的设计和实现2 SPOOLING组成和结构 72斯普林系统的设计和实现4SPOOLING数据结构作业表用来登记进入系统的所有作业的JCB,该表包含作业的作业名、作业状态、预输入表位置和缓输出表位置等信息;预输入表用来登记该作业的各个输入文件的情况,包括设备类、文件名、信息长度及存放位置等;缓输出表用来登记该作业的各个输出文件的情况,包括设备类、文件名、信息长度及存放位置等 73输入状态:作业的信息正从输入设备上预输入;收容收态:作业预输入结束,但未被选中执行;执行状态:作业已被选中运行,运行过程中,它可从输入井中读取数据,也可向输出井写入数据;完成状态:作业已经撤离,该作业的输出结果等待缓输出。斯普林系统的设计和实现4输入井中作业状态74斯普林系统的设计和实现5井文件空间的管理1存放在井中的文件称井文件,井文件空间的管理比较简单,它被划分成等长的物理块,每块用于存放一个或多个逻辑记录。可采用两种方式存放作业的数据信息:连接方式和计算方式 1连接方式,输入的信息被组织成连接文件,这种方式的优点是数据信息可以不连续存放,文件空间利用率高。75斯普林系统的设计和实现6井文件空间的管理22计算方式,假定磁盘井文件空间,每个磁道存放100个80字节记录,每张卡片为80个字节,假设每个柱面有20个磁道,则一个柱面可存放2000张卡片信息。第n张卡片信息被存放在:磁道号卡片号n/100 记录号卡片号n%100用卡片号n除以100的整数和余数局部分别为其存放的磁道号和记录号。76斯普林系统的设计和实现7Spooling应用例子1打印机spooling守护进程2网络通信spooling守护进程775.8 Linux的设备管理 5.8.1 设备管理概述5.8.2 设备驱动程序5.8.3 设备I/O的处理Jonathan Corbet,Alessandro Rubini,Greg Kroah-Hartman,Linux Device Drivers,3rd Edition,OReilly,2005.785.8.1 Linux设备管理概述 设备当作文件处理,使用文件系统调用控制设备操作。对于字符设备和块设备,其设备文件用mknod命令创立,用主设备号和次设备号标识,同一设备驱动程序控制的所有设备具有相同的主设备号,并用不同次设备号加以区别;网络设备也当作设备文件处理,这类设备由Linux创立,并由网络控制器初始化;795.8.1 Linux设备管理概述 Linux 2.3.46版内核正式引入设备文件系统devfs,已被纳入文件系统的管辖范围,当设备被挂接到特定目录下后,就可以将对设备文件的所有操作对应到对设备的操作。设备文件与普通文件及目录文件有着根本不同,当进程访问普通文件时,它会通过文件系统访问磁盘分区中的数据块;当进程访问设备文件时,它只要驱动物理设备就行,VFS负责为应用程序隐蔽设备文件与普通文件之间的差异,可把对设备文件的任一系统调用转换成对设备驱动程序的函数调用。805.8.2 设备驱动程序1 驱动程序的注册与注销 系统引导时,进行设备初始化,初始化都要通过相应函数向内核注册;在关闭字符设备或块设备时,要通过相应函数从内核中注销。2 设备的翻开与释放翻开设备由open完成,首先检查设备是否就绪;假设首次翻开设备还需初始化,并增加设备的引用计数。释放设备由release完成,如在释放设备时,需要检查并且减少设备的引用计数,最后一个释放设备者,则需关闭设备。81设备驱动程序3 设备的读/写操作 字符设备通过read 和write读/写设备数据;块设备通过block_read和block_write读/写数。4 设备的控制操作和控制方式 通过设备驱动程序中的ioctl来控制设备的,如对光驱的控制使用cdrom_ioctl,与读/写设备数据不同,ioctl与具体设备密切相关。825.8.3 设备I/O的处理1 数据传输和设备驱动 Linux内核对于块设备的支持具有以下特点:通过VFS提供统一接口、对磁盘数据进行预读、为数据提供磁盘高速缓存。1 缓冲区I/O操作:传送的数据保存在缓冲区中,缓冲区是磁盘数据在内核中的普通主存容器,每个缓冲区都和一个特定的块相关联,而这个块由设备号和块号来标识。2 页I/O操作:传送的数据保存在主存页中,每个页包含的数据都属于普通文件。Linux的块设备驱动程序被划分为高级驱动程序和低级驱动程序两局部,前者处理VFS层,后者处理物理设备。835.8.3 设备I/O的处理2 块设备请求 块设备驱动程序可一次传送一个单独的数据块,但内核并不会为磁盘上的每个被访问的数据块都单独执行一次I/O操作,确定磁盘块的物理位置是相当费时的,只要有可能,内核就试图把几个块合并在一起,作为一个整体来处理,这样就缩短磁头平均移动时间。84第五章 设备管理5.1 I/O硬件原理 5.2 I/O软件原理 5.3 具有通道的I/O系统5.4 缓冲技术 5.5 驱动调度技术 5.6 设备分配5.7 虚拟设备5.8 Linux设备管理5.9 Windows 2003 I/O系统85设备I/O处理 块设备处理系统的最底层是策略程序,它与物理块设备之间相互作用以满足将队列中的请求聚集在一起的要求,只要低级块设备驱动程序被激活,就应该对队列中的所有请求都进行处理,直到队列空才结束。策略程序执行过程为:对于队列中的每个元素,与块设备控制器相互作用,共同为请求效劳,等待数据传送完成;然后把效劳过的请求从队列中删除,继续处理下一个请求。865.9 Windows 2003 I/O系统系统 5.9.1 I/O系统结构和组件 5.9.2 I/O系统数据结构5.9.3 I/O类型和处理5.9.4 高速缓存管理 875.9.1 I/O系统结构和组件1Windows I/O系统是执行体的组件,存在于 NTOSKRNLEXE文件中。它接受来自用户态和核心态的I/O请求,并以不同形式把它们传送到I/O设备。88I/O系统结构和组件2 用户模式即插即用管理器应用程序WIN32系统服务WMI服务安装组件.inf.cat注册表用户态核心态I/O管理器即插即用管理器电源管理器WDM WMI例程WDM接口WDM即插即用总线驱动器ACPIPC卡USBPCIWDM设备驱动程序即插即用驱动程序硬件抽象层HALI/O接口电源管理器接口即插即用接口执行体其它接口89一个典型的I/O请求流程 I/O系统服务API(NtXXX)I/O管理器核心态设备驱动程序HAL I/O服务例程I/O端口和寄存器驱动程序支持例程用户模式API90I/O管理的特点1 I/O包驱动2 通过虚拟文件实现I/O操作915.9.2 I/O系统数据结构 四种数据结构代表I/O请求:文件对象、驱动程序对象、设备对象、I/O请求包IRP。921、文件对象文件作为对象来管理,是可以共享的系统资源,被基于对象的安全性所保护,并且它们支持同步。当调用者翻开文件或单一设备时,I/O管理器为文件对象返回句柄。文件对象由包含访问控制表ACL的安全描述体保护。I/0管理器查看安全子系统来决定文件的ACL是否允许进程去访问它的线程正在请求的文件。932、驱动程序对象和设备对象1 线程为文件对象翻开句柄时,I/O管理器根据文件对象名称来决定将调用哪个或哪些驱动程序来处理请求。下面的系统对象满足这些要求:驱动程序对象,I/O管理器从驱动程序对象中获得并且为I/O记录每个驱动程序的调度例程的地址。设备对象在系统中代表一个物理的、逻辑的设备并描述它的特征,例如,所需要的缓冲区的对齐方式和用来保存I/O请求包的设备队列位置。94驱动程序对象和设备对象2 功能码1功能码2 功能码n驱动程序对象读写设备控制启动I/O卸载取消设备对象设备对象设备对象该驱动程序操作的设备953、I/O请求包 1IRP是I/O系统用来存储处理I/O请求所需信息的数据结构。线程调用I/O效劳时,I/O管理器就构造一个IRP来表示在整个系统I/O进展中要进行的操作。I/O管理器在IRP中保存一个指向调用者文件对象的指针。96I/O请求包 2 IRP由两局部组成固定局部标题和一个或多个堆栈单元。固定局部包括:请求的类型和大小、同步请求还是异步请求、用于缓冲I/O的指向缓冲区的指针和随着请求的进展而变化的状态信息。IRP堆栈单元包括一个功能码、功能特定的参数和指向调用者文件对象的指针。974 驱动程序分类和组成1 驱动程序分类:1核心模式驱动程序。2用户模式驱动程序。3硬件支持驱动程序。2包括调用处理I/O请求不同阶段的例程,主要有:初始化例程、功能例程、启动I/O例程、中断效劳例程、延迟过程调用例程、完成例程、取消例程、卸载例程、系统关闭通知例程和错误记录例程。985 多处理机中I/O同步问题多个CPU上运行,驱动程序必须同步执行的主要原因。驱动程序必须同步执行的方法。995.9.3 I/O类型和处理11 I/O类型 1 同步I/O和异步I/O 2 快速I/O 3 映射文件I/O和文件高速缓存 4 分散/集中I/O100I/O类型和处理2 2 I/O处理步骤1Windows核心态设备驱动程序I/O请求步骤:I/O库函数经过语言的运行时库转换成对子系统DLL的调用;子系统DLL调用I/O的系统效劳;I/O系统效劳调用对象管理程序,检查给定的文件名,再搜索名空间,把控制转交给I/O管理器寻找文件对象;驱动程序询问安全子系统,确定线程的存取权限。101I/O类型和处理3 I/O处理步骤2I/O管理器以IRP的形式将I/O请求送给设备驱动程序,驱动程序启动I/O操作;设备完成指定操作,请求I/O中断,设备驱动程序的ISR效劳于中断;I/O管理器再调用I/O完成例程,将完成状态返回给调用线程。上述是同步I/O执行的步骤,对于异步I/O,还要增加一步,I/O管理器将控制返回调用线程,使得调用线程与I/O操作并行执行。1023 对单层驱动程序的I/O请求处理 创建IRP,发送到设备驱动程序IRP头部WriteFile(参数)核心态用户态应用程序执行WriteFile(参 数);环境子系统或DLLI/O请求传送到环境子系统DLLNtWriteFile(参数)完成传输,返回成功或错误状态I/O管理器设备驱动调度例程启动I/O例程ISR例程DPC例程打印机执行I/O并产生中断I/O系统服务处理中数,将成功/错误码填入IRP返回文件对象设备对象驱动程序对象向驱动程序传送IRP中指定参数1034 对多层驱动程序的I/O请求处理1 翻开一个文件2 读文件3 写文件1045.9.4高速缓存管理1高速缓存管理器主要特征 1单一集中式系统高速缓存2与主存管理器结合 3高速缓存的一致性 4虚拟块缓存 5基于流的缓存 6可恢复文件系统支持 1052、高速缓存的结构1 系统高速缓存管理器基于虚拟空间缓存数据,它管理一块系统虚拟地址空间区域,而不是一块物理主存区域。高速缓存管理器把每个地址空间区域分成256KB的槽slot,被称为视图view。106高速缓存的结构2 视图0视图1视图2视图3视图4 视图n区域0区域1区域0区域0视图5区域1区域2系统高速缓存文件A(500KB)文件B(750KB)文件C(100KB)1073高速缓存操作 1回写缓存和延迟写 2计算脏页阈值 3屏蔽对文件延迟写 4强制写缓存到磁盘 5刷新被映射的文件 6智能预读 7虚拟地址预读 8带历史信息的异步预读 108快速I/O 读写被缓存文件可用被称为快速I/O的高速机制来处理。快速I/O读写一个缓存的文件不要产生I/O请求包1RP。有了快速I/O机制,I/O管理器可以调用文件系统驱动程序的快速I/O例程来查看是否能够直接从高速缓存管理器得到所需的数据,而不需产生IRP。1095、高速缓存支持例程 三种基本的访问缓存数据的方法 1“拷贝读取方法,在系统空间中的高速缓存数据缓冲区和用户空间中的进程数据缓冲区之间拷贝用户数据。2“映射暂留方法,使用虚拟地址直接读写高速缓存的数据缓冲区。3“物理主存访问方法,使用物理地址直接读写高速缓存的数据缓冲区。