`
helloyesyes
  • 浏览: 1306746 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

虚拟文件系统之文件系统的安装与卸载基础知识

阅读更多

努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2011/05/14/6420103.aspx

特殊文件系统:

当网络和磁盘文件系统能够使用户处理存放在内核之外的信息时,特殊文件系统可以为系统程序员和管理员提供一种容易的方式来操作内核的数据结构并实现操作系统的特殊特征。特殊文件系统不限于物理块设备,然而,内核给每个安装的特殊文件系统分配一个虚拟的块设备,让其主设备号为0而次设备号具有任意值(每个特殊文件系统有不同值)。set_anon_super()函数用于初始化特殊文件系统的超级块;该函数本质上获得一个未使用的次设备号dev,然后用主设备号0和次设备号dev设置新超级块的s_dev字段。而另一个kill_anon_super()函数移走特殊文件系统的超级块。unnamed_dev_idr变量包含一个辅助结构(记录当前使用的次设备号)的指针。尽管有些内核设计者不喜欢虚拟块设备标识符,但这些标识符有助于内核以统一的方式处理特殊文件系统和普通文件系统。

文件系统类型注册:

每个注册的文件系统都用一个类型为file_system_type的对象来表示:

fs_supers字段表示给定类型的已安装文件系统所对应的超级块链表的头,链表元素的向后和向前链接存放在超级块对象的s_instances字段中。在系统初始化期间,调用register_filesystem()函数来注册编译时指定的每个文件系统;该函数把相应的file_system_type对象插入到文件系统类型的链表中。

get_fs_type()函数(接受文件系统名作为它的参数)扫描已注册的文件系统链表以查找文件系统类型的name字段,并返回指向相应的file_system_type对象(如果存在)的指针。

命名空间:

每个进程可拥有自己的已安装文件树——叫做进程的命名空间(namespace);对于每一个进程都有自己的namespace,这可以理解为这个进程的地盘。在这里,所有的文件系统都要挂上来统一管理。

通常大多数进程共享一个命名空间,即位于系统的根文件系统且被init进程使用的已安装文件系统树。不过如果clone()系统调用以CLONE_NEWNS标志创建一个新进程,那么进程将获取一个新的命名空间,这个新的命名空间随后由子进程继承(如果父进程没有以CLONE_NEWNS标志创建这些进程)。

当进程安装或卸载一个文件系统时,仅修改它的命名空间。因此,所做的修改对共享同一命名空间的所有进程都是可见的,并且也只对他们可见。进程甚至可通过使用Linux特有的pivot_root()系统调用来改变它的命名空间的根文件系统。

文件系统的根目录有可能不同于进程的根目录:进程的根目录是与“/”路径对应的目录。缺省情况下,进程的根目录与系统的根文件系统的根目录一致(更准确的说是与进程的命名空间中的根文件系统的根目录一致),但是可以通过chroot()系统调用改变进程的根目录。

Linux有所不同,同一个文件系统被安装多次是可能的。当然,如果一个文件系统被安装了n次,那么它的根目录就可通过n个安装点来访问。尽管同一文件系统可以通过不同的安装点来访问,但是文件系统的的确确是唯一的。因此,不管文件系统被安装了多少次,都仅有一个超级块对象。

把多个安装堆叠在一个单独的安装点上也是可能的。尽管已经使用先前安装下的文件和目录的进程可以继续使用,但在同一安装点上的新安装隐藏前一个安装的文件系统。当最顶层的安装被删除时,下一层的安装再一次变为可见的。

已安装文件系统描述符vfsmount

vfsmount数据结构保存在几个双向链表中:

1. 参照上边命名空间那个图。对于每一个命名空间,所有属于此命名空间的已安装的文件系统描述符形成了一个双向循环链表。namespace结构的list字段存放链表的头,vfsmount描述符的mnt_list字段包含链表中指向相邻元素的指针。

2. 由父文件系统vfsmount描述符的地址和安装点目录的目录项对象的地址索引的散列表。散列表存放在mount_hashtable数组中,其大小取决于系统中RAM的容量。表中每一项是具有同一散列值的所有描述符形成的双向循环链表的头。描述符的mnt_hash字段包含指向链表中相邻元素的指针。

3. 对于每一个已安装的文件系统,所有已安装的子文件子系统形成了一个双向循环链表。每个链表的头存放在已安装的文件系统描述符的mnt_mounts字段;此外,描述符的mnt_child字段存放指向链表中相邻元素的指针。

总结一下,三个链表就是这张图了:

1.分配和初始化一个已安装文件系统描述符

2.释放由mnt指向的已安装文件系统描述符

3.在散列表中查找一个描述符并返回它的地址(参数mnt是父已安装文件系统描述符,dentry表示安装子已安装文件系统描述符的安装点,函数返回该子文件系统的vfsmount)。如果查找到了,增加子已安装文件系统描述符的引用计数。

lookup_mnt调用__lookup_mnt进行真正的查找,mnt_hashtable是散列表的起始地址,加上偏移hash(mntdentry),就得到散列值相同的链表的头节点。然后进行遍历,如果一个vfsmountmnt_parent域与所给的mnt相同,vfsmount的挂载点的dentry与所给的dentry相同,则就是这个vfsmount

增加引用计数:

所有文件系统类型的对象都插入到一个单向链表中,由变量file_systems指向链表的第一个元素,而结构中的next字段指向链表的下一个元素。file_systems_lock/写自旋锁保护整个链表免受同时访问。

分享到:
评论

相关推荐

    Oracle安装与卸载

    Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统,它...总之,Oracle的安装和卸载是一个涉及多方面知识和技术的综合过程。通过深入学习和实践,你可以掌握这些技能,更好地管理和维护Oracle数据库系统。

    oracle安装和卸载ppt

    2. 硬盘空间:根据所选组件和文件系统,基础安装需2.04GB,高级安装需1.94GB,NTFS文件系统比FAT32更节省空间。 3. 显示适配器:至少256色。 4. 处理器:主频至少550MHz。 软件需求: 1. 系统体系结构:支持Intel ...

    Oracle11g安装及卸载手册

    #### 一、Oracle11g安装基础知识 ##### 1. 版本与配置要求 - **版本**:Oracle11g R2 64位(根据客户需求调整)。 - **安装字符集**:简体中文(SIMPLIFIEDCHINESE_CHINA.ZHS16GBK)。 - **运行模式**:共享模式。 ...

    2022年优秀-chapOracle数据库服务器的安装与卸载.pptx

    Oracle数据库服务器的安装与卸载是数据库管理中的基础工作,对于任何使用Oracle数据库的企业或个人来说,这都是至关重要的步骤。以下将详细讲解这个过程涉及的知识点。 首先,安装前的准备工作至关重要。确保你的...

    XP—Win7双系统如何卸载Win7

    4. 弹出Windows 7安装光盘(或者在虚拟光驱中卸载ISO镜像文件)。这步骤是卸载Windows7的关键步骤。 5. 重新启动计算机。计算机将使用已安装的以前版本的Windows启动。Windows 7系统的启动项不见了,Early Version ...

    Linux下一个简单的文件系统实现

    这个项目的目标是让学习者了解文件系统的基本原理,并且通过实际操作来理解Linux内核中的虚拟文件系统(VFS)接口。 首先,我们来看XORFS的设计。在Linux中,一个文件系统通常由两部分组成:用户空间的工具(如...

    linux 二级文件管理系统

    2. **VFS(虚拟文件系统)**:Linux的虚拟文件系统层是连接各种不同实际文件系统(如EXT4、FAT32、NTFS等)的桥梁,提供了统一的操作接口。VFS处理了不同文件系统间的差异,使得应用程序可以透明地访问各种文件系统...

    linux系统安装图解教程及卸载修复.docx

    Linux系统安装图解教程及卸载修复主要涵盖了Linux操作系统的基础安装流程和可能遇到的问题处理,以下是对这个主题的详细解析: 一、安装前的准备工作 1. 获取安装介质:你可以购买Linux发行版的安装光盘,例如红旗...

    centos7救援模式修复系统文件

    - 在使用救援模式时,需要具备一定的Linux基础知识。 - 如果不确定如何操作,请咨询专业人士的帮助。 - 在执行文件系统修复时,可能会丢失部分数据,因此建议在执行前做好充分的准备。 #### 总结 通过上述步骤,...

    ORACLE11g的安装和卸载.pptx

    ORACLE 11g 的安装和卸载 ORACLE 11g 数据库的安装是数据库管理员或用户需要掌握的...安装 Oracle 11g 数据库需要具备一定的软硬件环境条件和知识基础,同时需要注意安装过程中的每个步骤和细节,以便确保安装成功。

    deamon虚拟光驱完美卸载.pdf

    在理解和掌握这些知识点的基础上,如果我们要进行Daemon Tools的完美卸载,需要遵循以下步骤: 1. 打开系统控制面板,执行卸载程序,让Daemon Tools通过其自带的卸载功能进行初步清理。 2. 检查注册表,确保所有与...

    Linux操作系统的文件系统.pdf

    除了EXT系列,Linux还支持多种其他文件系统,如FAT、NTFS(用于与Windows系统的兼容)、XFS、Btrfs等,这得益于Linux的虚拟文件系统(Virtual File System,简称VFS)。VFS作为操作系统和实际文件系统之间的抽象层,...

    二级文件管理

    二级文件管理的核心概念是文件系统挂载和虚拟文件系统(VFS,Virtual File System)。VFS是Linux内核提供的一种抽象层,允许不同的文件系统共存并交互。它通过统一的接口使应用程序可以透明地访问不同类型的文件系统...

    Linux基础知识.pdf

    - /proc:提供系统进程信息的虚拟文件系统。 - /root:系统管理员的家目录。 - /sbin:存放系统管理命令。 - /selinux:提供安全访问控制的安全增强系统。 - /srv:存放服务启动后需要提取的数据。 - /sys:内核相关...

    linux课件第4章linux文件系统管理[收集].pdf

    Linux的虚拟文件系统(VFS)是其独特设计的关键,它提供了一个通用的接口,允许不同的逻辑文件系统在操作系统内部共存,并且对外表现为单一的文件系统视图。VFS通过一个目录树结构,也就是namespace,在内存中构建...

    linux内核与文件系统

    了解和掌握Linux内核与文件系统,对于从事系统开发、运维、安全分析等工作至关重要,同时也对嵌入式领域的学习者提供了坚实的基础。深入研究这些知识点,有助于提升对操作系统原理的理解,以及在实际工作中解决问题...

    linux文件系统结构与基本文件处理文.pdf

    了解这些基础知识对于Linux系统的日常使用和管理至关重要。无论是系统管理员还是普通用户,都需要掌握文件系统的结构和操作,以便高效地组织和访问文件。熟悉这些概念有助于提升Linux环境下的工作效率。

    linux文件系统结构与基本文件处理.pdf

    了解这些基础知识对于在Linux系统中操作文件和目录至关重要。熟悉文件类型、目录结构以及路径概念,可以帮助用户更有效地管理和维护系统。同时,掌握这些知识也是成为熟练的Linux系统管理员的基础。在实际操作中,还...

    UNIX操作系统基础专题-华为内部培训资料

    ### UNIX操作系统基础专题知识点 #### 1. UNIX操作系统概述 - **UNIX操作系统简介** UNIX是一种历史悠久且广泛使用的计算机操作系统。它最早于1969年由贝尔实验室开发,并于1975年对外发布。自那时起,UNIX便...

Global site tag (gtag.js) - Google Analytics