Linux设备管理课件_第1页
Linux设备管理课件_第2页
Linux设备管理课件_第3页
Linux设备管理课件_第4页
Linux设备管理课件_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4讲Linux设备管理设备管理的目标计算机的设备进行管理有两大目标:一是提高设备的利用率;二是方便用户使用。课程内容:Linux设备管理分类Linux设备驱动程序的接口Linux磁盘高速缓存管理Linux的字符设备缓冲区管理Linux的设备驱动Linux系统I/O软件层次结构特别文件每个设备都有自己的设备名,用户通过设备名来访问具体物理设备,设备名存放在/dev目录下。硬盘:/dev/hda,/dev/sda软盘:/dev/fd0光盘:/dev/cdrom鼠标:/dev/psaux(ps/2)/dev/input/mice(USB)打印机:/dev/lp控制台:/dev/console网卡:/dev/eth0但是像块设备磁盘、磁带上的普通文件和目录不是特殊文件。二、Linux设备驱动程序的接口1、文件系统与设备驱动程序的接口Linux系统中,用户程序通过文件操作方式如打开、关闭、读写等来使用设备,由文件系统转入设备驱动程序。在Linux中系统提供块设备开关表和字符设备开关表作为核心与设备驱动程序之间的接口。每一种设备类型在表中占用一个表目,包含若干数据项,其中有一项为该类设备驱动程序入口地址,在系统调用时引导核心转向适当的驱动程序接口。2、文件的系统调用过程对设备特殊文件的系统调用,根据文件类型转入块设备开关表或字符开关表进行打开、关闭块设备或字符设备的操作。字符设备特殊文件的系统调用Read、Write转向字符开关表中指示的设备驱动程序,而对普通文件或目录文件的Read、Write系统调用则通过高速缓冲模块转向设备驱动模块中的策略(Strategy)过程。文件系统对字符设备特殊文件的系统调用openclosereadwrite对块设备文件的系统调用openclose对普通文件的系统调用readwrite高速缓冲模块字符设备开关表块设备开关表字符设备块设备中断向量表openclosereadwrite字符设备驱动程序设备中断处理程序openclosestrategy块设备驱动程序设备中断处理程序三、Linux磁盘高速缓存管理2、磁盘缓冲区管理的数据结构Linux使用多个内存缓冲区进行磁盘缓冲,为了合理有效地使用这些缓冲区,设置了一定的数据结构按照一定策略进行管理。管理的依据是缓冲区的相关信息,为了能访问这些信息,必须将其按一定的数据结构进行组织。每一个缓冲区建立“缓冲首部”来存放该缓冲区的相关信息缓冲首部设备号dev设备缓冲区队列后向指针b-back块号blkno空闲缓冲区队列前向指针Av-forw状态flag空闲缓冲区队列后向指针Av-back设备缓冲区队列前向指针b-forw忙标志位BUSY:缓冲区当前是否忙有效位AVE:缓冲区包含的数据是否有效延迟写位DELWR:是否延迟写写标志位WRITE:是否正在把缓冲区的内容写到磁盘上读表示位READ:是否从磁盘往缓冲读取信息等待位WAIT:是否有一个进程正在等待该缓冲区空闲缓冲区队列(BUSY=0)Av-forwAv-backAv-forwAv-back……Av-forwAv-back3、Linux磁盘缓冲区管理算法

①高速缓冲区的分配当某进程要从一个磁盘读取数据时,先检查要读取的磁盘块是否包含在某个缓冲区中,如果不在,则从空闲缓冲区队列中分配给它一个空闲缓冲区;当某进程要将数据写入磁盘时,先看一下要写的磁盘块是否在某个缓冲区,如果不在则为这个磁盘块分配一个空闲缓冲区。被分配的空闲缓冲区从空闲缓冲区队列中退出,进入相应设备的设备缓冲区队列,该缓冲区的BUSY位置1。当缓冲区的信息读到相应进程的内存后,便释放进程使用的缓冲区,将Flag中的BUSY位置0,送入空闲缓冲区队尾;同时也将置为延迟写的缓冲区也送入空闲缓冲区队列。这样可以使有效的缓冲区得到充分利用,满足多个并发进程的需要。②“延迟写”缓冲区的处理如果要将一个使用完毕送入空闲缓冲区队列的缓冲区分配给其他设备,则可以将该缓冲同时从空闲缓冲区队列和原设备缓冲区队列中抽出,送入新的设备缓冲区队列。因为被使用过的缓冲区在空闲缓冲区队列的末尾,随着不断地空闲缓冲区队列上摘下缓冲区,后面的缓冲区会不断向队首移动,如果一个延迟写标志位为1的缓冲区移到空闲缓冲区队列的头部,当其被重新分配之前,要先把其内容写到相应设备的指定的磁盘块中。四、Linux字符设备缓冲区管理(1)字符缓冲区及其队列Linux中为字符设备的数据传输设置了一个公用的字符缓冲池,该缓冲池内含有若干个缓冲区,但每个缓冲区很小,只含几个或十几个字节。为合理使用这些缓冲区,将其组织成一定的数据结构。同块设备缓冲区的管理类似,建立空闲字符缓冲区队列和设备字符缓冲区队列。(2)空闲字符缓冲区的分配和回收在一进程用字符设备进行I/O操作时,文件系统为该字符设备分配一个空闲缓冲区。分配时要检测空闲缓冲区队列,当队列非空时,从队首取下一个空闲缓冲区分配该字符设备,送入该字符设备的字符缓冲区队列,并把指向该缓冲区的指针返回给调用进程;当队列为空时,表明已经没有缓冲区可分配,则请求I/O操作的进程被阻塞。当字符缓冲区中的数据被提取完后,便释放该缓冲区,将该缓冲区送入空闲字符缓冲区队列的首部。(空闲字符缓存区队列其实是一个栈)若此时有因申请空缓冲区而阻塞的进程,则将其唤醒。五、Linux的设备驱动设备驱动是指控制具体的物理设备完成I/O操作,与硬件的物理特性和数据传输控制方式密切相关,不同类型的设备、不同数据传输控制方式要采用不同设备的驱动方式。②I/O请求队列用户进程的I/O请求包括要求完成I/O操作的逻辑设备名、要求的操作、输送数据在内存中的起始地址、传送数据的长度,将这些信息组织成I/O请求块iorb。逻辑设备名相同(同一类设备)的I/O请求块构成一个队列,称为I/O请求队列。每类设备分别有一个I/O请求队列。(2)磁盘驱动程序驱动程序控制设备具体实现进程的高级I/O请求包括打开、关闭、读、写等。①打开。硬盘在使用之前必须进行打开操作,其目的是在使用硬盘之前进行必要的初始化——设置硬盘的工作参数。硬盘的工作参数存放在主存中操作系统数据结构硬盘控制块中,它是驱动程序对硬盘进行控制的依据。硬盘工作参数存放在硬盘的引导区中,因此要将引导区内容读到硬盘控制块中。为了读写硬盘引导区,必须初启硬盘,首先测试该设备是否就绪(通过测试设备控制器的设备状态寄存器的ready位判断),如果已就绪再测试该硬盘是否可用。设备不能使用的原因可能是没有格式化或其它一些硬件故障,测试的方法是读取该硬盘的首标,如果不能被正确读出,说明硬盘不能使用,否则是可以使用的。如果是限定时间内设备未就绪或经测试不能使用,则设备初启失败。若初启成功,便读取硬盘引导区,初始化硬盘控制块。②读写硬盘由策略接口程序strategy完成,每次只读写一个扇区。Linux中对硬盘有两种读方式和三种写方式。一般读:把当前所需盘块中的内容读入缓冲区。预先读:进程读顺序文件的盘块时,会预见到要读的下一个盘块,因此读出当前块后可提前读下一盘块。一般写:把缓冲区数据写到盘块,且进程必须等待写操作完成。异步写:把缓冲区数据写到盘块,但进程不必等待写操作完成。延迟写:当进程要把数据写到盘上时,先写到缓冲区,然后将该缓冲区标记为延迟写,挂到空闲缓冲区队列的末尾,但并不立即将该缓冲区的内容写到磁盘。硬盘读写驱动过程①将逻辑块号转换为物理块号;②申请DMA;③将物理块号转换为盘面号/柱面号/扇区号;④移动磁头到指定柱面;⑤向硬盘控制器发送读写命令。CPU发出读写命令后不必等待,而继续执行其他进程。但传输结束后,硬盘控制器向CPU发送中断信号,CPU响应后转入硬盘中断处理程序。硬盘中断处理过程检测此次数据传输是否出错,传输错误记录在硬盘控制器的状态寄存器中,如果出错,进行错误处理;由于磁盘读写一次只能传输一个扇区,每传输一个扇区就中断一次,而I/O读写请求缓冲区可能有大于一个扇区的数据要传输,因此每次传输结束,中断处理程序要检查I/O读写请求缓冲区内是否还有数据传输,若有,则继续传输余下的数据,若没有,说明一个缓冲区已经传输完毕。若I/O读写请求缓冲区内的数据全部传输完毕,则唤醒等待传输完成的进程。2、字符设备驱动字符设备的传送用一组专用的寄存器来实现。每种字符设备的控制器一般都有3个寄存器:控制寄存器接收CPU发送来的命令,控制设备的操作;状态寄存器保存设备的状态;数据寄存器暂存要传送的数据。(1)数据结构对每类字符设备分别建立字符设备表,记录使用该类字符设备所需的各种信息。(2)终端驱动程序字符设备种类繁多,其驱动程序各不相同,在这里以终端驱动程序为例来讲述Linux中字符设备驱动程序的工作原理。终端主要由键盘和显示器构成,终端驱动程序控制终端设备和进程之间的字符数据传输,包括以下5个操作:ttopen:打开终端机,建立终端机和终端进程之间的对应关系。ttclose:切断终端机和终端进程的联系。ioctl:用于对终端机的控制,例如状态设置、测试、终端机属性值的更改等。ttread:从终端键盘读入数据。ttwrite:向终端显示器写数据。ttread过程当从键盘键入数据时,终端中断处理程序把键盘数据放入原始输入缓冲队列,同时送往输出缓冲队列,以便送到显示器输出,当键入回车键时,终端中断处理程序,唤醒所有处于睡眠状态的等待读终端的进程。当一个读终端的进程执行时,由ttread调用行规则程序,从原始输入缓冲队列中依次取出字符,进行必要的格式转换后,放入标准输入缓冲队列,同时,将输出缓冲队列中的字符送往显示器显示,然后把标准输入缓冲队列中的字符复制到应用程序数据存储区。如果当前各原始输入缓冲队列中都没有数据,则ttread睡眠。ttwrite过程对于ttwrite,它首先调用行规则程序,从应用程序数据存储区把输出的数据送入输出缓冲队列,并对每个输出字符进行行规则处理。当输出缓冲队列中的字符量大于某个上限时,启动终端输出数据并使写进程睡眠。输出使得输出缓冲队列中的字符存量减少,当输出缓冲队列中的字符量小于某个下限时,唤醒有关睡眠进程执行写操作。行规则程序行规则程序把数据按行(以回车为结束标志)缓存起来,并按标准格式或原始格式传送数据。行规则程序的功能如下:通过分析将输入字符串组成行。处理删除键,以便用户能够从逻

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论