[其它]5-设备管理学位考 - 操作系统

上传人:豆浆 文档编号:55325275 上传时间:2018-09-27 格式:PPT 页数:30 大小:206KB
返回 下载 相关 举报
[其它]5-设备管理学位考 - 操作系统_第1页
第1页 / 共30页
[其它]5-设备管理学位考 - 操作系统_第2页
第2页 / 共30页
[其它]5-设备管理学位考 - 操作系统_第3页
第3页 / 共30页
[其它]5-设备管理学位考 - 操作系统_第4页
第4页 / 共30页
[其它]5-设备管理学位考 - 操作系统_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《[其它]5-设备管理学位考 - 操作系统》由会员分享,可在线阅读,更多相关《[其它]5-设备管理学位考 - 操作系统(30页珍藏版)》请在金锄头文库上搜索。

1、1,第五章 设备管理,操作系统,2,5.1 引言,有关外设的驱动、控制、分配等技术问题都统一由设备管理程序负责。 5.1.1 设备的概念和分类 (1)按功能分类,可以分为输入设备、输出 设备、存储设备、供电设备、网络设备等。 (2)从设备的数据组织方式分类,可以分为块设备和字符设备。 (3)从设备的管理模式分类,可以分为物理设备和逻辑设备。 (4)从设备的资源属性分类,可以分为独占设备、共享设备和虚拟设备。,3,UNIX中的系统调用,与进程管理和控制有关的系统调用 fork、exit、wait、signal、kill。 semget、semop、semctl。 与文件系统有关的系统调用 cre

2、at、open、close、read、write。 其它系统调用 times,4,5.3.2 UNIX系统中的时钟管理,每隔20ms处理的工作如下: 计算当前进程在用户态或核心态下的累计运行时间,将u.u_utime+或u.u_stime+。 当前运行进程p_cpu加1。 处理延时启动终端打印机的工作。clock若发现延迟时间到了,则重新启动对应的输出驱动程序。 每秒一次处理的工作如下: 日历时钟变量time加1。 所有进程的内存或对换区的驻留时间p_time+, 所有目前未运行进程的p_cpu除以2。,5,5.4.2 I/O通道技术,I/O通道是一种硬件设施,带有专用处理器的、有很强I/O处

3、理功能的智能部件。 可以独立地完成系统处理器交付的I/O操作任务,通道具有自己专门的指令集,即通道指令。 通道执行来自处理器的通道程序,完成后只需向系统处理器发出中断,请求结束。 字节多路通道主要用于连接大量低、中速、以字节作为传输单位的I/O设备。 选择通道主要用以支持高速设备(如磁盘),每次只对一个设备进行数据传输。 成组多路通道以分时方式同时执行几道通道程序,每条通道指令可以传送一组数据,,6,5.6 磁盘的调度,5.6.1 物理特性 磁盘一般用于文件存储,盘上信息的地址是多重编址的,包括驱动器号、面号、道号、扇区号。 存取盘块中信息的时间: 寻道时间 100ms 等待时间 10ms 传

4、送时间 1ms,7,5.6.2 磁盘调度算法,先来先服务调度(FCFS) 最短寻道时间优先法(SSTF),8,5.6.2 磁盘调度算法(续),扫描法(SCAN和C-SCAN),9,5.7 UNIX系统V的设备管理,1缓冲控制块buf 在系统初启时,核心根据内存大小和系统性能要求分配若干缓冲区。一个缓冲区由两部分组成:存放数据的内存数据(一般称为缓冲区)和一个缓冲控制块。缓冲区和缓冲控制块是一一对应的。系统通过缓冲控制块实现对缓冲区的管理。,5.7.1 UNIX块设备管理的主要数据结构,10,struct buf int b_flags; /* 缓冲区标志 */ struct buf *b_fo

5、rw; /* 设备队列前向指针 */ struct buf *b_back; /* 设备队列后向指针 */ struct buf *av_forw; /* 自由队列前向指针 */ struct buf *av_back; /* 自由队列后向指针 */ dev_t b_dev; /* 逻辑设备号 */ unsigned b_bcount; /* 传送数据字节数 */ union caddr_t b_addr; /* 缓冲区内存首地址 */ struct filsys *b_filsys; /* 超级块 */ b_un; daddr_t b_blkno; /* 在磁盘上数据的块号 */ bufNB

6、UF;,11,b_flags反映缓冲区的使用情况和I/O方式,如忙或闲、数据有效性、“延迟写”、正在读/写、等待缓冲区空闲等。 从buf的组成可见,它不仅包含了与使用缓冲区有关的信息,也记录了I/O请求及其执行结果。所以一般而言,buf既是缓存控制块,同时又可以是针对该缓存进行的I/O请求块。 为管理方便,系统还设置了自由缓存队列控制块bfreelist和进程图象传送控制块swbuf。这两个块结构与buf结构相同,但只用部分项,其余则弃之不用。,12,2块设备表,struct iobuf int b_flags; /* 该设备队列的状况标志 */ struct buf *b_forw; /*

7、指向本设备的第一个缓冲区 */ struct buf *b_back; /指向本设备的最后一个缓冲区 struct buf *b_actf; /* 指向本设备I/O请求队列 中第一个缓冲区 */ struct buf *b_actl; /* 指向本设备I/O请求队列 中最后一个缓冲区 */ dev_t b_dev; /* 设备名 */ char b_active; /设备正在执行一个I/O请求的标志 chat b_errcnt; /* 出错计数 */ ;,13,3块设备开关表,存放各类块设备管理程序的入口地址 struct bdevsw int (*d_open)(); /* 打开函数入口 *

8、/ int (*d_close)(); /* 关闭函数入口 */ int (*d_strategy)(); /* 启动函数入口 */ int (*d_print)(); /* 打印函数入口 */ ; 设备表和设备开关表集中了与设备有关的特性及其管理、使用的信息,也体现了UNIX中把设备的物理特性和使用情况与设备管理的基本方式分隔开来的主要思想。,14,5.7.2 UNIX系统V的缓冲区管理,1. 多种缓冲区管理队列 系统设置了多种队列对所有缓冲区进行管理,因为buf记录了与缓冲区有关的各种管理信息,所以缓冲区管理队列实际上是缓存控制块buf队列。 (1)自由buf队列 系统把空闲缓冲区的buf

9、组成空闲buf队列,即自由buf队列。这个队列是双向链结构,队首块为bfreelist,bfreelist和自由buf通过av_forw和av_back作为双向指针,见p128 图5-9。,15,(2)设备缓冲区队列,设备缓冲区队列连接所有各类设备使用过的缓冲区,这也是一个双向队列,buf中的b_forw和b_back分别为该队列的前指针和后指针,头部为hbuf,共64个队列。如p129 图5-10所示。 一个缓冲区被分配用于读、写某个设备的字符块时,其相应的buf就进入该设备的设备buf队列,并一直保留在该设备buf队列中,除非被移作它用。 系统V与第六版有所不同,不是每个块设备一个缓冲队列

10、,同一个块设备的缓冲区可以分布在不同的散列队列,不同设备的缓冲分布均匀,加快缓冲区的搜索速度。,16,(3)空设备队列(NODEV队列),NODEV队列是一个特殊的设备buf队列。当系统需要缓存,但它不与特定的设备字符块相关联时,将分配到的缓存控制块buf送入NODEV队列。其队列控制块也是bfreelist,用的指针是b_forw和b_back。 在UNIX中有两种情况将buf送入NODEV队列。 一种是在进程执行一个目标程序的开始阶段,它用缓存存放传向该目标程序的参数; 另一种情况是用缓存存放文件系统的资源管理块。在系统初启时,所有空闲缓冲区的buf既在自由buf队列,又在NODEV的设备

11、buf队列中。,17,(4)设备I/O请求队列,每个块设备有一个设备I/O请求队列,单向连接,头部为iobuf,b_actf和b_actl分别指向队首和队尾。 四个队列所属缓冲区之间的关系总结 (1)任何一个缓冲区在稳定的状态下,同时属于二个队列。 (2)在自由buf队列中缓冲区可能同时属于NODEV队列(未分配给指定设备),也可能属于设备buf队列(已经分配给某设备用过,因I/O结束而释放)。 (3)在设备buf队列中的缓冲区,可能挂在自由buf队列(已用过被释放),也可能挂在设备I/O请求队列(正在使用)。 (4)在NODEV队列中的缓冲区如已用过被释放,肯定在自由buf队列中。 (5)在

12、设备I/O请求队列中的缓冲区则肯定属于设备buf队列。,18,2. 缓冲区管理算法,1. 一个缓存刚分配用于读写某一块设备,buf的b_flags含有B_BUSY标志。它一定位于相应设备buf队列,不在自由队列。 2 一旦读写完成,就释放缓存,清B_BUSY标志。送入自由队列尾,但仍留在原设备队列。 3. 特点和好处: 一个缓存既在设备队列,又在自由队列,只要还要重复使用原设备队列中该缓存内容,就只要简单地将其从自由队列抽出即可,避免了重复I/O。 有必要可将缓存重新分配它用,将它从自由队列首和原设备队列同时抽出,送入新的设备队列。操作完成后仍留在新的设备队列并送入自由队列。,19,4. 为使

13、一个已释放地缓存尽可能长地保持原先内容,以增加重复使用可能,将其送入自由队列尾,分配作它用缓存从自由队列首取(FIFO)。 5. 当一个buf在自由队列中移动时,只要原设备队列又重新使用它,立即将其从自由队列中间抽取,使用完毕,再次送入自由队列尾(LRU算法)。 6对于写,如一块未写满,在b_flags中设置B_DELWR1标志,推迟写,再清B_BUSY,释放至自由队列尾。 7. 当设置B_DELWR1标志的缓存排到自由队列首时,不能立即淘汰,它作重新分配处理,而是提出I/O,将其内容复制到块设备后,再次释放到自由队列尾( 也有释放到自由队列首) ,也清B_DELWRI标志。,20,3. 缓冲

14、区的分配和释放,getblk(dev,blkno) while(未找到相应buf) if(盘块在设备buf队列中) if(buf忙) / b_flags /* 回到while循环 */ ,21,从自由队列中移走该buf; if(buf标志为“延迟写”) / B_DELWRI 异步写buf到相应设备上; continue; /* 回到while循环 */ 从原来的设备buf队列中移走该buf; /* 找到空闲的buf */ 把它放在新的设备buf队列中; return(buf); ,22,brelse(bp) 唤醒所有等待自由队列成为“非空”的进程; 唤醒所有等待本buf成为空闲的进程; 提升处

15、理机执行级别,屏蔽中断; if(buf内容有效且不是过时的) 把本buf放入自由队列末尾; /* 以备 将来使用 */ else /* 如偶尔遇到出错 */ 把本buf放入自由队列的开头; /* 以后很少使用它 */ 降低处理机执行级别,开放中断; 解除封锁(buf); ,23,5.7.3 块设备管理,bread(dev,blkno) 为逻辑块找一个缓冲区(getblk); if(缓冲区数据有效) return(buf); 启动磁盘读; sleep(盘块读完);/* 等待盘I/O完成中断 */ return(buf); ,24,预读盘块程序breada,当一个进程顺序读取文件时,为加快它的前进

16、速度,提高CPU和块设备工作的并行程度 核心检查第一块是否在缓冲区中,如不在,则调用磁盘驱动程序读该块。如第二块不在缓冲区中,核心指示盘驱动程序异步读它。然后进程睡眠,等待第一块I/O完成。 该进程被唤醒后就返回第一块的buf,而不管第二块是否读完。以后,当第二块读完后,产生盘I/O中断,由中断处理程序识别异步读完成,并释放相应的buf。,25,5.8 设备分配,1. 设备分配方式 静态分配 作业运行之前由系统一次分配满足需要的全部设备 动态分配 在进程运行的过程中进行分配的,当进程需要使用设备时,系统按一定的分配策略给进程分配所需设备,一旦使用完毕立即释放。,26,2. 设备分配的原则,先请求先服务。 要使用设备时必须提供进行I/O操作的有关信息,指出执行I/O的逻辑设备名(如设备号)、操作类型、传送数据的数目、信息源或目的地址等。 存放进行I/O操作的信息的结构称为I/O请求块。如在UNIX系统中,系统的I/O请求块的内容是包含在缓冲区控制块buf中。 在请求I/O时,首先请求分配缓冲区,然后把与操作有关的信息写到buf中,并把这个buf挂到请求设备的I/O请求队列中去如图5-13所示。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号