- 0
- 0
- 约3.52万字
- 约 39页
- 2018-03-09 发布于浙江
- 举报
[计算机软件及应用]虚拟文件系统
解析 Linux 中的 VFS 文件系统机制
简介:?总体上说 Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统。
1. 摘要
2. VFS 概述
VFS 是一种软件机制,与它相关的数据结构只存在于物理内存当中。所以在每次系统初始化期间,Linux 都首先要在内存当中构造一棵 VFS 的目录树(在 Linux 的源代码里称之为 namespace),实际上便是在内存中建立相应的数据结构。在笔者看来,VFS 中的各目录其主要用途是用来提供实际文件系统的挂载点。图 1 是一种可能的目录树在内存中的影像:
3. 文件系统的注册
这里的文件系统是指可能会被挂载到目录树中的各个实际文件系统,所谓实际文件系统,。
3.1 数据结构
在 Linux 源代码中,每种实际的文件系统用以下的数据结构表示:
struct file_system_type {
const char *name;
int fs_flags;
struct super_block *(*read_super) (struct super_block *, void *, int);
struct module *owner;
struct file_system_type * next;
struct list_head fs_supers;
};
注册过程实际上将表示各实际文件系统的 struct file_system_type 数据结构的实例化,然后形成一个链表,内核中用一个名为 file_systems 的全局变量来指向该链表的表头。
3.2 注册 rootfs 文件系统
rootfs 的注册是通过 init_rootfs() 这一初始化函数来完成,这意味着 rootfs 的注册过程是 Linux 内核初始化阶段不可分割的一部分。
init_rootfs() 通过调用 register_filesystem(rootfs_fs_type) 函数来完成 rootfs 文件系统注册的,其中rootfs_fs_type 定义如下:
struct file_system_type rootfs_fs_type = { \
name: rootfs, \
read_super: ramfs_read_super, \
fs_flags: FS_NOMOUNT|FS_LITTER, \
owner: THIS_MODULE, \
}
注册之后的 file_systems 链表结构如下图2所示:
4. VFS 目录树的建立
本节阐述 Linux 在初始化阶段是如何建立根结点的,即 /目录。这其中会包括挂载 rootfs 文件系统到根目录 / 的具体过程。构造根目录的代码是在 init_mount_tree() 函数 (fs\namespace.c) 中。
首先,init_mount_tree() 函数会调用 do_kern_mount(rootfs, 0, rootfs, NULL) 来挂载前面已经注册了的 rootfs 文件系统。这里我们调用的是 do_kern_mount(),这个函数内部自然会创建我们最关心也是最关键的根目录(在 Linux 中,目录对应的数据结构是 struct dentry)。
在这个场景里,do_kern_mount() 做的工作主要是:
1)调用 alloc_vfsmnt() 函数在内存里申请了一块该类型的内存空间(struct vfsmount *mnt),并初始化其部分成员变量。
2) 调用 get_sb_nodev() 函数在内存中分配一个超级块结构 (struct super_block) sb,并初始化其部分成员变量,将成员 s_instances 插入到 rootfs 文件系统类型结构中的 fs_supers 指向的双向链表中。
3) 通过 rootfs 文件系统中的 read_super 函数指针调用 ramfs_read_super() 函数。
4) ramfs_read_super() 函数调用 ramfs_get_inode() 在内存中分配了一个 inode 结构 (struct inode) inode,并初始化其部分成员变量,其中比较重要的有 i_op、i_fop 和 i_sb:
inode-i_op = ramfs_dir_inode_operations;
inode-i_fop = dcache_dir_ops;
inode-i_sb = sb;这使得将来通过文件系统调用对 VFS 发起的文件操作等指令将被 rootfs 文件系统中相应的函数
您可能关注的文档
- [计算机软件及应用]第4讲嵌入式实时操作系统分析.ppt
- [计算机软件及应用]第5章 需求建模.pdf
- [计算机软件及应用]第5章 面向对象编程基础1.ppt
- [计算机软件及应用]第5章 软件工程_总体设计 p65.ppt
- [计算机软件及应用]第5讲 病毒、恶意程序及其防范.ppt
- [计算机软件及应用]第6章 分布式数据库中的可靠性.ppt
- [计算机软件及应用]第6章 结构体与共用体.ppt
- [计算机软件及应用]第6讲 第6章 数组.ppt
- [计算机软件及应用]第6设备更新.ppt
- [计算机软件及应用]第7-8讲 数据库的创建和使用.ppt
- 【上交所-2026研报】上海锦和商业经营管理(集团)股份有限公司2025年年度报告.pdf
- 【上交所-2026研报】横店影视股份有限公司2025年年度报告.pdf
- 【港交所-2026研报】比特元宇宙 中期报告 2025-2026.pdf
- 【上交所-2026研报】晶方科技2025年年度报告.pdf
- 【蔚云科技-2026研报】2025亚马逊【自动割草机】行业分析年度研究.pdf
- 【港交所-2026研报】智升集团控股 中期报告2025-26.pdf
- 【上交所-2026研报】2025年年度报告.pdf
- 【世界卫生组织-2026研报】Recommended composition of influenza virus vaccines for use in the 2026-2027 northern hemisphere influenza season.pdf
- 【港交所-2026研报】WT集团 2025-2026 中期报告.pdf
- 【港交所-2026研报】新世界发展 中期报告 2025-2026.pdf
最近下载
- 第二章-多媒体数据压缩技术.ppt VIP
- 2026年春季统编版(部编版)2024新教材二年级下册道德与法治教学计划、教学设计及教学反思(附目录).pdf
- 24.抽取文本汇词云(教学课件)-四年级信息科技全一册 (人教版2024).pptx VIP
- 2025年军队文职人员统一招聘面试( 航空航天)题库附答案.doc VIP
- PLC基础知识大全培训PPT课件.pptx VIP
- 《高中数学•同步课堂学与练》高二(人教B版选修第二册)第05讲 正态分布(解析版).pdf VIP
- 2025年支部书记抓基层党建工作述职报告范文.docx VIP
- 高教社2023马工程国际私法学教学课件u5.pptx VIP
- 学生宿舍卫生检查表.docx VIP
- 年末存货盘点表.docx VIP
原创力文档

文档评论(0)