设备分配时应考虑的因素
设备的固有属性
独占设备:一个时间只能分配给一个进程
共享设备:可同时分配给多个进程使用,宏观上同时共享使用设备,微观上交替使用
虚拟设备:采用SPOOLing技术将独占设备改造成共享设备,可同时分配给多个进程使用
设备分配算法
先来先服务
优先级高者优先
短任务优先
。。。。
设备分配中的安全性
安全分配方式:为进程分配一个设备后就将进程阻塞,本次io完成之后才将进程唤醒
一个时段每个进程只能使用一个设备
优点:破坏了“请求和保持”条件,不会死锁
缺点:对于一个进程来说,cpu和io设备只能串形工作
不安全分配方式:进程发出io请求之后,系统为其分配io设备,进程可以继续执行,之后还可以发出新的io请求,只有某个io请求得不到满足才可以将进程阻塞
一个进程可以同时使用多个设备
优点:进程的计算任务和io任务可以并行处理,使进程迅速推进
缺点:有可能发生死锁
静态分配与动态分配
静态分配:进程运行之前,为其分配全部的资源,运行结束后归还资源
破坏了“请求和保持”条件,不会死锁
动态分配:进程运行过程中动态申请设备资源
设备分配管理中的数据结构
设备控制表(DCT):系统为每一个设备配置一张DCT用于记录设备情况
控制器控制表(COCT):每个设备控制器都会对应一张COCT,操作系统根据COCT的信息对控制器进行操作和管理
通道控制表(CHCT):每个通道都会对应一张CHCT,操作系统根据CHCT的信息对通道进行操作和管理
系统设备表(SDT):记录了系统中全部设备的情况,每一个设备都对应一个表目
设备分配的步骤
1.根据进程请求的物理设备名查找SDT
2.根据SDT找到DCT,若设备忙则将进程PCB挂到设备等待队列中,不忙碌则将设备分配给进程
3.根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程
4.根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程
只有设备,控制器,通道都分配成功时,这次设备分配才算成功,之后便可以启动io进行数据传送
缺点
1.用户编程时候,必须使用物理设备名,底层细节对用户不透明,不方便编程
2.若换了一个物理设备,则程序无法运行
3.若请求的物理设备正在忙碌,及时系统中还有同类型的设备,进程页必须阻塞等待(设备利用率不高)
改进方法:建立逻辑设备名与物理设备名的映射机制,用户编程时候只需要提供逻辑设备名
设备分配步骤的改进方法
1.根据进程请求的逻辑设备名查找SDT
2.查找SDT,找到用户进程指定类型的,并且空闲的设备,将其分配给该进程,操作系统在逻辑设备表LUT中新增一个表项
3.根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程
4.根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程
关于LUT有两种方式
1.整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,这个方法只适用于丹用户操作系统
2。为每个用户设置一张LUT,各个用户使用的逻辑设备名可以重复,适用于多用户的操作系统,系统会在用户登录时候,为其建立一个用户管理进程,然后lut就房子啊用户管理进程的pcb中