首页 > 系统相关 >Linux VFS

Linux VFS

时间:2024-02-05 16:31:42浏览次数:32  
标签:operations 文件 socket VFS 文件系统 Linux inode

前言

本文主要会介绍笔者在学习Linux VFS时所总结的知识点,其中会涉及到VFS抽象出的通用模型等方面的相关内容。 笔者也会将自己的理解在文中进行阐述,这也算是在和大家交流心得的一个过程。若文中有错误的理解和概念,请大家及时纠正;吸纳大家的建议,对于我来说也是很重要的学习过程之一。


1.概念

VFS 是一个内核抽象层。其能够隐藏具体文件系统的实现细节,从而给用户态进程提供一套统一的 API 接口。

Tips: 即VFS是对文件系统的一种抽象产物。

VFS 使用了一种通用文件系统的设计,即其设计了一种通用文件系统模型。 具体的文件系统只要实现了 VFS 的设计接口就能够注册到 VFS 中,从而使内核可以读写这种文件系统。 这种设计理念即是面向对象设计中的抽象类与子类之间的关系,抽象类负责对外接口的设计,子类负责具体的实现。

Tips: VFS本身就是用C语言实现的一套面向对象的接口。


2.通用文件系统模型

VFS 通用文件模型中包含以下四种元数据结构。

2.1 超级块对象(superblock object) superblock用于存放已经注册的文件系统的信息,即superblock保存的是文件系统的元数据。比如ext2,ext3等这些基础的磁盘文件系统,还有用于读写socket的socket文件系统,以及当前的用于读写cgroups配置信息的 cgroups 文件系统等。

2.2 索引节点对象(inode object)

inode用于存放具体文件的信息,即inode保存的是文件的元数据。其中比较重要的一个部分是 inode_operations 的结构体,该结构体定义了在具体文件系统中创建文件,删除文件等的具体实现。

对于一般的磁盘文件系统而言,inode 节点中一般会存放文件在硬盘中的存储块等信息。例如对于socket文件系统,inode会存放socket的相关属性。cgroups的inode会存放与 cgroup 节点相关的属性信息。

2.3 文件对象(file object)

一个文件对象表示进程内打开的一个文件,文件对象是存放在进程的文件描述符表里面的。其中重要的部分是file_operations 的结构体,这个结构体描述了具体的文件系统的读写实现。当进程在某一个文件描述符上调用读写操作时,实际调用的是 file_operations 中定义的方法。 对于普通的磁盘文件系统,file_operations 中定义的就是普通的块设备读写操作。例如对于socket文件系统,file_operations 中定义的就是 socket 对应的 send/recv 等操作。cgroups的file_operations 中定义的是操作 cgroup 结构体等具体的实现。

2.4 目录项对象(dentry object)

在每个文件系统中,内核在查找某一个路径中的文件时会为内核路径上的每一个分量都生成一个目录项对象,通过目录项对象能够找到对应的 inode 对象。目录项对象一般会被缓存,从而提高内核查找速度。

标签:operations,文件,socket,VFS,文件系统,Linux,inode
From: https://blog.51cto.com/LiatscBookshelf/9610678

相关文章

  • Linux终端概念的理解
     1pty(虚拟终端或伪终端):当我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty)。2tty(终端设备的统称):tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东......
  • 实战:使用xmanager等远程工具管理Linux
    5.3.1Linux下常用远程连接工具介绍 5.3.2xmanager使用方法1.xshell使用方法例1:连接一台新的服务器  ......
  • [转][Linux]安装 Centos
    转自:https://zhuanlan.zhihu.com/p/1451020341、下载Centos镜像,推荐:Centos7.X      下载地址:https://mirrors.aliyun.com/centos 各个版本的区别!1、CentOS-7-DVD版本:DVD是标准安装盘,一般下载这个就可以了。2、CentOS-7-NetInstall版本:网络安装镜像。3、Cen......
  • Linux下Oracle启用
    1,Linux切换到Oraclesu-oracle2,使用sqlplus并以管理员的身份登录sqlplus/assysdba3,开启cbdstartup4,开启pdbalterpluggabledatabaseORA19CPDBopen;ORA19CPDB为pdb的名字,可以通过showpdbs查看5,退出sqlplusexit6,打开监听lsnrctlstart7,......
  • 第十八天:Linux防火墙
    一、防火墙概念1、安全技术入侵检测系统(IntrusionDetectionSystems):入侵防御系统(IntrusionPreventionSystem):防火墙(FireWall):二、Linux防火墙技术1、NetfilterLinux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中Netfilter是Linux2.4.x......
  • Makefile in Linux
    WhyIneedthisfile?IFIDON'TUSESOMETHING,IWILLFORGETTHEM.ThankstoGithub&GNUmakeIntroduction(compileprocess,GNU_GCCcommands)C/C++compileDetailsPatternrule#Defineapatternrulethatcompilesevery.cfileintoa.o......
  • linux新安装系统后常遇到的问题
    没有如ll这种快捷命令vim/root/.bashrc后添加以下内容exportLS_OPTIONS='--color=auto'aliasls='ls$LS_OPTIONS'aliasll='ls$LS_OPTIONS-l'aliasl='ls$LS_OPTIONS-lA'aliasrm='rm-i'aliascp='cp-i'......
  • Linux进程间通信_共享内存和消息队列
    本文对SystemV标准的共享内存和消息队列这两种进程间通信方式进行讨论,涉及原理、系统调用接口以及相关的内核数据结构,并给出相关示例代码。SystemV共享内存基本原理进程间通信必须要让不同的进程看到同一份内存资源,因为进程具有独立性,所以这份内存资源是操作系统提供的,接口是由......
  • linux怎么把文件拷到u盘,linux把u盘文件拷贝
    1、插入U盘后,先进入root用户,su2、输入fdisk-l(查看磁盘分配),U盘一般不同于主磁盘起名为/dev/sda1之类的,一般会在最下面看到sdb1之类,系统为W95FAT32此一般即为U盘3、mount到某一个地方,即挂载到主磁盘下某个地方。mount/dev/sdb1(sdb几看U盘挂载情况) /mnt4、cp 要复制的文件......
  • Kali Linux 折腾记
    本篇文章在KaliLinux2022.2Firefox浏览器下写作前话放暑假在家,虽然也没闲着几天,但是看着自己手头上的没用的电脑,感觉总得干点什么好,于是我就想到了装linux系统。但是linux有这么多发行版,用什么好?一开始实际上我想到的是archlinux,但是安装好像有点麻烦,后边又想到了......