编者注:在分析完 Linux inode 基础概念 之后,让我们看下inode在内存中对应的文件系统抽象VFS,然后分析下关于 磁盘操作 中Page Cache的回写策略。...VFS(虚拟文件系统层) VFS是虚拟文件系统层(进程与文件系统之间的抽象层),与它相关的数据结构只存在于物理内存当中。...其目的是屏蔽下层具体文件系统操作的差异,为上层的操作提供一个统一接口,正是由于VFS的存在,Linux中允许多个不同的文件系统共存。...VFS中包含着向物理文件系统转换的一系列数据结构,如VFS超级块、VFS的Inode、各种操作函数的转换入口等。...Linux中VFS依靠四个主要的数据结构来描述其结构信息,分别为超级块、索引结点、目录项和文件对象,这些数据结构大都会与磁盘上的对应上。 超级块(Super Block):超级块对象表示一个文件系统。
继上一篇文章: http://yehe.isd.com/column/support-plan/article-edit/93709 四、file结构体 文件对...
文件系统的注册 这里的文件系统是指可能会被挂载到目录树中的各个实际文件系统,所谓实际文件系统,即是指VFS 中的实际操作最终要通过它们来完成而已,并不意味着它们一定要存在于某种特定的存储设备上。...比如在笔者的 Linux 机器下就注册有 "rootfs"、"proc"、"ext2"、"sockfs" 等十几种文件系统。...3.1 文件系统的数据结构 在 Linux 源代码中,每种实际的文件系统用以下的数据结构表示(include/linux/fs.h): 1 struct file_system_type { 2...mount:这个函数非常重要,它VFS能够和底层文件系统交互的起始点,该函数是不能放在super_block结构中的,因为super_block是在get_sb执行之后才能建立的。...的关系太过密切,如果说 ext2/ext3 是 Linux 的本土文件系统,那么 rootfs 文件系统则是 VFS 存在的基础。
最近挂载了N多的文件系统,大致了不同文件系统的相应特性及挂载方式,却还是对Linux的文件系统没有从源码方面去了解。不求甚解确实不好不好。...于是借鉴一些大牛的博客及自己的理解,总结了博客系列: 一、VFS是什么: VFS是Linux中的一个虚拟文件文件系统,也称为虚拟文件系统交换层(Virtual Filesystem Switch),是一种软件机制...等); (2)通过系统调用到VFS到实际文件系统的操作。...二、文件系统种类: (1)基于磁盘的文件系统; (2)网络文件系统(NFS); (3)伪文件系统(sysfs、proc); VFS 目录树结构: ?...Reference: https://www.ibm.com/developerworks/cn/linux/l-vfs/ 在链接中,文章选用的是Linux2.4.20,我选择Linux3.4.2来分析源码
例如:open一个文件/home/xxx/yyy.txt,那么/、home、xxx、yyy.txt都是一个目录项,VFS在查找的时候,根据一层一层的目录项找到对应的每个目录项的inode,那么沿着目录项进行操作就可以找到最终的文件...d_op:目录项操作 d_sb:这个目录项所属的文件系统的超级块 d_vfs_flags:一些标志 d_fsdata:文件系统私有数据 d_iname:存放短的文件名 一些解释:一个有效的dentry结构必定有一个
article/1053842 二、inode结构体:(转自http://blog.csdn.net/shanshanpt/article/details/38943731) inode结构体在(include/linux...( 注意数据分成:元数据+数据本身 ) 同时注意:inode有两种,一种是VFS的inode,一种是具体文件系统的inode。前者在内存中,后者在磁盘中。...其实在Linux内部的时候,访问文件都是通过inode号来进行的,所谓文件名仅仅是给用户容易使用的。
前言 为什么 Linux 内核的文件系统类型那么多,都能挂载上呢?为什么系统里可以直接 mount 其他文件系统呢?...甚至能把 windows 下的文件夹挂载到 windows 上,为什么 Linux 的虚拟文件系统这么强大?这得益于它的数据结构设计得十分精妙。好像听过,Linux 有什么解决不了的?加一层。...VFS 是什么 虚拟文件系统,简称 VFS(Virtual Filesystem),是一个内核软件层。...VFS 的作用 概括地讲,VFS 有两个作用: 处理与 Unix 标准文件系统相关的所有系统调用 为各种文件系统提供一个通用的接口 VFS 支持的文件系统类型 以下列出以下常见的文件系统类型,本文暂时不对其进行详细分析...因此,Linux 有一句经典的话:一切皆文件。 关键数据结构介绍 Linux VFS 抽象出 4 种类型的数据结构,实现将不同类型的文件系统挂载到目录结构中。
这个 wiki 上列出了很多 Linux 的文件系统类型。...对于这些文件系统,Linux 做了一层抽象就是 VFS 虚拟文件系统,这个其实就是软件设计必然的过程,对于不同的实现规定统一的接口,也就是定义与实现分离,如果想要自己实现一个文件系统的话只要实现一个满足...VFS 层的文件系统就能加入到内核当中。...下面就开始剖析 VFS 的主要内容。...dentry 和 inode 的关系是多对一的,即多个 dentry 可以指向同一个文件,这和 linux 当中的文件链接有关。
1. Serial 2. Input 3. I2C 4. USB 5. Video 6. Audio 7. Block 8. MTD
的原理和代码分析 tracer(function、function_graph、irq_off)原理和代码分析 trace event 1. ring Buffer Ringbuffer是trace32框架的一个基础...reader page交换出ring buffer中的head page,避免了读写的相互阻塞,实例见"/sys/kernel/debug/tracing/trace_pipe"; 1.2 代码流程和框架...我们来看看start_critical_timing的实现,其主要为: 其主要的设计思想如下 2.2 trace event linux trace中,最基础的时function tracer和tracer...具体的kprobe原理可以参考:Linux kprobe(内核探针 x86)
Linux安装metasploit渗透框架 ---- 打开终端输入 curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master
shell 脚本是大家工作中常用的,今天给大家总结一下 Linux shell 脚本编程知识框架。 原图清晰,大家点开等待刷新完毕,保存即可。
对于用户来说,我们不要去关心不同文件系统的具体操作过程,而只是对一个虚拟的文件操作界面来进行操作,这个操作界面就是 Linux 的虚拟文件系统(VFS ) 。...形象地说,Linux 的内核好像一个 PC 机的主板,VFS 就是上面的一个插槽,具体的文件系统就是外设卡。 因此,每一个文件系统之间互不干扰,而只是调用相应的程序来实现其功能。...在 Linux 的内核文件中,VFS 和具体的文件系统程序都放在 Linux\FS 中,其中每一种文件系统对应一个子目录,另外还有一些共用的 VFS 程序。...所以,VFS 作为 Linux内核中的一个软件层,用于给用户空间的程序提供文件系统接口,同时也提供了内核中的一个抽象功能,允许不同的文件系统很好地共存。...VFS 使 Linux 同时安装、支持许多不同类型的文件系统成为可能。VFS 拥有关于各种特殊文件系统的公共界面,如超级块、inode、文件操作函数入口等。
Linux 的内核裁剪是为了减少目标应用中不需要的内核代码,在安全性和高性能(快速启动时间和减少内存占用)方面有着显著的好处。但是,现有的内核裁剪技术有其局限性,有没有内核裁剪的框架化方法呢?...5 内核裁剪框架初探 内核裁剪框架的原理没有变,仍然是跟踪目标应用工作负载的内核占用情况,以确定所需的内核选项。 5.1 内核裁剪框架的核心特性 内核裁剪框架大概可以具备以下特性: 端到端的可见性。...利用虚拟机监控程序的可见性来实现端到端的观察,可以跟踪内核引导阶段和应用程序工作负载,可以尝试在QEMU 的基础上建造Linux内核的裁剪框架。 可组合性。...通过在线系统,配置组合器使用基线配置和应用配置来生成目标内核配置,然后,内核构建器生成裁剪后的Linux内核. 5.3 内核裁剪框架的实现可行性 配置跟踪 内核裁剪框架的配置跟踪器在目标应用程序驱动的内核执行期间跟踪配置选项...了解了现有技术的局限性,尝试提出一个Linux内核裁剪框架,或许可以解决这些问题。
Linux下驱动框架介绍 1.1 驱动框架分类 Linux下驱动框架分为3大类型: 字符设备 --------- 块设备 存储设备 SD 硬盘 网络设备 网卡 无线 有线 字符设备和块设备都会生成设备节点在...可以使用ifconfig查看 字符设备标准框架详细区分: RTC设备驱动 LCD屏设备驱动—帧缓冲设备框架 声卡设备驱动—音频设备 标准输入设备驱动—输入子系统框架 …等等...、蜂鸣器 驱动都是使用字符设备框架编写 1.2 驱动框架代码模板 示例代码: #include #include static...杂项设备框架 2.1 框架结构介绍 杂项字符设备的主设备号固定: 10 主设备号: 0 ~ 255 次设备号范围: 0 ~ 255 Linux内核寻找驱动节点是依靠设备号寻找的。...文件操作集合的模型图: 2.2 蜂鸣器驱动示例代码 这是蜂鸣器的驱动层示例代码,使用杂项设备框架编写: #include #include <linux/module.h
linux虚拟文件系统四大对象: 1)超级块(super block) 2)索引节点(inode) 3)目录项(dentry) 4)文件对象(file) 现在先介绍第一个 一、super_block的含义...worse than a second */ 60 u32 s_time_gran; 61 62 /* 63 * The next field is for VFS...You had been warned. 65 */ 66 struct mutex s_vfs_rename_mutex; /* Kludge */ 67 68 /*...,这个list上边的就是所有的在linux上记录的文件系统。...(同一类型的文件系统通过这个子墩将所有的super_block连接起来) s_dquot:磁盘限额相关选项 Reference: http://www.linuxidc.com/Linux/2011-02
编者注:cgroup从2.6.4引入linux内核主线,目前默认已启用该特性。...cgroups概念 从实现角度来看,cgroups实现了一个通用的进程分组框架,不同资源的具体管理工作由各cgroup子系统来实现,当需要多个限制策略比如同时针对cpu和内存进行限制,则同时关联多个cgroup...Linux下的cgroups的数据结构图示如下: ?...Linux内核有一个很强大的模块叫 VFS (Virtual File System)。VFS 能够把具体文件系统的细节隐藏起来,给用户态进程提供一个统一的文件系统 API 接口。...VFS 使用了一种通用文件系统的设计,具体的文件系统只要实现了 VFS 的设计接口,就能够注册到 VFS 中,从而使内核可以读写这种文件系统。
Linux 2上吧。...Linux未来监控tracing框架:eBPF eBPF源于早年间的成型于 BSD 之上的传统技术 BPF(Berkeley Packet Filter)。...BPF 是在 1997 年首次被引入 Linux 的,Linux 内核中的报文过滤机制其实是有自己的名字的:Linux Socket Filter,简称 LSF。...1 vfs_statfs 96 vfs_writev 108 vfs_getxattr...405 vfs_get_link 1895 vfs_fstat 3814 vfs_write
前言: 随着Linux的版本升高,存储栈的复杂度也随着增加。作者在这里简单介绍目前Linux存储栈。...2,vfs vfs的主要作用就是抽象,各种各样的文件系统都有各自的实现,但是用户态的读写始终就是read,write,readv,writev,pread,pwrite等等几个API。...page cache,buffer,以及文件映射等高级功能,都是vfs实现的。 无论是读写文件,读写设备,ioctl等,都是由vfs提供的通用的API,实现 了强大的“一切皆文件”。...11,uninterruptable sleep 使用Linux的人,或多或少可能都遇到过进程的D状态,也就是uninterruptable sleep。...12,其他问题 scsi已经是 很成熟的框架了,但是在Linux4.14上,作者还是看到了scsi引起的kernel die。
领取专属 10元无门槛券
手把手带您无忧上云