摘要:设备分配: 所有的外设、控制器和通道资源都是有限。因此进程必须先向设备管理程序申请资源,如果是可能和安全,那么就会根据相应的分配算法为进程分配资源。 如果申请进程得不到资源,就被放入相应的资源等待队列中等待,直到所需资源被释放。 如果得到,那
设备分配:
所有的外设、控制器和通道资源都是有限。因此进程必须先向设备管理程序申请资源,如果是可能和安全,那么就会根据相应的分配算法为进程分配资源。
如果申请进程得不到资源,就被放入相应的资源等待队列中等待,直到所需资源被释放。
如果得到,那么就使用;用完后,系统会根据相应的设备回收算法,回收资源。
1、使用的数据结构:
设备管理系统建立针对性的数据结构,来存储设备和控制器的状态等信息。以便系统及时掌握设备的情况,来分配设备控制器和通道。
数据结构 |
图例 |
设备控制表 (Device Control Table,DCT) |
|
控制器控制表 (Controller Control Table,COCT) |
|
通道控制表 (Channel Control Table,CHCT) |
|
系统设备表 (System Device Table,SDT) |
|
其他数据结构 |
|
2、分配考虑的因素:
2.1、分配前的检查:
有了上述的数据结构后,虽然设备分配程序能够一方面记录设备、控制器和通道的状态信息,另一方面还要构成设备到内存的通路;根据请求的I/O设备,从系统设备表找出该设备的设备控制表(DCT),然后检查DCT。
1、是否有能用来为I/O请求提供服务的通路 |
2、是否有多条通路可用 |
3、如果当前没有可用通路,那通路何时空闲 |
例如:请求A设备,那么I/O分配程序就会检查设备A的DCT,查找与A设备相连的COCT。其中控制器B、C与A相连。如果控制器B不忙,就从B的COCT查询与自己相连的通道。
最后检查出:通道D和E与控制器B的COCT相连。如果通道D忙,通道E空闲;那么就会构成一条I/O通路:通道E → 控制器B → 设备A。
按照上述构成I/O通路的过程,那么就会最多有四种可用通路:
通道D → 控制器B → 设备A |
通道D → 控制器C → 设备A |
通道E → 控制器B → 设备A |
通道E → 控制器C → 设备A |
如果有可用通路,就会在DCT、COCT、CHCT中将进程名(或进程PCB首址)登记在表示正在使用该设备(控制器或通道)的状态表项内。若没有,则进行排队等待。
最后,设备分配程序可以按照一定的策略进行设备分配。
2.2、设备的固有属性:
分配设备时,需要考虑与设备分配有关的设备属性。设备固有属性可以分为:
固有属性 |
说明 |
独占性 |
设备在一段时间内,只允许一个进程占有 |
共享性 |
设备允许多个进程同时共享,要注意进程访问设备的先后次序来进行合理调度 |
可虚拟设备 |
通过某种技术,能够将独占设备,改造成多台逻辑虚拟设备。虚拟设备是可共享设备,能够同时分配给多个进程使用。 |
2.3、设备分配算法:
分配算法 |
说明 |
先来先服务 |
多个进程对同一个设备提出I/O请求,就会根据进程对设备提出请求的先后排序,形成一个设备请求队列。设备分配程序会将设备分配给队首的请求者。 |
优先级高者优先 |
优先级高的进程提出的I/O请求也会被赋予高优先级,并形成一个优先队列。优先级高的总是在队头,而优先级相同的,就会按照先来先服务原则排序。 |
2.4、设备分配的安全性:
安全性 |
说明 |
安全分配方式 |
当进程发出I/O请求,便会进入阻塞状态;直到其I/O操作完成后才被唤醒。 这样改阻塞进程,就不会请求其他资源,从而防止死锁发生。 |
不安全分配方式 |
进程发出I/O请求后,继续运行;那么就会可能请求第二个、第三个等I/O请求,若请求的资源被另一个进程占用,该进程才会被阻塞。 虽然一个进程可以同时操作多个设备,进程推进迅速;但是可能会造成死锁。 |
3、独占设备的分配程序:
对于独占设备,应采用独享分配策略。也就是一个设备分配给一个进程后,就只能被该进程使用;直到该进程释放该设备,系统才能将该设备重新分配给其他进程。
系统分配设备的过程,只有设备、控制器和通道三者分配成功,该设备才算是分配成功。然后就会启动该设备进行数据传送。
过程 |
说明 |
1、分配设备 |
1、根据I/O请求的物理设备名,查找系统设备表,找出该设备的DCT。 2、通过DCT的设备状态字段,了解设备的空闲情况。若忙,便将请求I/O的进程的PCB挂在设备队列;否则,按照安全算法来计算此次设备分配的安全性。 3、如果分配设备不会导致系统进入不安全状态,就将设备分配给请求进程;否则,就将进程的PCB插入到设备等待队列。 |
2、分配控制器 |
1、系统分配设备给请求进程后,就会根据设备的DCT查询与该设备连接的控制器的COCT 2、从COCT的状态字段了解控制器是否空闲。若忙,就将请求I/O的进程的PCB挂在该控制器的等待队列中;否则就会将控制分配给该进程 |
3、分配通道 |
1、在2的基础上,从COCT寻找与该控制器相连的通道的CHCT 2、根据CHCT的状态信息,了解通道的空闲情况。若忙,则将请求I/O进程挂在该通道的等待队列;否则,将通道分配给进程。 |
4、SPOOLing技术:
SPOOLing:在多道程序设计中,将一台独占设备改造成共享设备的一种技术。这样,就可以将一台物理I/O设备虚拟为多台逻辑I/O设备,让更多的用户共享一台物理I/O设备。
背景 |
说明 |
解决方式 |
早期计算机系统 |
CPU高速性和I/O设备低速性之间的矛盾 |
引入脱机输入/输出技术。 利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上;或者相反 |
多道程序 |
引入多道技术,利用其中的一道程序来模拟脱机输入时的外围控制机功能。 把低速I/O设备上的数据传送到高速磁盘;再利用另一道程序模拟脱机输出时外围控制机功能,把数据从磁盘传送到低速输出设备上。在主机的直接控制下,实现脱机输入和输出功能。 此时的外围操作与CPU对数据的处理同时进行,这种联机情况下实现的同时外围操作称为SPOOLing(Simultaneous Peripheral Operation On Line),也叫假脱机技术。 |
|
例如:创建一个特殊的守护进程和SPOOLing目录,来实现独占设备打印机的共享。在打印一个文件前,进程会将待打印文件放入SPOOLing目录,当进程把该文件放到SPOOLing系统后,就可以认为打印过程已经完成(实际上打印机还没打印),所以SPOOLing也叫打印的假脱机过程。
打印过程是由守护进程进行处理,只能由守护进程使用打印机设备文件。并通过禁止用户直接使用打印机设备文件,来解决打印机独占问题。说白了就是,中间人接收所有进程提交的打印任务,来统一处理。
4.1、SPOOLing系统的特点:
1、提高I/O速度 |
2、将独占设备改造为共享设备 |
3、实现虚拟设功能 |
(责任编辑:环球精益网)
|
------分隔线----------------------------
谈谈您对该文章的看