首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入理解Linux VFS和Page Cache

编者注:在分析完 Linux inode 基础概念 之后,让我们看下inode在内存中对应的文件系统抽象VFS,然后分析下关于 磁盘操作 中Page Cache的回写策略。...其目的是屏蔽下层具体文件系统操作的差异,为上层的操作提供一个统一接口,正是由于VFS的存在,Linux中允许多个不同的文件系统共存。...VFS中包含着向物理文件系统转换的一系列数据结构,如VFS超级块、VFS的Inode、各种操作函数的转换入口等。...LinuxVFS依靠四个主要的数据结构来描述其结构信息,分别为超级块、索引结点、目录项和文件对象,这些数据结构大都会与磁盘上的对应上。 超级块(Super Block):超级块对象表示一个文件系统。...PageCache Page cache是通过将磁盘中的数据缓存到内存中,从而减少磁盘I/O操作,从而提高性能。

3.1K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    解析Linux中的VFS文件系统之文件系统的注册(二)

    文件系统的注册 这里的文件系统是指可能会被挂载到目录树中的各个实际文件系统,所谓实际文件系统,即是指VFS 中的实际操作最终要通过它们来完成而已,并不意味着它们一定要存在于某种特定的存储设备上。...3.1 文件系统的数据结构 在 Linux 源代码中,每种实际的文件系统用以下的数据结构表示(include/linux/fs.h): 1 struct file_system_type { 2...的关系太过密切,如果说 ext2/ext3 是 Linux 的本土文件系统,那么 rootfs 文件系统则是 VFS 存在的基础。...一般文件系统的注册都是通过 module_init 宏以及 do_initcalls() 函数来完成(读者可通过阅读module_init 宏的声明及 arch\i386\vmlinux.lds 文件来理解这一过程...),但是 rootfs 的注册却是通过 init_rootfs() 这一初始化函数来完成,这意味着 rootfs 的注册过程是 Linux 内核初始化阶段不可分割的一部分。

    2K60

    解析Linux中的VFS文件系统之文件系统的来源与简介(一)

    最近挂载了N多的文件系统,大致了不同文件系统的相应特性及挂载方式,却还是对Linux的文件系统没有从源码方面去了解。不求甚解确实不好不好。...于是借鉴一些大牛的博客及自己的理解,总结了博客系列: 一、VFS是什么: VFSLinux中的一个虚拟文件文件系统,也称为虚拟文件系统交换层(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来分析源码

    2.1K90

    VFS四大对象之三 struct dentry

    例如:open一个文件/home/xxx/yyy.txt,那么/、home、xxx、yyy.txt都是一个目录项,VFS在查找的时候,根据一层一层的目录项找到对应的每个目录项的inode,那么沿着目录项进行操作就可以找到最终的文件...d_parent:父目录的目录项 d_hash:内核使用dentry_hashtable对dentry进行管理,dentry_hashtable是由list_head组成的链表,一个dentry创建之后,就通过...d_lru:最近未使用的目录项的链表 d_child:目录项通过这个加入到父目录的d_subdirs中 d_subdirs:本目录的所有孩子目录链表头 d_alias:一个有效的dentry必然与一个...inode关联,但是一个inode可以对应多个dentry,因为一个文件可以被链接到其他文件,所以,这个dentry就是通过这个字段链接到属于自己的inode结构中的i_dentry链表中的。...d_op:目录项操作 d_sb:这个目录项所属的文件系统的超级块 d_vfs_flags:一些标志 d_fsdata:文件系统私有数据 d_iname:存放短的文件名 一些解释:一个有效的dentry结构必定有一个

    2.9K60

    快速了解虚拟文件系统(VFS

    前言 为什么 Linux 内核的文件系统类型那么多,都能挂载上呢?为什么系统里可以直接 mount 其他文件系统呢?...甚至能把 windows 下的文件夹挂载到 windows 上,为什么 Linux 的虚拟文件系统这么强大?这得益于它的数据结构设计得十分精妙。好像听过,Linux 有什么解决不了的?加一层。...VFS 是什么 虚拟文件系统,简称 VFS(Virtual Filesystem),是一个内核软件层。...因此,Linux 有一句经典的话:一切皆文件。 关键数据结构介绍 Linux VFS 抽象出 4 种类型的数据结构,实现将不同类型的文件系统挂载到目录结构中。...通过ls -i命令可以查看文件的索引节点号 union { const unsigned int i_nlink; //硬链接数 unsigned int __i_nlink; }

    2.4K21

    VFS四大对象之二 struct inode

    article/1053842 二、inode结构体:(转自http://blog.csdn.net/shanshanpt/article/details/38943731) inode结构体在(include/linux...( 注意数据分成:元数据+数据本身 ) 同时注意:inode有两种,一种是VFS的inode,一种是具体文件系统的inode。前者在内存中,后者在磁盘中。...其实在Linux内部的时候,访问文件都是通过inode号来进行的,所谓文件名仅仅是给用户容易使用的。...当我们打开一个文件的时候,首先,系统找到这个文件名对应的inode号;然后,通过inode号,得到inode信息,最后,由inode找到文件数据所在的block,现在可以处理文件数据了。...,不同的inode的hash值可能相等,所以将hash值相等的这些inode通过这个i_hash字段连接起来。

    2.8K70

    VFS- 内核是如何抽象文件系统的

    这个 wiki 上列出了很多 Linux 的文件系统类型。...对于这些文件系统,Linux 做了一层抽象就是 VFS 虚拟文件系统,这个其实就是软件设计必然的过程,对于不同的实现规定统一的接口,也就是定义与实现分离,如果想要自己实现一个文件系统的话只要实现一个满足...dentry 和 inode 的关系是多对一的,即多个 dentry 可以指向同一个文件,这和 linux 当中的文件链接有关。...VFS 的整体结构就是这样,接下来简要地说几个具体内容: 所谓的打开文件描述符其实就是进程的 files 数组这个文件描述符表的下标,通过对应的 fd 就能找到 file 结构。...一个用户态的系统调用先通过 VFS 找到对应的文件系统再向下传递 I\O,这是 I\O 的一般路径。所以说对于用户来说,一切都是操作文件了。

    1.8K30

    Linux通过samba访问windows文件

    前言在linux 服务器上安装samba服务,然后挂载windows上的共享文件夹,实现在Linux服务器上轻松访问windows上的文件步骤 1:安装 Samba确保系统中已安装 Samba。...可以通过包管理器(例如,apt、yum)进行安装,具体取决于你使用的 Linux 发行版。...| grep samba[root@aleng ~]# # 没有显示表示该服务器没有安装samba服务,使用下面的命令即可安装[root@aleng ~]# yum install samba# 在Linux...创建一个挂载点(Mount Point):这是 Linux 系统上的一个空文件夹,用于挂载共享文件夹。sudo mkdir /mnt/Windows3.3....验证挂载:通过 ls /mnt/Windows 等命令验证是否成功挂载。注意事项:为了安全起见,请确保 Samba 配置文件的权限正确设置,并仅允许必要的访问权限。

    76621

    通过 Linux 容器进行虚拟化

    Linux 容器提供操作系统级别的虚拟化,当中的内核控制隔离的容器。容器通过内核控制组 (cgroup) 和内核命名空间进行隔离。...通过 Xen 或 KVM 等超级管理程序,用户能够在虚拟机上安装 SUSE Linux Enterprise Server 和 Apache。...Linux 容器主机server — 一种系统,包括 Linux 容器系统并通过 cgroup 提供容器和管理控制功能。...全部其它文件和库将通过 Linux 容器主机文件系统使用。...Linux 容器的优势包含: 通过容器隔离应用程序和操作系统 与全然虚拟化超级管理程序相比,没有虚拟化开销 提供接近本机的性能,由于 Linux 容器可以实时管理资源分配 通过 cgroup 控制网络接口并在容器内应用资源管理

    1.5K30

    通过 ftrace 来分析 Linux 内核

    通过使用一个名为 ftrace 的机制来阐明追踪内核函数的一些情况。它使得任何 Linux 用户可以轻松地追踪内核,并且了解更多关于 Linux 内核内部如何工作。...为了节省空间,很多情况下我会通过截断来给出尽量小的输出。 我使用 Fedora 来演示下面的例子,但是它们应该在其他最新的 Linux 发行版上同样可以运行。...相反的,基本操作是通过标准 Linux 命令来写入或读取一些文件。...一般的步骤如下: 通过写入一些特定文件来启用/结束追踪 通过写入一些特定文件来设置/取消追踪时的过滤规则 从文件中读取基于第 1 和 2 步的追踪输出 从文件中清除早期输出或缓冲区 缩小到你的特定用例(...你可以通过向 tracing_on 写入 1 来启用跟踪,写 0 来关闭跟踪。

    94530

    linux通过Docker安装mysql

    作为一个测试人员,在学习的过程中,可能经常需要去在linux下安装一些软件,有的软件通过搜索别人的博客教程进行安装的话,随着一些软件的升级,以及虚拟机/服务器镜像版本不一致等外部因素,都有可能导致安装软件出现各种不可预知的问题...而且,像linux下这些软件的安装,一般都是运维的事情,测试作为学习使用的话,安装好一个mysql数据库用于学习使用就行,新手不建议在linux下下载源码去安装软件,容易出问题。...,要注意一下) 通过Docker安装Mysql: docker pull mysql:5.7 启动mysql: docker run -itd --name mysql -p 3306:3306...mysql:5.7 #进入容器 docker exec -it mysql bash 参数说明: -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过...连接mysql: # 进入交互模式下,然后用命令连接,或者通过navicat进行连接 docker exec -it [容器id] bash mysql -uroot -h127.0.0.1 -P3306

    1.5K20

    通过实例来学习使用Linux KVM

    KVM是Kernel-based Virtual Machine的缩写,从名字上可以知道,KVM是在支持虚拟化硬件环境上,基于Linux操作系统内核的虚拟化技术。...安装KVM软件包 可以使用你Linux发行版的软件包管理工具来安装KVM(比如:debian上的apt,Redhat和CentOS上的yum) # yum install kvm KVM安装完成后,建议安装一下...el6.x86_64 所有需要的软件包安装完成后,虽然我们可以使用modprob命令来重新加载模块,但还是推荐重启系统来加载KVM和,libvirt相关的模块, 可以使用vm-install(SUSE Linux...比如:对于Linux有 rhel6、centos6、ubuntu14、suse11、fedora6等,对于Windows有win2k、win2k8、win8、win7 --ram:虚拟机的内存大小 --...9.连接虚拟机控制台 使用以下命令来连接虚拟机控制台,要退出控制台的话使用Ctrl+] virsh console myRHELVM1 如果主机上没有安装X server并且网络也没有配置,那么只能通过连接虚拟机的串口控制来登录到虚拟机

    2.1K20
    领券