linux虚拟文件系统相关概念

VFS四个主要对象

  • 超级块对象:存储对应文件系统相关信息
  • 索引结点对象:存储对应文件的相关信息
  • 目录项文件:根据路径解析得到的对象,便于查找,只存在于内存中
  • 文件对象:表示每个进程中已打开文件的文件信息。一个文件在不同的进程中有不同的文件对象,但指向相同的索引结点

被Linux支持的文件系统,都有且仅有一个file_system_type结构而不管它有零个或多个实例被安装到系统 中。每安装一个文件系统,就对应有一个超级块和安装点。超级块(对应一个文件系统实例)通过它的一个域s_type指向其对应的具体的文件系统类型。具体的 文件系统通过file_system_type中的一个域fs_supers链接具有同一种文件类型的超级块。同一种文件系统类型的超级块通过域s_instances链 接。
在这里插入图片描述
虚拟文件系统VFS抽象层,为各个不同的文件系统提供向上统一的接口
在这里插入图片描述

根文件系统

Linux虚拟文件系统中存在着两个重要的概念:文件系统和挂载点。Linux内核内部维护一棵全局文件文件系统树,在使用文件系统前,需要先将文件系统进行挂载,在此就涉及一个问题:谁来提供最原始的挂载点?为了解决这个问题,Linux在实际切换到磁盘根文件系统之前,会使用rootfs机制构建最顶层的根文件系统,以提供最原始的挂载点。

rootfs机制
rootfs本身是一种基于内存的文件系统,所有的操作都在内存中完成,因而也不需要额外的设备驱动程序的支持。Linux内核在启动时,会首先静态生成rootfs文件系统的相关结构,用于提供最原始的挂载点和根目录,不过这个时候,新生成的根目录下暂时还不包含任何文件。后面内核会基于rootfs构建一个临时根文件系统,并完成早期用户空间的初始化。
当指定根设备的驱动程序完成加载后,内核或init程序(若临时根文件系统提供了init程序)会将根设备上的文件系统挂载到rootfs的特定目录下,并将系统根目录从rootfs切换到根设备上的文件系统,即最终用户所看到的根文件系统。需要注意的是,在完成切换后,rootfs文件系统仍然存在于系统中,只是对于当前进程而言被隐藏了。
切换过程:

mount_root(); //将实际文件系统挂载到rootfs的/root目录
sys_chroot(".");  //将当前目录(/root)设置为系统current根目录,磁盘文件系统设置为系统current根文件系统。

用户进程与文件

task_struct:对应内核中的pcb
files_struct:包含一个进程描述符表
fd[]:进程描述符表指向各个file文件对象
file:文件对象,对进程所打开文件的描述
dentry:目录项对象,每个文件对象对应唯一的目录项对象
inode:索引结点对象,每个文件对象对应唯一的索引结点对象,索引结点对应着物理文件,所以对于每个文件来说也是唯一的
但每个文件/索引节点可能有不同的目录项对象,因为存在例如硬连接

在这里插入图片描述

在这里插入图片描述

  • 标准库函数fopen对应的FILE和系统调用open对应的文件描述符的区别
    在这里插入图片描述
  • 软链接和硬链接
    在这里插入图片描述

参考链接:
https://www.cnblogs.com/alantu2018/p/8461749.html
https://www.cnblogs.com/feng9exe/p/8383950.html
https://blog.csdn.net/qingzhuyuxian/article/details/81141228
https://blog.csdn.net/wwwlyj123321/article/details/100298377
https://blog.csdn.net/abo8888882006/article/details/5362677?utm_source=blogxgwz8
https://blog.csdn.net/tankai19880619/article/details/12093239?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-6.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-6.control

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值