
VFS文件系统
文章平均质量分 91
VFS的存在使得Linux下一切皆文件成为可能
指向NULL
这个作者很懒,什么都没留下…
展开
-
路径查找之进入文件系统安装点
1. 关于路径名查找1.1 处理过程VFS路径名查找,也就是如何从文件路径名导出相应的索引节点。这个处理过程可以简述为:检查与第一个名字匹配的目录项,获得相应的索引节点。然后,从磁盘读出包含那个索引节点的目录文件,并检查与第二个名字匹配的目录项,以获得相应的索引节点。对于包含在路径中的每个名字,这个过程反复执行。1.2 绝对路径与相对路径如果路径名的第一个字符是“/”,那么这个路径是绝对路径,因此从 current->fs->root(进程根目录)所标识的目录开始搜索。否则路径是相对路径原创 2021-07-30 13:02:44 · 311 阅读 · 0 评论 -
安装根文件系统
1. 如何安装安装根文件系统是系统初始化的关键部分。Linux内核允许根文件系统存放在很多不同的地方,比如硬盘分区、软盘、通过NFS共享的远程文件系统,设置保存在ramdisk中(RAM中的虚拟块设备)。接下来讨论的是假定根文件系统存放在硬盘分区。安装根文件系统分两个阶段:内核安装特殊rootfs文件系统,该文件系统仅提供一个作为初始安装点的空目录。内核在空目录上安装实际根文件系统。rootfs文件系统的存在,允许内核容易地改变实际根文件系统。事实上,在某些情况下,内核逐个地安装和卸载几个根文原创 2021-07-27 09:26:33 · 460 阅读 · 0 评论 -
VFS之普通文件系统安装
1. VFS层安装普通文件系统分析之所以称之为普通安装是因为接下来讨论的是将一个文件系统安装在一个已安装文件系统之上的情形。使用 mount() 系统调用来安装一个普通文件系统,将会调用它的服务例程 sys_mount() 函数。1.1 sys_mount()/** * @dev_name: 文件系统所在的设备文件的路径名 * @dir_name: 安装点路径名 * @type: 文件系统类型 * @flags: 安装标志 * @data: 指向一个与文件系统相关的数据结构的指针(可能原创 2021-07-24 22:23:23 · 423 阅读 · 2 评论 -
VFS各对象间的联系
1. VFS主要数据结构间的联系前面我在其他博客文章中已经整理了VFS主要数据结构的说明,这里主要是以一个例子将它们联系起来。假设/home目录下有一个用户名为book,在book目录下有两个文件,文件b是文件a的硬链接,同一时刻有三个进程在读取文件,其中有两个进程访问了同一文件a,另外一个进程访问了文件b,图示如下:文件描述符 task_struct 中的 files 字段中的 fd 指向该进程已打开文件的指针数组,其中前三个索引指向的文件对象默认被占用,所以用户打开的文件从索引3开始分配。每个进原创 2021-07-22 11:27:34 · 438 阅读 · 2 评论 -
VFS数据结构之(其它结构)
1. 与文件系统相关的数据结构1.1 文件系统类型1.1.1 file_system_type 数据结构用来描述特定文件系统的结构。struct file_system_type { const char *name; /* 文件系统名 */ int fs_flags; /* 文件系统类型标志 */ int (*get_sb) (struct file_system_type *, int, const char *, void *, struct原创 2021-07-20 16:31:32 · 226 阅读 · 0 评论 -
VFS数据结构之(file)
1. 文件对象(file object)文件对象描述进程怎样与一个打开的文件进行交互。文件对象是在文件被打开时创建的。注意:文件对象在磁盘上没有对应的映像,因此file结构体中没有dirty字段表示文件对象是否被修改。1.1 文件数据结构struct file { union { struct list_head fu_list; /* 用于通用文件对象链表的指针 */ struct rcu_head fu_rcuhead; /* 回收文件对象时,由RCU描述符使用 */ } f_u原创 2021-07-19 15:51:28 · 397 阅读 · 1 评论 -
VFS数据结构之(dentry)
1. 目录项对象(dentry object)VFS把每个目录看作一个文件,由若干子目录和文件组成。对于进程查找路径名中的每个分量,内核都为其创建一个目录项对象;目录项对象将每个分量与其对应的索引节点相联系。例如/tmp/test,内核会分别为“/”,“tmp”,“test”创建目录项。注意,目录项对象在磁盘上没有对应的映像,所以dentry中不包含判断dirty的标志。引入目录项结构是很有必要的,因为同一个文件有且仅有一个inode对象表示,而由于硬链接的存在,对同一文件的访问可以通过不同的文件名,所原创 2021-07-19 12:41:39 · 861 阅读 · 1 评论 -
VFS数据结构之(inode)
1. 索引节点对象(inode object)文件系统处理文件所需要的所有信息都放在索引节点数据结构中。文件名可以改,但索引节点对文件是唯一的。每个索引节点对象都会复制磁盘索引节点包含的一些数据,比如分配给文件的块数。1.1 索引节点数据结构struct inode { struct hlist_node i_hash; /* 用于散列链表的指针 */ struct list_head i_list; /* 用于描述索引节点当前状态的链表的指针 */ struct list_head i_s原创 2021-07-17 10:02:07 · 633 阅读 · 0 评论 -
VFS数据结构之(superblock )
通用文件模型VFS的思想是把不同种类文件系统的共同部分抽象出来,其中有一个字段用来指向所支持的实际文件系统的操作方法。这些抽象出来的数据结构就是VFS的通用文件模型。你可以把通用文件模型看作面向对象的,结构体中既定义了数据也定义了其上的操作方法。这个模型能够表示所有支持的文件系统,因此要实现具体的文件系统就必须要把其物理组织结构转换为虚拟文件系统的通用文件模型才可以使用VFS。例如:通用模型中每个目录被看作一个文件,包含若干文件和其他子目录。但是存在几个非Unix基于磁盘的文件系统,他们利用文件分配表原创 2021-07-15 14:15:51 · 667 阅读 · 1 评论