首页 理论教育 文件系统的加载和初始化方法

文件系统的加载和初始化方法

时间:2023-10-21 理论教育 版权反馈
【摘要】:比如在PC上的实现是,首先加载FAT32和NTFS文件系统,然后加载硬盘驱动程序。这样一旦有存储设备对象被创建,则操作系统就会调用FAT32文件系统的特定函数,对新增加的存储设备进行检查。在Hello China V1.75的实现中,这两个文件系统管理程序都会被加载到内核中,因此正常情况下,IOManager的FsCtrlArray数组中会存在两个文件系统设备对象—FAT32文件系统设备对象和NTFS文件系统设备对象。

文件系统的加载和初始化方法

在Hello China的实现中,文件系统是作为设备驱动程序实现的,因此其遵循设备驱动程序的逻辑结构,需要实现一个DriverEntry函数。在文件驱动程序加载的时候,这个函数会被IOManager调用。

在当前版本的实现中,文件系统是作为操作系统核心模块实现的,与内核编译链接到一起。文件系统驱动程序的DriverEntry函数是一个内核全局函数,IOManager初始化的时候会直接调用这个函数,完成文件系统的加载。需要注意的是,文件系统驱动程序的加载时机,必须位于存储设备驱动程序之前。比如在PC上的实现是,首先加载FAT32和NTFS文件系统,然后加载硬盘驱动程序。这样存储设备才有机会被文件系统处理。下面是FAT32文件系统的DriverEntry实现代码:

驱动程序对象是由IOManager创建的,作为参数传递到DriverEntry函数中。DriverEntry函数首先用本地实现的函数,初始化驱动程序对象中的标准函数指针,然后创建了一个设备对象(FAT32文件系统设备对象),这个设备对象的驱动程序对象,即是刚刚初始化的设备驱动程序对象。并调用RegisterFileSystem函数,把这个文件系统设备对象注册到系统中(即注册到IOManage的FsCtrlArray数组中)。需要注意的是,这个设备对象的设备扩展为空,因为这个文件系统设备对象的作用比较有限,唯一的用途就是检查最新加载的存储设备是不是其管理的设备分区。(www.xing528.com)

DriverEntry函数执行完毕,FAT32文件系统就挂接到操作系统中了。这样一旦有存储设备对象被创建,则操作系统就会调用FAT32文件系统的特定函数,对新增加的存储设备进行检查。如果检查结果是一个FAT32文件卷,则该卷即会被加载到操作系统核心中。

对于NTFS文件系统的实现,遵循同样的逻辑。在Hello China V1.75的实现中,这两个文件系统管理程序都会被加载到内核中,因此正常情况下,IOManager的FsCtrlArray数组中会存在两个文件系统设备对象—FAT32文件系统设备对象和NTFS文件系统设备对象。需要注意的是,当文件系统驱动程序刚刚被加载完毕,FsArray数组是没有任何内容的,因为这时候还没有文件卷被加载到系统中。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈