
操作系统设备管理.ppt
97页第第5 5章章 设备管理设备管理•首先回顾操作系统的总体构架,定位设备管理所处地位•然后学习设备管理的基本原理•最后了解LINUX设备管理实例 操操作作系系统统整整体体结结构构操作系统的基本组织结构操作系统的基本组织结构进程与资进程与资源管理源管理文件管理文件管理存储管理存储管理设备管理设备管理处理机处理机主存主存设备设备操作系统操作系统计算机硬件计算机硬件Linux文件系统文件系统设备管理设备管理•引言引言•输入输入/输出硬件输出硬件•输入输入/输出软件输出软件•LINUX输入输入/输出系统概述输出系统概述•小结小结引言引言•硬件设备与控制软件之间的联系:硬件设备与控制软件之间的联系:设备设备—控制器控制器—内存映射地址内存映射地址—处理机处理机 驱动程序驱动程序—I/O管理程序管理程序—文件系统文件系统—用户的用户的I/O请求请求•设备管理的主要任务设备管理的主要任务设备分配设备分配实现数据传输实现数据传输提供用户使用接口提供用户使用接口提高并行操作度提高并行操作度•设备管理程序提供的功能设备管理程序提供的功能为进程管理提供接口(将进程的请求转给设备管理)为进程管理提供接口(将进程的请求转给设备管理)实施设备分配(设备分类、调度算法、等待队列)实施设备分配(设备分类、调度算法、等待队列)实现设备之间以及设备与实现设备之间以及设备与CPU之间并行操作(之间并行操作(DMA、、通道)通道)缓冲区管理缓冲区管理输入输入/ /输出硬件输出硬件•电子设备•设备分类字符设备块设备•设备控制器•DMA存储器直接存取•通道图形控制器监控器处理机存储控制器缓存内存SCSI控制器IDE磁盘控制器扩展总线内部接口键盘串口并口磁盘磁盘磁盘磁盘SCSI总线PCI总线扩展总线图5.1 典型的PC总线结构内核的输入内核的输入/ /出结构出结构PCI系统示意图系统示意图PC系统结构与系统结构与PCI总线总线典型的典型的PC总线结构总线结构磁带磁带磁带格式磁带格式磁带头部磁带头部反光片反光片磁带尾部磁带尾部反光片反光片记记录录记记录录IRGIRG块记录格式块记录格式记录记录1记录记录2记录记录3记录记录4IRGIRG800字节字节磁盘磁盘扇区扇区磁道磁道单单磁磁盘盘片片表表面面的的划划分分旋转方向旋转方向读读/写磁头写磁头臂移动方向臂移动方向 移动头磁盘示意图移动头磁盘示意图磁盘设备结构磁盘设备结构两种输入两种输入/输出模式输出模式输入输出设备特点输入输出设备特点Intel奔腾处理器中断向量表奔腾处理器中断向量表输入输入/输出软件输出软件•输入输入/输出软件的作用输出软件的作用•数据传送控制方式数据传送控制方式程序直接控制方式程序直接控制方式中断方式中断方式DMA方式方式通道控制方式通道控制方式•中断处理过程中断处理过程•驱动程序所处地位驱动程序所处地位•与设备无关的与设备无关的I/O软件软件(文件系统功能)(文件系统功能)•用户层的输入用户层的输入/输出软件输出软件(使用(使用read/write))•设备分配设备分配•缓冲区管理缓冲区管理•I/O进程控制进程控制输入输入/输出软件的作用输出软件的作用使用使用I/O系统调用:格式化系统调用:格式化I/O执行执行I/O操作操作命名、保护、阻塞、缓冲、分配设备命名、保护、阻塞、缓冲、分配设备I/O结束时,唤醒设备服务子程序结束时,唤醒设备服务子程序设置设备寄存器、检测状态设置设备寄存器、检测状态4-用户进程用户进程3-设备无关软件设备无关软件2-设备驱设备驱动程序动程序硬硬 件件设备服务子程序设备服务子程序1-中断处理程序中断处理程序I/O请求请求I/O应答应答输入输入/ /输出请求输出请求的提交周期的提交周期程序直接控制方式程序直接控制方式否否外围设备外围设备做接收或发送数据准备做接收或发送数据准备接收到接收到start命令命令标志触发器置标志触发器置“done”等待等待CPU来的下条指令来的下条指令准备完毕?准备完毕?是是否否CPU发发start命令命令等等 待待执行下条指令执行下条指令开始数据传送开始数据传送设设备备标标志志触触发发器为器为done”??是是(a)(b)中断控制方式的传送结构中断控制方式的传送结构I/O控制器控制器1I/O控制器控制器nI/O设备设备1I/O设备设备n地址线地址线数据线数据线控制线控制线intCPU内存内存start启动位启动位中断位中断位信号线信号线控制状态寄存器控制状态寄存器数据缓冲寄存器数据缓冲寄存器中断控制方式的处理过程中断控制方式的处理过程接接收收到到CPU发发来来的的start指令指令准准备备数数据据并并将将其其置入缓冲寄存器置入缓冲寄存器缓冲寄存器满吗?缓冲寄存器满吗?控制器发中断信号控制器发中断信号向设备发向设备发start指令指令将中断允许位置将中断允许位置1调调度度程程序序调调度度其他进程其他进程其他进程执行其他进程执行收到中断信号了吗?收到中断信号了吗?中断处理中断处理被中断进程执行被中断进程执行否否否否是是设备设备CPU完成了吗?完成了吗?中断驱动的输入中断驱动的输入/ /出周期出周期DMADMADMA控制器控制器CPU内存内存I/O设备设备数据数据中断位中断位启动位启动位控制状态寄存器控制状态寄存器数据缓冲寄存器数据缓冲寄存器内存地址寄存器内存地址寄存器传送字节数寄存器传送字节数寄存器DMADMA方式的传送结构方式的传送结构startintDMA传输步骤传输步骤DMA方式的数据传送处理过程方式的数据传送处理过程否否CPU发发start命令命令内存地址内存地址 内存始址寄存器内存始址寄存器传送字节数传送字节数字节计数器字节计数器允许中断位与启动位置允许中断位与启动位置1当前进程被阻塞,当前进程被阻塞,调度程序调度其他进程运行调度程序调度其他进程运行被调度的进程执行被调度的进程执行接收到中断接收到中断信号吗?信号吗?是是转中断处理转中断处理设备设备启动设备准备数据启动设备准备数据DMA控制器接收到控制器接收到start指令指令缓冲寄存器内容入内存缓冲寄存器内容入内存改变传送字节数计数器改变传送字节数计数器与内存地址寄存器内容与内存地址寄存器内容否否传送字节数传送字节数==0?吗??吗?数据数据数据缓冲寄存器数据缓冲寄存器发中断信号发中断信号停止停止I/O操作操作是是I/O控制器控制器I/O控制器控制器I/O控制器控制器I/O控制器控制器I/O控制器控制器I/O控制器控制器I/O控制器控制器字节多路字节多路通道通道选择通道选择通道成组多路成组多路通道通道磁盘磁盘磁盘磁盘磁带磁带磁带磁带终端终端终端终端终端终端CPU内存内存总线总线通道方式的数据传送结构通道方式的数据传送结构通道控制方式的描述过程通道控制方式的描述过程 从从CPU执行指令的角度来描述对通道的控制方式执行指令的角度来描述对通道的控制方式 :: Channel control procedure: repeat IR←M[pc] pc←pc+1 execute(IR) if require accessing with I/O Device then Command (I/O operation,,Address of I/O device,,channel) fi if I/O Done Interupt then Call Interrupt processing control fi until machine halt Interrupt processing control procedure 中断处理过程中断处理过程关中断关中断保存被中断程序的现场保存被中断程序的现场分析中断原因分析中断原因转中断处理子程序转中断处理子程序执行中断处理子程序执行中断处理子程序恢复现场恢复现场开中断开中断返回中断点返回中断点用户进程请求设备服务的流程用户进程请求设备服务的流程用户进程用户进程文件系统文件系统设备驱动程序设备驱动程序设备控制器设备控制器设备本身设备本身用户进程用户进程设备无关软件设备无关软件设备驱设备驱动程序动程序硬硬 件件设备服务子程序设备服务子程序中断处理程序中断处理程序I/O请求请求I/O应答应答设备无关软件的功能设备无关软件的功能 (设备文件)(设备文件)对设备程序的统一接口对设备程序的统一接口设备命名(主设备号,次设备号)设备命名(主设备号,次设备号)设备保护(读、写权限)设备保护(读、写权限)提供一个独立于设备的逻辑块(记录)提供一个独立于设备的逻辑块(记录)缓冲(缓冲区管理)缓冲(缓冲区管理)块设备的存储分配(盘块)块设备的存储分配(盘块)分配和释放独占设备(打印机、磁带机)分配和释放独占设备(打印机、磁带机)错误报告错误报告用户层输入用户层输入/输出软件输出软件•I/O操作的库例程操作的库例程例如:例如:read(fd,buf,nbytes)是读文件的系统调用,由它调用的库函数是读文件的系统调用,由它调用的库函数read会与用户程序连接在一起,放在可执行程序中。
会与用户程序连接在一起,放在可执行程序中 •Spooling系统系统“Simultaneous Peripheral Operation On-Line”Spooling是在多道程序系统中处理独占设备的一种方法是在多道程序系统中处理独占设备的一种方法例如:一般的打印机是一种独占资源,每次只能有一个程序使用打印机,但如果例如:一般的打印机是一种独占资源,每次只能有一个程序使用打印机,但如果一个进程打开打印机而不使用它,那么其它的进程都无法打印一个进程打开打印机而不使用它,那么其它的进程都无法打印 创建一个特殊的守护进程创建一个特殊的守护进程(daemon)以及一个特殊的目录,称为以及一个特殊的目录,称为Spooling目录这时,打印一个文件之前,进程首先产生完整的待打印文件并将其放在这时,打印一个文件之前,进程首先产生完整的待打印文件并将其放在Spooling目录下当进程把该文件放到目录下当进程把该文件放到Spooling系统中之后就可以认为打印系统中之后就可以认为打印过程已经完成,虽然打印机还没有进行该文件的打印,因此也称为打印的过程已经完成,虽然打印机还没有进行该文件的打印,因此也称为打印的“假脱机假脱机”过程。
而整个的打印作业由该守护进程进行处理,只有该守护进程过程而整个的打印作业由该守护进程进行处理,只有该守护进程能够真正使用打印机设备文件通过禁止用户直接使用打印机设备文件能够真正使用打印机设备文件通过禁止用户直接使用打印机设备文件,从而从而解决了打印机的独占问题解决了打印机的独占问题 SPOOLing系统示意图系统示意图设备分配采用的数据结构设备分配采用的数据结构 设备类型设备类型设备标识设备标识设备忙设备忙/闲标记闲标记COCT指针指针设备等待队列首设备等待队列首设备等待队列尾设备等待队列尾驱动程序地址驱动程序地址表目表目1┇ ┇表目表目i┇ ┇设备类型设备类型设备标识设备标识获得设备的进程获得设备的进程DCT指针指针 系统设备表系统设备表SDT控制器标识控制器标识控制忙控制忙/闲标记闲标记CHCT指针指针控制器等待队列首控制器等待队列首控制器等待队列尾控制器等待队列尾┇ ┇COCT DCT 通道通道通道标识通道标识通道忙通道忙/闲标记闲标记通道等待队列首通道等待队列首通道等待队列尾通道等待队列尾┇ ┇CHCT 设备分配流程图设备分配流程图进程进程P等待控制器等待控制器由进程由进程P来的来的I/O请求请求搜索搜索SDT找到找到DCT指针指针按分配策略选取按分配策略选取占据该设备的进程占据该设备的进程进程进程P被选中?被选中?查查DCT该设备忙?该设备忙?检查该设备分配给检查该设备分配给进程进程P的安全性的安全性安全吗?安全吗?该设备分配给进程该设备分配给进程PA按分配策略选取按分配策略选取占据该设备的进程占据该设备的进程进程进程P按分配策略按分配策略入入I/O等待队列等待队列等待该设备空闲等待该设备空闲搜索搜索DCT指针,指针,找到找到COCT指针指针控制器忙吗?控制器忙吗?A分配控制器给进程分配控制器给进程P搜索搜索COCT找到找到CHCT指针指针通道忙?通道忙?分配通道给进程分配通道给进程P启动启动I/O进程进程P等待通道等待通道是是是是是是是是否否否否否否是是否否否否通道通道设备状态表设备状态表缓冲区管理技术缓冲区管理技术•单缓冲区单缓冲区•多缓冲区多缓冲区•缓冲池缓冲池 设备号数据块号缓冲区号互斥标示位链指针::………空缓冲区空缓冲区inout缓冲池操作函数:getbuf、putbuf等等缓冲首部缓冲首部缓冲区技术缓冲区技术双机通信时缓冲技术示意图双机通信时缓冲技术示意图缓冲池示意图缓冲池示意图参见SPOOLing系统I/OI/O控制控制中断原因分析中断原因分析唤醒中断唤醒中断处理程序处理程序I/O请求请求处理处理设备分配程序设备分配程序缓冲区管理缓冲区管理中断响应中断响应启动启动I/O指令、设备驱动指令、设备驱动程序或通道程序程序或通道程序I/O控制控制使用系统调用执行输入使用系统调用执行输入/出流程出流程I/O控制的实现控制的实现•I/O控制过程在系统中可以按三种方式实现控制过程在系统中可以按三种方式实现作为请求作为请求I/O操作的进程的一部分实现操作的进程的一部分实现作为当前进程的一部分实现作为当前进程的一部分实现I/O控制由专门的系统进程控制由专门的系统进程 —— I/O进程完成:进程完成:•每类每类(个个)设备设一专门的设备设一专门的I/O进程,且该进程只能在系统态下进程,且该进程只能在系统态下执行执行•整个系统设一整个系统设一I/O进程,全面负责系统的数据传送工作进程,全面负责系统的数据传送工作•每类每类(个个)设备设一个专门的设备设一个专门的I/O进程,但该进程既可在用户态进程,但该进程既可在用户态也可在系统态下执行也可在系统态下执行原理部分原理部分小结小结•设备管理的基本过程设备管理的基本过程•设备管理用的数据结构设备管理用的数据结构•通道、控制器、通道、控制器、 DMA、、中断、缓冲区、中断、缓冲区、•数据数据传送控制方式传送控制方式(直接、中断、直接、中断、DMA、、通道通道)•主设备号、次设备号(对应驱动程序及其参数)主设备号、次设备号(对应驱动程序及其参数)•设备分类(字符、块设备、网络设备)设备分类(字符、块设备、网络设备)•设备分配算法设备分配算法•I/O控制控制设备管理设备管理•引言引言•输入输入/输出硬件输出硬件•输入输入/输出软件输出软件•LINUX输入输入/输出系统概述输出系统概述•小结小结缓冲区管理技术缓冲区管理技术•单缓冲区单缓冲区•多缓冲区多缓冲区•缓冲池缓冲池 设备号数据块号缓冲区号互斥标示位链指针::………空缓冲区空缓冲区inout缓冲池操作函数:getbuf、putbuf等等缓冲首部缓冲首部缓冲区技术缓冲区技术双机通信时缓冲技术示意图双机通信时缓冲技术示意图缓冲池示意图缓冲池示意图参见SPOOLing系统I/OI/O控制控制中断原因分析中断原因分析唤醒中断唤醒中断处理程序处理程序I/O请求请求处理处理设备分配程序设备分配程序缓冲区管理缓冲区管理中断响应中断响应启动启动I/O指令、设备驱动指令、设备驱动程序或通道程序程序或通道程序I/O控制控制使用系统调用执行输入使用系统调用执行输入/出流程出流程I/O控制的实现控制的实现•I/O控制过程在系统中可以按三种方式实现控制过程在系统中可以按三种方式实现作为请求作为请求I/O操作的进程的一部分实现操作的进程的一部分实现作为当前进程的一部分实现作为当前进程的一部分实现I/O控制由专门的系统进程控制由专门的系统进程 —— I/O进程完成:进程完成:•每类每类(个个)设备设一专门的设备设一专门的I/O进程,且该进程只能在系统态下进程,且该进程只能在系统态下执行执行•整个系统设一整个系统设一I/O进程,全面负责系统的数据传送工作进程,全面负责系统的数据传送工作•每类每类(个个)设备设一个专门的设备设一个专门的I/O进程,但该进程既可在用户态进程,但该进程既可在用户态也可在系统态下执行也可在系统态下执行原理部分原理部分小结小结•设备管理的基本过程设备管理的基本过程•设备管理用的数据结构设备管理用的数据结构•通道、控制器、通道、控制器、 DMA、、中断、缓冲区、中断、缓冲区、•数据数据传送控制方式传送控制方式(直接、中断、直接、中断、DMA、、通道通道)•主设备号、次设备号(对应驱动程序及其参数)主设备号、次设备号(对应驱动程序及其参数)•设备分类(字符、块设备、网络设备)设备分类(字符、块设备、网络设备)•设备分配算法设备分配算法•I/O控制控制磁盘磁盘调度调度算法算法LINUX输入输入/输出系统概述输出系统概述•Linux输入输入/输出的过程概述输出的过程概述 •设备驱动程序基础设备驱动程序基础 •Linux的中断处理的中断处理•设备驱动程序的框架设备驱动程序的框架•字符设备驱动程序字符设备驱动程序•块设备驱动程序块设备驱动程序概述概述设备无关软件设备无关软件标准设备接口标准设备接口((read,write,open,close,…)设备驱动程序设备驱动程序设备文件设备文件 (在在/dev目录下目录下)输入输入/输出请求输出请求出错返回出错返回LinuxLinux文件系统的层次结构文件系统的层次结构返回设备驱动分层结构设备驱动分层结构设备驱动程序基础设备驱动程序基础•总线:总线:CPU和和I/O设备是通过总线连接起来。
设备是通过总线连接起来 PC机常见总线有机常见总线有ISA,PCI等等•I/O地址空间:地址空间:所有设备的寄存器组成所有设备的寄存器组成 察看文件察看文件:/proc/ioports•I/O数据传输:数据传输:忙等待、中断方式、忙等待、中断方式、DMA方式方式•设备分类:设备分类:字符设备、块设备字符设备、块设备•设备名:设备名:主设备号主设备号(驱动程序驱动程序)、、次设备号次设备号(驱动程序的参数)驱动程序的参数)•设备文件:设备文件:在在/dev目录下,在内核中由目录下,在内核中由file结构表示结构表示•设备驱动程序接口:由设备驱动程序接口:由file_operations数据结构完成数据结构完成文件系统数据结构文件系统数据结构返回设备号设备号例如:例如:mknod()创建设备文件,创建设备文件,需要提供设备号需要提供设备号struct file_operations chardev_fops = { open: chardev_open, release: chardev_release, read: chardev_read, write: chardev_write, };Struct file_operations def_blk_fops={open:blkdev_open,release:blkdev_close,llseek:block_llseek,read:block_read,write:block_fsync,ioctl:blkdev_ioctl,};块设备操作定义块设备操作定义字符设备操作定义字符设备操作定义驱动程序接口(调用入口点)驱动程序接口(调用入口点)struct file_operations {…loff_t (*llseek) (struct file *, loff_t, int);ssize_t (*read) (struct file *, char *, size_t, loff_t *);ssize_t (*write)(struct file *, char *, size_t, loff_t *);int (*open)(struct inode *, struct file *);int (*release)(struct inode*, struct file *);int (*ioctl)(struct inode *, struct file *, unsigned int, unsigned long)…}Linux的中断处理的中断处理•1、中断类型、中断类型外中断,陷阱(外中断,陷阱(INT n),),异常。
异常•2、睡眠与唤醒、睡眠与唤醒驱动程序启动设备后,进入睡眠;驱动程序启动设备后,进入睡眠;设备完成设备完成I/O后,向后,向CPU 发中断请求;发中断请求;CPU根据中断请求找到睡眠的驱动程序,并唤醒继续处理根据中断请求找到睡眠的驱动程序,并唤醒继续处理•3、中断共享、中断共享中断向量表有限,对于外中断来说,其中断向量表项是共享的中断向量表有限,对于外中断来说,其中断向量表项是共享的因此,共享项上有中断请求队列因此,共享项上有中断请求队列•4、中断服务程序的前期(上部)和后期(下部)处理、中断服务程序的前期(上部)和后期(下部)处理((bottom-half))前期处理执行快速(关中断),后期处理执行费时(开中断)前期处理执行快速(关中断),后期处理执行费时(开中断)Linux系统系统I/O层次结构层次结构设备驱动程序向下与设备控制器接口:设备驱动程序向下与设备控制器接口:定义如何与设备进行通信的协议定义如何与设备进行通信的协议(设备控制命令集合)(设备控制命令集合)设备驱动程序向上则面对文件系统,设备驱动程序向上则面对文件系统,由文件系统为内核其他部分提供统一由文件系统为内核其他部分提供统一接口:接口:入口调用集合入口调用集合Operations:((read、、write等等)等等)设备驱动程序设备驱动程序中断处理程序中断处理程序设备驱动程序框架设备驱动程序框架一个完整的一个完整的Linux设备驱动程序包括五个部分:设备驱动程序包括五个部分:1、设备驱动程序的注册与注销(与系统引导的接口)、设备驱动程序的注册与注销(与系统引导的接口)注册:在系统初始化注册:在系统初始化/驱动程序模块加载时完成,建立了与文件系统驱动程序模块加载时完成,建立了与文件系统的接口,文件系统可根据注册资料建立文件操作与具体设备驱动的接口,文件系统可根据注册资料建立文件操作与具体设备驱动程序的映射关系。
程序的映射关系注销:在系统关闭注销:在系统关闭/驱动程序模块卸载时完成驱动程序模块卸载时完成2、设备的打开与关闭、设备的打开与关闭设备首先要打开才能读写设备首先要打开才能读写,,完成之后及时释放,针对不同设备有不完成之后及时释放,针对不同设备有不同操作同操作3、设备的读写操作、设备的读写操作在读写过程中,设备可能采用查询或者中断的方式来控制数据传输,在读写过程中,设备可能采用查询或者中断的方式来控制数据传输,针对不同的数据传输控制方式,驱动程序采取不同的管理方式实针对不同的数据传输控制方式,驱动程序采取不同的管理方式实现具体的数据传输现具体的数据传输4、设备的控制操作、设备的控制操作5、设备的中断处理或者查询处理、设备的中断处理或者查询处理设备驱动程序代码功能设备驱动程序代码功能•驱动程序的注册与注销驱动程序的注册与注销字符设备用:字符设备用:register_chrdev向内核注册向内核注册,un register_chrdev从内从内核注销核注销•块设备用:块设备用:register_blkdev ()向内核注册向内核注册,un register_blkdev从内核注销从内核注销•设备的打开与释放设备的打开与释放各自的各自的open()和和release()•设备的读写设备的读写各自的各自的read()和和write•设备的控制操作设备的控制操作各自的各自的ioctl(), 例如软盘例如软盘/光盘的弹出。
光盘的弹出•设备的中断和忙等待查询设备的中断和忙等待查询当设备不支持中断时读写采用忙等待查询设备状态当设备不支持中断时读写采用忙等待查询设备状态•minix_sb_info ext2_inode_info•ntfs_sb_info•︰︰•︰︰VFS数据结构数据结构数据结构及其操作数据结构及其操作inode_operations块设备驱动程序块设备驱动程序•块驱动程序与内核的接口块驱动程序与内核的接口struct file_operations def_blk_fops={open:blkdev_open,release:blkdev_close,llseek:llseek,read:block_read,write:block_write,fsync:block_fsync,ioctl:blkdev_ioctl,};通过通过get_blkfops()()寻找具体块设备类型的寻找具体块设备类型的block_device_operations数据结构数据结构mknodInode_operationsVFS索引结点索引结点inode中的中的file_operationsy引用引用块设备驱动程序块设备驱动程序struct block_device_operations{int (*open)(struct inode *, struct file *);int (*release)(struct inode *, struct file *);int (*ioctl)(struct inode *, struct file *,unsigned, unsigned long);int (*check_media_change)(kdev_t);int (*revalidate)(kdev_t);} 针对具体针对具体块设备块设备IDE•IDE硬盘采用的相应接口硬盘采用的相应接口struct block_device_operations ide_fops[ ]={{open: ide_open,release: ide_release,ioctl: ide_ioctl,check_media_change:ide_check_media_change,revalidate: ide_revalidate_disk}}这里只定义了结构数组的一个表项,为将来预留了扩展空间这里只定义了结构数组的一个表项,为将来预留了扩展空间由由get_info_ptr()根据设备号找到根据设备号找到ide_drive_t设备控制块设备控制块(参见(参见include/linux/ide.h))并返回这个控制块的指针。
并返回这个控制块的指针IDE硬盘的设备控制块硬盘的设备控制块idedisk_driver•static ide_driver_t idedisk_driver={•“ide-disk”//名字名字•IDEDISK_VERSION,//版本版本•ide_disk,//介质介质•0,//忙位忙位•1,//supports_dma•0,//support_dsc_overlap•NULL,//cleanup•do_rw_disk,//do_request具体执行读具体执行读/写操作写操作•NULL,//end_request•NULL,//ioctl•idedisk_open,//打开操作打开操作•idedisk_release,//释放操作释放操作•… … …•};字符设备驱动程序字符设备驱动程序•并口打印设备驱动程序并口打印设备驱动程序与内核接口与内核接口static struct file_operations lp_fops•并口打印设备驱动程序并口打印设备驱动程序 与打印机设备接口与打印机设备接口- 设备控制块设备控制块struct lp_struct lp_table•注册与注销注册与注销register_chrdev()unregister_chrdev ()struct file_operations chardev_fops = { open: chardev_open, release: chardev_release, read: chardev_read, write: chardev_write, };//虚拟的内存字符设备虚拟的内存字符设备struct file_operations lp_fops = { open: lp_open, release: lp_release, read: NULL, write: lp_write,… };//虚拟打印机设备虚拟打印机设备Struct lp_struct lp_table设备控制块设备控制块struct lp_struct{int base;unsigned int irq; int flags;unsigned int chars;unsigned int timeunsigned int wait;struct wait_queue *lp_wait_q;char *lp_buffer;unsigned int lastcall;unsigned int runchars;unsigned int waittime;struct lp_stats stats;}打开块设备文件的操作过程打开块设备文件的操作过程((1))file_operations结构使结构使vfs具体化成了特定的文件系统具体化成了特定的文件系统或文件类型(块设备文件)或文件类型(块设备文件)((2))block_device数据结构使代表着抽象意义上的文件的数据结构使代表着抽象意义上的文件的inode结构具体化成了结构具体化成了“块设备块设备((3))block_device_operations结构使结构使“块设备文件块设备文件”操操作进一步具体化成了作进一步具体化成了“IDE设备设备”操作操作((4))ide_drive_t结构将笼统的结构将笼统的“IDE设备设备”具体化成了特定具体化成了特定种类的种类的IDE设备设备((5))ide_driver_t结构将某种结构将某种IDE设备的操作具体化成对特设备的操作具体化成对特定定IDE硬盘的操作硬盘的操作可安装模块概念可安装模块概念•在应用程序界面上,内核通过在应用程序界面上,内核通过4个系统调用支持可安装模块的动态安个系统调用支持可安装模块的动态安装和拆卸:装和拆卸:create_module() //在内核中创建一个在内核中创建一个module数据结构数据结构init_module() //sys_init_module将模块映象装入内核空间将模块映象装入内核空间query_module() //向系统询问模块中无法落实的符号向系统询问模块中无法落实的符号delete_module()//释放模块结构和所占用的系统空间释放模块结构和所占用的系统空间通常用户不需要直接调用这些系统调用,而是通过下面的系统工具通常用户不需要直接调用这些系统调用,而是通过下面的系统工具来安装和拆卸可安装模块,再由这些工具来调用上述的系统调用来安装和拆卸可安装模块,再由这些工具来调用上述的系统调用。
•系统提供的工具:系统提供的工具:/sbin/insmod/sbin/rmmod•每个安装模块都要提供函数:参见操作系统与提高每个安装模块都要提供函数:参见操作系统与提高p164,172,177init_module(); //负责注册设备和驱动程序初始化,成功则返回负责注册设备和驱动程序初始化,成功则返回0 cleanup_module() //负责从内核中注销设备,释放动态申请的内存负责从内核中注销设备,释放动态申请的内存空间空间可安装模块开发过程可安装模块开发过程•编写编写C程序模块程序模块 (设备驱动程序)(设备驱动程序)•编译该模块编译该模块•使用系统工具使用系统工具insmod和和rmmod安装模块的安装模块的 .o 文文件件•使用命令使用命令mknod安装这个设备安装这个设备•实际地使用这个新设备实际地使用这个新设备•具体实例参见具体实例参见“操作系统与提高操作系统与提高P162-181”Linux设备管理小结设备管理小结•设备分类:块、字符、网络设备•设备文件:每个设备都与一个特殊文件对应•文件系统屏蔽了设备的特殊性,通过文件系统使用设备•I/O软件是控制外设与内存、外设与CPU进行数据交换的所有软件的统称•Linux系统的I/O软件具有层次结构上层是文件系统:负责设备命名、设备保护、缓冲区管理、设备分配;提供方便用户使用的界面下层是设备驱动程序和中断处理程序:驱动程序可以是独立的内核模块,可以动态地加载和卸载;中断处理采用底半处理技术,提高中断处理的效率磁盘调度算法磁盘调度算法•先来先服务先来先服务FCFS•最短寻道时间优先最短寻道时间优先SSTF•扫描算法扫描算法SCAN•循环扫描算法循环扫描算法CSCAN(Circular SCAN)磁盘调度算法磁盘调度算法寻道时间寻道时间旋转延迟时间旋转延迟时间硬盘Ts= m n + s,,寻道时间寻道时间其中:其中:m为常数;为常数;n为移动磁道数;为移动磁道数;s为启动磁盘时间为启动磁盘时间Tr旋转延迟时间:硬盘大约旋转延迟时间:硬盘大约8.3ms,,软盘软盘50ms~100msTt 传输时间:读传输时间:读/写数据的实际时间写数据的实际时间=b/(rN)b:读写字节数;读写字节数;r:磁盘转速;磁盘转速;N:每条磁道上的字节数。
每条磁道上的字节数磁盘访问时间磁盘访问时间 Ta = Ts + Tr + Tt 目前等待的请求磁道号目前等待的请求磁道号磁头所在磁头所在磁道位置磁道位置为为100号号请求到达的次序请求到达的次序按磁道号从小到大排序按磁道号从小到大排序先先来来先先服服务务最最短短寻寻道道时时间间优优先先目前等目前等待的请待的请求磁道求磁道号号SSTF磁盘调度存在的问题磁盘调度存在的问题应用应用SSTF (最短寻道时最短寻道时间间shortest-seek-time-first)调度策略,调度策略,某些进程可能永远不某些进程可能永远不能被调度到如右表能被调度到如右表所示的例子中,我们所示的例子中,我们假定每当进程假定每当进程9 (要(要求读出磁道求读出磁道376上的上的信息)的请求得到服信息)的请求得到服务之前的某段时间,务之前的某段时间,系统又接收一个请求系统又接收一个请求流,而且这些请求所流,而且这些请求所要移动磁头的距离总要移动磁头的距离总小于达到磁道小于达到磁道376所所移动的距离,因而,移动的距离,因而,进程进程9和和3将永远得不将永远得不到服务 试设计一种磁盘访问试设计一种磁盘访问调度算法,以确保不调度算法,以确保不会发生诸如上例的会发生诸如上例的“饥饿饥饿”现象。
现象进程号进程号磁道号磁道号移动磁道数移动磁道数71340141925823205132256149294016322911419101219034181173159376373339620答:无饥饿现象的磁盘调度算法有答:无饥饿现象的磁盘调度算法有FCFS、、扫描算法等等扫描算法等等设:磁头当前位置为100磁道,现有一磁盘读写请求队列为:3、18、19、19、29、40、56、134、192、205、376、396,若采用SSTF优先磁盘调度算法进行调度,给出调度的次序扫扫描描算算法法目前等目前等待的请待的请求磁道求磁道号号循循环环扫扫描描算算法法目前等目前等待的请待的请求磁道求磁道号号设备管理概念题设备管理概念题1、用于设备分配的数据结构有哪些?它们之间的关系是什么?答:整个系统有一张SDT,每个设备有一张DCT,每个控制器有一张COCT,每个通道有一张CHCT2、什么是I/O控制?它的主要任务是什么?答:用户I/O请求分配设备启动设备进行I/O操作响应设备中断设备中断处理从处理I/O请求开始到设备中断处理结束,这一总过程称为I/O控制SDTDCTCOCTCHCT设备管理概念题(续)设备管理概念题(续)3、I/O控制可用哪几种方式实现?各有什么优缺点?答:I/O控制过程可用三种方式实现:作为请求I/O操作的进程实现;作为当前进程的一部分实现;由专门的系统进程(I/O进程)完成。
第一种方式请求对应I/O操作的进程能很快占据处理机,但要求系统和I/O操作的进程应具有良好的实时性第二种方式不要求系统具有高的实时性,但I/O控制过程要由当前进程负责第三种方式增加了一个额外的进程开销,但用户进程不用处理I/O控制过程4、设备驱动程序是什么?为什么要有设备驱动程序?用户进程怎样使用驱动程序?答:设备驱动程序是驱动外部物理设备和相应DMA控制器或I/O控制器等器件,使之可以直接和内存进行I/O操作的子程序的集合它们负责设置相应设备有关寄存器的值,启动设备进行I/O操作,指定操作的类型和数据流向等设备驱动程序屏蔽了直接对硬件操作的细节,为编程者提供操纵设备的便利接口用户进程通过调用设备驱动程序提供的接口来使用设备驱动程序linux实验二要求实验二要求1.设计并实现一个新的内核函数.设计并实现一个新的内核函数pedagogictime(),,该函数该函数通过使用一个引用参数的调用返回当前的系统时间如果通过使用一个引用参数的调用返回当前的系统时间如果flag参数是参数是true ,那么内核参数就应该把当前的系统时间打那么内核参数就应该把当前的系统时间打印在标准输出印在标准输出stdout上。
函数接口定义应具有如下形式:上函数接口定义应具有如下形式:int pedagogicitime(int flag,struct timeval *current_time);2..编写一个用户空间程序来测试新的系统调用编写一个用户空间程序来测试新的系统调用pedagogictime(),,该程序给新系统调用函数创建一个插桩该程序给新系统调用函数创建一个插桩stub3..统计特定进程或者整个系统产生的缺页情况报告当前统计特定进程或者整个系统产生的缺页情况报告当前缺页率,编写一个用户程序或者定义一个新的缺页系统调缺页率,编写一个用户程序或者定义一个新的缺页系统调用,搜集缺页统计数据来创建一个性能监测程序用,搜集缺页统计数据来创建一个性能监测程序4.编写一个用户程序,周期性地监测当前的缺页率然后.编写一个用户程序,周期性地监测当前的缺页率然后依据时间来绘制缺页图最后,阅读有关依据时间来绘制缺页图最后,阅读有关vmstat命令的内命令的内容来了解如何设计报告程序容来了解如何设计报告程序新内核函数新内核函数pedagogictime()的实现的实现该系统调用函数的实现可以参考该系统调用函数的实现可以参考kernel/time.c中的中的sys_gettimeofday函函数。
我们在数我们在kernel/sys.c中添加如下函数:中添加如下函数:asmlinkage int sys_pedagogictime(struct timeval *tv){ if (tv) { struct timeval ktv; do_gettimeofday(&ktv); if (copy_to_user(tv,&ktv,sizeof(ktv))) return -EFAULT; } return 0;}tv是用户空间传过来的保存时间的参数,如果不为空,那么就调用是用户空间传过来的保存时间的参数,如果不为空,那么就调用do_gettimeofday读取系统时间,然后调用读取系统时间,然后调用copy_to_user将数据从将数据从内核空间拷贝到用户空间内核空间拷贝到用户空间linux/time.h中的中的timeval结构结构
来得到当前系统的缺页情况proc文件系统是一个虚拟文件系统,它只存在于内存当中,而不占用外文件系统是一个虚拟文件系统,它只存在于内存当中,而不占用外存空间只是提供以文件系统的方式对系统内核数据进行操作的接口只是提供以文件系统的方式对系统内核数据进行操作的接口用户和应用程序可以通过用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某得到系统的信息,并可以改变内核的某些参数由于系统中的进程是动态改变的,所以用户或应用程序读取些参数由于系统中的进程是动态改变的,所以用户或应用程序读取proc文件时,文件时,proc文件系统是动态从系统内核读出所需的当前信息文件系统是动态从系统内核读出所需的当前信息proc文件系统中的文件系统中的stat文件记录了当前系统的全面状态,其中有一行是文件记录了当前系统的全面状态,其中有一行是关于中断次数的这一行中记录了从系统启动后到当前时刻发生的系关于中断次数的这一行中记录了从系统启动后到当前时刻发生的系统中断的总次数以及各类中断的分别发生的次数这一行以关键字统中断的总次数以及各类中断的分别发生的次数这一行以关键字intr开头,紧接着的一项是系统发生中断的总次数,开头,紧接着的一项是系统发生中断的总次数,1号中断发生的次号中断发生的次数数……其中缺页中断是第其中缺页中断是第14号中断,也就是在关键字号中断,也就是在关键字intr之后的第之后的第16项。
这个数据就是我们想要的这个数据就是我们想要的stat的文件的内容如下所示:的文件的内容如下所示:stat的文件的内容cpu 1218 0 974 9725cpu0 1218 0 974 9725page 76556 6060swap 1 0intr 20397 11917 223 0 1 1 61 4 0 1 0 0 0 476 0 7271 442disk_io: (3,0):(7277,6103,153044,1174,12098) ctxt 50484btime 1059897154processes 2539其中缺页中断的次数为7271它表示自系统启动以来,共发生了7271次缺页中断我们参照vmstat命令设计了自己的缺页统计程序pgfault它的使用格式为: pgfault [delay [count]]其中delay表示每个多少秒钟打印出缺页中断次数,count表示打印出多少条这样的信息pgfault按照给定的参数信息每隔一定时间从/proc/stat中读取缺页中断的次数,将其显示出来由于仅涉及文件的打开、读写操作,因此程序比较简单 重新生成内核重新生成内核make xconfig; make dep; make clean; make bzImage; make modules; make modules_install make install 。












