《Linux操作系统原理分析之Linux文件管理(2)》(26)
- 8 Linux文件管理
- 8.4 虚拟文件系统 VFS
- 8.4.1 VFS 的工作原理
- 8.4.2 VFS 超级块
- 8.4.3VFS 的 inode
- 8.5 文件系统的安装与注册
- 8.5.2 文件系统的注册
8 Linux文件管理
8.4 虚拟文件系统 VFS
linux 支持的文件系统有;Minix 、ext2、iso、nfs、smb、msdos、romfs 等多达 20 几种。为什么能支持这么多的文件系统?因为它引进了虚拟文件转换技术 VFS。Vfs 屏蔽了各种文件系统的差异,为处理各种不同文件系统提供了统一的接口,在 vfs 的管理下,linux 能访问各种文件系统,而且实现了各种文件系统之间的互访
8.4.1 VFS 的工作原理
- 虚拟转换机制((VFS)
👉物理文件系统:Linux 支持的各种文件系统:如 Minix、ext2 、iso、nfs 等被称为物理文件系统;
👉虚拟转换机制((VFS):不同的物理文件系统有不同的组织结构和不同的处理方式,为了能处理各种不同的物理文件系统,操作系统需要把它们的特性进行抽象,把各种不同物理文件系统转换为一个具有统一共性的虚拟文件系统,这种转换机制称为虚拟文件系统转换,即 vfs 。
VFS 不是实际的文件系统,它进程提供了处理各种物理文件系统的公共接口它进程提供了处理各种物理文件系统的公共接口。通过这个接口使得不同 通过这个接口使得不同的文件系统看来都是相同
- VFS 超级块和 VFS inode 结构
👉VFS 超级块的作用是把在各种文件系统中的表示文件在逻辑分区中的静态分布情况转换成统一的格式。
👉VFS inode 作用是把不同文件系统的活动文件的管理信息,如文件类型 如文件类型、文件尺寸等转换成统一格 文件尺寸等转换成统一格式式式式。 - 公共操作函数接口 公共操作函数接口
当进程向系统发出文件操作请求时,该文件可能是某个物理文件系统中的一个文件,内核将通过VFS 公共操作函数接口转换到该文件系统的相应的操作函数。
8.4.2 VFS 超级块
VFS 超级块是在文件系统安装是由系统在内存建立的,对于每一种已安装的文件系统,在内存中都有与其对应的 VFS 超级块。各种文件系统的超级块都是一个 super_block 结构体。它里的数据是在安装时,由读超级块例程 read_super()把某种文件系统的管理信息写入它的 VFS 超级块中。
VFS 超级块主要包括以下几种信息:
1.文件系统的组织信息。如文件系统所在的设备号、块大小、块位数、文件系统署名等。设备号包括主设备号和次设备号,如/dev/hda1,设备号是
0x0301,其中 03 是主设备号,01 是次设备号。
2.文件系统的注册和安装信息。
3.超级块的属性信息,表现为超级块的各种标志,如超级块标志、锁定标志、禁写标志、修改标志等
4.VFS 超级块的前面各个成员项表示的是各种文件系统的共信息,不同文件系统的特有信息则由联-合体 u 的各个成员表示。
5.指向对超级块进行操作的函数指针。
8.4.3VFS 的 inode
VFS inode 作用是把不同文件系统的活动文件的管理信息,如文件类型、文件尺寸等转换成统一格式。
只有当前正在使用的活动文件才有 VFS inode。
8.5 文件系统的安装与注册
1.安装点
安装点:linux 文件系统的树型层次结构中用于安装其它文件系统的目录称为安装点或安装目录。
超级用户可以 通过下列命令来安装文件系统:
$mount –t msdos /dev/hdc /mnt/usr
Msdos:文件系统类型
/dev/hdc:文件系统所在设备
/mnt/usr:安装点
卸载文件系统命令:
$ummount dev/hdc 或$ummount /mnt/usr
2.物理文件系统链表
Linux 对 系 统 中 已 安 装 的 每 种 物 理 文 件 系 统 用 一 个 vfsmount 结 构 进 行 描 述 , 其 定 义
在/include/linux/mount.h。
8.5.2 文件系统的注册
文件系统在安装后,为了能让 linux 系统对各种物理文件进行管理,物理文件系统在安装后必须向系统内
核注册。
两种方式:
👉编译系统内核时确定可以支持哪些文件系统,在系统引导时注册
👉 系统运行中需要使用某种文件系统时进行安装并注册。
- 注册链表
系统中所有已注册的文件系统登记在 file_system_type 中,组成一个链表。
struct file_system_type
{
const char *name; /*指向文件系统文件系统名*/
struct super_block *(*read_super) (struct super_block *, void *, int); /*函数指针,函数功能:在文件系统安装时,从外存读取该文件系统的有关数据写入 VFS 中。*/
int requires_dev; /*是否需要设备支持:1 需要;0 不需要*/
struct file_system_type * next; /*下一个节点*/
};
Linux 支持的各种物理文件系统的注册数据预先设置在它们各自的注册结构体中。
- 文件系统的注册
各种文件系统的注册是通过内核提供的文件系统初始化函数实现的,如:
Init_ext2_fs();
Init_msdos_fs();
在各个文件系统初始化函数中,把文件系统的注册结构体作为参数,调用内核提供的文件注册函数register_filesystem(),把文件系统注册结构体加入到注册链表中,从而完成注册功能。