什么是虚拟文件系统?
Linux与其他类Unix系统一样,采用虚拟文件系统VFS来达到支持多种文件系统格式的目标
假设输入一下shell命令:
cp /floppy/test /temp/test
, 其中floppy是软盘的意思,是MS-DOS的磁盘的一个挂载点,/tmp是Ext2文件系统中的一个目录
也就是说,这个cp命令是跨文件系统工作的,将MS-DOS磁盘的一个文件复制到Ext2文件系统中!
但是cp命令不需要知道/floppy/test和/tmp/test分别是什么文件系统类型,在cp命令中,通过VFS提供的系统调用接口进行文件操作。
示意图如下:
也就是说,判断源文件和目的文件是何种文件系统的工作交给了系统调用来做,cp命令并不需要考虑这一点。
包括以下种类:
比如NFS, Code, AFS, SMB, NCP等
引入一个通用文件模型,此模型可以表示所有支持的文件系统,对于一个具体实现的文件系统,在处理时,需要将其进行概念上的转换,例如,在通用文件模型中,目录被看成是普通文件。
在实现上:read()–>sys_read–>file数据结构–>f_op–>MS_DOS
通用文件模型有下列对象类型组成:
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 文件系统是 Linux 中的特殊文件系统,提供给用户一个可以了解内核内部工作过程的可读窗口,在运行时访问内核内部数据结构、改变内核设置的机制。
proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要的文件:
做个小实验缓解下无聊的情绪:
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的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息,日后用到知道有这么个东西,再去查资料就好了!
本系列博客目录
下一篇:Linux系统调用