设备分配,会按照一定的策略,把设备分配给请求进程,系统中会设置相应的数据结构。有设备控制表、控制器控制表、通道控制表和系统设备表。每一个设备都配置了一张设备控制表,记录本设备的情况,其中含有设备队列首指针、设备状态、与设备连接的控制器表指针和重复执行次数。
控制器控制表,为每一个控制器设置一张表用于记录控制器情况。通道控制表,每个通道配置一张通道控制表,里面含有标识符、通道状态、表的首址和队首队尾指针。系统设备表,是系统范围的数据结构,记录了系统中的全部设备的情况,每个设备含有一个表目,其中包括设备的各项入口。
设备分配时需要考虑的因素,设备的固有属性、设备分配算法、设备分配时的安全性和设备独立性。设备的固有属性有三种:独占性,这种设备在一段时间内只允许一个进程独占,也就是临界资源。共享性,这种设备允许多个进程同时共享。可虚拟设备,通过虚拟技术将独占设备变成共享设备。
设备分配算法,与进程调度的算法有些相似之处。先来先服务算法,将设备分配给对优先请求的进程。优先级调度算法,将优先权高的进程排在设备队列前面,优先级相同则采用先来先服务原则排队。
设备中的安全性,有两种分配方式。安全分配方式和不安全分配方式,前者会在进程发出I/O请求并进入阻塞状态后,使该进程不能再请求任何资源,避免了死锁的发生。缺点是进程进展缓慢。后者会在进程发出I/O请求后仍继续运行,可以发出第二个和第三个I/O请求。优点是可以让进程同时操作多个设备,使进程推进迅速。缺点是分配不安全,可能发生死锁。