(1)Linux 文件系统结构
Linux 像UNIX 一样,系统可用的独立文件系统不是通过设备标识来访问的,而是将它们链接到一个单独的树形层次结构中,该树形层次结构将文件系统表示成了一个独立实体。Linux 以装配的形式将每个新的文件系统加入到这个单独的文件系统树中,无论什么类型的文件系统,都被装配到某个目录上,由被装配的文件系统的文件覆盖了该目录原有的内容,该目录被称为装配目录或装配点。 在文件系统卸载时,装配目录中原有的文件才会显露出来。
观察task struct 数据结构的定义:
每个文件系统都有一个目录项-dentry 数据结构,还有一个索引节点-inode 数据结构。 inode 数据结构记录文件在存储介质上的位置与分布信息,记录其物理属性等;dentry 数据结构代表逻辑意义上的文件,记录其逻辑属性。 一个文件可能有几个dentry 数据结构,而inode 数据结构却是唯一的。
(2)虚拟文件系统(VFS)
虚拟文件系统与Linux 操作系统一样,将独立的文件系统组合成了一个层次化的树形结构,并且由一个单独的实体代表这一文件系统。 Linux 将新的文件系统通过一个称为“挂装”或“挂上”的操作将其挂装到某个目录上,从而让不同的文件系统组合成为一个整体。 Linux操作系统的一个重要特点是,它支持许多不同类型的文件系统。
由于Linux 支持许多不同的文件系统,并且将它们组织成了一个统一的虚拟文件系统,因此,用户和进程不需要知道文件所在的文件系统类型,而只需要像使用Ext3 文件系统中的文件一样使用它们。 实际上,Linux 利用虚拟文件系统,将文件系统操作和不同文件系统的具体实现细节分离了开来。
VFS 对逻辑文件系统进行抽象,用统一的数据结构进行管理,并且支持各种逻辑文件系统及其相互间访问。 所有的Linux 文件系统使用共同的缓冲区缓存从下层物理设备来的数据,通过这种方式来加速文件系统对它们对应的物理设备的访问。 Buffer Cache 是独立于文件系统的,并成为Linux 内核用于分配、读写数据缓冲区的一种机制,它的显著优势是使得Linux 文件系统从下层物理介质和支持物理介质的设备驱动程序中独立出来。 VFS 通过维护一个索引节点缓存来加速对所有已安装文件系统的访问。 同时,为了加速对常用目录的访问,VFS 维护了一个目录缓存。(www.xing528.com)
VFS 使用超级块和索引节点来描述文件系统,每个装配的文件系统由一个VFS 超级块表示。 VFS 超级块是在各种逻辑文件系统安装时建立的,并在这些文件系统卸载时自动删除,它只存在于内存中。 其数据结构定义于include/linux/fs.h。 VFS 文件系统的每个文件、目录等对象都是由VFS 索引节点表示的,每个VFS 索引节点的信息都是由文件系统的专门例程从下层文件系统的信息中获得的。 VFS 索引节点只存在于内核的存储空间中,只要它们对系统有用就一直被记录在VFS 索引节点的缓存中。 其数据结构定义于include/linux/fs.h 中。
(3)/proc 文件系统
反映内核运行情况的虚文件系统,并不实际存在于磁盘上。 /proc 文件系统才真正显示出了Linux VFS 文件系统的能力。 它像真实的文件系统一样向VFS 文件系统自行注册。 在VFS 文件系统打开它的文件或目录,请求它的node 节点时,/proc 文件系统利用来自内核的信息创建这些文件、目录。 内核的/proc/devices 文件就是从内核描述设备的数据结构创建出来的。
/proc 文件系统为用户提供了一个查看内核内部工作的只读窗口。 像Linux 内核模式这样的Linux 子系统,都在/proc 文件系统中创建实体。
(4)设备驱动管理
CPU 并不是系统中唯一的智能设备,其他物理设备也都有自己的控制器,如键盘、鼠标、串口的控制器是SuperIO 芯片,IDE 磁盘的控制器是IDE 控制器,SCSI 磁盘的控制器是SCSI控制器。 每个硬件控制器都有自己的控制和状态寄存器组(CSR),并随设备的不同而不同。CSR 主要用于启停设备、初始化设备以及诊断设备的故障,Linux 并不是将系统中的硬件控制器的管理程序放在应用程序中,而是将这些程序全放在内核里。 设备驱动程序是指用于处理、管理硬件控制器的软件。 Linux 内核中的设备驱动程序是一组长驻内存具有特权的共享库,也是一组低级的硬件处理例程。 系统正是用Linux 的设备驱动程序处理它所管理设备的特殊性问题。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。