资源描述
Click to edit Title Slide,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,输入输出管理,输入输出管理,设备,管理概述,缓冲技术,设备分配,I/O,控制,Linux,系统的设备驱动,1,输入输出管理,主要内容,2,1.,设备分类,存储设备,又称块设备,是存储信息的设备,如:磁盘、磁鼓。,(,以块为单位传输信息,),输入输出设备,又称字符设备,能将信息从计算机外部输入到机内,,或反之,如:键盘、显示器、打印机。,(,以字符为单,位传输信息,),通信设备,负责计算机之间的信息传输,如调制解调器、网卡等,输入输出管理,设备管理概述,3,2.,设备管理的目标,提高设备利用率,合理分配设备,提高设备与,CPU,、各外部设备之间的并行性,方便用户的使用,提供使用方便且独立于设备的界面,统一:对各种不同的设备提供一致的界面,独立于设备:用户使用的设备与物理设备无关,输入输出管理,设备管理概述,4,3.,设备管理功能,状态跟踪,动态地记录各种设备的状态,设备分配与回收,作业级,静态分配,作业进入系统时进行分配,退出系统时收回全部资源。,进程级,动态分配,进程提出设备申请时进行分配,使用完毕后立即收回。,设备控制,实施设备驱动和中断处理的工作,输入输出管理,设备管理概述,5,4.,设备独立性,设备独立性概念,什么是设备独立性,所谓设备独立性是指,用户在编制程序时所使用的设备与实际使,用的设备无关,也就是在用户程序中仅使用逻辑设备名。,逻辑设备名,逻辑设备名,是用户自己指定的设备名,(,或设备号,),,它是暂时的、可更改的。,物理设备名,物理设备名,是系统提供的设备的标准名称,它是永久的、不可,更改的。,输入输出管理,设备管理概述,6,两种类型的设备独立性,一个程序独立于分配给它的某种类型的具体设备,系统可以根据设备的使用情况,动态地分配给程序某,类设备中的任一台物理设备,程序都能正确地执行。,程序应尽可能与它所使用的,I/O,设备类型无关,在输入,(,或输出,),信息时,信息可以从不同类型的输入,(,或输出,),设备上输入,(,或输出,),,若要改变输入,(,或输出,),设备的类型,程序只需进行最少的修改。,输入输出管理,设备管理概述,7,设备独立性的实现,在高级语言中用软通道实现,使用高级语言提供的指派语句,通过指派一个逻辑设,备名,(,通道号,),来定义一个设备或文件。,如:,fd,=open(“/dev/,lp,”,mode),在批处理系统中,用联接说明语句来定义,如:,OUTPUT1=LPT,在交互系统中,用指派命令来定义,如:,PDP,系列机上的,RT11,系统,ASSIGN,设备物理名 设备逻辑名,输入输出管理,设备管理概述,8,设备独立性的优点,方便用户,改善设备利用率,提高系统的可扩展性和可适应性,4.,设备控制块,什么是设备控制块,(DCB),系统为每一台设备都配置了一个用来记录设备的硬件,特性、连接和使用情况的一组数据,称为设备控制块。,输入输出管理,设备管理概述,9,设备控制块的内容,设备名,设备属性,指向命令转换表的指针,在,I,/,O,总线上的设备地址,设备状态,当前用户进程指针,I/O,请求队列指针,设备名,设备的系统名,即设备的物理名。,设备属性,是描述设备现行状态的一组属性,命令转换表,转换表包含设备特定的,I/O,例程地,址,不具备相应功能的设备在其,例程地址上可以填“,1”,输入输出管理,设备管理概述,10,1.,缓冲概念,什么是缓冲,缓冲是两种不同速度的设备之间传输信息时平滑传输过程,的常用手段。,缓冲类别,缓冲器,缓冲器是用来暂时存放数据的一种存储装置,它容量,较小,存取速度快。,软件缓冲,在,I/O,操作期间用来临时存放,I/O,数据的一块存储区域。,输入输出管理,缓冲技术,11,为什么要引入缓冲,处理数据流的生产者与消费者间的速度差异,如:从调制解调器收到一个文件,并保存到硬盘上。,协调传输数据大小不一致的设备,如:在计算机网络中用来处理消息的分段和重组。,应用程序的拷贝语义,如:操作系统为保证系统调用,write,的正确语义,(,应用程,序要写,入,磁盘的数据就是,write,系统调用发生时的版本,),。,方法:在系统调用返回前将应用程序缓冲区复制到内,核缓冲区。,输入输出管理,缓冲技术,12,2.,利用缓冲技术如何进行,I/O,操作,进程活动期间,请求从某字符设备读入数据,进程请求从输入设备进行读操作的图示,输入输出管理,缓冲技术,输入设备,BUF,进程,与,需要同步,13,进程请求从输入设备进行读操作的步骤,当用户要求在某个设备上进行读操作时,首先从系,统中获得一个空的缓冲区,;,将一个物理记录送到缓冲区中,;,当用户请求这些数据时,系统将依据逻辑记录特性,从缓冲区中提取并发送到用户进程存储区中,;,当缓冲区空而进程又要从中取用数据时该进程被迫,等待。此时,操作系统需要重新送数据填满缓冲,区,进程才能从中取数据继续运行。,要注意操作与操作的同步关系,输入输出管理,缓冲技术,14,进程活动期间,请求从输出设备输出数据,进程请求从输出设备进行写操作的图示,输入输出管理,缓冲技术,与,需要同步,输出设备,BUF,进程,15,进程请求从输出设备进行写操作的步骤,当用户要求进行写操作时,首先从系统中获得一个,空的缓冲区,;,将一个逻辑记录从进程存储区传送到缓冲区中,;,当缓冲区写满时,系统将缓冲区的内容作为物理记,录文件写到设备上,使缓冲区再次为空,;,只有在系统还来不及腾空缓冲区之前,进程又企图,输出信息时,它才需要等待。,要注意操作与操作的同步关系,输入输出管理,缓冲技术,16,3.,常用的缓冲技术,双缓冲、环形缓冲、缓冲池,双缓冲,在双缓冲方案下,为输入或输出分配两个缓冲区,buf,1,、,buf,2,。,输入数据时,如何利用双缓冲,输出数据时,如何利用双缓冲,缓冲区既用于输入,也用于输出数据时,如何利用,双缓冲,输入输出管理,缓冲技术,17,输入数据时,如何利用双缓冲,输入输出管理,缓冲技术,输入设备,BUF,1,进程,BUF,2,18,输出数据时,如何利用双缓冲,输入输出管理,缓冲技术,输出设备,BUF,1,进程,BUF,2,19,缓冲区既用于输入,也用于输出数据时,如何利用双缓冲,输入输出管理,缓冲技术,输入设备,BUF,1,BUF,2,输出设备,20,输入输出管理,缓冲技术,4.UNIX,系统的缓冲区管理,UNIX,系统缓冲管理的目的,加快系统响应、增强系统吞吐量,减少对磁盘的,I/O,操作次数,UNIX,系统缓冲管理的思路,当进程要从磁盘读数据时,首先考虑从高速缓冲中读,预先缓存,当进程要写数据到磁盘时,先写入高速缓冲中,延迟发送,21,缓冲管理数据结构,缓冲区的组成,缓存数组,含有磁盘上的数据的存储器数组,缓存首部,描述缓冲区特性的数据结构,缓存首部结构,输入输出管理,缓冲技术,22,缓存首部结构,设备号,dev,块号,blkno,状态,flag,指向数据区域的指针,传送字节数,返回的,I,/,O,出错信息,b_forw,设备缓冲区队列前向指针,b_back,设备缓冲区队列后向指针,av_forw,空闲缓冲区队列前向指针,av_back,空闲缓冲区队列后向指针,设备号,dev,缓冲区所包含的信息所属设备的设备号,块号,blkno,由设备号指出的设备上相对于第,0,块的块号,状态,flag,描述了缓冲区当前的状态,忙标志,BUSY,:缓冲区当前正“忙”,有效位,AVE,:缓冲包含的数据有效,延迟写,DELWR,:核心在某缓冲区重新分配出去之前必须把缓冲区内容写到磁盘上,写标志,WRITE,:核心当前正把缓冲区的内容写到磁盘,读标志,READ,:核心当前正从磁盘往缓冲区写信息,等待位,WAIT,:一个进程当前正在等候缓冲区变为空闲,输入输出管理,缓冲技术,23,缓冲区队列结构,设备缓冲区队列,与某类设备有关的所有缓冲区组成的队列称为设备缓冲区队列,简称,b,链。,空闲缓冲区队列,可供重新分配使用的缓冲区组成的队列称为空闲缓冲区队列,简称,av,链。,av_forw,av_back,av_forw,av_back,av_forw,av_back,av_forw,av_back,空闲缓冲区队列,输入输出管理,缓冲技术,24,缓冲区队列指针,b,链指针,b_forw,:指向设备缓冲区队列上的下一个缓冲区的指针,b_back,:指向设备缓冲区队列上的上一个缓冲区的指针,av,链指针,av_forw,:指向空闲缓冲区队列上的下一个缓冲区的指针,av_back,:指向空闲缓冲区队列上的上一个缓冲区的指针,b_forw,b_back,b_forw,b_back,b_forw,b_back,b_forw,b_back,设备缓冲区队列,输入输出管理,缓冲技术,25,UNIX,缓冲管理算法,缓冲读、写示意图,缓冲读,高速缓冲,用户,数据区,用户进程,磁盘,预先缓存,缓冲写,高速缓冲,用户,数据区,用户进程,磁盘,延迟发送,输入输出管理,缓冲技术,26,UNIX,缓冲管理算法,缓冲管理算法,一个,buf,被分配用于读,/,写某设备上的块时,置,B_ BUSY=1,,位于,b,链上,不在,av,链上;,当读,/,写操作结束时,释放该,buf,,置,B_BUSY=0,,仍留在,b,链上,并送入,av,链尾;,若进程需要的信息在,buf,中时,在该设备的,b,链上找到,置,B_BUSY=1,;从,av,链上摘,除,使用完后,又送入,av,链,链入队尾。,输入输出管理,缓冲技术,27,对空闲,buf,空队列的处理,当需要一个空闲,buf,时,总是取空闲,buf,队列,(,av,链,),的,首元素;,一个使用过的,buf,释放时,插入到空闲,buf,队列,(,av,链,),的队尾。,实现了精确的最久未使用淘汰算法,(LRU,算法,),对延迟写的处理,当一个具有延迟写标记的,buf,移到,av,链头,要用于分,配时,立即进行写操作。从,av,链上摘除,使用完后,又送入,av,头部。,输入输出管理,缓冲技术,28,1.,独享分配,常用的设备分配技术:独享分配、共享分配和虚拟分配,独享设备,让一个作业在整个运行期间独占使用的设备。,特点,临界资源,费时的,I/O,操作或需人工干预,独享分配,在一个作业执行前,将它所要使用的设备分配给它;当它结束撤离时,将分配给它的这类设备收回。,输入输出管理,设备分配,29,2.,共享分配,共享设备,由多个作业、进程共同使用的设备称为共享设备。,特点,旋转设备,可直接或随机访问,便于共享,转接简单,耗费较少,独享分配,在一个作业执行前,将它所要使用的设备分配给它;当它结束撤离时,将分配给它的这类设备收回。,输入输出管理,设备分配,30,3.,虚拟分配,虚拟技术,所谓虚拟技术,是在一类物理设备上模拟另一类物理设备的技术,是将独占设备转化为共享设备的技术。,虚拟设备,通常把用来代替独占型设备的那部分外存空间,(,包括有关的控制表格,),称为虚拟设备。,输入输出管理,设备分配,31,虚拟分配,当进程需要与独占型设备交换信息时,系统将分配磁盘空间,并建立相应的数据结构,这种分配方法称为设备的虚拟分配。,输入输出管理,设备分配,虚宽行,1,虚宽行,2,进程,A,进程,B,进程,C,进程,D,输入井,输出井,输入机,打印机,虚输入机,1,虚输入机,2,32,4.SPOOLING,系统,SPOOLING,系统提供外围设备同时联机操作的功能。,设计思想,预输入,在作业需要数据前,,OS,已将所需数据预先输入到辅存输入井存放。,当作业,(,或进程,),需要数据时,可直接从辅存中读入主存。,缓输出,在在作业执行时,将输出数据写入辅存输出井中。当作业,(,或进程,),执行完毕,(,或需要数据时,),,由操作系统将数据输出。,输入输出管理,设备分配,33,什么是,SPOOLING,系统,利用通道和中断技术,在主机控制之下,由通道完成输入输出工作。系统提供一个软件系统,(,包括预输入程序、缓输出程序、井管理程序、预输入表、缓输出表,),。它提供输入收存和输出发送的功能,使外部设备可以并行操作。这一软件系统称为,SPOOLING,系统,。,SPOOLING,系统的优点,提供虚拟设备,外围设备同时联机操作,加快作业处理速度,输入输出管理,设备分配,34,实现,SPOOLING,系统的基础,大容量的辅存空间,在辅存上需开辟两个较大的输入井和输出井,用以存放多作业的,输入信息和输出信息。,硬件基础,通道装置、中断系统,数据结构,预输入表、缓输出表,:,描述辅存输入井和输出井的状态变化。,如:输入信息从哪台设备输入,存放在辅存输入井什么位置;,输出信息存放在辅存输出井什么位置,从哪台输出设备输出。,输入输出管理,设备分配,35,所需的软件程序,输入程序,控制信息从独占设备输入到辅存,缓输出程序,控制信息从辅存输出到独占设备,井管理程序,控制用户程序和辅存之间的信息交换,输入输出管理,设备分配,输入机,1,输入机,2,作业,1,作业,2,打印机,磁盘输入井,磁盘输出井,主存,36,1.,输入,/,输出控制方式,CPU,一般通过,I/O,控制器与物理设备打交道。按照,I/O,控制器智能化程度的高低,将,I/O,设备的控制方式分为四类,循环测试,I/O,方式,I/O,中断方式,DMA,方式,通道方式,输入输出管理,设备控制,37,2.I/O,子系统,输入输出管理,设备控制,内核,内核,I,/,O,子系统,SCSI,设备驱动器,键盘,设备驱动器,鼠标,设备驱动器,PCI,总线,设备驱动器,软盘,设备驱动器,SCSI,设备控制器,键盘,设备控制器,鼠标,设备控制器,PCI,总线,设备控制器,软盘,设备控制器,SCSI,设备,键盘,鼠标,PCI,总线,软盘,驱动器,软件,硬件,38,I/O,子系统的特点,在应用层为用户提供,I/O,应用接口,对设备的控制和操作则由内核,I/O,子系统来实施。,每个通用设备类型都通过一组标准函数,(,及接口,),来访问,具体的差别被,I/O,子系统中的内核模块,(,称为设备驱动程序,),所封装,这些设备驱动程序一方面可以定制以适合各种设备,另一方面也提供了一组标准的接口。,设备驱动程序层的作用是为内核,I/O,子系统隐藏设备控制器之间的差异。将,I/O,子系统与硬讲分离,简化了操作系统开发人员的任务,也有利于设备的设计与制造。,输入输出管理,设备控制,39,I/O,控制的功能,解释用户的,I/O,系统调用,设备驱动,中断处理,设备处理程序,设备处理程序是能直接控制设备运转的程序,它根据各类设备的特点和性能来编写。每一类设备有一个相应的设备处理程序,能控制同类中多台物理设备同时工作。,输入输出管理,设备控制,40,控制,I/O,核心模块的方式,以设备处理进程的方式,为每一类设备设置一个设备处理进程,(,对应的程序就是设备处理程序,),;,当有,I/O,请求来到时,该进程被唤醒,进行设备驱动工作;,当没有,I/O,请求时,该进程睡眠。,由,I/O,控制模块的接口程序,负责解释用户的,I/O,系统调用,将其转,换成,I/O,控制模块认识的命令形式后,将,I/O,请求发给对应的设备,处理进程。,将设备与文件一样对待,将设备与文件一样对待,使用文件系统的系统调用命令进行设备的读、写。,输入输出管理,设备控制,41,3.,输入,/,输出控制的例,用户进程请求,I/O,的系统功能调用,系统功能调用的形式为:,doio(ldev,mode,amount,addr,);,ldev,:逻辑设备名,mode,:操作模式,amount,:传输数据的数目,addr,:传送地址,输入输出管理,设备控制,42,I/O,接口程序,(I/O,过程,),将逻辑设备转换为物理设备,获得,I/O,系统调用中给出的逻辑设备名,(,ldev,),根据逻辑设备描述器,将逻辑设备名转换为物理设备名,合法性检查,获得,I/O,系统调用中给出的操作模式,mode,根据,DCB,中命令转换表中允许的操作,检查操作的合法性,形成,I/O,请求块,发消息给对应的设备处理进程,根据请求的参数形成,I/O,请求块,(IORB),将,I/O,请求块,(IORB),挂到对应的设备请求队列,输入输出管理,设备控制,43,I/O,接口程序的描述,算法,doio,输入:设备的逻辑名,ldev,操作类型,mode,传送数据数目,amount,传数数据地址,addr,输出:如果传送出错,则带错误码返回,否则正确返回,输入输出管理,设备控制,44,while (,该进程的逻辑设备描述器队列不空,),if (,与,ldev,相联结的物理设备找到,),break,;,/*,找到*,/,if (,该进程的逻辑设备描述器队列为空,),return(,错误码,),;,/*,设备逻辑名错*,/,检查参数与该设备特性是否一致,;,if (,不一致,),return(,错误码,),;,/*,传送参数错*,/,构造,iorb,;,把,iorb,插入到该设备的请求队列中;,唤醒因等待,I/O,请求块而睡眠的进程;,输入输出管理,设备控制,45,设备处理进程,process,io,l,:,while (,设备请求队列不空,),取一个,iorb,;,提取请求的详细信息;,启动,I/O,操作;,sleep (,事件:,I/O,完成,)/*I/O,操作*,/,/*,等,I/O,完成后,进入中断处理程序,并在那里唤醒设备处理进程*,/,if (,出错,),将错误信息写在该设备的,dcb,中;,传送数据到目的地;,唤醒请求此,I/O,操作的进程;,删除,iorb,;,sleep (,事件:因无,I/O,请求,),;,goto,l,;,输入输出管理,设备控制,4.,请求,I/O,的进程、,I/O,过程、设备处理进程、中断处理程序之间的同步关系,输入输出管理,设备控制,中断处理程序,46,doio(ldev,mode,amount,addr,);,/*,等,I,/,O,完成*,/,标识设备;,执行出错检查;,构成,iocb,;,将,iocb,送入设备请求队列;,唤醒因等待,I,/,O,请求块而睡眠的,I,/,O,进程;,取,iocb,;,如无,iocb,则等待;,启动,I,/,O,操作;,/*,等,I,/,O,完成*,/,执行出错检查;,唤醒等待,I,/,O,的进程;,I,/,O,设备,中断服务;,唤醒,I,/,O,处理,进程;,用户进程,I,/,O,过程,I,/,O,处理进程,启动,设备,中断信号,控制关系,同步关系,47,1.Linux,系统设备的分类,字符设备,字符设备是能够像字符流的方式被有序访问的设备。,这类设备以字节为单位进行数据处理。,块设备,块设备是能随机访问固定大小数据,(,又称为块,),的设备。,常见的块设备有硬盘、软盘驱动器、,CD-ROM,驱动器和闪存等。,块设备以块为单位进行处理,大多数块设备采用缓冲技术。,输入输出管理,Linux,系统的设备驱动,48,2.,设备文件及标识,设备文件,Linux,系统将设备称为设备特殊文件,是文件类型的一,种。,主、次设备号,在,Linux,系统中描述文件的数据结构称为文件索引节点。,设备特殊文件的索引节点包含硬件设备的一个标识符,该,标识符对应字符设备或块设备。,输入输出管理,Linux,系统的设备驱动,49,主设备号,主设备号标识设备的类型。,具有相同主设备号,(,即类型一样,),的所有设备共享相同的文件操作集合。,次设备号,次设备号标识主设备号相同的一组设备中的一个特定的设备。,如由相同的磁盘控制器管理的一组磁盘具有相同的主设备号和不同的次设备号。,输入输出管理,Linux,系统的设备驱动,50,VFS,对设备文件的处理,虚拟文件系统,VFS(Virtual,Filesystem,),负责处理与,UNIX,标准文件系统相关的所有系统调用,为各种文件系统提供一个通用的接口。,VFS,在打开设备文件时改变缺省的文件操作。它将缺省的文件操作,(,f_op,),字段改变为块设备,(,或字符设备,),的文件操作表,(,def_bik_fops,),的地址。,对设备文件的每次系统调用都将转换成与设备相关的操作函数调用。,当与设备相关的操作函数被调用后,就可以对硬件设备进行操作,以完成进程所请求的,I/O,传输。,输入输出管理,Linux,系统的设备驱动,51,缺省的块设备文件操作表,def_bik_fops,表,输入输出管理,Linux,系统的设备驱动,方法,用于块设备文件的函数,open,blkdev_open,(),release,blkdev_close,(),llseek,blkdev_llseek,(),read,generic_file_read,(),write,blkdev_file_write,(),52,3.Linux,块,设备的处理,块设备处理中内核组件之间的关系,输入输出管理,Linux,系统的设备驱动,虚拟文件系统,VFS,磁盘高速缓存,文件系统映射层,通用块层,I/O,调度程序,块设备,驱动程序,块设备,驱动程序,磁盘,磁盘,53,以进程的,read(),系统调用为例,分析内核组件的调用过程,在读操作之前,相应的设备文件已打开;,VFS,通过块设备文件操作表调用适当的,VFS,函数,传递的参数是:文件描述符、文件的偏移量;,VFS,相应的函数首先访问磁盘高速缓存,若所需数据在高速缓存中,不必启动磁盘读操作;否则启动磁盘读操作。假定为后者;,在磁盘文件系统映射层,计算请求数据的逻辑块号,根据该文件的索引节点中的索引结构确定该逻辑块号对应的磁盘物理块号。然后,对块设备发出读请求;,输入输出管理,Linux,系统的设备驱动,54,通用块层接收到所需数据所在的磁盘块号、操作类型,给,I/O,调度程序发出启动磁盘读操作的命令;,I/O,调度程序根据预先定义好的,I/O,调度策略,将待处理的,I/O,数据传送请求进行归类。其目的是尽量将在磁盘上物理介质相邻的数据请求聚集在一起,以使,I/O,处理的效率最高;,最后,块设备驱动程序向磁盘控制器的硬件接口发出设备启动命令,从而进行实际的数据传送。,输入输出管理,Linux,系统的设备驱动,55,4.,用于块,设备处理的数据结构,设备驱动程序涉及的数据结构有设备请求队列和,bio,请求块。,bio,结构,bio,是描述块设备,I/O,操作的描述符,包括一个磁盘存储区标识符,(,存储区的起始扇区号和扇区总数,),;,一个或多个描述与,I/O,操作相关的主存区的段。,bio,结构以片段为单位的链表形式来组织块,I/O,操作,一个片段是一小块连续的主存。当缓冲区分散在主存的多个位,置上时,,bio,结构体也能对内核保证,I/O,操作的执行。,在,bio,结构体中有几个相关的域,bi_io_vec,、,bi_vcnt,和,bi_idx,。,输入输出管理,Linux,系统的设备驱动,56,bi_io_vec,、,bi_vcnt,和,bi_idx,bi_io_vec,域指向一个,bio_vec,数组,该数组包含了提供特定,I/O,操作所需要使用到的所有,片段。,在指定的,I/O,操作中,,bi_vcnt,域用来描述,bi_io_vec,所,指向的,bio_vec,数组中的向量数目。,当块,I/O,操作执行完毕后,,bi_idx,域指向数组的当前,索引。,输入输出管理,Linux,系统的设备驱动,57,bio,结构、,bio_vec,结构数组和,page,结构之间的关系,输入输出管理,Linux,系统的设备驱动,bio_vec,结构数组,总数为,bi_vcnt,bio_idx,bio_io_vec,bio_vec,bio_vec,bio_vec,bio_vec,页面,页面,页面,页面,I/O,操作的第一个片段由,bio,结构中的,bio_io_vec,字段所指向,其他的片段在其后依次存放,共有,bi_vcnt,个片段;,当,I/O,操作开始执行时,使用着各个片段,这时,,bi_idx,域会不断地更新,它总是指向正在操作的当前片段。,58,设备队列和请求描述符,设备请求队列,设备请求队列是一个双向链表,包含待处理的请求,由,request_queue,结构描述。,请求描述符,请求描述符,request,描述每个块设备待处理的请求。,输入输出管理,Linux,系统的设备驱动,59,输入输出管理,Linux,系统的设备驱动,字段,说明,queue_head,待处理请求的链表,request_fn,实现驱动程序的策略例程入口点的方法,back_marge_fn,检查是否可能将,bio,合并到请求队列的最后一个请求中的方法,front_marge_fn,检查是否可能将,bio,合并到请求队列的第一个请求中的方法,marge_requests_fn,合并请求队列中两个相邻请求的方法,make_request_fn,将一个新请求插入到请求队列时调用的方法,prep_rq_fn,将处理请求的命令发送给硬件设备的方法,queue_flags,描述请求队列状态的标志,request_queue,结构的字段,60,输入输出管理,Linux,系统的设备驱动,struct,request,结构的字段,字段,说明,queuelist,请求队列链表的指针,flags,请求标志,nr_sectors,整个请求中要传送的扇区数,current_nr_sectors,当前,bio,的当前段中要传送的扇区数,hard_sector,要传送的下一个扇区号,hard_nr_sectors,整个请求中要传送的扇区数,(,由通用块层更新,),hard_cur_sectors,当前,bio,的当前段中要传送的扇区数,(,由通用块层更新,),bio,请求中第一个没有完成传送操作的,bio,biotail,请求链表中末尾的,bio,elevator_private,指向,I/O,调度程序私有数据的指针,61,5.I/O,调度程序,I/O,调度程序的工作,管理块设备请求队列,延迟激活块设备驱动程序,;,对队列中的请求进行排序,以减少磁盘寻址时间。,合并与排序,合并,将两个或多个,I/O,请求结合成一个新请求称为合并;,通过合并处理可以显著地减少系统开销和磁盘的寻址时间。,排序,将设备请求队列按磁盘扇区增长的方向排序,使磁头可以按,其前进方向上移动。,输入输出管理,Linux,系统的设备驱动,62,电梯调度,电梯调度算法,从当前,I/O,请求的磁盘位置开始,沿着臂的移动方向,将请求按磁盘扇区的顺序排序,;,总是选择离当前位置最近的那个,I/O,请求,;,如果在磁盘移动方向上无请求访问时,就改变移动,方向再选择。,输入输出管理,Linux,系统的设备驱动,63,一个新请求加入设备请求队列时的操作,若队列中存在一个与新请求的磁盘扇区相邻的请,求,则将新请求与这个已存在的请求合并成为一个,请求;,若无相邻的请求,新请求插入到按扇区递增的合适,的位置;,如果队列中不存在该请求合适的插入位置,新请求,被插入到队列的尾部;,如果队列中存在一个驻留时间过长的请求,那么新,请求插入到队尾,以防止旧请求发生饥饿。,输入输出管理,Linux,系统的设备驱动,64,6.,策略例程,什么是策略例程,设备驱动程序包含一个函数或一组函数,这些函数称为,策略例程;,例程与设备控制器一起来处理设备请求队列的,I/O,请求。,策略例程的调用,I/O,调度程序通过请求队列描述符中的,requst_fn,方法来调,用策略例程,并将请求队列描述符的地址传递该该例程。,输入输出管理,Linux,系统的设备驱动,65,策略例程处理,I/O,请求的方法,一种简单的方式是策略例程等待直到数据传送完成,,然后将已经处理过的,I/O,请求从队列中删除,继续处理,下一个请求,直到队列为空才结束。,另一个处理方式是中断方式,其处理效率高,为许多现代设备驱动程序所采用。,输入输出管理,Linux,系统的设备驱动,66,在中断方式下,通用块层、,I/O,调度程序、设备驱动程序的策略例程和中断处理程序之间的关系,通用块层将一个,I/O,操作请求发送给,I/O,调度程序;,I/O,调度程序在相应的块设备请求队列上进行处理,产,生一个新请求或扩展一个已有的请求,然后终止;,块设备队列若为空,当加入一个新请求时块设备驱动程,序被激活;否则,会一个接一个地处理请求队列上的每,一个请求。设备驱动程序调用策略例程,选择一个待处,理的请求,设置磁盘控制器,以便在数据传送完成时产,生一个中断,然后策略例程终止;,输入输出管理,Linux,系统的设备驱动,67,当磁盘控制器产生中断时,在该设备对应的中断处理程,序会重新调用策略例程。这时,策略例程可能处理以下,两种情况之一:,当前请求的所有数据块已经传送完成,则将该请求,从设备请求队列中删除,然后开始处理下一个请求;,当前请求的所有数据块还没有传送完成,则为当前,请求再启动一次数据传送,这通常称为中断驱动。,输入输出管理,Linux,系统的设备驱动,68,设备管理的基本概念,I/O,管理的功能,设备独立性 定义 优点,设备控制块 定义,缓冲技术,什么是缓冲,引入缓冲的目的,常用的缓冲技术,双缓冲技术,UNIX,缓冲管理中的空闲缓冲区的淘汰算法,输入输出管理,小结,69,设备分配,常用的设备分配技术,独享设备 独享分配 定义,共享设备 共享分配 定义,虚拟设备 虚拟技术 定义,Spooling,系统 定义,I/O,控制,I/O,控制的主要功能,请求,I/O,的进程、,I/O,过程、设备处理进程、中断处理程序之间的同步关系,输入输出管理,小结,70,Linux,系统的设备驱动,Linux,系统设备的分类,设备文件、主设备号、次设备号,bio,结构、设备请求队列,I/O,调度程序的主要工作,合并、排序,电梯调度算法,输入输出管理,小结,
展开阅读全文