Operating_System_Chapter-8_Fall_2011

Operating_System_Chapter-8_Fall_2011 - 第8章 设备管理...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: 第8章 设备管理 8.1 I/O系统 8.2 I/O控制方式 8.3 缓冲技术 8.4 设备的分配 8.5 设备的驱动 xxxx8.6 Unix设备管理特点 IE310, 1-1, Feb. 18th, 2008, [email protected] Shanghai Jiao Tong University 8.1 I/O系统 8.1.1 什么是设备管理 计算机系统的一种重要组成部分是I/O系统。在该系统 中包括有用于实现信息输入、输出和存储功能的设备和 相应的设备控制器,甚至还有通道和I/O处理机。 设备管理的对象是除CPU和内存之外的外部设备,设备 管理是操作系统中最繁杂、与硬件最紧密相关的部分。 设备管理的基本任务是完成用户提出的I/O请求,提高 I/O速率以及提高I/O设备的利用率。 设备管理的主要功能有: 为用户提供外部设备分配以及使用的方便、友好的透明接口 控制设备的处理与各种操作 充分利用缓冲区等各种技术,提高CPU与设备、设备与设备之 间的并行工作能力 虚拟设备以及设备的多任务多进程共享、安全保护和设备独立 性 IE310, 8-2, [email protected] Shanghai Jiao Tong University 8.1 I/O系统 8.1.2 设备的分类 按传输速率分 低速设备:每秒几个到数百字节。如Modem、 键盘。 中速设备:每秒数千到数万字节。如打印机。 高速设备:每秒数百KB到数十MB。如磁盘机、 磁带机、光盘机。 IE310, 8-3, [email protected] 8.1 I/O系统(设备的分类) Shanghai Jiao Tong University 按信息交换的单位分 字符设备: 以字符为单位组织和处理信息的设备,如键盘、鼠标、扫描仪、 终端、打印机、屏幕、绘图仪等。 一般用于数据的输入和输出。 传输速率相对较低。 一般不可寻址,即输入/输出时不能指定数据的输入源地址及输 出的目标地址。 在输入/输出时,常采用中断驱动方式。 块设备: 以数据块为单位组织和处理信息的设备,如磁盘、磁带。 一般用于存储信息。 传输速率相对较高。 一般可寻址,即对它可随机地读/写任一块。 在输入/输出时,常采用DMA方式。 IE310, 8-4, [email protected] 8.1 I/O系统(设备的分类) Shanghai Jiao Tong University 按资源管理方式分 独占设备: 共享设备: 在一段时间内(比如在两秒钟的时间跨度内)只允许一个用户(进 程)访问的设备,即临界资源。 字符设备及磁带机属独占型设备。 在一段时间内(比如在两秒钟的时间跨度内)允许多个进程同时 访问的设备。 当然,对于每一时刻而言,该类设备仍然只允许一个进程访问。 典型的共享设备是磁盘(以及CPU和内存,虽不便于称为设备)。 具有良好的设备利用率,是实现文件系统和数据库系统的物质 基础。 虚拟设备: 通过虚拟技术,借助使用共享设备,将一台独占设备变换为若 干台逻辑设备,供若干个用户(进程)同时使用。 常用共享设备模拟独占设备,用高速设备模拟低速设备。 IE310, 8-5, [email protected] 8.1 I/O系统(设备的分类) Shanghai Jiao Tong University 按从属关系分 系统设备: 在操作系统生成时就已配置好的各种标准设备。 例如键盘、打印机以及文件存储设备(磁盘)等。 用户设备: 在系统生成时没有配置,而由用户自己安装配置后由 操作系统统一管理的设备。 例如网络系统中的各种网络适配器、实时系统中的 A/D和D/A转换器、图像处理系统的图像设备等。 IE310, 8-6, [email protected] Shanghai Jiao Tong University 8.1 I/O系统 8.1.3 设备控制器 设备控制器是CPU与I/O设备之间的接口。 设备控制器接收从CPU发出的命令,并去控制 I/O设备工作,以使处理机从繁杂的设备控制事 务中解脱出。 设备控制器是一个可编址的设备,当它仅控制 一个设备时,它只有一个唯一的设备地址;否 则,含有多个设备地址,并使每一个设备地址 对应一个设备。 常以插入计算机中的印刷电路卡的形式出现, 从而常被称为接口卡。 IE310, 8-7, [email protected] 8.1 I/O系统(设备控制器) Shanghai Jiao Tong University xxxx设备控制器的基本功能 接收和识别命令 数据交换 设置有地址译码器,以识别不同寄存器的地址。 数据缓冲 设置有状态寄存器,供CPU了解设备的状态。 地址识别 借助数据寄存器,实现CPU与控制器之间、控制器与设备之间的数 据交换。 标识和报告设备的状态 设置有多个控制寄存器,以存放接收的命令和参数,并用命令译码 器对所接收的命令进行译码。 在低速的I/O设备与高速的CPU和内存之间暂存数据。 差错控制 对由I/O设备传送来的数据进行差错检测,将发现的差错报告给CPU。 IE310, 8-8, [email protected] 8.1 I/O系统(设备控制器) Shanghai Jiao Tong University xxxx设备控制器的组成 IE310, 8-9, [email protected] 8.1 I/O系统(设备控制器) Shanghai Jiao Tong University 设备控制器的组成(续) 设备控制器与处理机的接口 用于实现CPU与设备控制器之间的通信。 共有三类信号线: 数据线; 地址线; 控制线。 数据线通常与两类寄存器相连接: 若干缓冲用的数据寄存器; 控制/状态寄存器。 IE310, 8-10, [email protected] 8.1 I/O系统(设备控制器) Shanghai Jiao Tong University 设备控制器的组成(续) 设备控制器与设备的接口 一个设备控制器可以连接一个或多个设备。 相应地,在控制器中便有一个或多个设备接 口,每个接口连接一台设备。 在每个接口中都存在数据、控制和状态三种 类型的信号。 控制器中的I/O逻辑根据处理机发来的地址 信号,去选择一个设备接口。 IE310, 8-11, [email protected] 8.1 I/O系统(设备控制器) Shanghai Jiao Tong University 设备控制器的组成(续) I/O逻辑 在设备控制器中的I/O逻辑用于实现对设备 的控制。 I/O逻辑对接收自处理机的命令进行译码。 I/O逻辑根据所译出的命令对所选设备进行 控制。 IE310, 8-12, [email protected] Shanghai Jiao Tong University 8.1 I/O系统 xxxx8.1.4 I/O通道 I/O通道(I/O Channel)的引入 它能够完成对I/O操作的组织、管理及其结束处理的工 作,从而保证CPU有更多的时间去进行数据处理,使一 些原来由CPU处理的I/O任务转由通道来承担。 CPU只需向通道发送一条I/O指令,通道在收到该指令后, 便从内存中取出并执行对应的通道程序,在完成该I/O 任务之后才向CPU发中断信号。 I/O通道是一种特殊的处理机。它具有执行I/O指令的能 力,并通过执行通道(I/O)程序来控制I/O操作。 但是,I/O通道又与一般的处理机不同,主要表现: 其指令类型单一,这是由于通道硬件比较简单,其所能执行的 命令,主要局限于与I/O操作有关的指令; 通道没有自己的内存,通道所执行的通道程序是放在主机的内 存中的,换言之,是通道与CPU共享内存。 IE310, 8-13, [email protected] Shanghai Jiao Tong University 8.1 I/O系统(I/O通道) *通道类型之字节多路通道 (Byte Multiplexor Channel) 是一种按字节交叉工作的通道。 通常含有许多非分配型子通道,其数量可以从 几十到数百个。 每一个字通道连接一台I/O设备,并控制该设备 的I/O操作。 各子通道按时间片轮转方式共享主通道。 严格地讲是分时复用。但是宏观看来(比如在一 个秒级时间段内),各子通道似乎同时在传送数 据,类似于频分复用的效果,比如同时有 101.7Mhz、103.7MHz、105.7MHz、107.7MHz 等电台的播出。 IE310, 8-14, [email protected] Shanghai Jiao Tong University 8.1 I/O系统(I/O通道) *通道类型之字节多路通道 (Byte Multiplexor Channel) A 1A 2A 3…子通道 A B B1B2B3…子通道 A 1B1C1…A 2B2C2… C C1C2C3…子通道 设设 控制器A 控制器B 控制器C … 控制器D N1N2N3…子通道 N 控制器N IE310, 8-15, [email protected] Shanghai Jiao Tong University 8.1 I/O系统(I/O通道) *通道类型之数组选择通道 (Selector Channel) 这种通道一次执行一个通道程 序,控制一台设备连续地传送 一批数据。 当一个程序执行完后,才转向 下一个程序。 选择通道 它的优点是传输速度高。 缺点是一次只能控制一台设备 进行I/O操作。 它主要用来控制高速外设。如 磁盘。 是典型的时分复用,101.7MHz 不同时间不同节目。 IE310, 8-16, [email protected] Shanghai Jiao Tong University 8.1 I/O系统(I/O通道) *通道类型之数组多路通道 (Block Multiplexor Channel) 选择通道虽有很高的传输速率,但它却每次只允许一个 设备传输数据。 数组多路通道是将数组选择通道传输速率高和字节多路 通道能使各子通道(设备)分时并行操作的优点相结合而 形成的一种新通道。 它含有多个非分配型子通道,因而这种通道既具有很高 的数据传输速率,又能获得令人满意的通道利用率。 该通道能被广泛地用于连接多台高、中速的外围设备, 其数据传送是按数组方式进行的。 每次为一个子通道连续服务的时间,介于字节多路通道 与数组选择通道之间。 IE310, 8-17, [email protected] Shanghai Jiao Tong University 8.1 I/O系统(I/O通道) *通道的瓶颈问题 价格昂贵的通道在机器中数量较少,往往成为I/O的瓶颈,限制了 整个系统的吞吐量。 IE310, 8-18, [email protected] Shanghai Jiao Tong University 8.1 I/O系统(I/O通道) *通道的瓶颈问题 往往用冗余连接解决通道的瓶颈问题。 IE310, 8-19, [email protected] Shanghai Jiao Tong University 8.2 I/O控制方式 在早期的计算机系统中,采用程序直接控制方 式(程序I/O方式)。 在系统中引入中断机制后,发展为中断驱动方 式。 随着DMA控制器的出现,又使I/O方式在传输单 位上发生了变化,即从以字节为单位的传输扩 大到以数据块为单位进行传输。 通道的引入,又使得对I/O操作的组织和数据的 传送,都能独立地进行而无须CPU的干预。 在I/O控制方式的整个发展过程中,始终贯穿着 这样一条宗旨,即尽量减少主机对I/O控制的干 预,把主机从繁杂的I/O控制事务中解脱出来, 以便更多地去完成数据处理任务。 IE310, 8-20, [email protected] Shanghai Jiao Tong University 8.2 I/O控制方式 8.2.1 程序直接控制方式(程序查询方式) 早期的计算机系统没有中断机构,只能采用程序I/O(Programmed I/O)方式, 也就是忙-等待方式,好比等待洗衣机洗衣服、电饭煲煮饭、蒸锅蒸鱼等的 完成。 当用户进程需要使用某一外设输入/输出数据时,它通过CPU向外设发出一 条I/O指令启动外设,然后在外设进行I/O数据处理的过程中,循环测试外设 直至其处理完毕;一旦处理完毕,就启动下一次的传送,直到传送结束。 在CPU输入数据时,输入设备每进行一次操作,将数据送入控制器的数据寄 存器,然后CPU将数据取走。反之,在CPU输出数据时,先将数据输出到控 制器的数据寄存器,再由输出设备将数据输出。 程序直接控制方式实现简单,无需硬件支持,但存在以下缺点: CPU与外设只能串行工作。由于CPU的处理速度远高于外设数据传送速度, CPU的绝大部分时间都处于循环测试的忙等待状态,造成对CPU的极大浪费。 在一段时间内CPU只能与一台外设交换数据,因此多台外设之间也只能串行工作。 由于程序查询方式是依靠测试设备的状态来控制数据的传送,因此无法发现和处 理设备或其它硬件产生的错误。 在该方式中,CPU之所以要不断地测试I/O设备的状态,就是因为在CPU中无 中断机构,使I/O设备无法向CPU报告它已完成了一个字符的输入/输出操作。 IE310, 8-21, [email protected] Shanghai Jiao Tong University 8.2 I/O控制方式 8.2.2 中断驱动I/O控制方式 当用户进程请求I/O时,操作系统执行设备驱动程序,CPU向相应 的设备控制器发出一条I/O命令,启动设备进行I/O。 请求I/O的进程立即返回继续执行其它任务,或者进入睡眠,CPU由操 作系统调度运行其它进程。 设备控制器按照该命令的要求去控制指定的I/O设备。 此时,CPU和I/O设备并行工作。 一旦I/O设备完成指定的任务,控制器便向CPU发送中断信号。 CPU响应中断,终止当前程序的执行,记下断点,根据从硬件装置 获得的中断向量转而执行相应的中断服务程序,处理设备I/O中需 要处理的问题(取走数据、将数据写入内存的特定单元后继续或结 束或出错等),处理完毕后再返回被中断的程序继续执行。 如果设备发来的中断请求是I/O结束,则操作系统将请求该I/O的进 程唤醒并插入就绪队列,然后才返回被中断的程序继续执行;或者 给请求I/O的进程发送异步通知信号。 相当于请小孩子出门帮忙打酱油。 IE310, 8-22, [email protected] 8.2 I/O控制方式(中断驱动I/O) Shanghai Jiao Tong University 中断驱动I/O控制方式的特点分析 在I/O设备输入/输出每个数据的过程中,由于无须CPU 干预,因而可使CPU与I/O设备并行工作。 仅当输完一个数据时,才需CPU花费极短的时间去做些 中断处理。 可见,这样可使CPU和I/O设备都处于忙碌状态,从而提 高了整个系统的资源利用率及吞吐量。 例如,从终端输入一个字符的时间约为100 ms,而将字 符送入终端缓冲区的时间小于0.1 ms。 若采用程序直接控制方式,CPU约有 99.9 ms的时间处于忙— 等待中。 采用中断控制方式后,CPU可利用这 99.9 ms的时间去做其它 事情,而仅用0.1 ms的时间来处理由控制器发来的中断请求。 IE310, 8-23, [email protected] Shanghai Jiao Tong University 8.2 I/O控制方式 几种I/O控制方式的比较 IE310, 8-24, [email protected] Shanghai Jiao Tong University 8.2 I/O控制方式 8.2.3 DMA方式 (直接存储器存取方式) 在中断驱动I/O方式下,CPU是以字节为单位进行干预的。 如果将这种方式用于块设备,显然是极其低效的。例如, 为了从磁盘读出1KB的数据块,就需要中断CPU 1K次。 DMA(Direct Memory Access)控制方式的特点是: 数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次传 送至少一个数据块。 所传送的数据是从设备直接送入内存的,或者相反,由DMA控制 器取代CPU来控制数据传送,无需经过CPU的中转。 仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整 块数据的传送是在控制器的控制下完成的。 可见,DMA方式较之中断驱动方式,又是成百倍地减少 了CPU对I/O的干预,进一步提高了CPU与I/O设备的并行 操作程度。 相当于请大孩子上超市作某次周末大采购,顺带把采购 好的物品整理归位放好。 IE310, 8-25, [email protected] 8.2 I/O控制方式(DMA方式) Shanghai Jiao Tong University DMA控制器的组成 IE310, 8-26, [email protected] 8.2 I/O控制方式(DMA方式) Shanghai Jiao Tong University *DMA制器中设置的四类寄存器 为了实现在主机与控制器之间成块数据的直接交换, 必须在DMA控制器中设置如下四类寄存器: 命令/状态寄存器CR。用于接收从CPU发来的I/O命令或有关控制信息,或设备的状态。 内存地址寄存器MAR。在输入时,它存放把数据从设备传送到内存的起始目标地址;在输出时, 它存放由内存到设备的内存源地址。 数据寄存器DR。用于暂存从设备到内存,或从内存到设备的数据。 数据计数器DC。存放本次CPU要读或写的字(节)数。 DMA方式数据传送的过程如下: ①.当外设准备好后通过外设接口向DMA发出数据传送请求。 ②.DMA接收设备发来的传送请求信号后向CPU发总线请求。 ③.CPU接收总线请求后中断当前程序,响应总线请求:将CPU的总线置高阻状态(与总线断开),并 通知DMA控制器,CPU已经让出总线。 ④.DMA接到CPU发出的总线让出信号后,将传输数据的内存单元地址发到地址总线,并通知I/O设 备的接口做好传送数据的准备。 ⑤.DMA控制内存指定地址单元与外设接口之间的数据传送。 ⑥.当一块数据传送结束时,DMA控制器立即撤消总线,将总线交由CPU控制。 DMA方式的特点: ①.数据传送的单位是数据块。CPU每响应一次总线请求,DMA控制器传送一块数据。 ②.I/O数据直接在外设与内存之间传送。 ③.仅在传送数据块的开始和结束时才需要CPU的干预,整块数据的传送是在DMA控制器的控制之下 完成的。 DMA方式也有其局限性,DMA方式对外设的管理和操作仍由CPU控制。在大、中型计算机系统中,系 统所配置的外设种类越来越多,I/O数据量也越来越大,因而对外设的管理和控制越来复杂。多 个DMA同时使用显然会引起内存地址的冲突并使得控制过程进一步复杂化。为了解决这一问题, 在大中型计算机系统中,采用了专门用于I/O操作的硬件设备——通道。 IE310, 8-27, [email protected] 8.2 I/O控制方式(DMA方式) Shanghai Jiao Tong University *DMA工作过程示意 以从磁盘读入数据为例,来说明DMA方式的工作流程。 CPU向磁盘控制器发出一条读命令,该命令被送到命令寄存器CR。 同时,还需发送本次要将数据读入的内存起始目标地址,该地址被 送入内存地址寄存器MAR中;本次要读数据的字节数则送入数据计 数器DC中;还需将磁盘中的源地址直接送DMA控制器的I/O控制逻 辑中。 然后,启动DMA控制器进行数据传送,而CPU转而处理其它任务。 当DMA控制器已从磁盘读入一个字节的数据并送入数据寄存器DR 之后,就挪用一个存储器周期,将该字节传送到MAR所指示的内存 单元中。 接着便对MAR内容加1,将DC内容减1,若减1后DC内容不为0,表 示传送未完,便继续传送下一个字节;否则,由DMA控制器发出中 断请求。 IE310, 8-28, [email protected] 8.2 I/O控制方式(DMA方式) Shanghai Jiao Tong University *DMA工作过程示意(续) IE310, 8-29, [email protected] Shanghai Jiao Tong University 8.2 I/O控制方式 8.2.4 I/O通道控制方式 I/O通道控制方式的引入 虽然DMA方式比起中断方式来,已经显著地减少了CPU的干预,即已 由以字节为单位的干预减少到以数据块为单位的干预,但CPU 每发 出一条I/O指令,也只能去读(写)一个连续的数据块。如果需要读写 多个数据块,则须由CPU发出多条I/O指令及进行多次中断处理才能 完成。 I/O通道方式是DMA方式的发展,它可进一步减少CPU的干预,即把 对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读 (或写)及有关的控制和管理为单位的干预。 同时,又可实现CPU、通道和I/O设备三者的并行操作,从而更有效 地提高整个系统的资源用率。 例如,当CPU要完成一组相关的读(或写)操作及有关控制时,只需向 I/O通道发送一条I/O指令,以给出其所要执行的通道程序的首址和 要访问的I/O设备,通道接到该指令后,通过执行通道程序便可完成 CPU指定的I/O任务。 相当于请大孩子负责新房子装修的全面采购。 IE310, 8-30, [email protected] Shanghai Jiao Tong University 8.2 I/O控制方式(I/O通道控制方式) I/O通道的工作方式: I/O通道是一个独立于CPU的专门实现I/O控制的处理 机,它控制设备与内存直接进行数据交换。 通道控制与DMA控制方式有其类似之处,也是一种以内 存为中心的实现设备与内存直接数据交换的控制方式。 它们的不同之处在于: 在DMA方式中,数据的传送方向、存放数据的内存地址以及数 据块的长度都由CPU控制; 而在通道方式中,这些事情全都不用CPU操心,全部由通道管 理,因为通道具有自己专门的通道指令,用于与连接到总线上 的I/O控制器通信。 每个通道可以通过多个I/O控制器控制多个设备与内存 进行数据交换。 IE310, 8-31, [email protected] Shanghai Jiao Tong University 8.2 I/O控制方式(I/O通道控制方式) *I/O通道的工作过程: ①.当进程请求设备I/O时,CPU发出启动指令,指明要进 行的I/O操作、使用设备的设备号以及对应的通道。 ②.通道接收到CPU发来的启动指令后,将存放在内存的 通道处理程序取出,并执行通道程序。 ③.执行一条通道指令,设置对应设备控制器中的控制/ 状态寄存器。 ④.设备根据通道指令的要求,将数据送到内存指定区域 (或从内存指定区域取出)。如果本指令不是通道处理程序 的最后一条指令,则取下一条通道指令,并转③继续执 行,否则转⑤执行。 ⑤.通道处理程序结束执行,通道向CPU发中断请求。 ⑥.CPU响应中断对通道进行善后处理,然后返回被中断 进程继续执行。 IE310, 8-32, [email protected] Shanghai Jiao Tong University 8.2 I/O控制方式(I/O通道控制方式) *通道程序 通道通过执行通道程序,并与设备控制器共同实现对I/O 设备的控制。 通道程序是由一系列通道指令(或称为通道命令)所构成。 通道指令与一般的机器指令不同,其每条指令都包含下 列信息: 操作码。规定指令需要执行的操作,如读、写、控制等。 内存地址。指出数据送入内存或从内存取出的首地址。 计数。 指出本条指令所要读写数据的字节数。 通道程序结束位P。P=1表示通道程序结束,本指令是通道程序 的最后一条指令。 记录结束标志R。R=0表示本通道指令与下一条指令所处理的数 据是同属于一个记录;否则表示这是当前所处理记录的最后一 条指令。 IE310, 8-33, [email protected] 8.2 I/O控制方式(I/O通道控制方式) Shanghai Jiao Tong University *简单通道程序示例 将内存中不同地址的数据,写成多个记录。 操作 P R 计数 内存地址 WRITE 0 0 80 813 WRITE 0 0 140 1034 WRITE 0 1 60 5830 WRITE 0 1 300 2000 WRITE 0 0 250 1850 WRITE 1 1 250 720 IE310, 8-34, [email protected] Shanghai Jiao Tong University 8.3 缓冲技术 8.3.1 引入缓冲的原因 缓和CPU与I/O设备间速度不匹配的矛盾。事实 上,凡在数据到达速率与离去速率不同的地方, 都可设置缓冲区,以缓和它们之间速率不匹配的 矛盾。 协调逻辑记录大小与物理记录大小不一致的问题, 即设备间不同环节上不同大小数据块的转换与传 输问题。 减少对CPU的中断频率,放宽对CPU中断响应时 间的限制。 提高CPU和I/O设备之间的并行性。 例子:零花钱/备用金/年度利润上缴/零售店/ 打印缓冲/Modem通信缓冲/码头/机场/车站等。 IE310, 8-35, [email protected] Shanghai Jiao Tong University 8.3 缓冲技术 8.3.2 缓冲区的具体形式 缓冲区可以有两种形式: 采用专用硬件缓冲区,例如外设I/O控制器中 的数据寄存器,称为硬件缓冲,通常容量较 小,一般为若干KB; 另一种是在内存中开辟出n个单元的区域专用 缓冲区,以便存放输入输出的数据,又称软 件缓冲。 缓冲管理的主要职责是组织好这些缓冲区, 并提供获得和释放缓冲区的手段。 IE310, 8-36, [email protected] Shanghai Jiao Tong University 8.3 缓冲技术 8.3.3 常用的缓冲技术 单缓冲(Single Buffer) 最简单的一种缓冲形式。当进程发出一个I/O请求时, 操作系统为之分配一个缓冲区。 对于输入:设备先将数据送入缓冲区,OS再将数据传 给进程。 假定从磁盘把一块数据输入到缓冲区的时间为T,操作系统将 该缓冲区中的数据传送到进程的用户区的时间为M,而CPU对 着一块数据的后继处理时间为C。 由于T和C可并行进行,当T>C时,系统对每一块数据的处理 时间为M+T;反之则为C+T。 从而可以把系统对每一块数据的处理时间表示为Max(C,T)+M。 对于输出:进程先将数据传入缓冲区,OS再将数据送 出到设备。 IE310, 8-37, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 单缓冲(Single Buffer)之工作示意图 IE310, 8-38, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 单缓冲(Single Buffer)之字符设备的输入输出 输入 在字符设备输入时,缓冲区用于暂存用户输入的一 行数据。 在输入期间,用户进程被挂起以等待数据输入完毕。 输出 在输出时,用户进程将一行数据输入到缓冲区后, 继续进行处理。 当用户进程已有第二行数据输出时,如果第一行数 据尚未被提取完毕,则此时用户进程应阻塞。 IE310, 8-39, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 双缓冲(Double Buffer) 为了加快输入输出速度,引入双缓冲技术。 原理: 设置两个缓冲区buf1和buf2。 读入数据时,首先输入设备向buf1填入数据,然后 进程从buf1提取数据。 在进程从buf1提取数据的同时,输入设备向buf2中 填数据。 当buf1取空时,进程又从buf2中提取数据。 与此同时输入设备又向buf1填数。 如此交替使用两个缓冲区,使CPU和设备的并行操 作的程度进一步提高。 IE310, 8-40, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 双缓冲(Double Buffer)之工作示意图 IE310, 8-41, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 双机通信时缓冲区的设置 A机 B机 A机 B机 接收 缓冲区 发送 缓冲区 缓冲区 缓冲区 (a) 单缓冲 接收 缓冲区 发送 缓冲区 (b) 双缓冲 IE310, 8-42, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 循环缓冲(环形缓冲)之组成 多个缓冲区 在循环缓冲中包括多个缓冲区,其每个缓冲区的大 小相同。 作为输入的多缓冲区可分为二种类型: 可用于装输入数据的空缓冲区I; 已装满数据的缓冲区G。 多个指针 作为输入的缓冲区可设置二个指针: 用于指示计算进程下一个可用缓冲区G的指针Nextg; 用于指示输入进程下次可用的空缓冲区I的指针Nexti。 IE310, 8-43, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 循环缓冲(环形缓冲)之组成示意 IE310, 8-44, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 循环缓冲(环形缓冲)之使用 Nexti指向可接收数据的空闲缓冲区的首址,Nextg指针 指向装好数据且未取走的缓冲区首址。 系统初启时,指针被初始化为Nexti和Nextg与首指针 START相等,即START=Nexti=Nextg。 对于输入信息而言,从设备接收信息时,信息输入到 Nexti指向的缓冲区,当一个缓冲区装满(变为G)后, Nexti指针指向下一个空闲缓冲区。 当从缓冲区中提取信息时,提取由Nextg指向的缓冲区 中的信息,提取完毕(变为I),将Nextg指针指向下一个 (可能装满了信息(G)的)缓冲区。 IE310, 8-45, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 循环缓冲(环形缓冲)之进程同步 随着输入进程和计算进程对循环缓冲的使用,指针Nexti和Nextg将 不断地沿着顺时针方向移动,这样就可能出现下述两种情况: Nexti指针追赶上Nextg指针。 这意味着输入进程输入数据的速度大于计算进程处理数据的速度,已 把全部可用的空缓冲区装满,再无空缓冲区可用。 此时,输入进程应阻塞,直到计算进程把某个缓冲区G中的数据提取 掉,使之成为空缓冲区I,并唤醒输入进程。 这种情况被称为系统受计算限制。 Nextg指针追赶上Nexti指针。 这意味着输入进程输入数据的速度低于计算进程处理数据的速度,使 全部装有输入数据的缓冲区G都被抽空,再无装有数据的缓冲区G供计 算进程提取数据。 此时,计算进程只能阻塞,直到输入进程又装满某个缓冲区,使之成 为满缓冲区G,并唤醒计算进程。 这种情况被称为系统受I/O限制。 IE310, 8-46, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 缓冲池(Buffer Pool)之引入 循环(环形)缓冲一般用于特定的进程,属于专用缓冲。 当系统较大时,将会有许多这样的循环缓冲,这要消耗 大量的内存空间,利用率也不高。 为了提高缓冲区的利用率,目前广泛流行公用缓冲池, 在池中设置了多个可供若干个进程共享的缓冲区。 缓冲池由内存中一组大小相等的缓冲区组成,池中各缓 冲区的大小与用于I/O的设备的基本信息单位相似。 缓冲池属于系统资源,由系统进行管理。 缓冲池中各缓冲区可用于输出信息,也可用于输入信息, 并可根据需要组成各种缓冲区队列。 IE310, 8-47, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 缓冲池之组成 对于既可用于输入又可用于输出的公用缓冲池,其中至 少应含有以下两种类型的缓冲区: ① 空(闲)缓冲区; ② 装满(输入/输出)数据的缓冲区; 为了管理上的方便,可将相同类型的缓冲区链成一个队 列,于是可形成以下两类队列: 空缓冲队列emq-由空缓冲区链成的队列。 数据队列dataq-由装满(输入/输出)数据的缓冲区链 成的队列;可以是几个,可为各进程各设备分配不同 的数据队列。 IE310, 8-48, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 缓冲池之GetBuf过程和PutBuf过程 缓冲池中的队列是临界资源,多个进程在访问一个队列时,即应互 斥,又需同步。为此: 为每一个队列设置一个互斥信号量MS(QueueID)以使各进程互斥地访问缓冲 池队列; 为每一个队列设置一个资源信号量RS(QueueID)以同步各进程对缓冲池队列 数据缓冲区的访问。 即可实现互斥又可保证同步的GetBuf和PutBuf过程为: GetBuf(QueueID)过程: Wait(RS(QueueID)); Wait(MS(QueueID)); item=TakeBuf(QueueID); Signal(MS(QueueID)); PutBuf(QueueID,item)过程: Wait(MS(QueueID)); AddBuf(QueueID,item); Signal(MS(QueueID)); Signal(RS(QueueID)); return item; IE310, 8-49, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 缓冲池之缓冲区工作方式 IE310, 8-50, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 缓冲池之缓冲区工作方式示例 收容输入 输入进程(或驱动) 在输入进程(或驱动)需要输入数据时,调用GetBuf(emq)过程,从空 缓冲队列emq的队首摘下一个空缓冲区,作为收容输入工作缓冲区 item。 然后,把数据输入item中。 最后,调用PutBuf(item,hin)过程,将该缓冲区挂在收容输入队列hin 上。 输入进程(或驱动)需要做一些驱动处理加工工作,比如格式转换、 内容过滤、报文拼接等,这样,就需要将收容输入队列hin作为其输 入,将提取输入队列sin作为其输出。 提取输入 当用户进程需要输入数据时,调用GetBuf(sin)过程,从提取输入队 列sin的队首取得一个缓冲区,作为提取输入工作缓冲区item。 用户进程从item中提取数据。 用户进程在提取完该数据后,调用PutBuf(emq,item)过程,将该缓冲 区挂在空缓冲队列emq的末尾。 IE310, 8-51, [email protected] 8.3 缓冲技术(常用的缓冲技术) Shanghai Jiao Tong University 缓冲池之缓冲区工作方式示例(续) 收容输出 输出进程(或驱动) 在用户进程需要输出时,调用GetBuf(emq)过程,从空缓冲队列emq 的队首取得一个空缓冲区,作为收容输出工作缓冲区item。 然后,把数据填入item中。 最后,调用PutBuf(hout,item)过程,将该缓冲区挂在收容输出队列 hout上。 输出进程(或驱动)需要做一些驱动处理加工工作,比如格式转换、 内容过滤、报文拼接等,这样,就需要将收容输出队列hout作为其 输入,将提取输出队列sout作为其输出。 提取输出 由输出进程(或驱动)调用GetBuf(sout)过程,从提取输出队列sout的 队首取得一个装满输出数据的缓冲区,作为提取输出工作缓冲区 item。 输出进程(或驱动)从item中提取数据。 输出进程(或驱动)随后调用PutBuf(emq,item)过程,将该缓冲区挂在 空缓冲队列emq的末尾。 IE310, 8-52, [email protected] Shanghai Jiao Tong University 8.4 设备的分配 在多进程环境下,系统中的设备供所有进程共 享。 进程对设备的使用必须由操作系统统一分配。 每当进程向系统提出I/O请求时,只要是可能和 安全的,设备分配程序便按照一定的策略,把 设备分配给请求用户(进程)。 在有的系统中,为了确保在CPU和设备之间能进 行通信,还应分配相应的控制器和通道。 为了实现设备分配,必须在系统中设置相应的 数据结构。 IE310, 8-53, [email protected] Shanghai Jiao Tong University 8.4 设备的分配 8.4.1 设备分配中的数据结构 在进行设备的分配时,通常都需要借助于一些 表格的帮助。 在表格中记录了相应设备或控制器的状态即对 设备或控制器进行控制所需的信息。 在进行设备分配时所需的数据结构一般有: 设备控制表DCT 控制器控制表COCT 通道控制表CHCT 系统设备表SDT IE310, 8-54, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(设备分配中的数据结构) *8.4.1 设备分配中的数据结构 设备控制表DCT 设 备 控 制 表 集 合 用于记录已经连接到系统中的所有物理设备的情况 每个物理设备在表中使用一个表项 DCT 1 设备类型 type 设备标识符: deviceid 设备状态:等待/不等待 DCT 2 忙/闲 指向控制器表的指针 重复执行次数或时间 DCT n 设备队列的队首指针 IE310, 8-55, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(设备分配中的数据结构) *控制器控制表、通道控制表和系统设备表 IE310, 8-56, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(设备分配中的数据结构) *设备分配 中的数据结构之相互关系示意 IE310, 8-57, [email protected] Shanghai Jiao Tong University 8.4 设备的分配 8.4.2 设备分配的原则与策略 设备分配原则 设备分配的原则是根据设备类型、用户要求和系 统配置情况决定的。 设备分配的总原则是高效、安全与设备独立性。 高效是指要使设备得到充分利用,尽可能的让设备 忙。 安全则是要避免由于不合理的分配造成进程死锁。 设备独立性的思想是把用户程序和具体物理设备隔 离开来,即用户程序指定的是逻辑设备,而分配程 序需要将逻辑设备转换成物理设备之后才能进行分 配。 IE310, 8-58, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(设备分配的原则与策略) 设备分配方式 设备分配方式可分为两种:静态分配和动态分配。 静态分配方式 是在用户作业/进程开始执行之前,由系统一次性分配该作业/进程所要求的全 部设备。 一旦分配之后,这些设备、控制器和通道就一直被该作业/进程所占用,直到 该作业/进程结束退出。 静态分配方式由于运行期间不会有新的设备请求发出,破坏了“请求和保持” 条件,因此也就不会出现死锁。 设备的利用率太低。 动态分配方式 在系统运行过程中根据进程的需要进行分配。 当进程需要某设备时,通过系统调用命令向系统提出设备请求,由系统按照事 先给定的策略分配所需设备、控制器和通道。 进程一旦使用完毕,便立即将设备释放。 设备的利用率相对较高。 但是,如果分配算法使用不当,则有可能造成进程死锁。 因此,在动态分配中,还要增加对每一次设备分配的安全性检查,比如使用安 全性算法计算之后,判断安全才进行分配。 IE310, 8-59, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(设备分配的原则与策略) 按设备的固有属性确定分配策略 独占设备的独享分配。 共享设备的共享分配。 虚拟设备的虚拟分配。 IE310, 8-60, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(设备分配的原则与策略) 按设备的固有属性确定分配策略 之独占设备的独享分配 一次只能由一个进程独占使用的设备称为独占设备。 针对独占设备,系统一般采用独享分配的策略,也就是 静态分配方式。 即将一个设备分配给某进程后,便由该进程独占,直至 该进程完成或释放该设备,然后,系统才能再将该设备 分配给其他进程使用。 独享分配是在作业调度级实施的,作业完成后予以回收, 因此独享分配虽然不会导致死锁但效率极低。 常见的独享设备有调制解调器、打印机、光电输入机等。 IE310, 8-61, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(设备分配的原则与策略) 按设备的固有属性确定分配策略 之共享设备的共享分配 对于共享设备,可同时分配给多个进程使用。 如磁盘、磁鼓等设备,可由多个进程同时进行访问。 共享分配是采用动态分配的方式在进程级实施的分配, 它允许多个进程并发使用共享设备。 设备的共享有两层含义: 一是指对设备介质的共享,如磁盘上的存储空间。 二是指对磁盘等驱动器的共享,多个用户访问这些设备上的信 息是通过驱动器来实现的。 对共享设备的分配一般采用动态分配这一方式。 由于共享分配是在进程运行中实施的分配,设备使用结 束后立即释放,必等待进程结束,因而共享分配具有 很高的效率。 须注意对多个访问请求进行合理的调度。 IE310, 8-62, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(设备分配的原则与策略) 按设备的固有属性确定分配策略 之虚拟设备的虚拟分配 对设备采用动态分配比静态分配具有更高的设备利用率。 为了能够动态分配独占设备又不至于死锁,操作系统对 独占设备进行改造,在共享设备上虚拟独占设备。这种 共享设备上虚拟的独占设备称为虚拟设备。对于一台物 理设备,由于虚拟技术的采用,往往变成多台逻辑上的 虚拟设备。 对虚拟设备实施的动态分配称为虚拟分配,也就是给需 要使用该物理设备的进程分配一个虚拟设备。 SPOOLing(Simultaneous Peripheral Operation On-Line) 技术就是将一台独占设备改造为共享设备的一种行之有 效的技术。 IE310, 8-63, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(设备分配的原则与策略) 设备分配算法 对于设备分配的算法,与进程调度的算法有些相似之处, 但相对简单,通常只采用以下两种分配算法: 先来先服务:当有多个进程对同一设备提出I/O请求时, 该算法根据诸进程对某设备提出请求的先后次序,将这 些进程排成一个设备请求队列,设备分配程序总是把设 备首先分配给队首进程。 高优先级优先:在进程调度中的这种策略,是优先级高 的进程优先获得处理机。如果对这种高优先级进程所提 出的I/O请求也赋予高优先级,显然有助于这种进程尽 快完成。在利用该算法形成设备队列时,将优先级高的 进程排在设备队列前面;而对于优先级相同的I/O请求, 则按先来先服务原则排队。在设备空闲时,系统总是将 它分配给队首具有最高优先级的进程。 IE310, 8-64, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(设备分配的原则与策略) 设备分配中的安全性 静态分配:不会出现死锁 动态分配: 单请求方式:不会出现死锁。 多请求方式:可能会出现死锁 IE310, 8-65, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(设备分配的原则与策略) 设备分配中的安全性 动态分配: 单请求方式:不会出现死锁。 在进程运行时不保持任何分配得到的设备。 每当分配得到设备并发出I/O请求后,进程便进入阻塞状 态,直至其I/O操作完成时才被唤醒。 也即,一旦进程已经获得某种设备后便阻塞,使该进程不 可能再请求其它任何资源,而在它运行时又不保持任何资 源。 破坏了死锁的“请求和保持”条件,但这样的进程进展缓 慢,因为CPU与I/O设备是串行工作的。 IE310, 8-66, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(设备分配的原则与策略) 设备分配中的安全性 动态分配: 多请求方式:可能会出现死锁 进程在发出I/O请求后仍继续运行,在占用着该已分配得 到设备的同时,有可能发出其它设备分配请求。 仅当进程所请求的设备已被另外进程占用时,请求进程才 进入阻塞状态。 优点是一个进程可同时操作多个设备,使进程推进迅速。 缺点是分配可能不安全,可能造成死锁。 IE310, 8-67, [email protected] Shanghai Jiao Tong University 8.4 设备的分配 8.4.3 设备独立性 设备独立性(Device Independence)的概念 设备独立性,也称为设备无关性。 其基本含义是:应用程序独立于具体使用的物理设备, 用户在程序中所使用的设备与实际使用的设备无关。 为了实现设备独立性而引入了逻辑设备和物理设备这两 个概念。 操作系统往往为同类设备设置一个逻辑名,供用户使用。 在应用程序中,使用逻辑设备名称来请求使用某类设备; 而系统在实际执行时,还必须使用物理设备名称。 因此,系统须具有将逻辑设备名称转换为某物理设备名 称的功能,这非常类似于存储器管理中所介绍的逻辑地 址和物理地址的概念。 IE310, 8-68, [email protected] 8.4 设备的分配(设备独立性) Shanghai Jiao Tong University 引入设备独立性的好处 在实现了设备独立性的功能后,可带来以 下几方面的好处: 方便用户编程 便于程序的移植 易于实现I/O的重定向 提高系统与资源的效率 适应多进程多用户需要 IE310, 8-69, [email protected] Shanghai Jiao Tong University 8.4 设备的分配 *8.4.4 独占设备的分配流程 (1) 分配设备 根据进程指定的逻辑设备名转换得到对应的物理设备名。 根据物理设备名查找系统设备表SDT,从中找到该设备 的DCT。 判断DCT中的状态信息Busy。 若忙,便将该请求I/O的进程的PCB放入该设备的等待队 列。否则,由系统计算本次设备分配的安全性。 如果分配不会引起死锁,便将该设备分配给请求进程; 否则,仍将其PCB放入该设备的等待队列。 IE310, 8-70, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(独占设备的分配流程) *(2) 分配控制器 当系统把该设备分配给提出I/O请求的进 程后,从设备控制表DCT可以找到与此设 备连接的控制器的控制表COCT。 通过检查该控制器控制表的状态信息可知 该控制器是否忙碌。 若忙,便将该请求I/O的进程的PCB放入该 控制器的等待队列。否则,将控制器分配 给该进程。 IE310, 8-71, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(独占设备的分配流程) *(3) 分配通道 通过控制器控制表COCT,可以找到与此控制器 连接的通道的控制表CHCT 。 通过检查该通道控制表的状态信息可知该通道 是否忙碌。 若忙,便将该请求I/O的进程的PCB放入该通道 的等待队列。否则,将通道分配给该进程。 一旦设备、控制器和通道都分配成功,便可启 动I/O设备进行数据传送。 IE310, 8-72, [email protected] Shanghai Jiao Tong University 8.4 设备的分配(独占设备的分配流程) *分配流程示意 IE310, 8-73, [email protected] Shanghai Jiao Tong University 8.4 设备的分配 8.4.5 Spooling技术 虚拟性是操作系统的重要特征之一。 通过多道程序/多进程技术,可以将一台 物理CPU虚拟成多个逻辑CPU,从而允许 多个用户可以共享一台主机。 通过Spooling技术,则可以将一台物理 I/O设备虚拟成多台逻辑I/O设备,同样允 许多个用户/进程共享一台物理I/O设备。 IE310, 8-74, [email protected] 8.4 设备的分配(Spooling技术) Shanghai Jiao Tong University 什么是Spooling技术 为了缓和CPU的高速性与I/O设备低速性间的矛盾而引入了脱机 输入、脱机输出技术。 脱机输入输出技术是利用专门的外围控制机,将低速I/O设备上 的数据传送到高速磁盘上,或者相反。 事实上,当系统中引入了多道程序技术后,完全可以利用其中 的一道程序,来模拟脱机输入时的外围控制机的功能,把低速 I/O设备上的数据(预输入)传送到高速磁盘上;再用另一道程序 来模拟脱机输出时的外围控制机的功能,把数据从磁盘(缓输出) 传送到低速输出设备上。 这样,便可在主机的直接控制下,让某一道程序专门去处理低 速外设的I/O,从而实现脱机输入、输出功能。 此时的外围操作与CPU对数据的处理同时进行。 这种在联机的情况下实现的同时外围操作称为 SPOOLing(Simultaneaus Periphernal Operating On-Line),或称 为假脱机操作。 IE310, 8-75, [email protected] 8.4 设备的分配(Spooling技术) Shanghai Jiao Tong University Spooling系统的组成 SPOOLing技术是对脱机输入、输出系统的模拟。 SPOOLing系统必须建立在具有多道程序功能的操作系 统上。 SPOOLing系统需要有高速随机外存的支持,这通常是 高速硬盘。 在此基础上, SPOOLing系统主要有以下三部分组成: 输入井和输出井。 输入缓冲区和输出缓冲区。 输入进程SPi和输出进程SPo。 IE310, 8-76, [email protected] 8.4 设备的分配(Spooling技术) Shanghai Jiao Tong University Spooling系统的组成(续) 在此基础上, SPOOLing系统主要有以下三部分组成: 输入井和输出井。这是在磁盘上开辟的两个大存储空间。 输入缓冲区和输出缓冲区。这是在内存中开辟的两个缓冲区。 输入井是模拟脱机输入时的磁盘设备,用于暂存I/O设备输入的数据; 输出井是模拟脱机输出时的磁盘,用于暂存用户程序的输出数据。 输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。 输出缓冲区用于暂存从输出井送出的数据,以后再传送给输出设备。 输入进程SPi和输出进程SPo。这两个进程用于模拟脱机I/O时的外围 控制机的。 进程SPi模拟脱机输入时的外围控制机,将用户要求的数据从输入机通 过输入缓冲区再(预输入)送到输入井,当CPU需要数据时,直接从输入 井读入内存; 用户把要求输出的数据先从内存送到输出井,进程SPo模拟脱机输出时 的外围控制机,待输出设备空闲时,再将输出井中的数据经过输出缓冲 区(缓输出)送到输出设备上。 IE310, 8-77, [email protected] 8.4 设备的分配(Spooling技术) Shanghai Jiao Tong University Spooling系统的组成(续)示意 输入进程SPi 输入设备 输入缓冲区Bi 输入井 输出设备 输出缓冲区Bo 输出井 输出进程SPo IE310, 8-78, [email protected] 8.4 设备的分配(Spooling技术) Shanghai Jiao Tong University 共享打印机 共享打印机技术已被广泛地用于多用户系统和局域网络中。 当用户进程请求打印输出时,SPOOLing系统总是同意为它打印输 出,但并不真正立即把打印机分配给该用户进程,而只为它做两 件事: 由输出进程在输出井中为之申请一个空闲磁盘块区,并将要打印的 数据送入其中; 输出进程再为用户进程申请一张空白的用户请求打印表,并将用户 的打印要求填入其中,再将该表挂到请求打印队列上。 如果打印机空闲,输出进程将从请求打印队列的队首取出一张请 求打印表,根据表中的要求将要打印的数据,从输出井传送到输 出缓冲区,再传送给打印机进行打印。 打印完后,输出进程再查看请求打印队列中是否还有等待打印的 请求表。若后,又取出队列中的第一张表,并根据其中的要求进 行打印,如此下去,直至请求打印队列为空,输出进程才将自己 阻塞起来。 仅当下次再有打印请求时,输出进程才被唤醒。 IE310, 8-79, [email protected] 8.4 设备的分配(Spooling技术) Shanghai Jiao Tong University Spooling系统的特点 提高了I/O的速度。这里,对数据所进行的I/O操作,已从对低速 I/O设备进行的I/O操作,演变为对输入井或输出井中数据的存取, 如同脱机输入输出一样,提高了I/O速度,缓和了CPU与低速I/O 设备之间速度不匹配的矛盾。 提高了设备利用率和系统的吞吐能力。由于独占设备不再采用独 占分配分式,使得一台物理设备可以虚拟为多个虚拟设备分配给 多个进程,从而使物理设备得到充分的利用,提高了系统的吞吐 能力。 提高了进程的发度和执行效率。虚拟设备实现了对独占设备的 改造,而虚拟分配使进程对独占设备的使用与物理设备分离,使 进程与I/O设备之间的同步I/O方式转变为异步I/O方式,提高了进 程的并发度和执行效率。 IE310, 8-80, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动 8.5.1 I/O软件的层次 用户级软件 设备无关软件 设备驱动程序 中断处理程序 IE310, 8-81, [email protected] 8.5 设备的驱动(I/O软件的层次) Shanghai Jiao Tong University 用户级软件 用户级I/O软件是指运行在用户层的I/O库 函数或代码。 例如,在C语言中,标准I/O函数库包含相 当多的涉及I/O的库函数:如printf()、 fwrite(buffer, size, count, fp)等; 还有其它高级语言中的输入输出函数等。 它们都作为用户程序的一部分运行。 IE310, 8-82, [email protected] 8.5 设备的驱动(I/O软件的层次) Shanghai Jiao Tong University 设备无关软件 设备无关软件是指独立于每个设备之外的公共 I/O软件,它包括为了访问设备驱动而调用的 I/O系统调用(如open、close、read、write等)。 设备无关软件的功能如下: 提供与设备驱动程序的统一接口。 设备命名和设备保护。 提供独立于设备的块大小 。 缓冲区管理和块设备的存储分配。 独占性外围设备的分配和释放。 设备错误报告。 IE310, 8-83, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动 8.5.2 设备驱动程序的功能与特点 设备驱动程序的功能 其控制对象是与设备连接的控制器。 控制器中有数据缓冲寄存器、控制寄存器和状态寄存器。 数据缓冲寄存器主要用于存放需要传输的数据; 状态寄存器主要用于设备状态如就绪、忙、操作出错等不同状态的编 程; 控制寄存器用于控制设备的各种操作、设备的I/O地址等。 接收上层软件发来的抽象要求(如read等),再把它转换成具体要求, 例如,将磁盘块号转换为磁盘的柱面号、磁道号和扇区号。 检查用户I/O请求的合法性,了解I/O设备的状态,传递有关参数, 设置设备的工作方式。 对于设置有通道的计算机系统,驱动程序还应能够根据用户的I/O 请求,自动地构成通道程序。 发出I/O命令,启动分配到的I/O设备,完成指定的I/O操作。 为及时响应由控制器或通道发来的中断请求,设置相应的中断处理 程序;应中断处理程序的要求,作有关后续处理。 IE310, 8-84, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(设备驱动程序的功能与特点) * 实现方式 不同的操作系统对于上述功能的实现有不同的方式,一 般分为: 第一种方式是操作系统将I/O管理模块分为两个部分: 面向用户进程的I/O进程和面向设备的I/O处理进程。 使用统一的用户接口来解释用户的系统调用请求,然后将I/O请求 转换为I/O进程能够识别的形式。 由I/O进程实现设备分配,构造I/O请求块,并将I/O请求块插入设 备请求队列等准备工作。 然后唤醒I/O处理进程来启动设备以及响应设备在完成当前块后的 中断请求,直到I/O完毕。 当I/O完毕时,由该I/O处理进程负责唤醒因请求I/O而睡眠的进程。 第二种方式如Unix和Linux采用的方式 将设备当做文件一样看待,使用文件系统的系统调用命令进行设备 的读写操作,由文件系统进行统一管理。 设备作为特殊文件有其自己的数据结构——i节点,根据设备文件名 可以找到设备文件的i节点。 再由i节点找到设备的有关信息,其中包括设备驱动程序。 IE310, 8-85, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(设备驱动程序的功能与特点) * 设备处理方式 根据在设备处理时是否设置进程,以及设置什 么样的进程而把设备处理方式分成以下三类: 为每一类设备设置一个进程,专门用于执行这类设备 的I/O操作。比如,为所有的交互式终端设置一个交 互式终端进程;又如,为同一类型的打印机设置一个 打印进程。 在整个系统中设置一个I/O进程,专门用于执行系统 中所有各类设备的I/O操作。也可以设置一个输入进 程和一个输出进程,分别处理系统中所有各类设备的 输入或输出操作。 不设置专门的设备处理进程,而只为各类设备设置相 应的设备处理程序(模块),供用户进程或系统进程调 用。 IE310, 8-86, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(设备驱动程序的功能与特点) 设备驱动程序的特点 设备驱动程序属于低级的系统例程,它与一般的应用程 序及系统程序之间,有下述明显差异: 驱动程序主要是指在请求I/O的进程与设备控制器之间的一个通 信和转换程序。它将进程的I/O请求经过转换后,传送给控制器; 又把控制器中所记录的设备状态和I/O操作完成情况及时地反映 给请求I/O的进程。 驱动程序与设备控制器和I/O设备的硬件特性紧密相关,因而对 不同类型的设备应配置不同的驱动程序。例如,可以为相同的 多个终端设置一个终端驱动程序,但有时即使是同一类型的设 备,由于其生产厂家不同,它们也可能并不完全兼容,此时也 需为它们配置不同的驱动程序。 驱动程序与I/O设备所采用的I/O控制方式紧密相关。常用的I/O 控制方式是中断驱动和DMA方式。 由于驱动程序与硬件紧密相关,因而其中的一部分很可能用汇 编语言编写。 IE310, 8-87, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动 8.5.3 设备驱动程序的处理过程 不同类型的设备应有不同的设备驱动程序,但 它们大体上都可以分成两部分,其中,除了要 有能够驱动I/O设备工作的驱动程序外,还需要 有设备中断程序,以处理I/O完成后的工作。 设备驱动程序的主要任务是启动指定设备。 但在启动之前,还必须完成必要的准备工作, 如检测设备状态是否为”忙”等。 在完成所有的准备工作后,才最后向设备控制 器发送启动命令。 设备驱动程序的处理过程如后所述。 IE310, 8-88, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(设备驱动程序的处理过程) 设备驱动程序的处理过程 将抽象要求转换为具体要求。 检查I/O请求的合法性。 读出和检查设备的状态。 传送必要的参数。 工作方式的设置。 启动I/O设备。 IE310, 8-89, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(设备驱动程序的处理过程) 设备驱动程序的处理过程(续) 将抽象要求转换为具体要求 通常在设备控制器中都含有若干个寄存器,分别用于 暂存命令、数据和参数等。 由于用户及上层软件对设备控制器的具体情况毫无了 解,因而只能向它发送抽象的要求(命令)。 设备驱动程序需要将这些抽象要求转换为具体要求。 例如,将抽象要求中的逻辑块号转换为磁盘的柱面号、 磁道号和扇区号。 这一转换工作只能由驱动程序来完成,因为在操作系 统中只有驱动程序才同时了解抽象要求和设备控制器 中的寄存器情况;也只有它才知道命令、数据和参数 应分别送往哪个寄存器。 IE310, 8-90, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(设备驱动程序的处理过程) 设备驱动程序的处理过程(续) 检查I/O请求的合法性 对于任何的设备,都是只能完成一组特定的 功能,若该设备不支持这次的I/O请求,则认 为这次I/O请求非法。 例如,用户试图请求从打印机输入数据,显 然系统应予以拒绝。 此外,还有些设备如磁盘和终端,它们虽然 都是既可读、又可写的,但若在打开这些设 备时规定的是只读,则用户的写请求应该被 拒绝。 IE310, 8-91, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(设备驱动程序的处理过程) 设备驱动程序的处理过程(续) 读出和检查设备的状态 在启动某个设备进行I/O操作时,其前提条件 应是该设备正处于空闲状态。 因此在启动设备之前,要从设备控制器的状 态寄存器中,读出设备的状态。 例如,为了向某设备写入数据,此前应先检 查该设备是否处于接收就绪状态,仅当它处 于接收就绪状态时,才能启动其设备控制器, 否则只能等待。 IE310, 8-92, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(设备驱动程序的处理过程) 设备驱动程序的处理过程(续) 传送必要的参数 对于许多设备,特别是块设备,除必须向其 控制器发出启动命令外,还需传送必要的参 数。 例如,在启动磁盘进行读/写之前,应先将本 次要传送的字节数和数据应到达的主存始址, 送入控制器的相应寄存器中。 IE310, 8-93, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(设备驱动程序的处理过程) 设备驱动程序的处理过程(续) 工作方式的设置 有些设备可具有多种工作方式,典型情 况是利用RS-232接口进行异步通信。 在启动该接口前,应先按通信规程设定 下述参数:波特率、奇偶校验方式、停 止位数目及数据字符位数等。 IE310, 8-94, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(设备驱动程序的处理过程) 设备驱动程序的处理过程(续) 启动I/O设备 在完成前述各项准备工作之后,驱动程序才可以向控制器中的 命令寄存器传送相应的控制命令。 此后,驱动程序还须检查启动是否成功。 对于字符设备,若发出的是写命令,驱动程序将把一个数据传 送给控制器;若发出的是读命令,则驱动程序等待接收数据, 并通过从控制器中的状态寄存器读入状态字的方式,来确定数 据是否到达。 驱动程序发出I/O命令后,基本的I/O操作是在设备控制器的控 制下进行的。 通常,I/O操作所要完成的工作较多,往往需要一定的时间,如 读/写一个盘块中的数据,此时驱动(程序)进程把自己阻塞起 来 ,CPU可转而执行其它进程,直至中断到来时才将该阻塞进 程唤醒。 IE310, 8-95, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动 8.5.4 中断处理程序的处理过程 I/O设备完成I/O操作后,设备控制器便向CPU发 送一个中断请求,CPU响应后便转入其中断处理 程序。 中断处理程序也叫中断服务程序。 其处理过程一般如下所述: 唤醒被阻塞的驱动(程序)进程。 保护被中断进程的CPU环境。 转入相应的中断处理程序。 中断处理。 恢复被中断进程的现场。 IE310, 8-96, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(中断处理程序的处理过程) 中断处理程序的处理过程(续) 唤醒被阻塞的驱动(程序)进程 当中断处理程序开始执行时,首先去唤醒处于阻塞状 态的驱动(程序)进程。 如果是采用了信号量机制,则可通过执行Signal操作, 将处于阻塞状态的驱动(程序)进程唤醒。 如果是采用了信号机制,则发送一个信号给处于阻塞 状态的驱动(程序)进程。 IE310, 8-97, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(中断处理程序的处理过程) 中断处理程序的处理过程(续) 保护被中断进程的CPU环境 通常由硬件自动将处理机状态字PSW和程序计数器 PC中的内容,保留在中断保留区(栈)中,然后把被中 断进程的CPU现场信息(即包括所有的CPU寄存器,如 通用寄存器、段寄存器等内容)都压入中断栈中,因 为在中断处理时,可能会用到这些寄存器。 被压入中断栈中的程序计数器PC中的内容应该指向 中断处后面那一条指令的位置。 IE310, 8-98, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(中断处理程序的处理过程) 中断处理程序的处理过程(续) 保护被中断进程的CPU环境 中断现场保护示意图。 IE310, 8-99, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(中断处理程序的处理过程) 中断处理程序的处理过程(续) 转入相应的中断处理程序 由CPU对各个中断源进行测试,以确定引起 本次中断的I/O设备。 然后,发送应答信号消除该中断请求信号。 然后,将相应的设备中断处理程序的入口地 址装入到程序计数器中,是CPU转向执行该 中断处理程序。 IE310, 8-100, [email protected] Shanghai Jiao Tong University 8.5 设备的驱动(中断处理程序的处理过程) 中断处理程序的处理过程(续) 中断处理 对不同的设备,有不同的中断处理程序。 该程序首先从设备控制器中读出设备状态,以判别本次中断是 正常完成中断,还是异常结束中断。 若是前者,中断程序便作结束处理;若还有命令,可再向控制 器发送新的命令,进行新一轮的数据传送。 若是异常结束中断,则根据发生异常的原因做相应的处理。 IE310, 8-101, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.5 设备的驱动(中断处理程序的处理过程) 中断处理程序的处理过程(续) 恢复被中断进程的现场 当中断处理完成以后,便可将保存在中断栈中的被中 断进程的现场信息取出,并装入到相应的寄存器中, 其中包括该程序下一次要执行的指令的地址、处理机 状态字PSW以及各通用寄存器和段寄存器的内容。 这样,当处理机再次执行原来被中断的程序时,便从 原中断处的后面那一条指令继续执行,从而使原来被 中断的程序得以继续执行。 IE310, 8-102, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.5 设备的驱动(中断处理程序的处理过程) Unix的中断总控程序 I/O操作完成后,驱动程序必须检查本次I/O操作中是否 发生了错误,并向上层软件报告,最终向调用这报告本 次I/O的执行情况。 除了前述的第四步以外,其它各步骤对所有I/O设备都 是相同的,因而对于某种操作系统,例如Unix系统,是 把这些共同的部分集中起来,形成中断总控程序。 每当要进行中断处理时,都要首先进入中断总控程序。 而对于第四步,则对不同设备需采用不同的设备中断处 理程序继续执行。 IE310, 8-103, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.5 设备的驱动(中断处理程序的处理过程) 中断处理 流程示意 IE310, 8-104, xqfang.sjtu@gmail.com xxxx8.6 Unix设备管理特点 Shanghai Jiao Tong University 将设备作为特殊文件,由文件系统统一管理 *系统中设备的配置灵活、方便 Unix将设备当作文件,称为设备文件或特殊文件。 例如打印机的文件名是lp,键盘的文件名是con,控制台终端的文件名 是console等等。 这些特殊文件被组织在目录/dev下。比如在键盘命令中可以使用文件 名/dev/lp,在源程序中可以通过以下系统调用使用打印机: fd=open(“/dev/lp”,打开方式); 在Unix中,将同设备的共性特征与该设备在使用时不同的个性特征 分开,使用两个数据结构分别描述,使系统具有很好的稳定性和可扩 充性。 高效率的缓冲区管理算法 Unix对于块设备缓冲池的管理采用了假读和延迟写的数据复用技术, 有效地减少了读写磁盘的次数 采用LRU算法管理空闲缓冲区以提高数据复用率 采用设备散列结构管理设备缓冲区队列,有效地缩短了设备队列的长 度,减少了设备队列中查询可复用数据块需要的时间 IE310, 8-105, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.6 Unix设备管理特点 8.6.1 Unix块设备管理的数据结构 Unix块设备表 设备表是用来描述每个设备状态信息的数据结构,是设备的唯一标识,它记录 了该设备的分配状态和使用情况。 Unix为每个块设备控制器分配一张块设备表,称为iobuf。 struct iobuf { int b_flags; dev_t b_dev char b_active; char b_errcnt; struct buf *b_forw; struct buf *b_back; struct buf *b_actf; struct buf *b_actl; struct eblock *io_erec; int io_nreg; physadr io_addr; physadr io_mba; struct iostart *io_stp; time_t io_start; int io_s1; int io_s2; }; /*该设备的状态标志*/ /*设备名*/ /*设备正在执行一个I/O请求的标志*/ /*出错计数*/ /*指向本设备散列缓冲区buf队列头指针*/ /*指向本设备散列缓冲区buf队列尾指针*/ /*指向本设备I/O请求队列中首个buf*/ /*指向本设备I/O请求队列中最后一个buf*/ /*指向块设备错误记录块*/ /*设备寄存器的个数*/ /*设备控制状态寄存器地址*/ /*MBA配置结构寄存器地址*/ /*指向部件I/O统计块*/ /*输入输出启动时间*/ /*驱动程序留用位置*/ /*驱动程序留用位置*/ IE310, 8-106, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.6 Unix设备管理特点(Unix块设备管理的数据结构) Unix块设备开关表 Unix设备开关表用于描述每类设备所具有的操作类型及其设备 驱动程序的入口地址。 由于同类设备的工作原理相同,所以,同类设备的开关表可以 共享。 Unix为各类块设备设置块设备开关表bdevsw。 struct bdevsw { int (*d_open)(); int (*d_close)(); int (*d_strategy)(); int (*d_print)(); } bdevsw[ ]; /*打开函数入口*/ /*关闭函数入口*/ /*启动函数入口*/ /*打印函数入口*/ IE310, 8-107, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.6 Unix设备管理特点(Unix块设备管理的数据结构) Unix块设备开关表 Unix设备开关表是一个数组,它将系统中所有的块设备的驱动程序的入口地址, 按设备类型集中形成一张块设备开关表,如表所示,gd代表磁盘,gt代表磁带。 每个记录项描述一类块设备。 系统调用open打开一个对应设备,根据该设备文件的i-node可以获得该设备的 主设备号,从而在Unix设备开关表找到与之对应的驱动程序。例如gd open打 开磁盘驱动器,它为请求打开进程与磁盘设备建立相互间的联系,初始化其它 驱动程序所需要的数据结构,同时检查打开方式的合法性,如不能同时有多个 进程打开同一个打印机设备进行操作等等,如果不合法则返回出错信息。 系统调用close断开用户进程与设备的联系,关闭一个设备文件相当于释放一个 进程所占用的设备。 驱 主 设 备 号 动 驱动程序类别 程 序 open close strategy print 0 &gd open &gd close &gd strategy &gdprint 1 &gt open &gt close &gt strategy &gtprint …… …… …… …… IE310, 8-108, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.6 Unix设备管理特点 8.6.2 Unix块设备缓冲区管理 缓冲区结构 Unix System V的块设备缓冲池由NBUF个缓冲区组成,每个缓冲区容量为SBUFSIZE字节。 每个缓冲区实体由描述缓冲区的数据结构和存放数据的内存数据区两部分组成 其中述缓冲区的数据结构称为buf,也称为缓冲区首部或头部 buf数据结构与存放数据的数据区之间通过指针b_addr链接 struct buf { int b_flags; struct buf *b_forw; struct buf *b_back; struct buf *av_forw; struct buf *av_back; dev_t b_dev; unsigned b_bcount; union { caddr_t b_addr; int *b_words; struct filsys *b_filsys; struct dinode *b_dino; daddr_t *b_daddr; }b_un; daddr_t b_blkno; char b_error; unsigned int b_resid; time_t b_start; struct proc *b_proc; } buf[NBUF]; /* 状态标志,参见下面的说明*/ /* 设备散列队列前指针 */ /* 设备散列队列后指针 */ /* 缓冲区队列前指针 */ /* 缓冲区队列后指针 */ /* 逻辑设备号 */ /* 请求传送的字节数 */ /* 指向缓冲区数据区指针 */ /* 要刷新的起始地址 */ /* 超级块 */ /* 磁盘i节点表 */ /* 间接块 */ /* 与该缓冲区对应的块设备上的物理块号 */ /* 出错信息 */ /* 出错时尚末传送的剩余字数 */ /* I/O请求起始时间 */ /* 执行I/O的进程 */ IE310, 8-109, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.6 Unix设备管理特点(块设备缓冲区) 块设备缓冲区管理 由于系统频繁进行磁盘读写操作, 所以磁盘的I/O效率在很大程度上 影响着计算机系统的整体效率。 为了提高磁盘I/O效率,Unix将解 决问题的焦点放在与磁盘块设备有 关的缓冲池的管理上,通过采用数 据复用技术来达到目的。 进程对块设备的读写请求均需要两 步完成: 读时先启动块设备将信息块读入 内存缓冲区,再由内存缓冲区复 制到进程数据区; 同理,写时进程先将数据由进程 的数据区复制到内存缓冲区,然 后再启动块设备,从内存缓冲区 写到块设备上。 因此,无论读盘还是写盘,都要经 过启动块设备I/O和内存复制两个 过程。 IE310, 8-110, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.6 Unix设备管理特点(块设备缓冲区) 块设备缓冲区管理 采用数据复用技术 在磁盘I/O的两个过程中,影响I/O效率的是磁盘的I/O过程。 如果能采取措施减少块设备的I/O次数,就可以提高I/O效率。 事实上,进程对磁盘数据块常常带有重复使用的特点,Unix对缓 冲区中的数据采用复用技术以减少读写盘的次数,提高I/O速度。 这种数据复用技术就是“假读”和“延迟写”。 “假读” “假读”是当进程要求读取块设备上的数据块时,如果该数据块 曾经被读过,而且还在某个等待重新分配的空闲缓冲区中,那么 操作系统就找到该缓冲区,直接进行内存的数据复制即可完成读 操作,从而免去了启动块设备I/O的操作过程。 由于未启动块设备就完成了读操作,因此被称为“假读”。 假读减少了块设备启动次数,有效地提高了读盘效率,对于多次 读取同一数据块的情况,其效率尤其明显。 IE310, 8-111, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.6 Unix设备管理特点(块设备缓冲区) 块设备缓冲区管理 “延迟写” “延迟写”是当进程发出写操作命令时,操作系统并不一定真正 写盘,对于曾经写过但尚未写满的缓冲区,只是做一个“延迟写” 的标记就释放掉。真正写盘的时机为: 后续进程继续往该块中写,直至缓冲区写满时; 系统要将该(空)缓冲区重新分配时; 系统切断电源关机时(所以必须正常关机)。 延迟写减少了启动块设备的次数,有效地提高了I/O效率。 延迟写的前提是进程请求写的块必须是它曾经写过而且未写满的 块,该块在前一次写完释放到下一次继续写的过程中,存放数据 块的缓冲区还没有被重新分配,其中存放的依然是它被释放时的 数据。 被假读和延迟写的数据块称为复用数据块 存放可复用数据块的缓冲区称为可复用冲区 所有可复用缓冲区存在于空闲缓冲区队列中 IE310, 8-112, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.6 Unix设备管理特点(块设备缓冲区) 块设备缓冲区管理 使用LRU算法提高假读和延迟写的命中率 系统的I/O效率与假读和延迟写的命中率有直接关系 由于假读和延迟写需要在空闲缓冲区队列中查找可复用数据块, 所以,要提高假读和延迟写的命中率,其关键在于使被释放的空 闲缓冲区在空闲队列中等待再分配的时间尽可能长。 为此,Unix采用了分页管理中讨论过的最久未使用淘汰算法LRU: 释放缓冲区时,对于可复用的缓冲区,类似于偷页算法,将其插入 空闲缓冲区队列的尾部,使其有尽可能长的等待时间,以此提高假 读和延迟写的命中率; 对于不可复用的缓冲区则将其插入空闲缓冲区队列的头部,使其先 分配,以延长可复用缓冲区的等待时间。 Unix使用LRU算法实现对空闲缓冲区队列的管理 在队首进行分配 在队尾进行回收 为了提高分配和回收的速度,采用了双向队列结构,在空闲缓冲区 队列头数据结构bfreelist中使用两个指针分别指向队列的首和尾。 IE310, 8-113, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.6 Unix设备管理特点(块设备缓冲区) 块设备缓冲区管理 采用设备散列结构缩短查询时间 为了实现假读或延迟写,必须查询空闲缓冲区队列。 Unix空闲缓冲区队列往往很长。 为了缩短查询时间,Unix采用散列方式,设置了很多个设备队列 (称其为查找队列可能更好)。 对缓冲区首部增加了一对设备(查找)队列指针,任何一个挂在空 闲队列上的缓冲区都同时挂在某个设备(查找)队列上。 具体挂在哪个设备(查找)队列上,由所构造的哈希函数计算确定。 所用的哈希函数为 (b_dev + b_blkno) mod 64 其中参数b_dev(主次设备号)和b_blkno(物理块号)唯一确定一个物理数 据块,在buf结构中描述,其值由进程在I/O请求中给出。 这样,在最终所确定的设备(查找)队列上所挂接的缓冲区数量, 也就是产生哈希冲突的缓冲区数量,一般控制在3个缓冲区左右, 比整个空闲队列中的要少得多,从而极大地缩短了查询时间。 IE310, 8-114, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.6 Unix设备管理特点(块设备缓冲区) 块设备缓冲区管理 缓冲区的三类队列 设备散列队列头hbuf(有好多个) 空闲缓冲区队列头bfreelist(只有一个) 物理设备的I/O请求队列头iobuf (每个物理设备有一个) 所有缓冲区在后两类队列是互斥出现的,但是都必然同时出现在第一类队 列中 IE310, 8-115, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 8.6 Unix设备管理特点(块设备缓冲区) 块设备缓冲区管理 Unix对缓冲区的管理,很好地解决了以下非常重要的问题: Unix使用LRU算法对缓冲区队列进行有效的管理,使已经读到内存 缓冲区的数据尽可能长时间地保留在缓冲区中,为数据的复用创造 了机会和条件。 数据复用为数据的一致性和完整性提供了保证。每一个文件的数据 块在内存只有一个缓冲区与之对应,而不会出现一个数据块同时存 在于内存的两个以上的缓冲区中,从而为实现数据的一致性和完整 性提供了保证。 操作系统对于缓冲区的管理防止了某些进程可能永远得不到一个缓 冲区而无限期睡眠的情况发生。系统中缓冲区的分配和释放都由系 统控制,使得用户进程无法永远霸占某个缓冲区,所有的缓冲区都 有可能被重新分配利用。 有效地减少了读写磁盘的次数,提高了磁盘I/O速度。 IE310, 8-116, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 小结 本章对I/O设备系统的构成、I/O控制方式、缓冲技术、设备的分配、设备 的驱动进行的介绍。 对于I/O设备系统的构成,主要对I/O设备进行了分类,然后重点介绍了设 备控制器和通道。 对于I/O控制方式,介绍了其发展过程所贯穿的宗旨,即尽量减少主机对 I/O控制的干预,把主机从繁杂的I/O控制事务中解脱出来,以便更多地去 完成数据处理任务。然后,介绍了程序直接控制(程序I/O方式)、中断驱动、 DMA控制和通道等方式工作原理。 缓冲主要是为了解决外部设备与CPU之间速度不匹配而引入的,主要介绍 了软件缓冲,包括单缓冲、双缓冲、循环缓冲和缓冲池,而缓冲池则是重 点。 设备的分配过程涉及设备控制表、系统设备表、控制器控制表和通道控制 表等多种数据结构。分配算法一般采用先来先服务和优先级两种,须注意 避免死锁。SPOOLing技术是一种重要的虚拟设备技术,它由输入输出井、 输入输出缓冲区和输入输出进程组成。 对于设备的驱动,主要介绍了设备驱动程序和中断处理程序的主要任务及 其一般流程。 介绍了Unix将设备作为特殊文件(设备文件)、对块设备缓冲池的管理采用 了假读和延迟写的数据复用技术、采用LRU算法管理空闲缓冲区以提高数 据复用率、采用设备散列结构管理设备缓冲区队列减少查询时间等设备管 理特点。 IE310, 8-117, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 课后任务(书面作业/无需上交/自行核对答案) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 设备管理的基本功能有哪些? 简述各种I/O控制方式及其主要优缺点。 I/O软件主要涉及哪些问题?分别简单说明之。 叙述I/O软件的层次及其功能。 引入缓冲技术的目的是什么?其实现的基本思想是什 么? 常用的缓冲技术有哪些?试比较它们的区别。 什么是设备独立性?为什么要引入设备独立性? 什么是Unix磁盘的“假读”?为什么是Unix磁盘的 “延迟写”? Unix采用什么算法提高“假读”和“延迟写”的命中 率? Unix是如何缩短假读或延迟写中查询空闲缓冲区队列 的事件的? IE310, 8-118, xqfang.sjtu@gmail.com Shanghai Jiao Tong University 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 课后课程设计任务 自学第9章Linux应用基础; 自学第10章Linux的操作命令界面与内核编译; 练习实验1 实验环境与Linux操作系统的安装(虚拟机、红帽子Linux安装、 虚拟网卡的安装); 练习实验2-1 Linux的键盘命令; 练习实验2-2 Linux的图形界面; 练习实验2-3 Linux的批处理; 练习实验3-1 Linux进程的创建与父子进程同步; 练习实验3-2 Linux子进程映像的重新加载; 练习实验4-1 Linux软中断通信; 练习实验4-2 Linux管道通信; 练习实验4-3 Linux消息缓冲通信; 练习实验4-4 Linux共享存储通信; 练习实验5 Linux信号量与P、V操作; 练习实验6 动态申请内存(malloc/realloc/free); 练习实验7 Linux文件系统操作(open/creat/read/write/chmod/close); 联系TCP连接访问 各设计阶段程序的编写 课程设计报告编写 IE310, 8-119, xqfang.sjtu@gmail.com ...
View Full Document

This note was uploaded on 03/08/2012 for the course IE 310 taught by Professor Fangxinqi during the Fall '11 term at Shanghai Jiao Tong University.

Ask a homework question - tutors are online