《计算机操作系统》汤小丹_第1页
《计算机操作系统》汤小丹_第2页
《计算机操作系统》汤小丹_第3页
《计算机操作系统》汤小丹_第4页
《计算机操作系统》汤小丹_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

湘潭大学第7章

输入/输出系统7.1I/O系统的功能、模型和接口I/O系统管理的主要对象是I/O设备和相应的设备控制器。主要任务是完成用户提出的I/O请求,提高I/O速率,以及提高设备利用率,并能为更高层的进程方便地使用这些设备提供手段。7.1.1I/O系统的基本功能I/O系统应具有的基本功能:隐藏物理设备的细节。与设备的无关性。提供处理机和I/O设备的利用率。对I/O设备进行控制。能确保对设备的正确共享。错误处理。7.1.2I/O系统的层次结构和模型I/O软件的层次结构用户层软件产生I/O请求,格式化I/O,SPOOLing设备独立性软件映射、保护、分块、缓冲、分配设备驱动程序设置设备寄存器;检查状态中断处理程序硬件执行I/O操作I/O系统中各种模块之间的层次视图应用软件设备管理驱动程序中断处理程序控制器设备I/O系统接口软硬件接口设备独立性软件7.1.3I/O系统接口块设备接口块设备:数据的存储和传输以数据块为单位的设备,典型的块设备是磁盘,可寻址,I/O常采用DMA方式。块设备接口是块设备管理程序与高层之间的接口,反映了大部分磁盘存储器和光盘存储器的本质特征。流设备接口流设备又称字符设备接口是流设备管理程序与高层之间的接口,用于控制字符设备的I/O。字符设备:数据的存取和传输是以字符为单位的设备,不可寻址,I/O常采用中断驱动方式。网络通信接口7.2I/O设备和设备控制器I/O设备(1)I/O设备的类型按使用特性分类:存储设备。也称外存、辅存,是存储信息的主要设备。I/O设备。又可分为输入设备,输出设备和交互式设备。按传输速率分类:可分为低速(1~102字节)、中速(103~105)、高速(105~109)三类。(2)设备与控制器之间的接口通常设备并不是直接与CPU进行通信,而是与设备控制器通信。因此在设备与设备控制器之间应有一接口。在该接口中有三种类型的信号,各对应一条信号线:(1)数据信号线。传送数据信号,对输入而言,是由设备发送给设备控制器的;对输出而言,是由设备控制器所接收的比特流。(2)控制信号线。作为设备控制器向I/O设备发送控制信号的通路。由设备控制器发送给设备,用于规定设备操作的信号。(3)状态信号线。用于传送指示设备的当前状态的信号。设备控制器设备控制器是CPU与I/O设备之间的接口,其用途是接收从CPU发来的命令,并去控制I/O设备工作。设备控制器是一个可编址设备。依其复杂性可分成两大类:一类是用于控制字符设备的控制器;另一类是用于控制块设备的控制器。(1)设备控制器的基本功能接收和识别命令:接收和译码,需要控制寄存器和命令译码器。数据交换:实现CPU控制器;控制器设备的数据交换,需要数据寄存器。标识和报告设备状态:需要状态寄存器。地址识别:设备、寄存器有地址,需要配置地址译码器。数据缓冲区。差错控制。(2)设备控制器的组成:大多数控制器都由三部分组成:设备控制器与处理机的接口、设备控制器与设备的接口、I/O逻辑。设备控制器的组成图示I/O逻辑控制器与设备接口1控制器与设备接口i…数据寄存器控制/状态寄存器CPU与控制器接口控制器与设备接口数据线地址线控制线数据状态控制数据状态控制…用于实现对设备的控制。主要任务是:对处理机发送给控制器的I/O命令进行译码;对发送给控制器的地址进行译码,根据所译出的命令对作选设备进行控制。内存映像I/O驱动程序将抽象命令转换出一系列具体命令、参数等数据,装入设备控制器的相应寄存器,由控制器来执行这些命令,具体实施对I/O设备的控制,这一工作可用两种方法来完成。利用特定的I/O指令:访问内存和访问设备需要两种不同的指令。内存映像I/O:该方式统一了对内存和对控制器的访问的方法,简化了I/O编程。基本做法是,在编址上不再区分内存单元地址和设备控制器地址,都采用k。当0≤k≤n-1时,认为是内存地址,当k≥n时,认为是某个控制器的寄存器地址。7.3中断机构和中断处理程序中断简介中断和陷入中断向量表和中断优先级对多中断源的处理方式屏蔽(禁止)中断嵌套中断142、中断处理程序中断处理流程:唤醒被阻塞的驱动程序进程中断请求信号保护被中断进程的CPU环境分析中断原因,转入相应的中断处理程序终端中断处理程序打印机中断处理程序…恢复被中断进程的CPU现场返回被中断的进程,继续执行7.4设备处理程序7.5.1设备驱动程序概述设备驱动程序的功能接收由与设备无关的软件发来的命令和参数,将命令中的抽象要求转换为与设备相关的低层操作序列。检查用户I/O请求的合法性,了解I/O设备的状态,传递有关参数,设置设备的工作方式。发出I/O命令,若设备空闲,便立即启动I/O设备,完成指定的I/O操作;若设备忙,则将请求者的请求块,挂在设备队列上等待。及时响应由控制器或通道发来的中断请求,并根据中断类型调用相应的中断处理程序进行处理。设备驱动程序的特点驱动程序是实现在与设备无关的软件和设备控制器之间通信和转换的程序。驱动程序与设备控制器和I/O设备的硬件特性紧密相关。对于不同类型的设备,应配置不同的驱动程序。驱动程序与I/O设备所采用的I/O控制方式紧密相关。驱动程序中的一部分程序必须用汇编语言书写,目前有很多驱动程序,其基本部分已固化。驱动程序应运行可重入。设备处理方式根据在设备处理时是否设置进程及设置什么样的进程,其方式可分为三类:为每一类设备设置一个进程,该进程专门执行这类设备的I/O操作。在整个系统中设置一个I/O进程,专门负责对系统中所有各类设备的I/O操作。也可以设置一个输入进程和一个输出进程。不设置专门的设备处理进程,而是为各类设备设置相应的设备处理程序,供用户进程或系统进程调用。7.4.2设备处理程序的处理过程设备驱动程序的主要任务是启动指定设备。但在启动之前还必须完成必要的准备工作,在完成所有的准备工作后,才向设备控制器发送一条启动命令。其处理过程是:将抽象要求转换为具体要求;对服务请求进行校验;检查设备的状态;传送必要的参数;启动I/O设备。驱动程序发出I/O命令后,基本的I/O是在设备控制器的控制下进行的。通常,I/O操作所要完成的工作较多,需要一定的时间,此时驱动程序进程把自己阻塞起来,直至中断到来时才将它唤醒。7.4.3对I/O设备的控制方式在I/O控制的整个发展过程中,都始终贯穿着的宗旨是:尽量减少主机对I/O控制的干预,把主机从繁杂的I/O控制事务中解脱出来,以便主机更多地去完成数据处理任务。I/O控制的发展经历了使用轮询的可编程I/O方式、使用中断的可编程I/O控制方式、DMA控制方式。201、使用轮询的可编程I/O方式向I/O控制器发读命令读I/O控制器的状态未就绪就绪CPU→I/OI/O→CPU向存储器中写字从I/O控制器中读入字检查状态?传送完成?I/O→CPUCPU→内存出错NY下条指令212、使用中断的可编程I/O控制方式向I/O控制器发读命令读I/O控制器的状态就绪CPU→I/OI/O→CPU向内存中写字从I/O控制器中读字检查状态?传送完成?I/O→CPUCPU→内存出错NY下条指令CPU做其他事中断3、直接存储器访问(DMA)方式一、DMA控制方式的引入:前述的两种I/O方式是以字(节)为单位进行I/O的,每完成一个字的I/O,控制器便要向CPU请求一次中断。这种方式用于块设备的I/O,其效率是极低的。为进一步减少CPU对I/O的干预,而引入DMA方式,其特点有:1、数据传送的基本单位是数据块;2、所传送的数据是从设备直接送入内存,或相反;3、仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整块数据的传送是在控制器的控制下完成的。23

直接存储器访问DMA控制方式二、DMA控制器的组成I/O控制逻辑DRMARDCCRCPUcountDMA控制器内存系统总线命令DMA控制器的三个组成部分:(1)主机与DMA控制器的接口.(2)DMA控制器与块设备的接口.(3)I/O控制逻辑.命令/状态寄存器:用于接受从CPU发来的I/O命令或有关控制信息,或设备的状态。主机—控制器接口控制器与块设备接口数据寄存器:暂存从设备到内存或从内存到设备的数据.数据计数器:用于存放本次CPU要读或写的字(节)数。内存地址寄存器:用于存放数据从设备传送到内存的目标地址,或由内存到设备的内存源地址。24直接存储器访问DMA控制方式设置MAR和DC初值启动DMA传送命令挪用存储器周期传送数据字存储器地址增1字计数寄存器减1DC=0?请求中断在继续执行用户程序的同时,准备一次传送YN工作过程:7.5与设备无关的I/O软件设备独立性也称设备无关性。其基本含义是:应用程序独立于具体使用的物理设备,使用逻辑设备名来请求某类设备,系统在执行时,则使用该类设备的物理设备名。驱动程序是一个与硬件(或设备)紧密相关的软件,为实现设备独立性,必须再在驱动程序之上设置一层设备独立性软件。7.5.1基本概念以物理设备名使用设备早期的OS,应用程序使用I/O设备时,都使用设备的物理设备名称,使应用程序与系统中的物理设备直接相关。这种方式导致应用程序不灵活,给用户带来不便,不利于提高设备利用率。引入逻辑设备名为了实现与设备的无关性,引入了逻辑设备和物理设备两个概念。逻辑设备是抽象的设备名。在应用程序中使用逻辑设备名来使用设备。好处是:设备分配时的灵活性。易于实现I/O重定向:所谓I/O重定向是指用于I/O操作的设备可以更换,而不必修改应用程序。逻辑设备名到物理设备名的转换7.5.2实现与设备无关性的软件实现与设备无关性的软件是I/O系统高层软件,其下是设备驱动程序。在与设备无关的软件中,包括了执行所有设备公有操作的软件:设备驱动程序的统一接口,将逻辑设备名映射为物理设备名,进一步可找到相应物理设备的驱动程序,对设备进行保护,禁止用户直接访问设备;缓冲管理;差错控制。独占设备的分配与回收;提供独立于设备的逻辑数据块。7.5.3设备分配在多道程序环境下,系统中的设备不允许用户自行使用,而必须由系统分配。7.4.1设备分配中的数据结构进行设备分配时,通常借助于一些表格的帮助。表格中记录了相应设备或控制器的状态以及对设备或控制器进行控制所需的信息。在进行设备分配时所需的数据结构表格有设备控制表、控制器控制表、通道控制表、系统设备表等。291、设备分配中的数据结构(1)一、设备控制表DCT:系统为每一个设备都设置一张设备控制表,用于记录本设备的情况。设备控制表集合DCT1DCT2DCTn设备类型type设备标始符deviceID设备状态:等待/不等待,忙/闲指向控制器表的指针重复执行次数或时间设备队列的队首指针因请求本设备而未得到满足的进程,其PCB按照一定的策略排成一队列,该队列简称设备队列。其队首指针指向队首PCB。当设备本身正处于使用状态时,应将设备的忙标志置1。若与该设备相连接的控制器或通道正忙,不能启动该设备,此时将设备的等待标志置1指向该设备所连接的控制器的控制表。在具有多条通路的情况下,一个设备将与多个控制器连接。此时在DCT中还应设置多个控制器表指针。若发生传送错误,并不立即认为传送失败,而是重新传送,并由系统规定设备在工作中发生错误时,应重复执行的次数。重复执行时,若能恢复正常,则仍认为传送成功。当屡次失败而使重复执行次数达到规定值其传送还不成功时,才认为传送失败。30设备分配中的数据结构(2)二、控制器控制表、通道表和系统设备表1、控制器控制表COCT:系统为每一个控制器都设置一张用于记录本控制器情况的控制器控制表。(P214图7-15(a))2、通道控制表CHCT:每个通道都配置一张通道控制表。(P214图7-15(a))3、系统设备表SDT:这是系统范围的数据结构,其中记录了系统中全部设备的情况。每个设备占一个表目。(见图)表目1…表目i…设备类型设备标识符DCT驱动程序入口2、设备分配时应考虑的因素一、考虑设备的固有属性:设备的固有属性可分成两类:1、独占,这类设备在一段时间内,只允许一个进程独占。对其采用的分配策略是独享分配,但这种分配方式使设备利用不充分,且会引起死锁。2、共享,指一个设备允许多个进程同时共享。对这类设备可同时分配给多个进程使用,但对这些进程的访问应合理调度。此外,还有虚拟设备,这是对独占设备经虚拟技术改造后的设备,已属可共享设备。二、设备分配算法:对设备的分配算法通常有两种,即先来先服务算法和优先级高者优先算法。三、设备分配中的安全性:1、安全分配方式:每当进程发出I/O请求后,便进入阻塞状态,直到其I/O操作完成时才被唤醒。这种方式已摒弃了造成死锁的四个必要条件之一的“请求和保持”条件,因而是安全的。其缺点是进程进展缓慢,即CPU与I/O设备是串行工作的。2、不安全工作方式:进程发出I/O请求后仍继续运行,需要时又可发出第二、第三个I/O请求。仅当进程所需要的设备已被另一进程占用时,该进程才进入阻塞状态。这种方式可能造成死锁,应进行是否会发生死锁的安全性计算。3、独占设备的分配程序一、基本的设备分配程序:对于具有I/O通道的系统,在进程提出I/O请求后,系统的设备分配程序可按下述步骤进行设备分配:1、分配设备;2、分配控制器;3、分配通道。二、设备分配程序的改进:上述程序中进程是以物理设备名来提出I/O请求的,另外采用的是单通路的I/O系统结构,易产生“瓶颈”现象。为此需加以改进,可从两方面入手:1、增加设备的独立性;2、考虑多通路情况。347.5.4逻辑设备名到物理设备名映射的实现1、逻辑设备表LUT:其格式是

2、LUT的设置问题:可采取两种方式,一种是整个系统设置一张LUT,一种是为每个用户设置一张LUT。逻辑设备名物理设备名驱动程序入口地址/dev/tty31024/dev/print52046………整个系统设置一张LUT,可采用这种格式。由于系统中所有进程的设备分配情况都记录在同一张LUT中,因此不允许表中有相同的逻辑设备名,即要求所有用户不使用相同的逻辑设备名。在多用户环境下难以做到,主要用于单用户系统。逻辑设备名系统设备表指针/dev/tty3/dev/print5……为每个用户设置一张LUT,可采用这种格式。当用户登录时,便为用户建立一个进程,同时为之建立一张LUT,并将其放入进程PCB中。由于在多用户系统中都配置了系统设备表,故LUT可采用以上格式。7.6用户层的I/O软件7.6.1系统调用与库函数系统调用应用程序通过系统调用,间接调用OS中的I/O过程,对I/O设备进行操作。库函数用户程序通过调用对应的库函数来使用系统调用,这些库函数与系统调用连接在一起,被嵌入在运行时装入内存的二进制程序中。系统调用执行过程系统调用命令用户态系统态系统调用调用返回7.6.2假脱机系统一、什么是SPOOLing:在多道程序系统中,利用一道程序来模拟脱机输入时的外围控制机的功能,把低速I/O设备上的数据传送到高速磁盘上;再利用另一道程序模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上。这样,在主机的直接控制下,实现脱机输入输出功能。此时的外围操作与CPU对数据的处理同时进行,把这种在联机情况下实现的同时外围操作称为SPOOLing,或称为假脱机操作。其特点有三:一是提高了I/O速度;二是将独占设备改造为共享设备;三是实现了虚拟设备功能。二、SPOOLing系统的组成:SPOOLing系统由三部分组成,由于是对脱机输入输出工作的模拟,故必须有高速随机外存的支持,通常采用磁盘。1、输入井和输出井:是磁盘上开辟的两个大存储空间。输入井用于收容I/O设备输入的数据。输出井用于收容用户程序的输出数据。2、输入缓冲区和输出缓冲区:内存中开辟的两个缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。3、输入进程SPi和输出进程SP0:SPi模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井。CPU需要输入的数据时,直接从输入井读入内存。SP0模拟脱机输出时的外围控制机。4、请求打印队列:由若干张请求打印表形成的队列,系统为每个请求打印的进程建立一张请求打印表。三、共享打印机:打印机属于独享设备。通过SPOOLing技术可将其改造为共享设备。当用户进程请求打印输出时,SPOOLing系统表示同意,但并不真正将打印机分配给该用户进程,只是为他做两件事:(1)由SP0在输出井中为之申请一空闲盘块区,并将要打印的数据送入其中;(2)SP0为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到请求打印队列上。若打印机空闲,SP0

从请求打印队列的对首取出一张请求打印表,根据表中的要求将要打印的数据从输出井传送到内存缓冲区,再送打印机打印。直到请求打印队列空为止,SP0才将自己阻塞,到下次再有打印请求时才被唤醒。7.6.3守护进程对假脱机系统实现打印机共享这一方案进行修改,为打印机建立一个守护进程。守护进程是允许使用打印机的唯一进程,所有需要使用打印机的进程,都需将一份要求打印的文件放在假脱机文件队列(目录)中。如果守护进程睡眠,便将它唤醒,由它按照目录中的说明进行打印,直到全部文件打印完毕,守护进程无事可做,又去睡眠,等待用户进程再次发出打印请求。7.7缓冲区管理要提高I/O速度和设备利用率,在很大程度上要借助缓冲技术来实现。缓冲管理的主要功能是组织好这些缓冲区,并提供获得和释放缓冲区的手段。7.7.1缓冲的引入在OS中,引入缓冲的主要原因可归结为以下几点:缓和CPU与I/O设备间速度不匹配的矛盾。减少对CPU的中断频率,放宽对中断响应时间的限制。解决数据粒度不匹配的问题提高CPU和I/O设备之间的并行性。7.7.2单缓冲区和双缓冲区单缓冲区每当一用户进程发出一I/O请求时,OS便在主存中为之分配一缓冲区。在块设备输入时,先从磁盘把一块数据输入到缓冲区,再由OS将缓冲区的数据送用户区,然后便是CPU对这一块数据进行计算。在字符设备输入时,缓冲区用于暂存用户输入的一行数据。输入期间,用户进程被挂起以等待一行数据输入完毕;输出时,用户进程将一行数据送入缓冲区后,继续执行计算。当用户进程已有第二行数据输出时,若第一行数据尚未提取完毕,用户进程应阻塞。双缓冲区双缓冲工作方式也称缓冲对换方式。块设备输入时,先将数据输入第一个缓冲区,装满后便转向第二个缓冲区,此时OS可将第一缓冲区中的数据送用户进程区,接着由CPU对数据进行计算。设一块数据从磁盘输入到缓冲区所费时间为T,CPU对这块数据的计算时间为C,双缓冲时,系统处理一块数据的时间可粗略记为max(C,T)。若C<T,可使块设备连续输入;若C>T,可使CPU不必等待设备输入。对于字符设备,若采用行输入方式,则在双缓冲工作方式中,通常用户进程不会被阻塞,即用户在输完一行后,在CPU执行第一行中的命令时,用户可继续向第二缓冲区输入下一行数据。447.7.3环形缓冲区一、循环缓冲的组成1、多个缓冲区:在循环缓冲中含有多个缓冲区,每个缓冲区的大小相同。缓冲区可分成三种类型:(1)空缓冲区R.用于存放输入数据。(2)已满缓冲区G。其中的数据提供给计算进程使用。(3)现行工作缓冲区C。计算进程正在使用的缓冲区。2、多个指针:对用于输入的多缓冲,设置三个指针:(1)Nextg。指示计算进程下一个可用的缓冲区G;(2)Nexti。指示输入进程下次可用的空缓冲区R;(3)Current。指示计算进程正在使用的缓冲区单元。45多个缓冲区示意图GGCRGR165423GNextgCNextgCurrentNextiNexti返回26G46GGCRGR165423多个指针示意图CurrentNextiNextg477.3.4循环缓冲(2)二、缓冲区的使用:计算进程和输入进程可利用下述两个过程来使用循环缓冲区。1、Getbuf过程:每当计算进程要使用缓冲区的数据时,可调用该过程。类似地,每当输入进程要使用空缓冲来装入数据时,也可调用该过程。2、Releasebuf过程:当计算进程把G缓冲区中的数据提完时,便可调用该过程将缓冲区释放。此时把缓冲区由C改为R。类似地,当输入进程将缓冲区装满时,也调用该过程,将该缓冲区释放,并改为G缓冲区。如图487.3.4循环缓冲(3)三、进程同步:使用输入缓冲可使输入进程和计算进程并行执行。这时指针Nexti和Nextg不断地沿顺时钟方向移动,这样就可能出现下述两种情况。1、Nexti追赶上Nextg:这意味着全部缓冲区已满,此时输入进程应被阻塞,直至计算进程把某个缓冲区中数据全部提完,使之成为空缓冲R,并调用Releasebuf过程将其释放,才将输入进程唤醒。这种情况称为系统受计算限制。2、Nextg追赶上Nexti:意味着全部缓冲区已空。此时计算进程只能阻塞,直至输入进程又装满某缓冲区,并调用Releasebuf过程将它释放,才去唤醒计算进程。这种情况称为系统受I/O限制。7.7.4缓冲池循环缓冲区仅适用某特定的I/O进程和计算进程,属专用缓冲区。目前广泛流行公用缓冲池,池中的缓冲区可供多个进程共享。一、缓冲池的组成:对于既可用于输入又可用于输出的公用缓冲池,其中至少应含有三种类型的缓冲区,(1)空缓冲区;(2)装满输入数据的缓冲区;(3)装满输出数据的缓冲区。可将相同类型的缓冲区链成一个队列,于是可形成三个队列:(1)空缓冲队列emq,由空缓冲区所链成.其对首指针F(emq)和队尾指针L(emq)分别指向队列的首缓冲区和尾缓冲区.(2)输入队列inq,由装满输入数据的缓冲区所链成的队列。其对首指针F(inq)和队尾指针L(inq)分别指向队列的首、尾缓冲区。(3)输出队列outq,由装满输出数据的缓冲区所链成的队列。其对首指针F(outq)和队尾指针L(outq)分别指向队列的首、尾缓冲区。此外,还应具有四种工作缓冲区:(1)用于收容输入数据的工作缓冲区;(2)用于提取数据的工作缓冲区;(3)收容输出数据的工作缓冲区;(4)提取输出数据的工作缓冲区。51

二、Getbuf过程和Putbuf过程SProcedureGetbuf(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此过程是由Takebuf(type)过程改造后而形成,原因是队列本身是临界资源,多个进程访问同一个队列时应互斥且需要同步。Takebuf(type)用于从type所指定的队列的队首,摘下一缓冲区。互斥信号量,为每个队列设置一个,使得诸进程能互斥地访问缓冲区队列。资源信号量,每个缓冲队列设置一个,以保证同步地使用缓冲区。由Addbuf(type,number)改造而成。Addbuf(type,number)的作用是将由参数number所指示的缓冲区,挂在type队列上。52缓冲池(4)三、缓冲区的工作方式hinsinhoutsout用户程序收容输入提取输出提取输入收容输出缓冲池输入进程需要输入时,调用Getbuf(emq),从emq队列的队首摘下一空缓冲区,作为收容输入工作缓冲区。然后把数据输入其中,装满后再调用Putbuf(inq,hin),将该缓冲区挂在输入队列inq的队尾。计算进程需要输入数据时,调用Getbuf(inq),从输入队列取得一缓冲区作为提取输入工作区sin,计算进程从中提取数据。计算进程用完该数据后,调用Putbuf(emq,sin),将该缓冲区挂到空缓冲队列emq上计算进程需要输出时调用Getbuf(emq),从空缓冲队列emq的队首取得一空缓冲区,作为收容输出工作区hout。当其中装满输出数据后,又调用Putbuf(outq,hout),将该缓冲区挂在输出队列outq末尾。当要输出时,由输出进程调用Getbuf(outq),从输出队列的队首取得一装

温馨提示

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

评论

0/150

提交评论