操作系统-课堂笔记-虚拟文件系统VFS(南航)

文章目录

  • 虚拟文件系统VFS
    • 简介
    • VFS的作用
      • 举例说明
      • VFS都支持哪些文件系统类型?
        • 1.基于磁盘的文件系统,它们管理在本地磁盘分区中可用的存储空间
        • 2.网络文件系统:用于访问属于其他网络计算机的文件系统所包含的文件
        • 3.特殊文件系统
    • 实现细节
      • 1.VFS中通用文件模型概念
      • 2.VFS所处理的系统调用
    • proc

虚拟文件系统VFS

简介

什么是虚拟文件系统?

  • VFS是一个软件层,用来处理与Unix标准文件系统相关的所有系统调用
  • 是用户应用程序与文件系统实现之间的抽象层
  • 能为各种文件系统提供一个通用的、统一的接口

Linux与其他类Unix系统一样,采用虚拟文件系统VFS来达到支持多种文件系统格式的目标

VFS的作用

举例说明

假设输入一下shell命令:
cp /floppy/test /temp/test, 其中floppy是软盘的意思,是MS-DOS的磁盘的一个挂载点,/tmp是Ext2文件系统中的一个目录

也就是说,这个cp命令是跨文件系统工作的,将MS-DOS磁盘的一个文件复制到Ext2文件系统中!

但是cp命令不需要知道/floppy/test和/tmp/test分别是什么文件系统类型,在cp命令中,通过VFS提供的系统调用接口进行文件操作。

示意图如下:
操作系统-课堂笔记-虚拟文件系统VFS(南航)_第1张图片
也就是说,判断源文件和目的文件是何种文件系统的工作交给了系统调用来做,cp命令并不需要考虑这一点。

VFS都支持哪些文件系统类型?

1.基于磁盘的文件系统,它们管理在本地磁盘分区中可用的存储空间

包括以下种类:

  • Linux使用的文件系统:ext2, ext3, ReiserFS
  • Unix家族使用的文件系统:SYSV文件系统,UFS, MINIX文件系统以及VERITAS VxFS
  • 微软公司的文件系统:MS-DOS, VFAT以及NTFS
  • IOS9660CD-ROM文件系统和通用磁盘格式的DVD文件系统
  • 其他有专利权的文件系统:如HPFS, HFS, AFFS, ADFS
  • 起源于非Linux系统的其他日志文件系统,JFS, XFS

2.网络文件系统:用于访问属于其他网络计算机的文件系统所包含的文件

比如NFS, Code, AFS, SMB, NCP等

3.特殊文件系统

  • 不同于上述两大类
  • 不管理具体的磁盘空间
  • /proc

实现细节

1.VFS中通用文件模型概念

引入一个通用文件模型,此模型可以表示所有支持的文件系统,对于一个具体实现的文件系统,在处理时,需要将其进行概念上的转换,例如,在通用文件模型中,目录被看成是普通文件。

在实现上:read()–>sys_read–>file数据结构–>f_op–>MS_DOS

通用文件模型有下列对象类型组成:

  • 超级快对象:存放文件系统相关信息
  • 索引结点对象:存放具体文件的一般信息
  • 文件对象:存放已打开的文件和进程之间交互的信息
  • 目录项对象:存放目录项与文件的链接信息

操作系统-课堂笔记-虚拟文件系统VFS(南航)_第2张图片

2.VFS所处理的系统调用

mount、umount:挂载/卸载文件系统
sysfs :获取文件系统信息
statfs、fstatfs、ustat :获取文件系统统计信息
chroot :更改根目录
chdir、fchdir、getcwd :操纵当前工作目录
mkdir、rmdir :创建/删除目录
getdents、readdir 、link 、unlink 、rename :对目录项进行操作
readlink 、symlink :对符号链接进行操作
chown 、fchown 、lchown :更改文件所有者
chmod 、fchmod 、utime :更改文件属性
open、close、create …

上述大部分操作只需要与通用文件模型中的一些对象打交道,而不需要真正操作具体的文件系统和文件,因此可以把VFS看成是一个“通用”的文件系统,在必要时依赖某种具体的文件系统

proc

proc 文件系统是 Linux 中的特殊文件系统,提供给用户一个可以了解内核内部工作过程的可读窗口,在运行时访问内核内部数据结构、改变内核设置的机制。

  • 保存系统当前工作的特殊数据,但并不存在于任何物理设备中;
  • 对其进行读写时,才根据系统中的相关信息即时生成;或映射到系统中的变量或数据结构;
  • proc 被称为‘伪文件系统’;
  • 其挂接目录点固定为/proc;
  • ‘man proc’ 进行了详细说明。
  • /proc 的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息。大部分 /proc 中的文件和目录提供系统物理环境最新的信息
  • 尽管 /proc 中的文件是虚拟的,但它们仍可以使用任何文件编辑器或像‘more’, ‘less’或 ‘cat’这样的程序来查看。

proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要的文件:

  • /proc/cpuinfo - CPU 的信息 (型号, 家族, 缓存大小等)
  • /proc/meminfo - 物理内存、交换空间等的信息
  • /proc/mounts - 已加载的文件系统的列表
  • /proc/devices - 可用设备的列表
  • /proc/filesystems - 被支持的文件系统
  • /proc/modules - 已加载的模块
  • /proc/version - 内核版本
  • /proc/cmdline - 系统启动时输入的内核命令行参数

做个小实验缓解下无聊的情绪:

cat /proc/cpuinfo > cpuinfo
然后将cpuinfo文件打开查看里面的信息,如下:
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 94
model name	: Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
stepping	: 3
cpu MHz		: 2592.000
cache size	: 6144 KB
physical id	: 0
siblings	: 3
core id		: 0
cpu cores	: 3
apicid		: 0
initial apicid	: 0
fdiv_bug	: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 22
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht nx rdtscp constant_tsc xtopology nonstop_tsc cpuid pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase avx2 invpcid rdseed clflushopt flush_l1d
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips	: 5184.00
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 94
model name	: Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
stepping	: 3
cpu MHz		: 2592.000
cache size	: 6144 KB
physical id	: 0
siblings	: 3
core id		: 1
cpu cores	: 3
apicid		: 1
initial apicid	: 1
fdiv_bug	: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 22
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht nx rdtscp constant_tsc xtopology nonstop_tsc cpuid pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase avx2 invpcid rdseed clflushopt flush_l1d
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips	: 5184.00
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

processor	: 2
vendor_id	: GenuineIntel
cpu family	: 6
model		: 94
model name	: Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
stepping	: 3
cpu MHz		: 2592.000
cache size	: 6144 KB
physical id	: 0
siblings	: 3
core id		: 2
cpu cores	: 3
apicid		: 2
initial apicid	: 2
fdiv_bug	: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 22
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht nx rdtscp constant_tsc xtopology nonstop_tsc cpuid pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase avx2 invpcid rdseed clflushopt flush_l1d
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips	: 5184.00
clflush size	: 64
cache_alignment	: 64
address sizes	: 39 bits physical, 48 bits virtual
power management:

上面是在虚拟机上做的时候,印象中是分配了3个核心给它,上面也显示了三个核心的内容。

简单看下/proc里面有什么内容叭,这里仅作了解:

  • /proc 文件系统可以用于获取运行中的进程的信息。在 /proc 中有一些编号的子目录。每个编号的目录对应一个进程 id (PID)。这样,每一个运行中的进程 /proc 中都有一个用它的 PID 命名的目录。这些子目录中包含可以提供有关进程的状态和环境的重要细节信息的文件。
    操作系统-课堂笔记-虚拟文件系统VFS(南航)_第3张图片
    这些数字都是进程id,即PID,也可以进入子目录看看里面的内容!

本小节也是仅作了解,主要知道:/proc的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息,日后用到知道有这么个东西,再去查资料就好了!

本系列博客目录
下一篇:Linux系统调用

你可能感兴趣的:(Linux,南航-操作系统-课堂笔记)