在当前版本的Hello China实现中,对所有的设备采用设备名唯一标识,这样就需要定义一套规范的命名方式,来对系统中可能存在的设备进行命名。
在当前版本的实现中,系统中可能存在下列几类设备。
(1)普通文件,即存储在存储设备(比如硬盘、光盘、FLASH卡等)上的数据文件,在Hello China中,数据文件也作为设备对待,与普通设备不同的是,文件设备的驱动程序是文件系统。
(2)实际存在的物理设备,比如显示卡、网卡、串口、鼠标/键盘等,这些设备是实实在在的物理硬件设备,有相应的驱动程序进行驱动,每种物理设备完成一项具体的功能。
(3)系统虚拟的设备,这类设备是操作系统(或设备驱动程序)虚拟出来的一种设备,比如,命名管道、RAM存储设备等,这些设备不对应具体的物理外设,但完成某项特定的功能,比如命名管道可以完成进程间通信的功能,RAM存储设备可以把内存的一部分预留出来,虚拟成一个文件系统,供操作系统临时保存文件使用,等等。
(4)网络文件系统,比如,可以把远程计算机上的一个文件(或目录)映射为本地的一个文件系统,这样只要对本地虚拟的文件系统进行访问,就可以间接地访问远程计算机的文件系统,比较典型的如NFS等。
针对上述几种设备类型,分别定义其命名形式如下。(www.xing528.com)
(1)针对普通文件,采用的命名格式为文件系统标识符加文件路径的方式,如系统中存在三个硬盘分区,则每个分区被格式化为一个文件系统,相应的文件系统标识符为(缺省情况下)C:、D:、E:。比如,在文件系统C:下有一个目录Hello China,该目录下有一个名字为cat.dat的文件,于是该文件可以这样命名:C:\Hello China\cat.dat。
(2)对于实际存在的物理设备,采用这样的命名格式:\\dev\device_name,其中两个反斜线和后面的dev,是固定部分,操作系统根据这个固定部分来确定该命名是实际存在的物理设备命名。为简单起见,一般把dev省略掉,简化为\\.\device_name的形式,这样省略的另外一个目的,就是避免与网络文件系统的命名冲突。
(3)对于系统虚拟的设备,其命名按照实际存在的物理设备的格式,比如在当前的实现中,对命名管道的命名为\\.\20ADC1F6-5194-416e-97AB-962A03472410,其中,后面device_name部分是采用一个GUID转换来的唯一字符串。
(4)对于远程文件系统,命名格式如下:\\server_name\file_path_name,其中server_name指明了具体的服务器名字,也就是远程计算机的名字,而file_path_name则是远程计算机上的文件路径名。比如,对于服务器shanghai上的一个共享文件shanghai.map,命名结果为\\shanghai\shanghai.map。
设备的命名机制是操作系统对设备进行管理的基础,但当前版本的实现中,操作系统在加载设备驱动程序并创建设备的时候,却不对设备名字做任何检查。因此,如果驱动程序不按照上述规则为系统中的设备命名,也可以成功加载和初始化,但可能会引起混乱。比如一个物理设备,把自己的名字命名为D:\HOWAREYOU,则可能会被操作系统当作一个文件对待。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。