与设备无关的 I/O 软件
目录
参考资料:
为了方便用户和提高 OS 的可适应性与可扩展性,在现代 OS 的 I/O 系统中,都无一例外地增加了与设备无关的 I/O 软件,以实现设备独立性,也称为设备无关性。
其基本含义是:应用程序中所用的设备,不局限于使用某个具体的物理设备。为每个设备所配置的设备驱动程序是与硬件紧密相关的软件。为了实现设备独立性,必须再在设备驱动程序之上设置一层软件,称为与设备无关的 I/O 软件,或设备独立性软件。
1 物理设备名、逻辑设备名
使用设备的物理名称,会使应用程序与系统中的物理设备直接相关。系统只能根据设备的物理名来分配,无法使用另外的相同设备(不同的物理设备名),如果物理设备被更改,那么与旧设备名称直接相关的应用程序将再也无法运行,所以该方式非常不灵活。
与绑定固定 IP 地址的通信类似
逻辑设备名:逻辑设备是抽象的设备名,不指定具体某一台设备。使用逻辑设备名还可实现 I/O 重定向。所谓 I/O 重定向,是指用于 I/O 操作的设备可以更换(即重定向),而不必改变应用程序。
I/O 重定向的数据结构:逻辑设备表
逻辑设备名称和物理设备名称的概念,与存储器管理中的逻辑地址和物理地址的概念非常类似,在程序执行时,必须先将逻辑地址转换为物理地址。类似地,为实现从逻辑设备名称到物理设备名称的转换,在系统中需要配置一张逻辑设备表。
2 与设备无关软件的功能构成
- 设备驱动程序的统一接口:抽象和具体实现进行分离。
- 缓冲管理:缓和 CPU 和 I/O 设备之间的矛盾、提高 CPU 的利用率。
- 差错控制:网络重传、磁盘重传、坏块记录等
- 设备的分配与回收:为了避免进程对独占设备的争夺,独占设备必须由系统统一分配,进程使用设备时,必须先提出申请。
- 独立于设备的逻辑数据块:用来屏蔽不同设备的数据交换单位、读取和传输速率的差异。
3 逻辑设备名到物理设备名映射的实现
为了实现与设备的无关性,当应用程序请求使用 I/O 设备时,应当用逻辑设备名。但系统只识别物理设备名,因此在系统中需要配置一张逻辑设备表,用于将逻辑设备名映射为物理设备名。
逻辑设备表 LUT(Logical Unit Table)
逻辑设备表种包含如下三项:逻辑设备名、物理设备名和设备驱动程序的入口地址。
当进程用逻辑设备名请求分配 I/O 设备时,系统为它分配一台相应的物理设备。与此同时,在逻辑设备表上建立一个表目,填上应用程序中使用的逻辑设备名和系统分配的物理设备名,以及该设备驱动程序的入口地址。
在第一次使用时建立
当其他进程再利用该逻辑设备名请求 I/O 操作时,系统通过查找 LUT,便可找到该逻辑设备所对应的物理设备和该设备的驱动程序。