操作系统学习笔记(13)——设备分配和虚拟设备
1、设备分配
- 设备分配中的数据结构
- 设备控制表(DCT)
-
- 系统为每一个I/O设备都配置了一张用于记录本设备情况的设备控制表,其内容包括:
- 设备标识符。用来标识该设备。
- 设备类型。反映设备的特性,例如是终端设备、块设备 或字符设备等。
- 设备队列队首指针。凡因请求本设备而未得到满足的进程,其PCB都被按照一定的策略排成一个队列,称为设备队列。
- 设备状态。当设备自身正处于使用状态时,应将设备忙标志置“1”,若与该设备相连接的控制器或通道正忙,此时则应将等待标志置“1”。
- 与设备连接的控制器表指针。指向该设备所连接的控制器的控制表。在多条通路情况下,一个设备将与多个设备控制器相连。此时,在DCT中还应设置多个控制表指针。
- 重复执行次数。这是由系统规定的、设备在工作中发生错误时,应重复执行的次数。在重复执行时若能恢复正常传送,则仍认为传送成功。否则,认为本次传送失败。
-
系统设备表(SDT)
-
- 整个系统中有一张系统设备表,它记录已被连接到系统中的所有物理设备的情况,并为每个物理设备设一表目项。其内容有:
- 设备类型和设备标识符。
- DCT指针。该指针指向有关设备的设备控制表。
- 正在使用该设备的进程标识。
- SDT的主要意义在于反映系统中设备资源的状态,即系统中有多少设备,有多少是空闲的,而又有多少已分配给了哪些进程。
-
控制器控制表
-
-
系统为每一个控制器都配置了一张记录本控制器情况的控制器控制表
-
- 通道控制表
-
-
每个通道都有一张通道控制表。该表只有在通道控制方式的系统中存在。CHCT包括通道标识符、通道忙/闲标识、等待获得该通道的进程等待队列的队首指针与队尾指针等。
-
- 各个数据结构间的关系
- 设备分配的过程
- 分配设备:根据与进程n提出的逻辑设备名称对应的物理设备名称查找系统设备表(SDT),从中找到该设备的DCT。然后,根据DCT中的状态信息Busy,可知该设备是否正忙。若忙,便将请求I/O的进程的PCB插在设备队列上等待;否则,由系统计算本次设备分配的安全性。如果分配不会引起死锁,便将该设备分配给请求进程;否则,仍将该PCB插入设备等待队列。
- 分配控制器:当系统把该设备分配给提出I/O请求的进程后,从设备控制表DCT中的控制器指针COCT,可得知与此设备连接的设备控制器的COCT,通过检查该表中的状态信息可知设备控制器是否忙碌。若忙,便将请求I/O的进程的PCB挂在设备控制器队列上;否则,将设备控制器分配给进程。
- 分配通道:如果设备控制器也空闲,则把设备控制器分配给它。之后,再通过控制器表COCT中的通道表指针CHCT检查与该控制器连接的CHCT,再根据CHCT中的状态信息可知通道是否忙碌。若忙,便将请求I/O的进程的PCB插在通道队列上;否则,将通道分配给进程。一旦设备、设备控制器和通道都分配成功,便可启动I/O设备进行数据传送。
- 设备分配应该考虑得因素
- 设备的固有属性:在分配设备时,首先应考虑与设备分配有关的设备属性。
- 独占设备。
- 共享设备。
- 虚拟设备。
- 设备的分配算法
- 先来先服务:根据进程对某设备提出请求的先后次序,将这些进程排成一个设备请求队列,总是把设备首先分配给队首进程。
- 优先级高者优先:优先权高的进程优先获得处理机。如果对这种高优先权进程所提出的I/O请求也赋予高优先权,显然有助于这种进程尽快完成。在利用该算法形成设备队列时。将优先级高的进程排在设备队列前面,对于优先级相同的I/O请求,则按先来先服务原则排队。
- 设备分配的安全性
- 安全分配方式:每当进程发出I/O请求后,便进入阻塞态,直到I/O操作完成才被唤醒。该分配方式摒弃了“请求和保持”条件,因而分配是安全的。缺点是进程推进慢,CPU与I/O设备是串行工作的。
- 不安全分配方式:当进程发出 I/O请求后仍继续运行,因此,一个进程可同时操作多个设备,从而使进程推进迅速,缺点是分配不安全,因为它可能具备“请求和保持”条件,造成死锁。因此,在设备分配程序中,仅当检测的结果是安全的,才进行分配。
- 设备的独立性:
- 概念:其基本含义是进程只需用逻辑设备名称请求使用某类设备,当系统中有多台该类设备时,系统可将其中任一台分配给请求进程,而无需仅局限于某一台设备。设备独立性有以下的好处
- 设备分配时的灵活性:进程以物理设备名来请求使用指定的某台设备时,若该设备已经分配给其他进程,即使其他相同设备空闲,该进程仍阻塞。若能以逻辑设备名来请求某类设备,系统可将该类设备中的任一台分配给进程,设备全部分配完毕时,进程才会阻塞。
- 易于实现I/O重定向:是指用于I/O操作的设备可以更换,而不必改变应用程序。
- 设备独立性软件
-
执行所有设备的公有操作:① 独占设备的分配与回收;② 将逻辑设备名映射为物理设备名;③ 对设备进行保护,禁止用户直接访问设备;④ 缓冲管理,以提高I/O的效率;⑤ 差错控制
-
向用户层(或文件层)软件提供统一接口。无论何种设备,它们向用户提供的接口应该是相同的。如:对各种设备的读操作,都使用read;对设备的写操作,都使用write
-
-
逻辑设备到物理设备映射的实现
-
-
- 逻辑设备表:为了实现设备的独立性,系统必须能够将应用程序中所使用的逻辑设备名映射为物理设备名。需设置一张逻辑设备表LUT(Logical Unit Table)。该表的每个表目中包含了三个表项:逻辑设备名、物理设备名和设备驱动程序的入口地址。
-
-
-
-
LUT的设置问题:LUT的设置可采取两种方式:第一种设置方式是整个系统设置一张LUT。不允许在LUT中具有相同的逻辑设备名,这就是要求所有用户不使用相同的逻辑设备名。第二种方式是为每个用户设置一张LUT。每当用户登录时,便为该用户建立一个进程,同时也为之建立一张LUT。
-
-
2、虚拟设备
- SPOOLing系统的组成
-
-
输入井和输出井:输入井和输出是在磁盘上开辟的两个大缓冲区。输入井是模拟脱机输入时的磁盘,用于收容I/O设备输入的数据。输出井是模拟脱机输出时的磁盘,用于收容用户程序的输出数据。
-
输入缓冲区和输出缓冲区:在内存中要开辟两个缓冲区,其中输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井;输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。
-
输入进程和输出进程:输入进程(SPi)模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井。当CPU需要输入数据时,直接从输入井读入内存。输出进程(SPo)模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上。
-
-
SPOOLing系统的工作原理
- 操作系统启动后,激活SPOOLing输入进程。
- 一旦有输入请求消息,SPOOLing输入进程立即得到执行,把装在输入设备上的作业输入到硬盘的输入井中。
- SPOOLing输出模块的工作原理与输入模块的工作原理相同,它把硬盘上输出井的数据送到慢速的输出设备上。
- 这就是说,作业调度程序不是从输入设备上装入作业,而是直接从输入井中把选中的作业装入内存,使主机等待作业输入的时间大为缩短。同样对作业的输出而言,写到输出井要比写到输出设备快得多。即使作业的JCB已注销,SPOOLing输出进程仍可以把输出井中没有输出完的数据继续输出到设备上。
- 由此可见,引入SPOOLing技术,把一个共享的硬盘改造成若干台输入设备(对作业调度程序而言)和若干台输出设备(对各作业而言)。这样的设备称为虚拟设备,它们的物理实体是输入(出)井。这样改造后,保持了物理输入(出)设备繁忙地与CPU并行地工作,提高了整个系统的效率。
- SPOOLing系统的应用
-
打印机属于独享设备,但通过利用SPOOLing技术,可将它改造为一台可供多个用户共享的设备,从而提高了设备的利用率。在局域网下,当用户进程请求输出打印时,SPOOLing系统同意为它打印输出,但并不真正把打印机分配给该用户进程,只做两件事:
-
由输出进程在输出井中为之申请一空闲缓冲区,并将要打印的数据送入其中;
-
输出进程再为用户进程申请一张空白的用户打印请求表,将用户的打印要求填入表中,再将该表挂到请求打印队列上。
- 如果还有进程要求打印输出,系统仍可接受该请求,也同样为该进程做上述两件事。
- 打印机空闲时,输出进程将从请求打印队列的队首取出一张请求表,根据表中的要求将要打印的数据从输出井传送到内存缓冲区,再由打印机进行打印。打印完后,输出进程再查看请求打印队列中是否还有等待打印的请求表,若有,又取出第一张表,并根据其中的打印要求进行打印,如此下去,直至请求队列空为止。
-
- SPOOLing技术的特点
-
提高了I/O速度。对数据进行的I/O操作,已从对低速I/O设备进行的I/O演变为对输入井或输出井中数据的存取,缓和了CPU与低速I/O设备之间速度不匹配的矛盾。
- 设备不被任何进程独占。因为在SPOOLing系统中,实际上并为任何进程分配设备,而只是在输入井或输出井中为进程分配一存储区和建立一张I/O请求表。
-
实现了虚拟设备功能。宏观上,虽然是多个进程在同时使用一台独占设备,但该设备只是逻辑上的设备。SPOOLing系统实现了将独占设备变换为若干台对应逻辑设备的功能
-