操作系统【十一】

六、设备管理

1、IO系统

(1)IO硬件

计算机系统的一个重要组成部分是I/O系统。在该系统中包括:

用于实现信息输入、输出和存储功能的设备和相应的设备控制器,在有的大中型机中,还有I/O通道或I/O处理机。设备管理的对象主要是I/O设备,还可能要涉及到设备控制器和I/O通道。

设备管理的基本任务是完成用户提出的I/O请求,提高I/O速率以及改善I/O设备的利用率。

设备管理的主要功能:

  • 设备分配
  • 设备驱动(设备处理)
  • 缓冲区管理
  • 虚拟设备
  • 实现设备独立性

IO设备发展历程:详见计算机组成原理

分散连接——>总线连接—>DMA方式—>通道->IO处理机

(2)IO软件

IO软件:

(1)用户层I/O软件实现与用户交互的接口,用户可直接调用该层所提供的与I/O有关的的库函数对设备进行操作;

(2)设备独立性软件,实现与用户程序与设备驱动器的统一接口,设备命名 ,保护及设备的分配与释放等;

(3)设备驱动程序;

(4)中断处理程序。

2、I/O设备的类型

(1)IO设备类型

I/O设备类型繁多,在OS观点看,设备使用特性、数据传输速率、数据的传输单位、设备共享属性等都是重要的性能指标。可以按照不同角度对他们进行分类

① 按设备的使用特性分类,可把设备分为两类,第一类是存储设备,也称为外存活后备存储器、辅助存储器,是计算机系统用于存储信息的主要设备,该设备速度慢,容量大,价格便宜。第二类是输入/输出设备,可分为输入设备、输出设备和交互式设备,如键盘,鼠标,扫描仪,打印机,显示器等。

② 按传输速率分类,可将I/O设备分为三类,第一类是低速设备,其传输速率仅为每秒钟几个字节至几百个字节的设备,如键盘、鼠标等。第二类是中速设备,其传输速率为每秒数千个字节至十万个字节的设备,如行式打印机、激光打印机等。第三类是高速设备,其传输速率在数百个千字节至千兆字节的设备,如磁带机、磁盘机、光盘机等。

③ 按信息交换的单位分类,可把I/O设备分为两类,第一类为块设备,这类设备用于存储信息,信息以数据块为单位,如磁盘,每个盘块512B~4KB,传输速率较高,通常每秒钟几兆位,另一特征是可寻址,即对它可随机地读/写任一块,磁盘设备的I/O常采用DMA方式。第二类是字符设备,用于数据的输入和输出,其基本单位是字符,属于无结构类型,如打印机等,其传输速率较低,通常为几个字节至数千个字节,另一特征是不可寻址,即输入/出时不能指定数据的输入源地址及输出的目标地址,此外,常采用中断驱动方式。

④ 按设备的共享属性分类,可以分为三类,独占设备,在一段时间内只允许一个用户(进程)访问的设备,即临界资源。共享设备,在一段时间内允许多个进程同时访问的设备,当然,每一时刻仍然只允许一个进程访问,如磁盘(可寻址和可随机访问)。虚拟设备,通过虚拟技术将一台设备变换为若干台逻辑设备,供若干个用户(进程)同时使用。

通常,设备并不是直接与CPU进行通信,而是与设备控制器通信,因此,在I/O设备中应该含有与设备控制器之间的接口,在该接口有三种类型的信号,各对应一条信号线。

① 数据信号线,用于在设备控制器之间传送数据信号,对于输入设备而言,由外界输入的信号经转换器转换后所形成的数据,通常先送入缓冲器中,当数量达到一定的比特(字符)数后,再从缓冲器通过一组信号线传送给设备控制器。对输出设备而言,则先将从设备控制器经过数据信号线传送来的一批数据先暂存于缓冲器中,经转换器做适当转换后,再逐个字符地输出。

② 控制信号线,作为由设备控制器向I/O设备发送控制信号时的通路,该信号规定了设备将要执行的操作,如读操作(指由设备向控制器传送数据)或写操作(由控制器接受数据),或执行磁头移动等操作。

③ 状态信号线,用于传送设备当前状态的信号,设备的当前状态有正在读(或写);设备已读(写)完成,并准备好新的数据传送。

(2)设备控制器

设备控制器是计算机中的一个实体,其主要职责是控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换,它是CPU与I/O设备之间的接口,它接收从CPU发来的命令,并去控制I/O设备工作,以使处理从繁杂的设备控制事务中解脱出来。其是一个可编址的设备,当它仅控制一个设备时,它只有一个唯一的设备地址,若控制器可连接多个设备时,则应该含有多个设备地址,并使每个设备地址对应一个设备。设备控制器可以分为用于控制字符设备的控制器和用于控制块设备的控制器

设备控制器的基本功能如下

接收和识别命令,CPU可以向控制器发送多种不同的命令,设备控制器应能够接收并识别这些命令,为此,控制器中应具有相应的控制寄存器,用来存放接收的命令和参数,并对所接收的命令进行译码,相应的,在磁盘控制器中有多个寄存器和命令译码器。

数据交换,实现CPU与控制器之间、控制器与设备之间的数据交换,对于前者,通过数据总线,由CPU并行地将数据写入控制器,或从控制器中并行地读出数据,对于后者,是是被将数据输入到控制器,或从控制器传送给设备,为此,在控制器中必须设置一个数据寄存器。

标识和报告设备的状态,控制器应该几下设备的状态供CPU了解,在控制器中设置一状态寄存器,用其中的每一位来反映设备的某一种状态,当CPU将该寄存器的内存读入后,便可了解该设备的状态。

地址识别,系统中的每一个设备都有一个地址,而设备控制器又必须能够识别它所控制的每个设备的地址,此外,为使CPU能向(或从)寄存器中写入(或读出)数据,这些寄存器都应该具有唯一的地址,如硬盘控制器中各寄存器的地址分别为320~32F之一,控制器应该能正确识别这些地址,为此,需要在控制器中配置地址译码器。

数据缓冲,由于I/O设备的速率较低而CPU和内存速率很高,故在控制器中必须设置一个缓冲器,在输出时,用此缓冲器暂存由主机高速传来的数据,然后才以I/O设备所具有的速率将缓冲器的数据传送给I/O设备,在输入时,缓冲器则用于暂存从I/O设备送来的数据,待接收一批数据后,再将缓冲器中的数据高速地传送至主机。

差错控制,设备控制器监管对I/O设备传送来的数据进行差错检测,若发现传送中出现了错误,则向CPU报告,于是CPU将本次传送的数据作废,并重新传送一次,这样便可以确保数据输入的正确性。

由于设备控制器位于CPU与设备之间,既要与CPU通信,又要与设备通信,还应具有按照CPU所发来的命令去控制设备工作的功能,因此,现有的大多数控制器都是由如下的三部分组成。

设备控制器与处理机的接口,该接口用于实现CPU与设备控制器之间的通信,共有三类信号线,数据线、地址线、控制线,数据线与两类寄存器相连接,第一类是数据寄存器,第二类是控制/状态寄存器。

设备控制器与设备的接口,设备控制器可以连接一个或多个设备,相应地,在控制器中便有一个或多个设备接口,一个接口连接一台设备,在每个接口中都存在数据、控制和状态三种类型的信号,控制器中的I/O逻辑根据处理机发来的地址信号去选择一个设备接口。

I/O逻辑,用于实现对设备的控制,通过一组控制线与处理机交互,处理机利用该逻辑向控制器发送I/O命令,I/O逻辑对收到的命令进行译码,每当CPU要启动一个设备时,一方面将启动命令发送给控制器,另一方面又同时通过地址线把地址发送给控制器,由控制器的I/O逻辑对收到的地址进行译码,再根据所译出的命令对所选设备进行控制。

(3)IO通道

虽然在CPU与I/O设备之间增加了设备控制器后,可以大大减少CPU对I/O的干预,但是当主机所配置的外设很多时,CPU的负担仍然很重,因此,在CPU和设备控制器之间又增设了通道。其主要目的是为了建立独立的I/O操作,不仅使数据的传送能独立于CPU,而且也希望有关对I/O操作的组织、管理及其结束处理尽量独立,以保证CPU有更多的时间去进行数据处理。在设置了通道后,CPU只需要向通道发送一条I/O指令,通道在收到该指令后,便从内存中取出本次要执行的通道程序,然后执行该通道程序,仅当通道完成了规定的I/O任务后,才向CPU发中断信号。I/O通道是一种特殊的处理机,具有执行I/O指令的能力,并通过执行通道(I/O)程序来控制I/O操作,但I/O通道与一般的处理机不同,因为其指令类型单一同时没有自己的内存,与CPU共享主内存。

通道用于控制外围设备(包括字符设备和块设备),由于外围设备的类型较多,传输速率相差甚大,因为使通道具有多种类型,根据信息交换方式的不同,将通道分为以下三种。

字节多路通道,这是一种按照字节交叉方式工作的通道,通常都含有许多非分配型子通道,其数量可以几十到数百个,每个子通道连接一台I/O设备,并控制该设备的I/O操作,这些子通道按照时间片轮转方式共享主通道

数组选择通道,字节多路通道不适合连接高速设备,数组选择通道按数组进行数据传送,其通常只含有一个分配型子通道,在一段时间内只能执行一道通道程序,控制一台设备进行数据传送,致使当某台设备占用了该通道后,便一直由它独占,即使是它无数据传送,通道被闲置,也不允许其他设备使用该通道,直至该设备传送完毕释放该通道,其利用率很低。

数组多路通道,由于数组选择通道每次只允许一个设备传送数据,数组多路通道是将数组选择通道传输速率高和字节多路通道能使各子通道(设备)分时并行操作的优点相结合而形成的一种新通道,其含有多个非分配型子通道,具有很高的数据传输速率,其数据传输是按数组方式进行的。

由于通道价格昂贵,计算所设置的通道较少,提高通道的利用率的一种很有效的方法是增加设备到主机间的通路而不增加通道

img

3、I/O控制方式

(1)中断控制方式

在早起计算机系统中,由于无中断机构,处理机对I/O设备的控制采取程序I/O方式,或称为忙-等待方式,即在处理机向控制器发出一条I/O指令启动输入设备输入数据时,要同时把状态寄存器中的忙/闲标志busy设置为1,然后便不断地循环测试busy,只有当其为0时,表示输入已经送入控制器的数据寄存器中,于是处理机将数据寄存器中的数据取出,送入内存指定单元中,这样便完成了一个字(符)的I/O。

在程序I/O方式中,由于CPU的高速性和I/O设备的低速性,致使CPU的绝大部分时间都处于等待I/O设备完成数据I/O的循环测试中,造成对CPU的极大浪费。

(2)中断驱动I/O控制方式

当某进程要启动某个I/O设备工作时,便由CPU向相应的设备控制器发出一条I/O命令,然后立即返回继续执行原来的任务,设备控制器于是按照该命令的要求去控制指定I/O设备,此时,CPU与I/O设备并行操作。一旦数据进入数据寄存器,控制器便通过控制线向CPU发送一个中断信号,由CPU检查输入过程中是否出错,若无错,便由控制器发送取走数据的信号,再通过控制器及数据线将数据写入内存指定单元中。

在I/O设备输入每个数据的过程中,由于无需CPU干预,因而可使CPU与I/O设备并行工作,仅当完成一个数据输入时,才需CPU花费极短的时间去做一些中断处理。

(3)直接存储器访问(DMA)I/O控制方式

虽然中断驱动I/O比程序I/O方式更有效,但是,它仍是以字(节)为单位进行I/O的,每当完成一个字(节)的I/O时,控制器便要向CPU请求一次中断,换言之,采用中断驱动I/O方式时的CPU是以字(节)为单位进行干预的,将这种方式用于块设备的I/O是非常低效的,例如,为了从磁盘读取1KB的数据块,需要中断CPU1K次,为了进一步减少CPU对I/O的干预而引入了直接存储器访问方式,该方式的特点如下

① 数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次传送至少一个数据块。

② 所传送的数据是从设备直接送入内存的,或者相反。

③ 仅在传送一个或多个数据块的开始和结束时,需要CPU干预,整块数据的传送是在控制器的控制下完成的。

详见计算机组成原理DMA控制方式

(4)I/O通道控制方式

虽然DMA方式比起中断方式已经显著地减少CPU的干预,即已由以字(节)为单位的干预减少到了以数据块为单位进行干预,但CPU没发出一条I/O指令,也只能去读(或写)一个连续的数据块,而当我们需要一次去读多个数据块且将他们分别传送到不同的内存区域,或者相反时,则须由CPU分别发出多条I/O指令及进行多次中断才能完成。I/O通道方式是DMA的发展,它可以进一步减少CPU的干预,即把一个数据块的读(或写)为单位的干预减少为对一组数据块的读(或写)及有关的控制和管理为单位的干预。同时,可以实现CPU、通道、I/O设备的并行操作,提高资源利用率。

具有通道的机器一般是大、中型计算机,数据流通量很大。

与DMA的区别 :

  1. DMA借助硬件完成数据传送 通道利用一组通道命令与硬件一起完成数据传送;
  2. DMA控制器只能控制一台或几台同类设备, 而一个通道可 同时控制多台同类或不同类的设备。

通道是通过执行通道程序,并与设备控制器共同实现对I/O设备的控制的,通道程序是由一系列通道指令(或称为通道命令)所构成的,通道指令与一般的机器指令不同,它的每条指令都包含下列的信息。

操作码,操作码规定了指令所执行的操作,如读、写、控制等操作。

内存地址,内存地址标明字符送入内存(读操作)和从内存取出(写操作)时的内存首址。

计数,该信息表示本条指令所要读(或写)数据的字节数。

通道程序结束位P,该位用于表示通道程序是否结束,P=1表示本条指令是通道程序的最后一条指令。

记录结束标志R,R=0表示本通道指令与下一条指令所处理的数据是同属于一个记录,R=1表示这是处理某记录的最后一条指令。

下面给出了一个由六条通道指令所构成的简单通道程序,该程序的功能是将内存中不同地址的数据携程多个记录,其中,前三条指令是分别将813-892单元中的80个字符和1034-1173单元中的140个字符及5830-5889单元的60个字符携程一个记录,第四条指令是单独写一个具有300个字符的记录,第五、六条指令共写含500个字符的记录。

4、IO软件

(1)设备驱动程序

设备驱动程序,又称为设备处理程序,是所有与该设备的硬件相关和设备相关的代码的集合,是I/O进程与设备控制器之间的通信程序。

设备驱动程序在功能是上属于核心,但代码通常由设备制造厂家编写(遵循该操作系统的驱动程序与核心间的接口标准),是在核心之外的一个或多个文件。

主要任务:接收上层软件发来的抽象要求,转换为具体要求后,发送给设备控制器,启动设备去执行;将设备控制器发来的信号传送给上层软件。

驱动程序与硬件密切相关,应为每一类设备配置一种驱动程序;或为非常类似的两类设备配置一个驱动程序。

(2)与设备无关的I/O软件(主要是设备独立性软件)

设备独立性(Device Independence)的概念——应用程序独立于具体使用的物理设备。

鉴于驱动程序是一个与硬件(或设备)紧密相关的软件,必须在驱动程序之上设置一层软件,称为设备独立性软件,以执行所有设备的公有操作、完成逻辑设备名到物理设备名的转换(为此应设置一张逻辑设备表)并向用户层(或文件层)软件提供统一接口,从而实现设备的独立性。

物理设备和逻辑设备:类似于物理地址和逻辑地址的概念。使用逻辑设备名称来请求使用某类设备;系统实际执行时,必须使用物理设备名称。

在实现了设备独立性功能后,可带来以下好处。

设备分配时的灵活性,当应用程序(进程)以物理名称来请求使用指定的某台设备时,如果该设备已经分配给其他进程或正在检修,而此时尽管还有几台其他的相同设备正在空闲,该进程仍然阻塞,但若进程能够以逻辑设备名称来请求某类设备时,系统可立即将该类设备中的任一台分配给进程,仅当所有此类设备全部分配完毕时,进程才会阻塞。

易于实现I/O重定向,用于I/O操作的设备可以更换,而不必改变应用程序。

逻辑设备名到物理设备名映射的实现

逻辑设备表,为了实现设备的独立性,系统必须设置一张逻辑设备表LUT(Logical Unit Table),用于将应用程序中所使用的逻辑设备名映射为物理设备名,该表的每个表目中包含了三项,逻辑设备名物理设备名设备驱动程序的入口地址

通过逻辑设备名,系统可以查找LUT,便可找到物理设备和驱动程序。

LUT的设置问题,LUT的设置可以采用两种方式:在整个系统中设置一张LUT(由于系统中所有进程的设备分配情况都记录在同一张LUT中,因而不允许在LUT中具有相同的逻辑设备名,这就要求所有用户都不能使用相同的逻辑设备名,多用户下难以做到,单用户很好实现)。为每个用户设置一张LUT(每当用户登录时,便为该用户建立一个进程,同时建立一张LUT,并将该表放入进程的PCB中)

5、设备分配

(1)设备分配中的数据结构

在进行设备分配时,通常都需要借助于一些表格的帮助,在表格中记录了相应设备或控制器的状态及对设备或控制器进行控制所需的信息,在进行设备分配时所需要的数据结构有设备控制表控制器控制表通道控制表系统设备表等。

设备控制表(DCT,Device Control Table)

系统为每个设备都配置了一张设备控制表,用于记录本设备的情况。

说明:设备队列队首指针(凡因为请求本设备而未得到满足的进程,其PCB都应按照一定的策略排成一个队,称该队列为设备请求队列或简称设备队列,其队首指针指向队首PCB),设备状态(当设备处于使用状态时,应该设备设置为忙/闲标志置为1),与设备连接的控制器表指针(该指针指向该设备所连接的控制器的控制表),重复执行次数(由于外部设备在传送数据时,较容易发生数据传送错误,因而在许多系统中,如果发生传送错误,并不立即认为传送失败,而是令它重传,并由系统规定设备在工作中发生错误时应重复执行的次数)

控制器控制表(COCT,Controller control table)

系统为每个控制器都设置了一张用于记录本控制器情况的控制器控制表。

通道控制表(CHCT ,Channel Control Table)

每个通道都配有一张通道控制表。

系统设备表(SDT,System device table)

系统范围的数据结构,记录了系统中全部设备的情况,每个设备占用一个表目,其中包括有设备类型、设备标识符、设备控制表及设备驱动程序的入口等。

SDT查DCT,申请设备

DCT查COCT,分配控制器

COCT查CHCT,分配通道

(2)设备分配时应考虑的因素

为使系统有条不紊的工作,系统在分配设备时,应考虑这样几个因素:

①设备的固有属性

设备的固有属性可分为三种:独占性、共享性和虚拟性设备。

  • 独占设备在一段时间内只能由一个进程使用。
  • 共享设备允许多个进程共享。
  • 虚拟设备是经过某种处理由独占设备变为虚拟设备。
②设备分配算法

与进程调度类似,一般使用以下两种:

  • 先来先服务。根据请求的先后次序排成一个队列,设备总是分配给队首进程。

  • 优先级高者优先。利用该算法形成队列时,将优先权高的进程安排在设备队列前面,优先级相同的先来先服务。

③设备分配中的安全性
  • 安全分配方式。每当进程发出I/O请求后便阻塞,直到I/O完成后被唤醒。避免了死锁中“请求和保持”条件,虽安全但缓慢。
  • 不安全分配方式。不断发出I/O请求,直到所请求的设备已经被另一进程占用才阻塞。一个进程可以同时操作多个设备,使进程迅速推进。但可能具备“请求和保持”条件而发生死锁,虽迅速但不安全。可以通过增加安全性检测算法避免死锁发生。
④设备独立性

(3)独占设备的分配程序

1、分配设备:根据物理设备名在系统设备表SDT中找出该设备的设备控制表DCT,若设备忙,便将请求I/O的进程PCB挂在设备队列上;否则,便按照一定的算法来计算本次设备分配的安全性,若不会导致系统进入不安全状态,便将设备分配给请求进程;否则,仍将其PCB插入设备队列。

2、分配控制器:分配设备给进程后,再到其设备控制表DCT中找出与该设备连接的控制器的COCT。若控制器忙,便将请求I/O进程的PCB挂在该控制器的等待队列上;否则,将该控制器分配给进程。

3、分配通道:分配控制器后,再在控制器控制表COCT中找到与该控制器连接的通道的CHCT。若通道忙,便将请求I/O的进程挂在该通道的等待队列上;否则,将该通道分配给进程。

只有在设备、控制器和通道三者都分配成功时,这次的设备分配才算成功之后便可启动该I/O设备进行数据传送。

上述基本的设备分配程序中,有以下特点:

① 进程以物理设备名提出I/O请求的;

② 采用的是单通路的I/O系统结构,容易产生“瓶颈”现象。

为使独占设备的分配程序具有更大的灵活性和提高分配的成功率,应从两方面对基本的设备分配程序加以改进:

增加设备的独立性:为获得设备独立性,进程应用逻辑设备名请求I/O。

系统先从SDT中找出第一个该类设备的DCT。如该设备忙,再找第二个,若所有该类设备部忙则把进程挂在该类设备的等待队列上;而只要有一个该类设备可用,系统就可进一步计算分配该设备的安全性。

考虑多通路情况:分配控制器和通道时,若设备(控制器)所连接的第一个控制器(通道)忙时,应查看其所连接的第二个控制器(通道),仅当所有的控制器(通道)都忙时,此次的控制器(通道)分配才算失败,才把进程挂在控制器(通道)的等待队列上;而只要有一个控制器(通道)可用,系统便可将它分配给进程。

(4)SPOOLing技术

通过SPOOLing技术可将一台物理I/O设备虚拟为多台逻辑I/O设备,允许多个用户共享一台物理I/O设备。

以空间换取时间的技术

为了缓和CPU的高速性和I/O设备的低速性间的矛盾而引入的脱机输入、脱机输出技术,该技术是利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上,或者相反。

事实上,当系统中引入了多道程序技术后,可以利用其中的一道程序,来模拟脱机输入时的外围控制机的功能,把低速I/O设备上的数据传送到高速磁盘上,再利用另一道程序来模拟脱机输出时外围控制机的功能,把数据从磁盘上传送到低速输出设备上,这样,便可在主机的直接控制下,实现脱机输入、输出的功能。此时的外围操作与CPU对数据的处理同时进行,我们把这种在联机情况下实现的同时外围操作称为SPOOLing(Simultaneaus Periphernal Operations On-Line),或称为假脱机操作。

注意:与真脱机的区别在于设备与主机是否连接,目标设备的I/O过程是否在主机控制下进行。SPOOLing只适用可以从程序过程中分离出来的I/O,如打印。

SPOOLing系统的组成:

输入井和输出井,这是在磁盘上开辟的两个大存储空间。输入井是模拟脱机输入时的磁盘设备,用于暂存I/O设备输入的数据,输出井是模拟脱机输出时的磁盘,用于暂存用户程序和输出数据。

输入缓冲区和输出缓冲区,缓和CPU与磁盘之间速度不匹配,在内存中开辟的两个缓冲区,输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井,输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。

输入进程SPi和输出进程SPo,利用两个进程来模拟脱机I/O时的外围控制机,其中,进程SPi模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井,当CPU需要输入数据时,直接从输入井读入内存;进程SPo模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上。

注意:处于磁盘中的井才是中介

输入:外部输入到内存的输入缓冲区,写入磁盘中的输入井.CPU再从输入井中读数据

输出:内存中运算产生的数据送往输出井,输出井送到缓冲区,在送给输出设备。

SPOOLing系统主要有如下的特点

提高了I/O速度,对数据所进行的I/O操作,已从对低速的I/O设备进行I/O操作,演变为对输入井或输出井中数据的存取,如同脱机输入输出一样,提高了I/O速度,缓和了CPU与低速I/O设备之间速度不匹配。

将独占设备改造为共享设备,因为在SPOOLing系统中,实际上并没有任何进程分配设备,而只是在输入井或输出井中为进程分配一个存储区和建立一张I/O请求表,这样,便把独占设备改造为共享设备。

实现了虚拟设备功能,宏观上,虽然是多个进程在同时使用一台独占设备,而对于每个进程而言,他们都会认为自己是独占了一个设备,当然,只是逻辑上的设备,SPOOLing系统实现了将独占设备变换为若干个对应的逻辑设备的功能。

利用SPOOLing技术,可以将独占设备打印机改造为一台供多个用户共享的设备,从而提高设备的利用率,也方便了用户。当用户进程请求打印输出时 ,SPOOLing系统统一为它打印输出,但是并不真正立即把打印机分配给该用户进程,而只为它做两件事。

① 由输出进程在输出井中为之申请一个空闲磁盘块区,并将要打印的数据送入其中。

② 输出进程再为用户进程申请一张空白的用户请求打印表,并将该用户的打印要求填入其中,再将该表挂到请求打印队列上。

如果还有进程要求打印输出,系统仍可以接受该请求,也同样为该进程做上述两件事情。

如果打印机空闲,输出进程将从请求打印队列的队首取出一张请求打印表,根据表中的要求打印数据,从输出井传送到内存缓冲区,再由打印机进行打印。打印完后,输出进程再查看请求打印队列中是否还有等待打印的请求表,若有,又取出队列中的第一张表,继续打印,直至请求打印队列为空,输出进程才将自己阻塞起来,仅当下次再有打印请求时,输出进程才被唤醒。

-----------------------本文结束 感谢阅读-----------------------
坚持原创技术分享,您的支持将鼓励我继续创作!恰饭^.^~