Linux 核心--10.文件系统( 六 )




9.2.1VFS 超块
每个已安装的文件系统由一个VFS超块表示;它包含如下信息:


Device
表示文件系统所在块设备的设备标志符 。例如系统中第一个IDE硬盘的设备标志符为0x301 。
Inode pointers
这个mounted inode指针指向文件系统中第一个inode 。而covered inode指针指向此文件系统安装目录的inode 。根文件系统的VFS超块不包含covered指针 。
Blocksize
以字节记数的文件系统块大小,如1024字节 。
Superblock operations
指向此文件系统一组超块操纵例程的指针 。这些例程被VFS用来读写inode和超块 。
File System type
这是一个指向已安装文件系统的file_system_type结构的指针 。
File System specific
指向文件系统所需信息的指针 。

9.2.2The VFS Inode
和EXT2文件系统相同,VFS中的每个文件、目录等都用且只用一个VFS inode表示 。每个VFS inode中的信息通过文件系统相关例程从底层文件系统中得到 。VFS inode仅存在于核心内存并且保存只要对系统有用,它们就会被保存在在VFS inode cache中 。每个VFS inode包含下列域:


device
包含此文件或此VFS inode代表的任何东西的设备的设备标志符 。
inode number
文件系统中唯一的inode号 。在虚拟文件系统中device和inode号的组合是唯一的 。
mode
和EXT2中的相同, 表示此VFS inode的存取权限 。
user ids
所有者的标志符 。
times
VFS inode 创建、修改和写入时间 。
block size
以字节计算的文件块大小,如1024字节 。
inode operations
指向一组例程地址的指针 。这些例程和文件系统相关且对此inode执行操作,如截断此inode表示的文件 。
count
使用此VFS inode的系统部件数 。一个count为0的inode可以被自由的丢弃或重新使用 。
lock
用来对某个VFS inode加锁,如用于读取文件系统时 。
dirty
表示这个VFS inode是否已经被写过,如果是则底层文件系统需要更新 。
file system specific information

9.2.3注册文件系统





图9.5 已注册文件系统

当重新建立Linux核心时安装程序会询问是否需要所有可支持的文件系统 。核心重建时文件系统启动代码包含了所有那些编入核心的文件系统的初始化例程 。

Linux文件系统可构造成模块, 此时它们会仅在需要时加载或者使用insmod来载入 。当文件系统模块被加载时, 它将向核心注册并在卸载时撤除注册 。每个文件系统的初始化例程还将向虚拟文件系统注册,它用一个包含文件系统名称和指向其VFS超块读例程的指针的file_system_type结构表示 。每个file_system_type结构包含下列信息:


Superblock read routine
此例程载文件系统的一个实例被安装时由VFS调用 。
File System name
文件系统的名称如ext2 。
Device needed
文件系统是否需要设备支持 。并不是所有的文件系统都需要设备来保存它 。例如/proc文件系统不需要块设备支持 。
你可以通过查阅/proc/filesystems可找出已注册的文件系统,如:

ext2
nodev proc
iso9660


9.2.4安装文件系统
当超级用户试图安装一个文件系统时,Linux核心首先使系统调用中的参数有效化 。尽管mount程序会做一些基本的检查, 但是它并不知道核心构造时已经支持那些文件系统,同时那些建议的安装点的确存在 。看如下的一个mount命令:

$ mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom

mount命令将传递三个参数给核心:文件系统名,包含文件系统的物理块设备以及此新文件系统要安装到的已存在的目录名 。

虚拟文件系统首先必须做的是找到此文件系统 。它将通过由链指针file_systems指向的file_system_type结 构来在所有已知文件系统中搜寻 。

推荐阅读