操作系统设备管理ppt课件.ppt

上传人:小飞机 文档编号:1350027 上传时间:2022-11-12 格式:PPT 页数:97 大小:5.02MB
返回 下载 相关 举报
操作系统设备管理ppt课件.ppt_第1页
第1页 / 共97页
操作系统设备管理ppt课件.ppt_第2页
第2页 / 共97页
操作系统设备管理ppt课件.ppt_第3页
第3页 / 共97页
操作系统设备管理ppt课件.ppt_第4页
第4页 / 共97页
操作系统设备管理ppt课件.ppt_第5页
第5页 / 共97页
点击查看更多>>
资源描述

《操作系统设备管理ppt课件.ppt》由会员分享,可在线阅读,更多相关《操作系统设备管理ppt课件.ppt(97页珍藏版)》请在三一办公上搜索。

1、第5章 设备管理,首先回顾操作系统的总体构架,定位设备管理所处地位然后学习设备管理的基本原理最后了解LINUX设备管理实例,操作系统整体结构,操作系统的基本组织结构,Linux文件系统,设备管理,引言输入/输出硬件输入/输出软件LINUX输入/输出系统概述小结,引言,硬件设备与控制软件之间的联系:设备控制器内存映射地址处理机 驱动程序I/O管理程序文件系统用户的I/O请求设备管理的主要任务设备分配实现数据传输提供用户使用接口提高并行操作度设备管理程序提供的功能为进程管理提供接口(将进程的请求转给设备管理)实施设备分配(设备分类、调度算法、等待队列)实现设备之间以及设备与CPU之间并行操作(DM

2、A、通道)缓冲区管理,输入/输出硬件,电子设备设备分类字符设备块设备设备控制器DMA存储器直接存取通道,内核的输入/出结构,PCI系统示意图,PC系统结构与PCI总线,典型的PC总线结构,磁带,磁盘,磁盘设备结构,两种输入/输出模式,输入输出设备特点,Intel奔腾处理器中断向量表,输入/输出软件,输入/输出软件的作用数据传送控制方式程序直接控制方式中断方式DMA方式通道控制方式中断处理过程驱动程序所处地位与设备无关的I/O软件(文件系统功能)用户层的输入/输出软件(使用read/write)设备分配缓冲区管理I/O进程控制,输入/输出软件的作用,输入/输出请求的提交周期,程序直接控制方式,中

3、断控制方式的传送结构,中断控制方式的处理过程,完成了吗?,中断驱动的输入/出周期,DMA,DMA传输步骤,DMA方式的数据传送处理过程,通道方式的数据传送结构,通道控制方式的描述过程,从CPU执行指令的角度来描述对通道的控制方式 : Channel control procedure: repeat IRMpc pcpc+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

4、 Call Interrupt processing control fi until machine halt Interrupt processing control procedure ,中断处理过程,用户进程请求设备服务的流程,设备无关软件的功能 (设备文件),用户层输入/输出软件,I/O操作的库例程例如:read(fd,buf,nbytes)是读文件的系统调用,由它调用的库函数read会与用户程序连接在一起,放在可执行程序中。 Spooling系统“Simultaneous Peripheral Operation On-Line”Spooling是在多道程序系统中处理独占设备的一种

5、方法。例如:一般的打印机是一种独占资源,每次只能有一个程序使用打印机,但如果一个进程打开打印机而不使用它,那么其它的进程都无法打印。 创建一个特殊的守护进程(daemon)以及一个特殊的目录,称为Spooling目录。这时,打印一个文件之前,进程首先产生完整的待打印文件并将其放在Spooling目录下。当进程把该文件放到Spooling系统中之后就可以认为打印过程已经完成,虽然打印机还没有进行该文件的打印,因此也称为打印的“假脱机”过程。而整个的打印作业由该守护进程进行处理,只有该守护进程能够真正使用打印机设备文件。通过禁止用户直接使用打印机设备文件,从而解决了打印机的独占问题。,SPOOLi

6、ng系统示意图,设备分配采用的数据结构,系统设备表SDT,DCT,通道,设备分配流程图,进程P等待控制器,由进程P来的I/O请求,搜索SDT找到DCT指针,按分配策略选取占据该设备的进程,进程P被选中?,查DCT该设备忙?,检查该设备分配给进程P的安全性,安全吗?,该设备分配给进程P,A,按分配策略选取占据该设备的进程,进程P按分配策略入I/O等待队列等待该设备空闲,搜索DCT指针,找到COCT指针,控制器忙吗?,A,分配控制器给进程P,搜索COCT找到CHCT指针,通道忙?,分配通道给进程P,启动I/O,进程P等待通道,是,是,是,是,否,否,否,是,否,否,通道,设备状态表,缓冲区管理技术

7、,单缓冲区多缓冲区缓冲池,缓冲首部,缓冲区技术,双机通信时缓冲技术示意图,缓冲池示意图,参见SPOOLing系统,I/O控制,使用系统调用执行输入/出流程,I/O控制的实现,I/O控制过程在系统中可以按三种方式实现作为请求I/O操作的进程的一部分实现作为当前进程的一部分实现I/O控制由专门的系统进程 I/O进程完成:每类(个)设备设一专门的I/O进程,且该进程只能在系统态下执行整个系统设一I/O进程,全面负责系统的数据传送工作每类(个)设备设一个专门的I/O进程,但该进程既可在用户态也可在系统态下执行,原理部分小结,设备管理的基本过程设备管理用的数据结构通道、控制器、 DMA、中断、缓冲区、数

8、据传送控制方式(直接、中断、DMA、通道)主设备号、次设备号(对应驱动程序及其参数)设备分类(字符、块设备、网络设备)设备分配算法I/O控制,设备管理,引言输入/输出硬件输入/输出软件LINUX输入/输出系统概述小结,缓冲区管理技术,单缓冲区多缓冲区缓冲池,缓冲首部,缓冲区技术,双机通信时缓冲技术示意图,缓冲池示意图,参见SPOOLing系统,I/O控制,使用系统调用执行输入/出流程,I/O控制的实现,I/O控制过程在系统中可以按三种方式实现作为请求I/O操作的进程的一部分实现作为当前进程的一部分实现I/O控制由专门的系统进程 I/O进程完成:每类(个)设备设一专门的I/O进程,且该进程只能在

9、系统态下执行整个系统设一I/O进程,全面负责系统的数据传送工作每类(个)设备设一个专门的I/O进程,但该进程既可在用户态也可在系统态下执行,原理部分小结,设备管理的基本过程设备管理用的数据结构通道、控制器、 DMA、中断、缓冲区、数据传送控制方式(直接、中断、DMA、通道)主设备号、次设备号(对应驱动程序及其参数)设备分类(字符、块设备、网络设备)设备分配算法I/O控制,磁盘调度算法,LINUX输入/输出系统概述,Linux输入/输出的过程概述 设备驱动程序基础 Linux的中断处理设备驱动程序的框架字符设备驱动程序块设备驱动程序,概述,Linux文件系统的层次结构,返回,设备驱动分层结构,设

10、备驱动程序基础,总线:CPU和I/O设备是通过总线连接起来。 PC机常见总线有ISA,PCI等等。I/O地址空间:所有设备的寄存器组成。 察看文件:/proc/ioportsI/O数据传输:忙等待、中断方式、DMA方式设备分类:字符设备、块设备设备名:主设备号(驱动程序)、次设备号(驱动程序的参数)设备文件:在/dev目录下,在内核中由file结构表示。设备驱动程序接口:由file_operations数据结构完成。,文件系统数据结构,返回,设备号,例如:mknod()创建设备文件,需要提供设备号,struct file_operations chardev_fops = open: char

11、dev_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)

12、(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

13、long),Linux的中断处理,1、中断类型外中断,陷阱(INT n),异常。2、睡眠与唤醒驱动程序启动设备后,进入睡眠;设备完成I/O后,向CPU 发中断请求;CPU根据中断请求找到睡眠的驱动程序,并唤醒继续处理。3、中断共享中断向量表有限,对于外中断来说,其中断向量表项是共享的。因此,共享项上有中断请求队列。4、中断服务程序的前期(上部)和后期(下部)处理(bottom-half)前期处理执行快速(关中断),后期处理执行费时(开中断),Linux系统I/O层次结构,设备驱动程序向下与设备控制器接口:定义如何与设备进行通信的协议(设备控制命令集合),设备驱动程序向上则面对文件系统,由文件系

14、统为内核其他部分提供统一接口:入口调用集合Operations:(read、write等等),设备驱动程序,中断处理程序,设备驱动程序框架,一个完整的Linux设备驱动程序包括五个部分:1、设备驱动程序的注册与注销(与系统引导的接口)注册:在系统初始化/驱动程序模块加载时完成,建立了与文件系统的接口,文件系统可根据注册资料建立文件操作与具体设备驱动程序的映射关系。注销:在系统关闭/驱动程序模块卸载时完成2、设备的打开与关闭设备首先要打开才能读写,完成之后及时释放,针对不同设备有不同操作3、设备的读写操作在读写过程中,设备可能采用查询或者中断的方式来控制数据传输,针对不同的数据传输控制方式,驱动

15、程序采取不同的管理方式实现具体的数据传输4、设备的控制操作5、设备的中断处理或者查询处理,设备驱动程序代码功能,驱动程序的注册与注销字符设备用:register_chrdev向内核注册,un register_chrdev从内核注销块设备用:register_blkdev ()向内核注册,un register_blkdev从内核注销设备的打开与释放各自的open()和release()设备的读写各自的read()和write设备的控制操作各自的ioctl(), 例如软盘/光盘的弹出。设备的中断和忙等待查询当设备不支持中断时读写采用忙等待查询设备状态。,VFS数据结构,数据结构及其操作,ino

16、de_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数据结构,mknod,Inode_operations,VFS索引结点inode中的file_operationsy引

17、用,块设备驱动程序,struct block_device_operationsint (*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

18、_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 idedis

19、k_driver=“ide-disk”/名字IDEDISK_VERSION,/版本ide_disk,/介质0,/忙位1,/supports_dma0,/support_dsc_overlapNULL,/cleanupdo_rw_disk,/do_request具体执行读/写操作NULL,/end_requestNULL,/ioctlidedisk_open,/打开操作idedisk_release,/释放操作 ;,字符设备驱动程序,并口打印设备驱动程序与内核接口static struct file_operations lp_fops并口打印设备驱动程序 与打印机设备接口- 设备控制块stru

20、ct 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,

21、;/虚拟打印机设备,Struct lp_struct lp_table设备控制块,struct lp_structint 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)fi

22、le_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() /在内核中创建一个

23、module数据结构init_module() /sys_init_module将模块映象装入内核空间query_module() /向系统询问模块中无法落实的符号delete_module()/释放模块结构和所占用的系统空间通常用户不需要直接调用这些系统调用,而是通过下面的系统工具来安装和拆卸可安装模块,再由这些工具来调用上述的系统调用。系统提供的工具:/sbin/insmod/sbin/rmmod每个安装模块都要提供函数:参见操作系统辅导与提高p164,172,177init_module(); /负责注册设备和驱动程序初始化,成功则返回0 cleanup_module() /负责从内核中

24、注销设备,释放动态申请的内存空间,可安装模块开发过程,编写C程序模块 (设备驱动程序)编译该模块使用系统工具insmod和rmmod安装模块的 .o 文件使用命令mknod安装这个设备实际地使用这个新设备具体实例参见“操作系统辅导与提高P162-181”,Linux设备管理小结,设备分类:块、字符、网络设备设备文件:每个设备都与一个特殊文件对应文件系统屏蔽了设备的特殊性,通过文件系统使用设备I/O软件是控制外设与内存、外设与CPU进行数据交换的所有软件的统称Linux系统的I/O软件具有层次结构上层是文件系统:负责设备命名、设备保护、缓冲区管理、设备分配;提供方便用户使用的界面下层是设备驱动程

25、序和中断处理程序:驱动程序可以是独立的内核模块,可以动态地加载和卸载;中断处理采用底半处理技术,提高中断处理的效率,磁盘调度算法,先来先服务FCFS最短寻道时间优先SSTF扫描算法SCAN循环扫描算法CSCAN(Circular SCAN),磁盘调度算法,硬盘,Ts= m n + s,寻道时间其中:m为常数;n为移动磁道数;s为启动磁盘时间Tr旋转延迟时间:硬盘大约8.3ms,软盘50ms100msTt 传输时间:读/写数据的实际时间=b/(rN)b:读写字节数;r:磁盘转速;N:每条磁道上的字节数。磁盘访问时间 Ta = Ts + Tr + Tt,目前等待的请求磁道号,磁头所在磁道位置为10

26、0号,请求到达的次序,按磁道号从小到大排序,先来先服务,最短寻道时间优先,目前等待的请求磁道号,SSTF磁盘调度存在的问题,应用SSTF (最短寻道时间shortest-seek-time-first)调度策略,某些进程可能永远不能被调度到。如右表所示的例子中,我们假定每当进程9 (要求读出磁道376上的信息)的请求得到服务之前的某段时间,系统又接收一个请求流,而且这些请求所要移动磁头的距离总小于达到磁道376所移动的距离,因而,进程9和3将永远得不到服务。 试设计一种磁盘访问调度算法,以确保不会发生诸如上例的“饥饿”现象。,答:无饥饿现象的磁盘调度算法有FCFS、扫描算法等等。,设:磁头当前

27、位置为100磁道,现有一磁盘读写请求队列为:3、18、19、19、29、40、56、134、192、205、376、396,若采用SSTF优先磁盘调度算法进行调度,给出调度的次序。,扫描算法,目前等待的请求磁道号,循环扫描算法,目前等待的请求磁道号,设备管理概念题,1、用于设备分配的数据结构有哪些?它们之间的关系是什么?答:整个系统有一张SDT,每个设备有一张DCT,每个控制器有一张COCT,每个通道有一张CHCT。2、什么是I/O控制?它的主要任务是什么?答:用户I/O请求分配设备启动设备进行I/O操作响应设备中断设备中断处理从处理I/O请求开始到设备中断处理结束,这一总过程称为I/O控制。

28、,设备管理概念题(续),3、I/O控制可用哪几种方式实现?各有什么优缺点?答:I/O控制过程可用三种方式实现:作为请求I/O操作的进程实现;作为当前进程的一部分实现;由专门的系统进程(I/O进程)完成。第一种方式请求对应I/O操作的进程能很快占据处理机,但要求系统和I/O操作的进程应具有良好的实时性。第二种方式不要求系统具有高的实时性,但I/O控制过程要由当前进程负责。第三种方式增加了一个额外的进程开销,但用户进程不用处理I/O控制过程。4、设备驱动程序是什么?为什么要有设备驱动程序?用户进程怎样使用驱动程序?答:设备驱动程序是驱动外部物理设备和相应DMA控制器或I/O控制器等器件,使之可以直

29、接和内存进行I/O操作的子程序的集合。它们负责设置相应设备有关寄存器的值,启动设备进行I/O操作,指定操作的类型和数据流向等。设备驱动程序屏蔽了直接对硬件操作的细节,为编程者提供操纵设备的便利接口。用户进程通过调用设备驱动程序提供的接口来使用设备驱动程序。,linux,实验二要求,1设计并实现一个新的内核函数pedagogictime(),该函数通过使用一个引用参数的调用返回当前的系统时间。如果flag参数是true ,那么内核参数就应该把当前的系统时间打印在标准输出stdout上。函数接口定义应具有如下形式:int pedagogicitime(int flag,struct timeval

30、 *current_time);2编写一个用户空间程序来测试新的系统调用pedagogictime(),该程序给新系统调用函数创建一个插桩stub。3统计特定进程或者整个系统产生的缺页情况。报告当前缺页率,编写一个用户程序或者定义一个新的缺页系统调用,搜集缺页统计数据来创建一个性能监测程序。4编写一个用户程序,周期性地监测当前的缺页率。然后依据时间来绘制缺页图。最后,阅读有关vmstat命令的内容来了解如何设计报告程序。,新内核函数pedagogictime()的实现,该系统调用函数的实现可以参考kernel/time.c中的sys_gettimeofday函数。我们在kernel/sys.c

31、中添加如下函数:asmlinkage int sys_pedagogictime(struct timeval *tv) if (tv) struct timeval ktv; do_gettimeofday(tv是用户空间传过来的保存时间的参数,如果不为空,那么就调用do_gettimeofday读取系统时间,然后调用copy_to_user将数据从内核空间拷贝到用户空间。,linux/time.h中的timeval结构,struct timeval time_t tv_sec; /*从1970年1月1日开始计算的秒数*/ suseconds_t tv_usec; /*当前秒内的微秒数*/,

32、edagogictime()用户测试程序,/* gettime.c */#include #include #include #include /插桩_syscall1(long,pedagogictime,struct timeval*,tv) int main()struct timeval t;int ret;ret = pedagogictime(,统计系统缺页情况,我们从proc文件系统中的stat文件读取系统发生缺页中断的次数,以此来得到当前系统的缺页情况。proc文件系统是一个虚拟文件系统,它只存在于内存当中,而不占用外存空间。只是提供以文件系统的方式对系统内核数据进行操作的接口

33、。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统中的进程是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需的当前信息。proc文件系统中的stat文件记录了当前系统的全面状态,其中有一行是关于中断次数的。这一行中记录了从系统启动后到当前时刻发生的系统中断的总次数以及各类中断的分别发生的次数。这一行以关键字intr开头,紧接着的一项是系统发生中断的总次数,1号中断发生的次数其中缺页中断是第14号中断,也就是在关键字intr之后的第16项。这个数据就是我们想要的。stat的文件的内容如下所示:,stat的文件的内容,cpu

34、 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中读取缺页中断的次数,将其显示出来。由于仅涉及文件的打开、读写操作,因此程序比较简单,重新生成内核,makexconfig; makedep; makeclean; makebzImage; makemodules; makemodules_installmake install,谢谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号