在现代操作系统中,文件系统是外部存储设备的标准接口,它为应用程序使用这些设备中的数据提供了统一的抽象。多个应用程序本身可以共享使用这些设备。在windows中,文件系统的接口部分由I/O管理器定义和实现,但是文件系统的实现部分位于专门的一类驱动程序中,当文件系统接收到I/O请求时,他会根据文件格式的规范,将这些请求转变成更底层的对于外部存储设备的I/O请求,通过它们的设备驱动程序来完成原始的I/O请求。因此,文件系统的驱动程序定义了外部存储设备中数据的逻辑结构,使得这些数据可以被操作系统和应用程序使用。
winows的原生文件系统是NTFS(NT File System),其驱动程序为ntfs.sys。NTFS是专门为Windows设计的文件系统格式,它提供了安全性、可靠性、大容量的支持、长文件名支持,以及可恢复等一系列高级特性,目前广泛应用于windows系统。另一个常用的文件系统格式是FAT(File Allocate Table),这是从DOS时代发展起来的文件系统格式,格式规范相对比较简单,主要用于兼容老版本的操作系统,以及用于移动设备以便跨操作系统传送数据。
在windows系统中,每个文件系统实例有他自己的设备栈,因而通过插入过滤驱动程序可以过滤文件I/O请求。Windows支持两种形式的过滤驱动程序:一种是直接插入到设备栈中,从而能够看到每一个经过设备栈的文件I/O请求;另一种基于windows提供的过滤管理驱动程序(FltMgr)的I/O过滤框架,称为文件系统小过滤驱动程序,它们并不出现在文件系统设备栈中,而是以回调的方式来响应FltMgr的事件。
文件系统的底层是对存储设备的管理。大容量存储设备以"分区(Partition)"和“卷(Volume)"来管理整个存储空间。分区是指存储设备上连续的存储区域(连续的扇区),而卷是指扇区的逻辑集合。一个卷内部的内部扇区可能来自一个分区,也可能来自多个分区,甚至来自不同的磁盘。文件系统则是卷内部的逻辑结构。因此,windows的存储管理形成了存储栈,最接近于应用程序的是文件系统,接下来是卷的管理部分,最接近于存储设备的分区管理和磁盘的驱动程序。
磁盘设备是典型的即插即用的设备,其设备栈和驱动程序符合WDM规范。即插即用管理器在设备列举过程中建立起每个磁盘设备的设备栈。设备栈的最底下是总线驱动程序,最上方是一个分区管理器的驱动程序,负责通知即插即用管理器当前磁盘上有哪些分区,因而系统中的卷管理器可以接收到有关分区创建和删除的通知,这样每个物理分区与卷联系起来了,卷管理器再将卷与文件系统关联起来,就形成了完整的存储栈。