1.引言

本文所述关于文件管理的系列文章主要是对陈莉君老师所讲述的文件系统管理知识讲座的整理。Linux可以支持不同的文件系统,它源于unix文件系统,也是unix文件系统的一大特色。

本文主要先引入VFS的概念,并从直观上了解Linux中所注册的文件系统,从而对Linux文件系统有一个概括的认识。

2.虚拟文件系统的引入

2.1 VFS(Virtual FileSystem Switch)架构

图 VFS文件系统架构图

VFS为用户空间提供了统一的接口,不同的文件系统需要实现这些接口,对于设备文件,驱动程序中也要实现相应的接口,这体现了一种机制与分离的理念。

2.2 查看内核注册的文件系统

图 内核所注册的文件系统

通过cat /proc/filesystems可以查看当前内核所注册的文件系统,文件系统不仅作为一种文件的管理机制,也可以作为其它的一种机制加入VFS中,如cgroup等

2.3 Linux文件系统目录结构

    

图 文件系统目录结构

Linux的文件是统一的,位于一棵目录树中,它与进程管理是一脉相承的理念。

注:所有进程都来源于唯一的初始进程,所有进程都是该进程的后代进程

3.file_system_type结构体

 struct file_system_type {
const char *name; /*文件系统的名字*/
int fs_flags; /*文件系统类型标志*/
#define FS_REQUIRES_DEV 1
#define FS_BINARY_MOUNTDATA 2
#define FS_HAS_SUBTYPE 4
#define FS_USERNS_MOUNT 8 /* Can be mounted by userns root */
#define FS_USERNS_DEV_MOUNT 16 /* A userns mount does not imply MNT_NODEV */
#define FS_USERNS_VISIBLE 32 /* FS must already be visible */
#define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() during rename() internally. */
struct dentry *(*mount) (struct file_system_type *, int,
const char *, void *);
void (*kill_sb) (struct super_block *); /*禁止访问超级块*/
struct module *owner; /*文件系统模块*/
struct file_system_type * next; /*链表中下一个文件系统类型*/
struct hlist_head fs_supers; /*超级块对象列表*/ struct lock_class_key s_lock_key;
struct lock_class_key s_umount_key;
struct lock_class_key s_vfs_rename_key;
struct lock_class_key s_writers_key[SB_FREEZE_LEVELS]; struct lock_class_key i_lock_key;
struct lock_class_key i_mutex_key;
struct lock_class_key i_mutex_dir_key;
};

注:如上为Linux4.6中的结构,讲座中采用的是Linux2.6

  • Linux内核采用VFS(Virtual Filesystem Switch)框架
  • 每个文件系统都需要在VFS中注册,即填充一个struct file_system_type结构
  • 此结构描述的是文件系统的名称以及一个指向对应VFS超级块读取例程的地址等信息

  

图 file_system_type的组织结构  

  • 内核采用链表组织每个注册的文件系统,链表头为file_systems
  • 所有注册的文件系统通过next指针进行链接
  • 每个文件系统实例都对应一个super_block,同种文件系统类型的super_block挂在fs_supers链表上

 4. 实例:打印file_system_type信息

可以通过cat /proc/kallsyms | wc可以统计内核有多少个符号。

由于内核有些符号是没有导出的,不允许访问,通过cat /proc/kallsyms | grep file_systems可以打印出file_systems的地址,通过这个地址进行遍历,可以将打印出所有注册的文件系统

Linux文件系统1---概述的更多相关文章

  1. linux文件系统初始化过程(1)---概述

    术语表: struct task:进程 struct mnt_namespace:命名空间 struct mount:挂载点 struct vfsmount:挂载项 struct file:文件 st ...

  2. Linux文件系统的设计

    总论: linux的文件系统设计非常优秀,总的来讲有两大部分,第一部分就是树形的组织结构,第二部分就是vfs,树形的组织结构组织了文件系统的表象,用户非常方便的使用,而vfs是文件系统的实现机理,它处 ...

  3. linux 设备驱动概述

    linux 设备驱动概述 目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer):       主要利用C库函数和 ...

  4. Linux文件系统2---VFS的四个主要对象

    1.引言 本文所述关于文件管理的系列文章主要是对陈莉君老师所讲述的文件系统管理知识讲座的整理. Linux可以支持不同的文件系统,它源于unix文件系统,也是unix文件系统的一大特色. Linux文 ...

  5. Linux文件系统知识记录——ext2描述

    最近完成了一个编程作业,大致功能是给定一个文件名,给出该文件所在目录和其本身所占用的簇号等信息.笔者选用了Linux的ext系列文件系统作为实验对象,通过实验对ext2文件系统的存储和索引有了一个较为 ...

  6. [转]使用fdisk磁盘分区和 Linux 文件系统

    概述 在本文中,学习磁盘分区和 Linux 文件系统相关内容.学习: 创建分区 使用 mkfs 命令来设置 ext2.ext3.ext4.xfs.Reiser v3 和 vfat 文件系统 创建和管理 ...

  7. Linux 文件系统详解

    作者: Paul Brown 译者: LCTT amwps290 这篇教程将帮你快速了解 Linux 文件系统. 早在 1996 年,在真正理解文件系统的结构之前,我就学会了如何在我崭新的 Linux ...

  8. 带你快速了解Linux文件系统

    http://www.embeddedlinux.org.cn/emb-linux/file-system/201807/03-8197.html 这篇教程将帮你快速了解 Linux 文件系统. 早在 ...

  9. 自动驾驶QNX,Linux,Autosar概述

    自动驾驶QNX,Linux,Autosar概述 QNX是一个分布式.嵌入式.可规模扩展的实时操作系统.遵循POSIX.1 (程序接口)和POSIX.2 (Shell和工具).部分遵循POSIX.1b( ...

  10. linux文件系统和日志分析

    一.Linux文件系统 1.inode与block 1.概述: (1)文件数据包括元信息与实际信息 (2)文件存储在硬盘上,硬盘最小存储单位是"扇区",每个扇区存储512字节 (3 ...

随机推荐

  1. 洛谷P2054 [AHOI2005]洗牌(扩展欧几里德)

    洛谷题目传送门 来个正常的有证明的题解 我们不好来表示某时刻某一个位置是哪一张牌,但我们可以表示某时刻某一张牌在哪个位置. 设数列\(\{a_{i_j}\}\)表示\(i\)号牌经过\(j\)次洗牌后 ...

  2. Internet Explorer 10 administration IE10管理

    http://4sysops.com/archives/internet-explorer-10-administration-part-1-overview/ http://4sysops.com/ ...

  3. 【BZOJ1558】等差数列(线段树)

    [BZOJ1558]等差数列(线段树) 题面 BZOJ 题解 可以说这道题已经非常毒瘤了 怎么考虑询问操作? 如果直接将一段数分解为等差数列? 太麻烦了.... 考虑相邻的数做差, 这样等差数列变为了 ...

  4. 【uoj207】 共价大爷游长沙

    http://uoj.ac/problem/207 (题目链接) 题意 给出一棵无根树,4种操作:在路径集合中加入一条路径,在路径集合中删除一条路径,删一条边加一条边,查询一条边是否被集合中所有路径经 ...

  5. The 2018 ACM-ICPC China JiangSu Provincial Programming Contest快速幂取模及求逆元

    题目来源 The 2018 ACM-ICPC China JiangSu Provincial Programming Contest 35.4% 1000ms 65536K Persona5 Per ...

  6. 【洛谷P1429】平面最近点对

    题解:直接在输入点对的基础上建立 kd-tree,再每次以每个节点的坐标查询离这个点最近的点即可,同时需要忽略这个点本身对该点答案的贡献. 另外,直接在这些点上建立 kd-tree 会比一个一个插入点 ...

  7. 【ATcoder】Xor Sum 2

    题目大意:给定一个 N 个点的序列,求有多少个区间满足\(\oplus_{i=l}^ra[i]=\sum\limits_{i=l}^ra[i]\). 题解: 小结论:\(a\oplus b=a+b\r ...

  8. gb2312提交的url编码转换成utf8的查询

    使用场景,当一网站是gb2312的编码向另一个是utf8的网站提交查询 如:http://search.chinayq.com/?key=%C0%D6%C6%F7 其中key为gb2312的url编码 ...

  9. 解决QtCreator中文乱码

    在QT的菜单栏”Tools“ -> "Options" -> "Behavior" -> "File Encoding" ...

  10. (stringstream toupper 空格) 词组缩写 hdu2564

    词组缩写 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...