1、设备独立性的概念
—- 为了提高OS的可适应性和可扩展性,在现代OS中都毫无例外地实现了设备独立性(Device Independence),也称为设备无关性。
—- 其基本含义是:应用程序独立于具体使用的物理设备。为了实现设备独立性而引入了逻辑设备和物理设备这两个概念。
—- 在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时,还必须使用物理设备名称。
因此,系统需具有将逻辑设备名称转换为某物理设备名称的功能,这非常类似于存储器管理中介绍的逻辑地址和物理地址的概念。
—- 在应用程序中所使用的是逻辑地址,而系统在分配和使用内存时,必须使用物理地址。
在实现了设备独立性的功能后,可带来以下两方面的好处。
1)设备分配时的灵活性
当应用程序(进程)以物理设备名称来请求使用指定的某台设备时,如果该设备已经分配给其他进程或正在检修,而此时尽管还有几台其它
的相同设备正在空闲,该进程却仍阻塞。但若进程能以逻辑设备名称来请求某类设备时,系统可立即将该类设备中的任一台分配给进程,仅
当所有此类设备已全部分配完毕时,进程才会阻塞。
2)易于实现I/O重定向
所谓I/O重定向,是指用于I/O操作的设备可以更换(即重定向),而不必改变应用程序。例如,我们在调试一个应用程序时,可将程序的所有
输出送往屏幕显示;而在程序调试完后,如需正式将程序的运行结果打印出来,此时便需将I/O重定向的数据结构—逻辑设备表中的显示终端
改为打印机,而不必修改应用程序。
2、设备独立性软件
—- 驱动程序是一个与硬件(或设备)紧密相关的软件。为了实现设备独立性,必须再在驱动程序之上设置一层软件,称为设备独立性软件。
至于设备独立性软件和设备驱动程序之间的界限,根据不同的操作系统和设备有所差异,主要取决于操作系统、设备独立性和设备驱动程序
的运行效率等多方面因素的权衡,因为对于一些本应由设备独立性软件实现的功能,可能由于效率等诸多因素,实际上设计在设备驱动程序
中。总的来说,设备独立性软件的主要功能可分为以下两个方面:
—– 执行所有设备的公有操作。这些公有操作包括:
— 1)对独立设备的分配与回收
— 2)将逻辑设备名映射为物理设备名,进一步可以找到相应物理设备的驱动程序。
— 3)对设备进行保护,禁止用户直接访问设备。
— 4)缓冲管理,即对字符设备和块设备的缓冲区进行有效的管理,以提高I/O的效率。
— 5)差错控制,由于在I/O操作中的绝大多数错误都与设备无关,故主要由设备驱动程序处理,而设备独立性软件只处理那些设备驱动程序
无法处理的错误。
— 6)提供独立于设备的逻辑块,不同类型的设备信息交换单位是不同的,读取和传输速率也各不相同。如字符型设备以单个字符为单位,
块设备是以一个数据块为单位,即使同一类型的设备,其信息交换单位大小也是有差异的,如不同磁盘由于扇区大小的不同,可能造成数据块
大小的不一致,因此设备独立性软件应负责隐藏这些差异,对逻辑设备使用并向高层软件提供大小统一的逻辑数据块。
—– 向用户层(或文件层)软件提供统一接口。无论何种设备,它们向用户所提供的接口应该是相同的。
例如,对各种设备的读操作,在应用程序中都使用read;而对各种设备的写操作,也都使用write。
3、逻辑设备名到物理设备名映射的实现
— 1)逻辑设备表
为了实现设备的独立性,系统必须设置一张逻辑设备表(LUT,Logical Unit Table),用于将应用程序中所使用的逻辑设备名映射为物理设备名。
在该表的每个表目中包含了三项:逻辑设备名、物理设备名和设备驱动程序的入口地址。当进程用逻辑设备名请求分配I/O设备时,系统为它
分配相应的物理设备,并在LUT上建立一个表目,填上应用程序中使用的逻辑设备名和系统分配的物理设备名,以及该设备驱动程序的入口地址。
当以后进程再利用该逻辑设备名请求I/O操作时,系统通过查找LUT,便可找到物理设备和驱动程序。
— 2)LUT的设置问题
LUT的设置可采取两种方式:第一种方式是在整个系统中只设置一张LUT。
由于系统中所有进程的设备分配情况都记录在同一张LUT中,因而不允许在LUT中具有相同的逻辑设备名,这就要求所有用户都不使用相同的
逻辑设备名。在多用户环境下这通常是难以做到的,因而这种方式主要用于单用户系统中。
第二种方式是为每个用户设置一张LUT。每当用户登录时,便为该用户建立一个进程,同时也为之建立一张LUT,并将该表放入进程的PCB中。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!