(6)虚拟设备和SPOOLing技术

1.虚拟设备

通过虚拟技术将一台独占设备虚拟成多台逻辑设备,供多个进程同时使用, 通常把这种经过虚拟的设备称为虚拟设备。

2.SPOOLing技术

(汤小丹P220)🔎:

如果说,通过多道程序技术可将一台物理CPU虚拟为多台逻辑CPU,从而允许多用户共享一台主机,那么,通过假脱机技术,则可将一台物理I/O设备虚拟为多台逻辑I/O设备,这样也就允许多个用户共享一台物理设备。

1)假脱机技术

当系统中引入了多道程序技术后,可以利用其中的一道程序,来模拟脱机输入时的外围控制机功能,把低速I/0设备上:的数据传送到高速磁盘上;再用另一道程序来模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上。

这样,便可在主机的直接控制下,实现脱机输入、输出功能。此时的外围操作与CPU对数据的处理同时进行,把这种在联机情况下实现的同时外围操作称为SPOOLing,或称为假脱机操作。

2)SPOOLing的组成

iot 虚拟设备 虚拟设备如何实现_iot 虚拟设备

 

SPOOLing系统主要由一下四个部分构成:

a.输入井、输出井

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

b.输入缓冲区、输出缓冲区

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

c.输入进程、输出进程

两个进程用于模拟脱机I0时的外围控制机。输入进程用于模拟脱机输入时的外围控制机,将用户要求的数据从输入设备、通过输入缓冲区、再送到输入井,当CPU需要数据时,直接从输入井读入内存;输出进程用于模拟脱机输出时的外围控制机,将用户要求输出的数据,先从内存送到输出井,待输出设备空闲时,再将输出井中的数据,通过输出缓冲区、送到输出设备。

3)🌟SPOOLing系统的特点

a.提高了I/O的速度

b.将独占设备改造为共享设备

c.实现了虚拟设备功能

4)共享打印机

当用户进程请求打印输出时,SPOOLing 系统同意为它打印输出,但并不立即把打印机分配给该用户进程,只为它做两件事:

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

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

如果还有进程请求打印,系统仍为之做.上述两件事情。

当打印机空闲时,输出进程从请求打印队列的队首,取出一张请求打印表,根据表中的要求,将要打印的数据,从输出井传送到内存缓冲区,进行打印;直到所有请求响应完成,输出进程阻塞;仅当再有打印请求时,才被唤醒。

(7)缓冲管理

1.缓冲的引入

🌟引入缓冲的原因:

1)缓和CPU与I/O设备间速度不匹配的矛盾。

2)减少对CPU的中断频率,放宽对CPU中断响应时间的限制。

3)解决数据粒度不匹配的问题

4)提高CPU和I/O设备之间的并行性

2.单缓冲区和双缓冲区

1)单缓冲区(Single Buffer)

在块设备输入时,假定从磁盘把一块数据输入到缓冲区的时间为T,OS将该缓冲区中的数据传送到用户区的时间为M,而CPU对这一块数据处理(计算)的时间为C。由于T和C是可以并行的(见图),当T>C时,系统对每一块数据的处理时间为M+T;反之则为M+C,故系统可把系统对每一块数据的处理时间表示为Max(C,T)+M

iot 虚拟设备 虚拟设备如何实现_脱机_02

 图 单缓冲工作示意图

2)双缓冲区(Double Buffer)

在设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。此时操作系统可以从第一缓冲区中移出数据,并送入用户进程(见图)。接着由CPU对数据进行计算。在双缓冲时,系统处理一块数据的时间可以粗略地认为时Max(C,T),如果C<T,可使块设备连续输入;如果C>T,则可使CPU不必等待设备输入。

iot 虚拟设备 虚拟设备如何实现_脱机_03

图 双缓冲工作示意图

 3.环形缓冲区

1)环形缓冲区的组成

a.多个缓冲区。环形缓冲中包含多个缓冲区,其每个缓冲区的大小相同。作为输入的多缓冲区可分为三个类型:用于装输入数据的空缓冲区R、已装满数据的缓冲区G以及计算进程正在工作的现行工作缓冲区C,如下图。

b.多个指针。作为缓冲区可设置三个指针:用于指示计算进程下一个可用缓冲区G的指针Nextg、指示输入进程下次可用的空缓冲区R的指针Nexti,以及用于计算进程正在使用的缓冲区C的指针Current。

iot 虚拟设备 虚拟设备如何实现_iot 虚拟设备_04

图 环形缓冲区

2)环形缓冲区的使用

a.Getbuf过程。

b.Releasebuf过程。

 3)进程之间的同步问题

a.Nexti指针追赶上Nextg指针。这意味着输入进程输入数据的速度大于计算进程处理数据的速度,已把全部可用的空缓冲区装满,再无缓冲区可用。【这种情况被称为系统受计算限制

b.Nextg指针追赶上Nexti指针。这意味着输入数据的速度低于计算进程处理数据的速度,使全部装有输入数据的缓冲区都被抽空,再无装有数据的缓冲区供计算进程提取数据。【这种情况被称为系统受I/O限制

4.缓冲池

1)缓冲池的组成

🔎:

一般将缓冲池中具有相同类型的缓冲区链接成一个队列,形成一下三个队列:

a.空白缓冲队列emq     b.输入队列inq     c.输出队列outq

除了上述三个队列外,还需具有四个工作缓冲区:

用于收容输入数据的工作缓冲区【hin

用于提取输入数据的工作缓冲区【sin

用于收容输出数据的工作缓冲区【hout

用于提取输出数据的工作缓冲区【sout

(8)设备处理与I/O软件

1.与设备无关的I/O软件

为了实现设备独立性,必须再在设备驱动程序之上设置一层软件,称为与设备无关的I/O软件,或设备独立性软件。(P213)🔎:

1)基本概念

a.以物理设备名使用设备

b.引入了逻辑设备名

c.逻辑设备名称到物理设备名的转换

2)与设备无关的软件

程序员写出的软件无需修改便能读出软盘、硬盘以及CD-ROM等不同设备上的文件

2.用户空间的I/O软件

1)I/O相关的库例程

2)假脱机系统(spooling) 

创建一个特殊的daemon进程,解决多个进程使用打印机的资源管理问题

(9)设备分配

(汤小丹p215)🔎:

1.设备分配中的数据结构

1)设备控制表DCT

iot 虚拟设备 虚拟设备如何实现_操作系统_05

系统为每个设备设置一-张设备控制表,用于记录该设备的情况。

在设备控制表中,包含:

(1)设备类型

(2)设备标识符

(3)设备队列的队首指针(队列中存放请求设备未被满足的PCB)

(4)设备状态

(5)与设备相连的控制器表指针 

(6)重复执行次数。系统规定在设备工作中发生错误时可重复执行次数。

2)控制器控制表、通道控制表和系统设备表

a.设备控制表(COCT)

iot 虚拟设备 虚拟设备如何实现_iot 虚拟设备_06

b.通道控制表(CHCT)

iot 虚拟设备 虚拟设备如何实现_操作系统_07

c.系统设备表(SDT)

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

1)设备固有属性

a.独占设备。采取独占的分配策略

b.共享设备。可以通过某种调度方式,分配给多个进程使用。

c.虚拟设备。通过采用虚拟技术,使一台物理设备可变成多台逻辑上的共享设备。可以分配给多个进程使用。

2)设备分配算法

a.先来先服务

当多个进程对同一设备提出I/0请求时,该算法根据进程提出请求的先后次序,排成一个设备请求队列,总是将设备分配给队首进程。

b.优先级高者优先

在这种算法中,总是优先权高的进程优先获得资源。对于优先权相同的进程,按照先来先服务的原则排队。

3)设备分配中的安全性

a.安全分配方法

当进程请求资源时,便进入阻塞状态,直到I/0操作完成才被唤醒。但进程的并发度低,资源的利用率低。

b.不安全分配方法

当进程请求资源时,仍继续运行,需要时又发出第2个I/0请求,第3个I/0请求等,按照安全性算法进行计算,仅当状态安全时,才分配。这种方式稍复杂,但进程的并发度高。

3.独占设备的分配程序

1)基本的设备分配程序

当进程提出I/0请求后,按下列3个步骤进行分配。

a.分配设备。首先,根据I/0请求中的物理设备名,查找SDT, 找出该设备的设备控制表DCT,根据DCT中的设备状态字段,可知设备是否正忙。若忙,将该进程的PCB挂在设备的等待队列中;若不忙,按照一定的算法计算设备分配的安全性,来分配设备。

b.分配控制器。在系统将设备分配给请求进程后,从DCT中找到与该设备相连控制器的COCT,根据COCT中的状态字段,可知该设备控制器是否忙。若忙,将该进程的PCB挂在设备控制器的等待队列中;若不忙,将设备控制器分配给进程。

c.分配通道。在系统将设备控制器分配给请求进程后,从控制器控制表COCT中找到与该控制器相连的通道的通道控制表CHCT,根据CHCT中的状态字段,可知该通道是否正忙。若忙,将该进程的PCB挂在通道的等待队列中;若不忙,将通道分配给进程。

2)设备分配程序的改进

a.增加设备的独立性

进程利用逻辑设备名请求I/0。系统首先从系统设备表SDT中找出第一个该类设备的设备控制表DCT,若设备忙,再查找第2个该类设备的DCT;仅当所有该类设备都忙时,才将该进程的PCB挂在该类设备的等待队列中。

b.考虑多通路情况

可以按照多通路情况进行改进。例如,若设备连接的第一个控制器忙碌时,应查看第2个控制器,仅当所有该类设备控制器都忙时,才将该进程的PCB挂在该类设备控制器的等待队列中。同理,通道分配也是一样的。