中南大学数学院计算机操作系统第五章课件设备管理.ppt_第1页
中南大学数学院计算机操作系统第五章课件设备管理.ppt_第2页
中南大学数学院计算机操作系统第五章课件设备管理.ppt_第3页
中南大学数学院计算机操作系统第五章课件设备管理.ppt_第4页
中南大学数学院计算机操作系统第五章课件设备管理.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1 第五章 设备管理 2 5.1 引言 有关外设的驱动、控制、分配等技术问题都统一由设备 管理程序负责。 5.1.1 设备的概念和分类 (1)按功能分类,可以分为输入设备、输出设备、存储 设备、供电设备、网络设备等。 (2)从设备的数据组织方式分类,可以分为块设备和字 符设备。 (3)从设备的管理模式分类,可以分为物理设备和逻辑 设备。 (4)从设备的资源属性分类,可以分为独占设备、共享 设备和虚拟设备。 3 5.1.2 I/O设备控制与驱动 nI/O设备的控制和驱动技术包括了硬件控制驱动 技术和驱动软件。前者是I/O设备厂商设计建立 的与设备密切相关的技术。后者涉及系统所有 I/O处理的软件。I/O驱动软件是操作系统的一 部分。 n随着操作系统的发展,使I/O驱动软件成为一种 带有标准接口的可选型的软件,操作系统内核中 只保留与设备无关的那部分软件,而将与设备有 关的驱动软件作为一种可装卸的程序,可以按照 系统配置的需求进行配置。 n操作系统中的I/O驱动软件一般分为几个层次, 如中断处理程序、设备驱动程序、操作系统I/O 原语和用户级软件。 4 5.1.3 设备管理的设计要求和任务 为用户提供方便、统一的设备使用界面 n提高外部设备利用率,尽量提高并行程度 n实现程序与设备的无关性 n系统与设备间的协调主要是速度上的协调 ,通常要解决快速的处理器与慢速的I/O 设备之间的操作匹配的问题,在操作系统 中采用缓冲区的方式来缓解这个矛盾,设 备管理要实现这些缓冲区的建立、分配、 释放与回收。 5 5.2 操作系统与中断处理 5.2.1 中断的基本概念 中断请求(硬件) 中断响应(硬件) 查找中断源、保护现场(软、硬件) 系统继续运行 中断处理子程序(软件) 中断返回、恢复现场(软件) 6 5.2.2 中断的类型 n中断机构处理外部设备的I/O中断。 n陷入机构处理指令的陷入(自陷)和由于软、硬 件故障或错误造成的陷入。 n系统调用是UNIX操作系统面向在用户的程序的 界面。在汇编级上,系统调用使用trap指令。 nI/O中断 n时钟中断 n系统请求中断 n报警中断 n程序错误中断 n机器错误中断 7 UNIX中的系统调用 n与进程管理和控制有关的系统调用 fork、exit、wait、signal、kill。 nsemget、semop、semctl。 n与文件系统有关的系统调用 creat、open、close、read、write。 n 远程进程通信 socket、connect n其它系统调用 times 8 5.2.3 中断的响应和实现过程 v每当执行完一条指令,检测有无中断请求。 v不同的中断类型规定了不同的优先级,中断嵌套 。 v根据中断源找出相应的中断处理程序入口地址, 以便转去执行。中断矢量存放中断处理程序的地址 。 v保护现场,指令断点,运行参数和条件,现运行 程序状态寄存器PS的内容以及累加器或通用寄存器 的内容和标记 v中断屏蔽。 9 5.2. 4 中断处理程序和驱动程序 nUNIX把设备作为一种虚拟的文件对待,每个 设备有一个象文件名那样的名字,可以对它象 一个文件那样存取 n在UNIX系统中,将设备分成两类:块设备和 字符设备。核心与驱动程序的接口是由块设备 开关表和字符设备开关表描述的 10 5.2.5 中断的返回与恢复 nUNIX的中断处理都是在核心态下进行的 。 n如果中断前处理机状态为核心态,则在 执行完设备处理子程序后就恢复现场, 然后用中断返回指令回到中断前状态, 继续执行被中断的操作系统程序。 n如果中断前为用户态,则在执行完设备 处理子程序后,先要检查标志runrun是 否设置。 11 5.3 操作系统与时钟系统 n在计算机系统中可分为三类时钟: 系统时钟(system clock)、 日历时钟(time of day clock) 实时时钟(realtime clock) 5.3.1 时钟的概念 v系统时钟主要用于控制系统处理器执行指令的 速率。 v日历时钟产生一个精确的时间计数,程序对此 进行转换,给出与日历相符的日期和时间。 v实时时钟每秒提供若干个时钟中断,提醒处理 器有重要的事情要做。 12 5.3.2 UNIX系统中的时钟管理 每隔20ms处理的工作如下: n计算当前进程在用户态或核心态下的累计运行时间 ,将u.u_utime+或u.u_stime+。 n当前运行进程p_cpu加1。 n处理延时启动终端打印机的工作。clock若发现延 迟时间到了,则重新启动对应的输出驱动程序。 每秒一次处理的工作如下: n日历时钟变量time加1。 n 所有进程的内存或对换区的驻留时间p_time+, 所有目前未运行进程的p_cpu除以2。 13 5.4 操作系统对I/O的控制 5.4.1 I/O设备的资源分配 nI/O地址 进行正确的I/O地址设置 nI/O中断请求 争用剩余的中断请求号,也会产生冲突。 nDMA数据传输通道 对争用同一个DMA通道的I/O设备需要进行 协调和重新配置。 nI/O缓冲区 这个系统资源也是I/O设备争用的。 14 5.4.2 I/O通道技术 nI/O通道是一种硬件设施,带有专用处理器的、 有很强I/O处理功能的智能部件。 n可以独立地完成系统处理器交付的I/O操作任务 ,通道具有自己专门的指令集,即通道指令。 n通道执行来自处理器的通道程序,完成后只需向 系统处理器发出中断,请求结束。 n字节多路通道主要用于连接大量低、中速、以字 节作为传输单位的I/O设备。 n选择通道主要用以支持高速设备(如磁盘),每 次只对一个设备进行数据传输。 n成组多路通道以分时方式同时执行几道通道程序 ,每条通道指令可以传送一组数据, 15 5.4.3 I/O缓冲技术 n提高中央处理器与外设的并行程度 n可以采用硬件缓冲和软件缓冲两种方式 n软件缓冲是借助操作系统的管理,采用 内存中的一个或者多个区域作为缓冲区 。 n缓冲区的数量可根据不同的系统和操作 来确定,常用的缓冲技术有三种:双缓 冲、环形缓冲和缓冲池。 16 5.5 设备管理的数据结构 5.5.1 设备控制表(DCT) n提供若干高级I/O系统调用,用这些抽象的 I/O操作把用户与复杂的I/O设备操作隔离, 隐藏设备操作的细节,有利于编写与设备无关 的程序。 n要完成抽象到实际的映射,通常采用称为设备 控制表(DCT)的数据结构来完成。它记录每一 个抽象设备描述、对应的实际设备地址、所使 用的设备驱动程序等参数。 17 设备读read抽象操作 read(dvcrp,buf,size) int dvcrp,size;/* 设备标识符、数据块大小 */ char *buf; /* 缓冲区指针 */ struct devtab *devptr; /* 指向设备表的指针 */ if (isbaddev(dvcrp) / 确认设备标识符是否有效 return(SYSERR); /* 无效,系统返回出错 */ devptr= /* 有效,找到对应设备表项 */ return(*devptrdvread)(devptr,buf,size) /* 将参数传向设备驱动程序并返回 */ 18 5.5.2 设备开关表 n针对各类设备不同的物理特性,系统为 它们各自设置了一套子程序,它们包括 打开、关闭和启动子程序。 n系统为每类设备又设置了一数据结构, 存放这些程序的入口地址,该数据结构 称为设备开关。 19 5.6 磁盘的调度 5.6.1 物理特性 n磁盘一般用于文件存储,盘上信息的地址 是多重编址的,包括驱动器号、面号、道 号、扇区号。 n存取盘块中信息的时间: 寻道时间 100ms 等待时间 10ms 传送时间 1ms 20 5.6.2 磁盘调度算法 n先来先服务调度(FCFS) n最短寻道时间优先法(SSTF) 21 5.6.2 磁盘调度算法(续) n扫描法(SCAN和C-SCAN) 22 5.7 UNIX系统V的设备管理 n1缓冲控制块buf n在系统初启时,核心根据内存大小和系 统性能要求分配若干缓冲区。一个缓冲 区由两部分组成:存放数据的内存区( 一般称为缓冲区)和一个缓冲控制块。 缓冲区和缓冲控制块是一一对应的。系 统通过缓冲控制块实现对缓冲区的管理 。 5.7.1 UNIX块设备管理的主要数据结构 23 struct buf intb_flags;/* 缓冲区标志 */ struct buf *b_forw;/* 设备队列前向指针 */ struct buf *b_back;/* 设备队列后向指针 */ struct buf *av_forw;/* 自由队列前向指针 */ struct buf *av_back;/* 自由队列后向指针 */ dev_tb_dev;/* 逻辑设备号 */ unsigned b_bcount;/* 传送数据字节数 */ union caddr_tb_addr; /* 缓冲区内存首地址 */ struct filsys *b_filsys;/* 超级块 */ b_un; daddr_t b_blkno; /* 在磁盘上数据的块号 */ bufNBUF; 24 nb_flags反映缓冲区的使用情况和I/O方式, 如忙或闲、数据有效性、“延迟写”、正在读/ 写、等待缓冲区空闲等。 n从buf的组成可见,它不仅包含了与使用缓冲 区有关的信息,也记录了I/O请求及其执行结 果。所以一般而言,buf既是缓存控制块,同 时又可以是针对该缓存进行的I/O请求块。 n为管理方便,系统还设置了自由缓存队列控制 块bfreelist和进程图像传送控制块swbuf。这 两个块结构与buf结构相同,但只用部分项, 其余则弃之不用。 25 2块设备表 struct iobuf int b_flags; /* 该设备队列的状况标志 */ struct buf *b_forw; /* 指向本设备的第一个缓冲区 */ 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; /* 出错计数 */ ; 26 3块设备开关表 存放各类块设备管理程序的入口地址 struct bdevsw int (*d_open)();/* 打开函数入口 */ int (*d_close)();/* 关闭函数入口 */ int (*d_strategy)(); /* 启动函数入口 */ int (*d_print)();/* 打印函数入口 */ ; 设备表和设备开关表集中了与设备有关的特性及其 管理、使用的信息,也体现了UNIX中把设备的物 理特性和使用情况与设备管理的基本方式分隔开来 的主要思想。 27 5.7.2 UNIX系统V的缓冲区管理 1. 多种缓冲区管理队列 系统设置了多种队列对所有缓冲区进行管理, 因为buf记录了与缓冲区有关的各种管理信息 ,所以缓冲区管理队列实际上是缓存控制块 buf队列。 (1)自由buf队列 系统把空闲缓冲区的buf组成空闲buf队列, 即自由buf队列。这个队列是双向链结构,队 首块为bfreelist,bfreelist和自由buf通过 av_forw和av_back作为双向指针,见图5-9 。 28 bfreelistbufbufbuf av_forw av_forw av_forw av_forw av_back av_back av_back av_back 图5-9 自由buf队列 29 (2)设备缓冲区队列 n设备缓冲区队列连接所有各类设备使用过的缓冲 区,这也是一个双向队列,buf中的b_forw和 b_back分别为该队列的前指针和后指针,头部为 hbuf,共64个队列。如图5-10所示。 n 一个缓冲区被分配用于读、写某个设备的字符块 时,其相应的buf就进入该设备的设备buf队列, 并一直保留在该设备buf队列中,除非被移作它 用。 n系统V与第六版有所不同,不是每个块设备一个 缓冲队列,同一个块设备的缓冲区可以分布在不 同的散列队列,不同设备的缓冲分布均匀,加快 缓冲区的搜索速度。 30 hbufbufbufbuf b_forw b_forw b_forw b_forw b_back b_back b_back b_back 图5-10 设备buf队列 31 (3)空设备队列(NODEV队列) vNODEV队列是一个特殊的设备buf队列。当系 统需要缓存,但它不与特定的设备字符块相关联 时,将分配到的缓存控制块buf送入NODEV队 列。其队列控制块也是bfreelist,用的指针是 b_forw和b_back。 v在UNIX中有两种情况将buf送入NODEV队列。 v 一种是在进程执行一个目标程序的开始阶段, 它用缓存存放传向该目标程序的参数; v另一种情况是用缓存存放文件系统的资源管理块 。在系统初启时,所有空闲缓冲区的buf既在自 由buf队列,又在NODEV的设备buf队列中。 32 (4)设备I/O请求队列 n每个块设备有一个设备I/O请求队列,单向连接,头 部为iobuf,b_actf和b_actl分别指向队首和队尾。 四个队列所属缓冲区之间的关系总结 (1)任何一个缓冲区在稳定的状态下,同时属于二个队列。 (2)在自由buf队列中缓冲区可能同时属于NODEV队列(未 分配给指定设备),也可能属于设备buf队列(已经分配 给某设备用过,因I/O结束而释放)。 (3)在设备buf队列中的缓冲区,可能挂在自由buf队列(已 用过被释放),也可能挂在设备I/O请求队列(正在使用 )。 (4)在NODEV队列中的缓冲区如已用过被释放,肯定在自 由buf队列中。 (5)在设备I/O请求队列中的缓冲区则肯定属于设备buf队 列。 33 2. 缓冲区管理算法 1. 一个缓存刚分配用于读写某一块设备,buf的 b_flags含有B_BUSY标志。它一定位于相应设备 buf队列,不在自由队列。 2 一旦读写完成,就释放缓存,清B_BUSY标志 。送入自由队列尾,但仍留在原设备队列。 3. 特点和好处: n一个缓存既在设备队列,又在自由队列,只要还要 重复使用原设备队列中该缓存内容,就只要简单地 将其从自由队列抽出即可,避免了重复I/O。 n有必要可将缓存重新分配它用,将它从自由队列首 和原设备队列同时抽出,送入新的设备队列。操作 完成后仍留在新的设备队列并送入自由队列。 34 4. 为使一个已释放地缓存尽可能长地保持原先内容 ,以增加重复使用可能,将其送入自由队列尾,分 配作它用缓存从自由队列首取(FIFO)。 5. 当一个buf在自由队列中移动时,只要原设备队 列又重新使用它,立即将其从自由队列中间抽取, 使用完毕,再次送入自由队列尾(LRU算法)。 6对于写,如一块未写满,在b_flags中设置 B_DELWRI标志,推迟写,再清B_BUSY,释放 至自由队列尾。 7. 当设置B_DELWRI标志的缓存排到自由队列首 时,不能立即淘汰,它作重新分配处理,而是提出 I/O,将其内容复制到块设备后,再次释放到自由 队列尾( 也有释放到自由队列首) ,也清 B_DELWRI标志。 35 b_backb_backb_backb_back b_forwb_forwb_forwb_forw bufbufbufhbuf av_backav_backav_backav_back av_forwav_forwav_forwav_forw bufbufbufbfreelist 自由队列 设备队列 36 3. 缓冲区的分配和释放 getblk(dev,blkno) while(未找到相应buf) if(盘块在设备buf队列中) if(buf忙)/ b_flags / B_WANTED continue;/* 回到while循环 */ 标记buf忙; 从自由buf队列中移走该buf; return(buf); else/* 盘块不在设备buf队列中 */ if(自由队列中已无buf) / bfreelist / B_WANTED continue;/* 回到while循环 */ 37 从自由队列中移走该buf; if(buf标志为“延迟写”) / B_DELWRI 异步写buf到相应设备上; continue;/* 回到while循环 */ 从原来的设备buf队列中移走该buf; /* 找到空闲的buf */ 把它放在新的设备buf队列中; return(buf); 38 brelse(bp) 唤醒所有等待自由队列成为“非空”的进程; 唤醒所有等待本buf成为空闲的进程; 提升处理机执行级别,屏蔽中断; if(buf内容有效且不是过时的) 把本buf放入自由队列末尾; /* 以备 将来使用 */ else /* 如偶尔遇到出错 */ 把本buf放入自由队列的开头; /* 以后很少使用它 */ 降低处理机执行级别,开放中断; 解除封锁(buf); 39 5.7.3 块设备管理 bread(dev,blkno) 为逻辑块找一个缓冲区(getblk); if(缓冲区数据有效) return(buf); 启动磁盘读; sleep(盘块读完);/* 等待盘I/O完成中断 */ return(buf); 40 预读盘块程序breada n当一个进程顺序读取文件时,为加快它的前进 速度,提高CPU和块设备工作的并行程度 n核心检查第一块是否在缓冲区中,如不在,则 调用磁盘驱动程序读该块。如第二块不在缓冲 区中,核心指示盘驱动程序异步读它。然后进 程睡眠,等待第一块I/O完成。 n该进程被唤醒后就返回第一块的buf,而不管 第二块是否读完。以后,当第二块读完后,产 生盘I/O中断,由中断处理程序识别异步读完 成,并释放相应的buf。 41 5.8 设备分配 n1. 设备分配方式 n静态分配 作业运行之前由系统一次分配满足需要 的全部设备 n动态分配 在进程运行的过程中进行分配的,当进 程需要使用设备时,系统按一定的分配 策略给进程分配所需设备,一旦使用完 毕立即释放。 42 2. 设备分配的原则 n先请求先服务和按请求I/O的进程的优先级决 定。 n要使用设备时必须提供进行I/O操作的有关信 息,指出执行I/O的逻辑设备名(如设备号) 、操作类型、传送数据的数目、信息源或目的 地址等。 n存放进行I/O操作的信息的结构称为I/O请求 块。如在UNIX系统中,系统的I/O请求块的 内容是包含在缓冲区控制块buf中。 n在请求I/O时,首先请求分配缓冲区,然后把 与操作有关的信息写到buf中,并把这个buf挂 到请求设备的I/O请求队列中去如图5-13所示 。 43 b_actf b_actl av_forw av_forw av_forw iobuf buf buf swbuf 图5-13 设备I/O请求队列 44 5.10 Solaris的I/O子系统 n内核为应用程序提供了一组系统调用,其中某些 系统调用将调用设备驱动程序执行I/O操作。 n在Solaris操作系统中,设备驱动程序(device driver)是可加载的内核模块,负责管理I/O设备 ,并且使操作系统的其余部分与设备硬件隔离开 来。 nSolaris的设计也遵循了UNIX系统理念。把设备 看成文件,可以将设备与文件统一管理,例如, 采用统一的命名方式和统一的权限管理方式,这 样可以简化设备管理过程。在块设备驱动程序和 字符设备驱动程序之上都有一层文件系统,这体 现了将设备与文件统一管理的设计思想。 45 n对干不同的设备,其文件系统层的“厚度”是不同 的。 n对于磁盘这类结构性很强、操作很复杂的设备, 其文件系统很“厚”,这是因为系统中存在着两层 抽象:一层抽象是将柱面、磁道、扇区表示的磁 盘物理空间抽象成由数据

温馨提示

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

评论

0/150

提交评论