Linux的文件系统支持
Linux的最重要特征之一是它为许多不同的文件系统的支持比如ext、ext2、vfat等等,这使其非常灵活从而与许多另外的操作系统可以很好的共存。
Linux 通过安装一个文件系统将该新文件系统加入它的文件系统树中。所有的文件系统, 不管是什么类型,都安装在文件系统树的一个目录上,并且该文件系统之上的文件将掩盖掉这个安装目录中原来存在的内容。
真实的文件系统通过一个叫做虚拟文件系统(VFS)的接口层,而从操作系统和系统服务中被逻辑地分离开来。
www.zhishiwu.com
第二扩充文件系统(EXT2)
EXT2 通过inode 数据结构描述每个文件。并已此定义文件系统的拓扑。一个inode 描述一个文件中的数据占据哪些块,文件的修正时间,存取权利和文件类型等等。EXT2 文件系统中,每个文件被一个inode描述并且每个inode 有一个唯一的数字标识。文件系统的inodes 一起被放在一个inode 表中。EXT2 目录是一种特殊的文件( 也被inodes 描述),包含一些指针, 指向目录入口的各个文件或子目录的inodes EXT2 inodes 可以描述特殊的设备文件。这些不是真实的文件而是程序能够使用来存取设备的句柄。
VFS
VFS 允许Linux 支持许多不同的,文件系统。每一个文件系统提交一个相同的软件接口给VFS。Linux 文件系统的所有细节被软件解释从而所有的、不同的文件系统对Linux 内核,对在系统运行的程序而言显得相同。
Linux虚拟文件系统的实现要使得对文件的存取要尽可能的快和高效。文件和文件中的数据要正确地被维护。
www.zhishiwu.com
缓冲区缓存(Buffer Cache)
所有的Linux文件系统使用相同的的缓冲区缓存(Buffer Cache)机制来缓冲来自底层的数据。这个机制使得文件系统对物理数据存储设备的存取得到加快。这个缓冲区缓存是独立于文件系统的,被集成入Linux 核心机制中用来分配和读写缓冲区。这个机制的最大优点是它使得Linux文件系统独立于底层的物理介质,独立于设备驱动程序。
www.zhishiwu.com
所有的块设备都是具有同样大小的数据块的线性组合。为了加快物理块设备的存取, Linux 维持一个块缓冲区的缓存。系统中所有的块缓冲区都被放在这个缓冲区缓存的每个地方, 甚至包括最新的, 还没被使用的缓冲区。这个缓存被系统中所有的物理块设备所共享;在任何一个时间里,在缓存(cache)中都有许多块缓冲区(Block Buffer), 它们可能属于系统中的任何一个块设备而且这些数据处于不同的状态。
如果从缓冲区缓存中可以得到有效的数据,这就将节省系统去访问物理设备的时间。任何一个被用来从块设备读取或写数据的块缓冲区都进入这个缓冲区缓存(BufferCache)。随着时间的推移,将来它可能从缓存被移走以为那些更合适的缓冲区(Buffer),当然如果它(a Block Buffer)经常被存取,它就可以在缓存里留下。
Linux 当前支持下列类型:
乾净(clean) 闲置的,:新的缓冲区,
锁(locked) 被锁的缓冲区: 等待被写,
脏(dirty) 脏的缓冲区:这些包含新, 有效的数据,将被写但是到目前为止没被安排写到磁盘上去,
分享(shared): 共享的缓冲区,
unshared:曾经是共享的缓冲区但是目前不是
www.zhishiwu.com
无论何时当一个文件系统需要从它底层的物理设备读一个缓冲区(Buffer)时,它试着从缓冲区缓存(Buffer cache)得到。如果它不能
从缓冲区缓存得到一个缓冲区,然后它将从适当大小的空余的链表中得到一个乾净的(clean)新的缓冲区。这个缓冲区将被放入将缓
冲区缓存。如果它需要的缓冲区在缓冲区缓存中,它可能已含有最新的数据。如果它不是最新的,或如果它仅仅是一个新块缓冲区,
文件系统必须请求设备驱动程序从磁盘读取适当的数据块。象所有的缓存一样,缓存必须被高效地维持以便它有效的,公平地为块设备分配缓存入口。
www.zhishiwu.com
/proc 文件系统
/proc 文件系统确实显示了Linux 虚拟文件系统的强大。它其实并不实际存在。/proc目录,其子目录和它的文件实际上也不存在。/proc 文件系统, 就象一个真实的文件系统一样,在虚拟文件系统中登记自己。然而, 当其下的文件或目录被open 的时候,VFS 对它进行调用请求inodes 时候, /proc 文件系统利用内核中的信息来创造那些文件和目录。
设备文件
Linux , 象所有的Unix 版本一样,将硬件设备作为特殊文件来对待。例如, /dev/null是空设备。一个设备文件不占有文件系统的任何数据空间, 仅仅是对设备驱动程序的一个存取点。系统中有两种特殊设备文件类型;字符和块设备文件。在核心自己内部,设备驱动程序实现文件的语义:你能打开他们, 关上他们等等。字符设备允许以字符模式进行所有的I/O操作;块设备要求I/O操作通过缓冲区缓存(Buffer Cache)的模式。当一个针对设备文件的I/O 请求到来时,该请求被提交给相应的设备驱动程序。经常这并不是系统的一个真正的设备驱动程序,而是一个针对一些子系统的伪设备驱动程序。