【设备独立性】
设备独立性,是指应用程序中所使用的设备不局限于使用某个具体的物理设备。
为了实现设备独立性,在设备驱动程序之上设置一层软件,称为与设备无关的 I/O 软件,或设备独立性软件
设备无关软件是 I/O 系统最高层软件,但它和其下的设备驱动程序之间的界限,将随操作系统和设备的不同而有所差异
早期的设备无关软件以物理设备名使用设备,后来引入了逻辑设备名,为实现从逻辑设备名到物理设备名的转换,为每个用户设置了一张逻辑设备表 LUT
逻辑设备表每个表目包含三项:逻辑设备名、物理设备名、设备驱动程序入口地址。在设置逻辑设备表时,有两种方式,一种是为整个系统设置一张 LUT,但会造成同名问题,另一种是为每个用户设置一张 LUT,并记入各自的 PCB 中
【设备分配】
在系统中,有两类设备:独占设备、共享设备,为避免诸进程对某独占设备的争夺,须有系统来统一分配,不允许进程自行使用
数据结构
为实现独占设备的分配,须在系统中设置相应的数据结构,在数据结构中,记录了对设备或控制器进行控制的所需信息,目前常用的数据结构有:
- 设备控制表 DCT:每一设备都配备了该表,用于记录设备的情况
- 控制器控制表 COCT:每一控制器都配备了该表,用于记录控制器情况
- 通道控制表 CHCT:每一通道都配备了该表,用于记录通道情况
- 系统设备表 SDT:系统范围的数据结构,记录了系统中全部设备的情况,每个设备独占一个表目
设备分配时考虑因素
系统在分配设备时,应考虑:设备固有属性、设备分配算法、设备分配安全性这三个方面
对于设备固有属性来说,其可分为三种,应采取不同的分配策略:
- 独占设备:将一个设备分配给某进程后,便有该进程独占,直至进程完成或释放该设备
- 共享设备:可同时分配给多个进程使用,使用时须注意对这些进程访问该设备的先后次序,从而进行合理调度
- 虚拟设备:属于可共享设备,可以同时分配给多个设备使用
对于设备分配算法,通常采用以下两种算法:
- 先来先服务:根据诸进程对某设备提出请求的先后次序,排成设备请求队列,总是将设备分配给队首进程
- 优先级高者优先:在形成设备队列时,按照优先级排序,优先级高者在队首
从设备运行的安全性考虑,设备分配有以下两种方式:
- 安全分配方式:进程发出 I/O 请求后,进入阻塞状态,直到其 I/O 操作完成时才被唤醒
- 不安全分配方式:进程发出 I/O 请求后,仍继续运行,需要时再发出下一个 I/O 请求,仅当进程请求设备被另一进程占用时,才进入阻塞状态
独占设备的分配过程
对于独占设备来说,当某进程提出 I/O 请求后,其分配过程如下:
- 分配设备:根据请求设备名,查找 SDT,找到 DCT,进程状态、安全性等因素都可能导致本申请进程阻塞,若阻塞,就挂入 DCT 等待队列中
- 分配控制器:通过分配设备后,从 DCT 找到 COCT,检查 COCT 状态字,若忙碌,则将进程挂到其等待队列
- 分配通道:通过分配控制器后,从 COCT 找到 CHCT,检查其状态,若忙碌,则将进程挂到其等待队列
可以看出,系统根据进程对设备的请求进行设备分配的过程是:
仅有在设备、控制器、通道三者都分配成功时,设备分配才算成功