温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
第六章
输入输出系统
第六
输入输出
系统
广东工业大学 计算机学院网络工程系 刘冬宁第六章 输入输出系统Outline6.1 I/O系统的功能、模型和接口6.2 I/O设备和设备控制器6.3 中断机构和中断处理程序6.4 设备驱动程序6.5 与设备无关的I/O软件6.6 用户层的I/O软件6.7 缓冲区管理6.8 磁盘存储器的性能和调度6.6.1 I/O系统的基本功能隐藏物理设备的细节与设备的无关性提高处理机和I/O设备的利用率对I/O设备进行控制确保对设备的正确共享错误处理6.16.1I/OI/O系统的功能、模型和接口系统的功能、模型和接口用 户 层 软 件设 备 独 立 性 软 件设 备 驱 动 程 序中 断 处 理 程 序硬件I/O应 答产 生 I/O 请 求、格 式 化 I/O、Spooling映 射、保 护、分 块、缓 冲、分 配设 置 设 备 寄 存 器,检 查 寄 存 器 状 态执 行 I/O 操 作6.1.2 I/O系统的层次结构模型1.I/O软件的层次结构2.I/O系统中各种模块之间的层次视图(自学)6.1.3 I/O系统接口(自学)6.2I/O设备和设备控制器设备和设备控制器6 6.2 2.1 1I/OI/O设备设备1 1I/OI/O设备的设备的类型类型1)按设备的使用特性分类按设备的使用特性,可将设备分为两类。第一类是存储设备,也称外存或后备存储器、辅助存储器,是计算机系统用以存储信息的主要设备。该类设备存取速度较内存慢,但容量比内存大得多,相对价格也便宜。第二类就是输入/输出设备,又具体可分为输入设备、输出设备和交互式设备。输入设备用来接收外部信息,如键盘、鼠标、扫描仪、视频摄像、各类传感器等。2)按传输速率分类按传输速度的高低,可将I/O设备分为三类。第一类是低速设备,这是指其传输速率仅为每秒钟几个字节至数百个字节的一类设备。属于低速设备的典型设备有键盘、鼠标器、语音的输入和输出等设备。第二类是中速设备,这是指其传输速率在每秒钟数千个字节至数十万个字节的一类设备。典型的中速设备有行式打印机、激光打印机等。第三类是高速设备,这是指其传输速率在数百个千字节至千兆字节的一类设备。典型的高速设备有磁带机、磁盘机、光盘机等。3)按信息交换的单位分类按信息交换的单位,可将I/O设备分成两类。第一类是块设备(Block Device),这类设备用于存储信息。由于信息的存取总是以数据块为单位,故而得名。它属于有结构设备。典型的块设备是磁盘,每个盘块的大小为512 B4 KB。磁盘设备的基本特征是其传输速率较高,通常每秒钟为几兆位;另一特征是可寻址,即对它可随机地读/写任一块;此外,磁盘设备的I/O常采用DMA方式。第二类是字符设备(Character Device),用于数据的输入和输出。其基本单位是字符,故称为字符设备。它属于无结构类型。字符设备的种类繁多,如交互式终端、打印机等。字符设备的基本特征是其传输速率较低,通常为几个字节至数千字节;另一特征是不可寻址,即输入/输出时不能指定数据的输入源地址及输出的目标地址;此外,字符设备在输入/输出时,常采用中断驱动方式。4)按设备的共享属性分类这种分类方式可将I/O设备分为如下三类:(1)独占设备。这是指在一段时间内只允许一个用户(进程)访问的设备,即临界资源。因而,对多个并发进程而言,应互斥地访问这类设备。系统一旦把这类设备分配给了某进程后,便由该进程独占,直至用完释放。应当注意,独占设备的分配有可能引起进程死锁。(2)共享设备。这是指在一段时间内允许多个进程同时访问的设备。当然,对于每一时刻而言,该类设备仍然只允许一个进程访问。显然,共享设备必须是可寻址的和可随机访问的设备。典型的共享设备是磁盘。对共享设备不仅可获得良好的设备利用率,而且它也是实现文件系统和数据库系统的物质基础。(3)虚拟设备。这是指通过虚拟技术将一台独占设备变换为若干台逻辑设备,供若干个用户(进程)同时使用。2 2设备与控制器之间的接口设备与控制器之间的接口通常,设备并不是直接与CPU进行通信,而是与设备控制器通信,因此,在I/O设备中应含有与设备控制器间的接口,在该接口中有三种类型的信号(见图6-3 所示),各对应一条信号线。缓冲转换器控制逻辑 信号数据 数据信号线 状态信号线 控制信号线至设备控制器I/O设备 5 5.1 1.2 2设备控制器设备控制器1 1设备控制器的基本功能设备控制器的基本功能1)接收和识别命令2)数据交换3)标识和报告设备的状态4)地址识别5)数据缓冲区6)差错控制2 2设备控制器的组成设备控制器的组成1)设备控制器与处理机的接口该接口用于实现CPU与设备控制器之间的通信。共有三类信号线:数据线、地址线和控制线。数据线通常与两类寄存器相连接,第一类是数据寄存器(在控制器中可以有一个或多个数据寄存器,用于存放从设备送来的数据(输入)或从CPU送来的数据(输出);第二类是控制/状态寄存器(在控制器中可以有一个或多个这类寄存器,用于存放从CPU送来的控制信息或设备的状态信息)。2)设备控制器与设备的接口在一个设备控制器上,可以连接一个或多个设备。相应地,在控制器中便有一个或多个设备接口,一个接口连接一台设备。在每个接口中都存在数据、控制和状态三种类型的信号。控制器中的I/O逻辑根据处理机发来的地址信号去选择一个设备接口。3)I/O逻辑在设备控制器中的I/O逻辑用于实现对设备的控制。它通过一组控制线与处理机交互,处理机利用该逻辑向控制器发送I/O命令;I/O逻辑对收到的命令进行译码。每当CPU要启动一个设备时,一方面将启动命令发送给控制器;另一方面又同时通过地址线把地址发送给控制器,由控制器的I/O逻辑对收到的地址进行译码,再根据所译出的命令对所选设备进行控制。图6-4设备控制器的组成数据寄存器控制/状态寄存器数据线I/O逻辑控制器与设备接口1控制器与设备接口i数据状态控制数据状态控制地址线控制线CPU与控制器接口控 制 器 与 设 备 接 口6 6.2 2.3 3 内存映像内存映像I/I/0 0(自学内容自学内容)6 6.2 2.4 4I/OI/O通道通道1 1I/OI/O通道通道(I/O(I/O Channel)Channel)设备的引入设备的引入虽然在CPU与I/O设备之间增加了设备控制器后,已能大大减少CPU对I/O的干预,但当主机所配置的外设很多时,CPU的负担仍然很重。为此,在CPU和设备控制器之间又增设了通道。其主要目的是为了建立独立的I/O操作,不仅使数据的传送能独立于CPU,而且也希望有关对I/O操作的组织、管理及其结束处理尽量独立,以保证CPU有更多的时间去进行数据处理;或者说,其目的是使一些原来由CPU处理的I/O任务转由通道来承担,从而把CPU从繁杂的I/O任务中解脱出来。在设置了通道后,CPU只需向通道发送一条I/O指令。通道在收到该指令后,便从内存中取出本次要执行的通道程序,然后执行该通道程序,仅当通道完成了规定的I/O任务后,才向CPU发中断信号。实际上,I/O通道是一种特殊的处理机,它具有执行I/O指令的能力,并通过执行通道(I/O)程序来控制I/O操作。但I/O通道又与一般的处理机不同,主要表现在以下两个方面:一是其指令类型单一,这是由于通道硬件比较简单,其所能执行的命令主要局限于与I/O操作有关的指令;二是通道没有自己的内存,通道所执行的通道程序是放在主机的内存中的,换言之,是通道与CPU共享内存。2 2通道类型通道类型1)字节多路通道(Byte Multiplexor Channel)2)数组选择通道(Block Selector Channel)3)数组多路通道(Block Multiplexor Channel)图6-6字节多路通道的工作原理控制器A控制器B控制器C控制器D控制器NA1A2A3子通道AB1B2B3子通道BC1C2C3子通道CN1N2N3子通道NA1B1C1A2B2C2设 备3 3“瓶颈瓶颈”问题问题设备1设备2设备3设备4设备5设备6设备7控制器1控制器2控制器3控制器4通道1通道2存储器I/O设备控制器1控制器2通道1通道2存储器I/O设备I/O设备I/O设备6.3I/O控制方式控制方式6 6.3 3.1 1程序程序I/OI/O方式方式早期的计算机系统中,由于无中断机构,处理机对I/O设备的控制采取程序I/O(Programmed I/O)方式,或称为忙等待方式,即在处理机向控制器发出一条I/O指令启动输入设备输入数据时,要同时把状态寄存器中的忙/闲标志busy置为1,然后便不断地循环测试busy。当busy=1时,表示输入机尚未输完一个字(符),处理机应继续对该标志进行测试,直至busy=0,表明输入机已将输入数据送入控制器的数据寄存器中。于是处理机将数据寄存器中的数据取出,送入内存指定单元中,这样便完成了一个字(符)的I/O。接着再去启动读下一个数据,并置busy=1。图5-7(a)示出了程序I/O方式的流程。程序I/O和中断驱动方式的流程向I/O控制器发读命令读I/O控制器的状态检查状态?从I/O控制器中读入字向存储器中写字传送完成?未就绪就绪出错CPUI/OI/OCPUI/OCPUCPU内存完成未完向I/O控制器发读命令读I/O控制器的状态检查状态?从I/O控制器中读字向内存中写字传送完成?就绪出错CPUI/OI/OCPUI/OCPUCPU内存完成未完中断CPU做其它事向I/O控制器发布读块命令CPUDMACPU做其它事读DMA控制器的状态中断DMACPU下一条指令(a)程序I/O方式(b)中断驱动方式(c)DMA方式下一条指令下一条指令6 6.3 3.2 2中断驱动中断驱动I/OI/O控制方式控制方式现代计算机系统中,都毫无例外地引入了中断机构,致使对I/O设备的控制,广泛采用中断驱动(Interrupt Driven)方式,即当某进程要启动某个I/O设备工作时,便由CPU向相应的设备控制器发出一条I/O命令,然后立即返回继续执行原来的任务。设备控制器于是按照该命令的要求去控制指定I/O设备。此时,CPU与I/O设备并行操作。例如,在输入时,当设备控制器收到CPU发来的读命令后,便去控制相应的输入设备读数据。一旦数据进入数据寄存器,控制器便通过控制线向CPU发送一中断信号,由CPU检查输入过程中是否出错,若无错,便向控制器发送取走数据的信号,然后再通过控制器及数据线将数据写入内存指定单元中。在I/O设备输入每个数据的过程中,由于无需CPU干预,因而可使CPU与I/O设备并行工作。仅当输完一个数据时,才需CPU花费极短的时间去做些中断处理。可见,这样可使CPU和I/O设备都处于忙碌状态,从而提高了整个系统的资源利用率及吞吐量。例如,从终端输入一个字符的时间约为100 ms,而将字符送入终端缓冲区的时间小于0.1 ms。若采用程序I/O方式,CPU约有99.9 ms的时间处于忙等待的过程中。但采用中断驱动方式后,CPU可利用这99.9 ms的时间去做其它的事情,而仅用0.1 ms的时间来处理由控制器发来的中断请求。可见,中断驱动方式可以成百倍地提高CPU的利用率。6.3.46.3.4直接存储器访问直接存储器访问(DMA)I/O(DMA)I/O控制方式控制方式1 1DMA(Direct Memory Access)DMA(Direct Memory Access)控制方式的引入控制方式的引入虽然中断驱动I/O比程序I/O方式更有效,但须注意,它仍是以字(节)为单位进行I/O的,每当完成一个字(节)的I/O时,控制器便要向CPU请求一次中断。换言之,采用中断驱动I/O方式时的CPU是以字(节)为单位进行干预的。如果将这种方式用于块设备的I/O,显然是极其低效的。例如,为了从磁盘中读出1 KB的数据块,需要中断CPU 1K次。为了进一步减少CPU对I/O的干预而引入了直接存储器访问方式。该方式的特点是:(1)数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次传送至少一个数据块;(2)所传送的数据是从设备直接送入内存的,或者相反;(3)仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整块数据的传送是在控制器的控制下完成的。可见,DMA方式较之中断驱动方式,又是成百倍地减少了CPU对I/O的干预,进一步提高了CPU与I/O设备的并行操作程度。2 2DMADMA控制器的组成控制器的组成DMA控制器由三部分组成:主机与DMA控制器的接口;DMA控制器与块设备的接口;I/O控制逻辑。下图示出了DMA控制器的组成。这里主要介绍主机与控制器之间的接口。DRMARDCCRI/O控制逻辑主机控制器接口控制器与块设备接口count内存CPU命令系统总线DMA控制器为了实现在主机与控制器之间成块数据的直接交换,必须在DMA控制器中设置如下四类寄存器:(1)命令/状态寄存器(CR)。用于接收从CPU发来的I/O命令,或有关控制信息,或设备的状态。(2)内存地址寄存器(MAR)。在输入时,它存放把数据从设备传送到内存的起始目标地址;在输出时,它存放由内存到设备的内存源地址。(3)数据寄存器(DR)。用于暂存从设备到内存,或从内存到设备的数据。(4)数据计数器(DC)。存放本次CPU要读或写的字(节)数。3 3DMADMA工作过程工作过程以磁盘读入数据为例,来说明DMA方式的工作流程。当CPU要从磁盘读入一数据块时,便向磁盘控制器发送一条读命令。该命令被送到其中的命令寄存器(CR)中。同时,还须发送本次要将数据读入的内存起始目标地址,该地址被送入内存地址寄存器(MAR)中;本次要读数据的字(节)数则送入数据计数器(DC)中,还须将磁盘中的源地址直接送至DMA控制器的I/O控制逻辑上。然后,启动DMA控制器进行数据传送,以后,CPU便可去处理其它任务。此后,整个数据传送过程便由DMA控制器进行控制。当DMA控制器已从磁盘中读入一个字(节)的数据并送入数据寄存器(DR)后,再挪用一个存储器周期,将该字(节)传送到MAR所指示的内存单元中。接着便对MAR内容加1,将DC内容减1。若减1后DC内容不为0,表示传送未完,便继续传送下一个字(节);否则,由DMA控制器发出中断请求。图6-15 DMA方式的工作流程图设置MAR和DC初值 启动DMA传送命令挪用存储器周期传送数据字 存储器地址增1字计数寄存器减1 DC0?请求中断 在继续执行用户程序的同时,准备又一次传送 否是 6 6.3 3.4 4I/OI/O通道控制方式通道控制方式1 1I/OI/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任务。2 2通道程序通道程序通道是通过执行通道程序,并与设备控制器共同实现对I/O设备的控制的。通道程序是由一系列通道指令(或称为通道命令)所构成的。通道指令与一般的机器指令不同,在它的每条指令中都包含下列诸信息:(1)操作码。操作码规定了指令所执行的操作,如读、写、控制等操作。(2)内存地址。内存地址标明字符送入内存(读操作)和从内存取出(写操作)时的内存首址。(3)计数。该信息表示本条指令所要读(或写)数据的字节数。(4)通道程序结束位P。该位用于表示通道程序是否结束。P=1表示本条指令是通道程序的最后一条指令。(5)记录结束标志R。R=0表示本通道指令与下一条指令所处理的数据是同属于一个记录;R=1表示这是处理某记录的最后一条指令。下面示出了一个由六条通道指令所构成的简单的通道程序。该程序的功能是将内存中不同地址的数据写成多个记录。其中,前三条指令是分别将813892单元中的80个字符和10341173单元中的140个字符及58305889单元中的60个字符写成一个记录;第4条指令是单独写一个具有300个字符的记录;第5、6条指令共写含500个字符的记录。操 作 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 1650 WRITE 1 1 250 2720 6 6.4 4设备驱动程序设备驱动程序设备驱动程序通常又称为设备处理程序,它是I/O进程与设备控制器之间的通信程序,又由于它常以进程的形式存在,故以后就简称之为设备驱动进程。其主要任务是接收上层软件发来的抽象I/O要求,如read或write命令,在把它转换为具体要求后,发送给设备控制器,启动设备去执行;此外,它也将由设备控制器发来的信号传送给上层软件。由于驱动程序与硬件密切相关,故应为每一类设备配置一种驱动程序;有时也可为非常类似的两类设备配置一个驱动程序。1 1设备驱动程序的功能设备驱动程序的功能为了实现I/O进程与设备控制器之间的通信,设备驱动程序应具有以下功能:(1)接收由设备独立性软件发来的命令和参数,并将命令中的抽象要求转换为具体要求。(2)检查用户I/O请求的合法性,了解I/O设备的状态,传递有关参数,设置设备的工作方式。(3)发出I/O命令。如设备空闲,便立即启动I/O设备去完成指定的I/O操作;如设备忙碌,则将请求者的请求块挂在设备队列上等待。(4)及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理。(5)对于设置有通道的计算机系统,驱动程序还应能够根据用户的I/O请求,自动地构成通道程序。2 2设备处理方式设备处理方式(1)为每一类设备设置一个进程,专门用于执行这类设备的I/O操作。比如,为所有的交互式终端设置一个交互式终端进程;又如,为同一类型的打印机设置一个打印进程。(2)在整个系统中设置一个I/O进程,专门用于执行系统中所有各类设备的I/O操作。也可以设置一个输入进程和一个输出进程,分别处理系统中所有各类设备的输入或输出操作。(3)不设置专门的设备处理进程,而只为各类设备设置相应的设备处理程序(模块),供用户进程或系统进程调用。3 3设备驱动程序的特点设备驱动程序的特点(1)驱动程序主要是指在请求I/O的进程与设备控制器之间的一个通信和转换程序。它将进程的I/O请求经过转换后,传送给控制器;又把控制器中所记录的设备状态和I/O操作完成情况及时地反映给请求I/O的进程。(2)驱动程序与设备控制器和I/O设备的硬件特性紧密相关,因而对不同类型的设备应配置不同的驱动程序。(3)驱动程序与I/O设备所采用的I/O控制方式紧密相关。常用的I/O控制方式是中断驱动和DMA方式,这两种方式的驱动程序明显不同,因为后者应按数组方式启动设备及进行中断处理。(4)由于驱动程序与硬件紧密相关,因而其中的一部分必须用汇编语言书写。目前有很多驱动程序的基本部分,已经固化在ROM中。(5)驱动程序应允许可重入。一个正在运行的驱动程序常会在一次调用完成前被再次调用。4 4设备驱动程序的处理设备驱动程序的处理过程过程1)将抽象要求转换为具体要求2)检查I/O请求的合法性3)读出和检查设备的状态4)传送必要的参数5)工作方式的设置6)启动I/O设备6 6.5 5与设备无关的与设备无关的I/OI/O软件软件6 6.5 5.1 1 设备设备独立性的概念独立性的概念为了提高OS的可适应性和可扩展性,在现代OS中都毫无例外地实现了设备独立性(Device Independence),也称为设备无关性。其基本含义是:应用程序独立于具体使用的物理设备。为了实现设备独立性而引入了逻辑设备和物理设备这两个概念。在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时,还必须使用物理设备名称。因此,系统须具有将逻辑设备名称转换为某物理设备名称的功能,这非常类似于存储器管理中所介绍的逻辑地址和物理地址的概念。在应用程序中所使用的是逻辑地址,而系统在分配和使用内存时,必须使用物理地址。在实现了设备独立性的功能后,可带来以下两方面的好处。1)设备分配时的灵活性2)易于实现I/O重定向6 6.5 5.2 2 与设备无关的软件与设备无关的软件驱动程序是一个与硬件(或设备)紧密相关的软件。为了实现设备独立性,必须再在驱动程序之上设置一层软件,称为设备独立性软件。至于设备独立性软件和设备驱动程序之间的界限,根据不同的操作系统和设备有所差异,主要取决于操作系统、设备独立性和设备驱动程序的运行效率等多方面因素的权衡,因为对于一些本应由设备独立性软件实现的功能,可能由于效率等诸多因素,实际上设计在设备驱动程序中。总的来说,设备独立性软件的主要功能可分为以下两个方面:(1 1)执行所有设备的公有操作执行所有设备的公有操作。这些公有操作包括这些公有操作包括:对独立设备的分配与回收;将逻辑设备名映射为物理设备名,进一步可以找到相应物理设备的驱动程序;对设备进行保护,禁止用户直接访问设备;缓冲管理,即对字符设备和块设备的缓冲区进行有效的管理,以提高I/O的效率;差错控制,由于在I/O操作中的绝大多数错误都与设备无关,故主要由设备驱动程序处理,而设备独立性软件只处理那些设备驱动程序无法处理的错误;提供独立于设备的逻辑块,不同类型的设备信息交换单位是不同的,读取和传输速率也各不相同,因此设备独立性软件应负责隐藏这些差异,对逻辑设备使用并向高层软件提供大小统一的逻辑数据块。(2)向用户层向用户层(或文件层或文件层)软件提供统一接口。无论何种设备,它们向用户软件提供统一接口。无论何种设备,它们向用户所提供的接口应该是相同的所提供的接口应该是相同的。6 6.5 5.3 3 设备分配设备分配1 1设备分配中的数据结构设备分配中的数据结构1)设备控制表(DCT)设备类型:type设备标识符:deviceid设备状态:等待/不等待 忙/闲指向控制器表的指针重复执行次数或时间设备队列的队首指针DCT 1DCT 2DCT n设备控制表集合设备控制表中,除了有用于指示设备类型的字段type和设备标识字段deviceid外,还应含有下列字段:(1)设备队列队首指针。凡因请求本设备而未得到满足的进程,其PCB都应按照一定的策略排成一个队列,称该队列为设备请求队列或简称设备队列。其队首指针指向队首PCB。在有的系统中还设置了队尾指针。(2)设备状态。当设备自身正处于使用状态时,应将设备的忙/闲标志置“1”。若与该设备相连接的控制器或通道正忙,也不能启动该设备,此时则应将设备的等待标志置“1”。(3)与设备连接的控制器表指针。该指针指向该设备所连接的控制器的控制表。在设备到主机之间具有多条通路的情况下,一个设备将与多个控制器相连接。此时,在DCT中还应设置多个控制器表指针。(4)重复执行次数。2 2控制器控制表控制器控制表、通道控制表和系统设备表通道控制表和系统设备表(1)控制器控制表(COCT)。系统为每一个控制器都设置了一张用于记录本控制器情况的控制器控制表。(2)通道控制表(CHCT)。每个通道都配有一张通道控制表。(3)系统设备表(SDT)。这是系统范围的数据结构,其中记录了系统中全部设备的情况。每个设备占一个表目,其中包括有设备类型、设备标识符、设备控制表及设备驱动程序的入口等项。(c)系统设 备 表 SD T控制器标识符:controllerid控制器状态:忙/闲与控制器连接的通道表指针控制器队列的队首指针控制器队列的队尾指针通道标识符:channelid通道状态:忙/闲与通道连接的控制器表首址通道队列的队首指针通道队列的队尾指针(a)控制器表COCT(b)通道表CHCT表目1表目i设备类设备标识符DCT驱动程序入口6 6.6 6 用户层的用户层的I/OI/O软件软件6 6.6 6.1 1 系统调用与库函数系统调用与库函数(自学内容自学内容)6 6.6 6.2 2SPOOLingSPOOLing技术技术1 1什么是什么是SPOOLingSPOOLing为了缓和CPU的高速性与I/O设备低速性间的矛盾而引入了脱机输入、脱机输出技术。该技术是利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上;或者相反。事实上,当系统中引入了多道程序技术后,完全可以利用其中的一道程序,来模拟脱机输入时的外围控制机功能,把低速I/O设备上的数据传送到高速磁盘上;再用另一道程序来模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上。这样,便可在主机的直接控制下,实现脱机输入、输出功能。此时的外围操作与CPU对数据的处理同时进行,我们把这种在联机情况下实现的同时外围操作称为SPOOLing(SimultaneausPeriphernal Operating On Line),或称为假脱机操作。2 2SPOOLingSPOOLing系统的组成系统的组成SPOOLing系统必须建立在具有多道程序功能的操作系统上,而且还应有高速随机外存的支持,这通常是采用磁盘存储技术。SPOOLing系统主要有以下三部分:(1)输入井和输出井。这是在磁盘上开辟的两个大存储空间。输入井是模拟脱机输入时的磁盘设备,用于暂存I/O设备输入的数据;输出井是模拟脱机输出时的磁盘,用于暂存用户程序的输出数据。(2)输入缓冲区和输出缓冲区。为了缓和CPU和磁盘之间速度不匹配的矛盾,在内存中要开辟两个缓冲区:输入缓冲区和输出缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。(3)输入进程SPi和输出进程SPo。这里利用两个进程来模拟脱机I/O时的外围控制机。其中,进程SPi模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井,当CPU需要输入数据时,直接从输入井读入内存;进程SPo模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上。SPOOLing系统的组成输入进程SPi输出进程SPo输入缓冲区Bi输出缓冲区Bo输入井输出井磁盘输入设备输出设备3 3共享打印机共享打印机打印机是经常要用到的输出设备,属于独占设备。利用SPOOLing技术,可将之改造为一台可供多个用户共享的设备,从而提高设备的利用率,也方便了用户。共享打印机技术已被广泛地用于多用户系统和局域网络中。当用户进程请求打印输出时,SPOOLing系统同意为它打印输出,但并不真正立即把打印机分配给该用户进程,而只为它做两件事:由输出进程在输出井中为之申请一个空闲磁盘块区,并将要打印的数据送入其中;输出进程再为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到请求打印队列上。如果还有进程要求打印输出,系统仍可接受该请求,也同样为该进程做上述两件事。如果打印机空闲,输出进程将从请求打印队列的队首取出一张请求打印表,根据表中的要求将要打印的数据,从输出井传送到内存缓冲区,再由打印机进行打印。打印完后,输出进程再查看请求打印队列中是否还有等待打印的请求表。若有,又取出队列中的第一张表,并根据其中的要求进行打印,如此下去,直至请求打印队列为空,输出进程才将自己阻塞起来。仅当下次再有打印请求时,输出进程才被唤醒。4 4SPOOLingSPOOLing系统的特点系统的特点SPOOLing系统具有如下主要特点:(1)提高了I/O的速度。这里,对数据所进行的I/O操作,已从对低速I/O设备进行的I/O操作,演变为对输入井或输出井中数据的存取,如同脱机输入输出一样,提高了I/O速度,缓和了CPU与低速I/O设备之间速度不匹配的矛盾。(2)将独占设备改造为共享设备。因为在SPOOLing系统中,实际上并没为任何进程分配设备,而只是在输入井或输出井中为进程分配一个存储区和建立一张I/O请求表。这样,便把独占设备改造为共享设备。(3)实现了虚拟设备功能。宏观上,虽然是多个进程在同时使用一台独占设备,而对于每一个进程而言,他们都会认为自己是独占了一个设备。当然,该设备只是逻辑上的设备。SPOOLing系统实现了将独占设备变换为若干台对应的逻辑设备的功能。6.7缓缓 冲冲 管管 理理6 6.7 7.1 1缓冲的引入缓冲的引入(1)缓和CPU与I/O设备间速度不匹配的矛盾。(2)减少对CPU的中断频率,放宽对CPU中断响应时间的限制。(3)解决数据粒度不匹配问题。(4)提高CPU和I/O设备之间的并行性。图6-22利用缓冲寄存器实现缓冲1位缓冲9.6 Kb/s8位缓冲寄存器送内存9.6 Kb/s8位缓冲寄存器9.6 Kb/s送内存(b)(a)(c)6 6.7 7.2 2单缓冲和双缓冲单缓冲和双缓冲1 1单缓冲单缓冲(Single(Single Buffer)Buffer)在单缓冲情况下,每当用户进程发出一I/O请求时,操作系统便在主存中为之分配一缓冲区,如图6-23 所示。在块设备输入时,假定从磁盘把一块数据输入到缓冲区的时间为T,操作系统将该缓冲区中的数据传送到用户区的时间为M,而CPU对这一块数据处理(计算)的时间为C。由于T和C是可以并行的(见图6-23),当TC时,系统对每一块数据的处理时间为M+T,反之则为M+C,故可把系统对每一块数据的处理时间表示为Max(C,T)+M。图6-23单缓冲工作示意图工作区处理(C)缓冲区传送(M)输入(T)I/O设备(a)T1M1C1T2M2C2T3M3C3T4t(b)用户进程2 2双缓冲双缓冲(Double(Double Buffer)Buffer)为了加快输入和输出速度,提高设备利用率,人们又引入了双缓冲区机制,也称为缓冲对换(Buffer Swapping)。在设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。此时操作系统可以从第一缓冲区中移出数据,并送入用户进程(见图6-24)。接着由CPU对数据进行计算。在双缓冲时,系统处理一块数据的时间可以粗略地认为是Max(C,T)。如果CT,则可使CPU不必等待设备输入。对于字符设备,若采用行输入方式,则采用双缓冲通常能消除用户的等待时间,即用户在输入完第一行之后,在CPU执行第一行中的命令时,用户可继续向第二缓冲区输入下一行数据。图6-24双缓冲工作示意图工作区用户进程缓冲区1缓冲区2I/O 设备T1(缓 冲 1)M1C1M2C2M3C3T2(缓 冲 2)T3(缓 冲 3)M4C4T4(缓 冲 4)(a)(b)图6-25双机通信时缓冲区的设置缓冲区缓冲区A机B机(a)单缓冲发送缓冲区接收缓冲区接收缓冲区发送缓冲区A机B机(b)双缓冲6 6.7 7.3 3环形缓冲区环形缓冲区1 1环形环形缓冲区的缓冲区的组成组成(1)多个缓冲区。在循环缓冲中包括多个缓冲区,其每个缓冲区的大小相同。作为输入的多缓冲区可分为三种类型:用于装输入数据的空缓冲区R、已装满数据的缓冲区G以及计算进程正在使用的现行工作缓冲区C,如图6-26所示。(2)多个指针。作为输入的缓冲区可设置三个指针:用于指示计算进程下一个可用缓冲区G的指针Nextg、指示输入进程下次可用的空缓冲区R的指针Nexti,以及用于指示计算进程正在使用的缓冲区C的指针Current。图6-24环形缓冲区RGGGRG165423NextiNextgRGGGRC165423NextiNextgCurrent2 2循环缓冲区的使用循环缓冲区的使用计算进程和输入进程可利用下述两个过程来使用循环缓冲区。(1)Getbuf过程。当计算进程要使用缓冲区中的数据时,可调用Getbuf过程。该过程将由指针Nextg所指示的缓冲区提供给进程使用,相应地,须把它改为现行工作缓冲区,并令Current指针指向该缓冲区的第一个单元,同时将Nextg移向下一个G缓冲区。类似地,每当输入进程要使用空缓冲区来装入数据时,也调用Getbuf过程,由该过程将指针Nexti所指示的缓冲区提供给输入进程使用,同时将Nexti指针移向下一个R缓冲区。(2)Releasebuf过程。当计算进程把C缓冲区中的数据提取完毕时,便调用Releasebuf过程,将缓冲区C释放。此时,把该缓冲区由当前(现行)工作缓冲区C改为空缓冲区R。类似地,当输入进程把缓冲区装满时,也应调用Releasebuf过程,将该缓冲区释放,并改为G缓冲区。3 3进程同步进程同步使用输入循环缓冲,可使输入进程和计算进程并行执行。相应地,指针Nexti和指针Nextg将不断地沿着顺时针方向移动,这样就可能出现下述两种情况:(1)Nexti指针追赶上Nextg指针。这意味着输入进程输入数据的速度大于计算进程处理数据的速度,已把全部可用的空缓冲区装满,再无缓冲区可用。此时,输入进程应阻塞,直到计算进程把某个缓冲区中的数据全部提取完,使之成为空缓冲区R,并调用Releasebuf过程将它释放时,才将输入进程唤醒。这种情况被称为系统受计算限制。(2)Nextg指针追赶上Nexti指针。这意味着输入数据的速度低于计算进程处理数据的速度,使全部装有输入数据的缓冲区都被抽空,再无装有数据的缓冲区供计算进程提取数据。这时,计算进程只能阻塞,直至输入进程又装满某个缓冲区,并调用Releasebuf过程将它释放时,才去唤醒计算进程。这种情况被称为系统受I/O限制。5 5.3 3.4 4缓冲池缓冲池1 1缓冲池的组成缓冲池的组成对于既可用于输入又可用于输出的公用缓冲池,其中至少应含有以下三种类型的缓冲区:空(闲)缓冲区;装满输入数据的缓冲区;装满输出数据的缓冲区。为了管理上的方便,可将相同类型的缓冲区链成一个队列,于是可形成以下三个队列:(1)空缓冲队列emq。这是由空缓冲区所链成的队列。其队首指针F(emq)和队尾指针L(emq)分别指向该队列的首缓冲区和尾缓冲区。(2)输入队列inq。这是由装满输入数据的缓冲区所链成的队列。其队首指针F(inq)和队尾指针L(inq)分别指向该队列的首缓冲区和尾缓冲区。(3)输出队列outq。这是由装满输出数据的缓冲区所链成的队列。其队首指针F(outq)和队尾指针L(outq)分别指向该队列的首缓冲区和尾缓冲区。除了上述三个队列外,还应具有四种工作缓冲区:用于收容输入数据的工作缓冲区;用于提取输入数据的工作缓冲区;用于收容输出数据的工作缓冲区;用于提取输出数据的工作缓冲区。2 2GetbufGetbuf过程和过程和PutbufPutbuf过程过程在“数据结构”课程中,曾介绍过队列和对队列进行操作的两个过程,它们是:(1)Addbuf(type,number)过程。该过程用于将由参数number所指示的缓冲区B挂在type队列上。(2)Takebuf(type)过程。该过程用于从type所指示的队列的队首摘下一个缓冲区。为使诸进程能互斥地访问缓冲池队列,可为每一队列设置一个互斥信号量MS(type)。此外,为了保证诸进程同步地使用缓冲区,又为每个缓冲队列设置了一个资源信号量RS(type)。Procedure Getbuf(type)beginWait(RS(type);Wait(MS(type);B(number):=Takebuf(type);Signal(MS(type);endProcedure Putbuf(type,number)beginWait(MS(type);Addbuf(type,number);Signal(MS(type);Signal(RS(type);end 3 3缓冲区的工作缓冲区的工作方式方式(1)收容输入。在输入进程需要输入数据