`

Linux tmpfs 源码分析(一)

 
阅读更多

Tmpfs是linux 系统中基于内存/交换分区作的文件系统,与ramdisk不同的是,ramdisk是作为块设备,基于ext的文件系统,所以不可绕过的是page cache的内存复制,具体可以参考前面写的关于ramdisk, 对tmpfs来说就是直接操作内存做为文件系统的,而不是基于块设备的。

如何绕过page cache,实际上很简单,只要直接在setup文件系统的时候,设置自己的file的const struct file_operations,让我们来看tmpfs是如何实现的。

在linux 2.6.18中tmpfs的源码主要在 shmem.c文件中

1.定义tmpfs的文件系统

在函数init_tmpfs 里,通过 register_filesystem 吧tmpfs的注册到文件系统中

2. 更改file 的结构体的file_operations

在shmem_file_setup函数中,更改了 file->f_op = &shmem_file_operations; 下面来看具体的结构体

也就是说在操作在 tmpfs 文件时候,并没有使用常用的ext文件系统中的函数do_sync_read (read_write.c),而是调用了tmpfs 自己封装的函数shmem_file_read,当然在shmem_file_read 并没有对page cache进行操作,虽然里面还是使用了page cache中maping,file, inode等结构体和算法。

3. 函数shmem_file_read主要是调用do_shmem_file_read函数,在do_shmem_file_read函数中核心是shmem_getpage,通过索引和inode快速找到page.

分享到:
评论

相关推荐

    Tmpfs on Linux

    在Linux系统中,`tmpfs`是一种基于内存的文件系统,它不依赖于传统的非易失性存储介质来存储文件数据,而是完全存在于由操作系统内核维护的虚拟内存中。`tmpfs`的设计初衷是为了提高性能,使临时文件能够快速创建、...

    Linux下tmpfs介绍与使用

     tmpfs是Linux/Unix系统上的一种基于内存的文件系统。tmpfs可以使用您的内存或swap分区来存储文件。由此可见,tmpfs主要存储 暂存的文件。  优势 :  1、 动态文件系统的大小。  2、tmpfs 的另一个主要的好处...

    Linux磁盘扩容 fdisk /dev/vda

    Linux磁盘扩容 df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 197G 2.3G 195G 2% / devtmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.8G 0 7.8G 0% /dev/shm tmpfs 7.8G 8.5M 7.8G 1% /run tmpfs...

    详解Linux系统中的tempfs与/dev/shm

    tmpfs 是 Linux/Unix 系统上的一种基于内存的文件系统,即 tmpfs 使用内存或 swap 分区来存储文件。 Linux 内核中的 VM 子系统负责在后台管理虚拟内存资源 Virtual Memory,即 RAM 和 swap 资源,透明地将 RAM 页...

    学会使用tmpfs文件系统来提速你的linux系统.docx

    在Linux中,除了tmpfs之外,还有一种名为RAM Disk的技术,它同样将数据存储在内存中。不过,二者之间存在一些关键性的差异: - **RAM Disk**需要被视为块设备,并且在使用前需要通过`mkfs`命令进行格式化。相比之下...

    Professional Linux Kernel Architecture, 精通Linux内核架构

    - **书籍介绍**:本书《Professional Linux Kernel Architecture》是一本深入剖析Linux内核架构的专业书籍,由Wolfgang Mauerer撰写,并于2008年由Wiley Publishing Inc.出版。全书共有1368页,涵盖了Linux内核的...

    Professional Linux Kernel Architecture

    - **附录F:内核开发过程**:给出了一个完整的Linux内核开发周期示例,包括需求分析、编码、测试等环节。 ### 结语 通过以上章节的详细介绍,《Professional Linux Kernel Architecture》这本书为读者提供了一个...

    arm-linux启动流程分析.pdf

    ARM-Linux 启动流程分析 在嵌入式系统领域,ARM 架构的 Linux 系统因其高效能和低功耗而广泛应用于各种设备,如智能手机、路由器、嵌入式设备等。了解 ARM-Linux 的启动流程对于系统调试和优化至关重要。本篇将详细...

    ARM Linux启动过程以及分析

    从Bootloader初始化硬件到Linux内核接管,再到应用程序的运行,每一个环节都紧密相连,共同构成了嵌入式Linux系统的运行基础。通过深入研究这一过程,开发者可以更好地把握系统的整体运作,从而提升系统性能和稳定性...

    基于zynq的Linux根文件系统生成

    在Linux系统中,根文件系统(Root Filesystem,简称rootfs)扮演着至关重要的角色,它是操作系统启动时的第一个文件系统,包含系统运行所需的基本程序和配置。在ZYNQ FPGA平台上的嵌入式Linux系统中,构建根文件系统...

    载入和卸载文件系统 Linux

    在Linux中,文件系统是一个组织和管理磁盘上数据的结构,它定义了如何存储、检索和更新文件。常见的文件系统类型包括ext3、ext4、XFS、Btrfs等,每种都有其特定的特性和用途。例如,ext3是Linux广泛使用的日志文件...

    创建Linux系统ISO的主要技术分析

    本文将详细分析创建Linux系统ISO的主要技术,包括安装引导加载器、添加可启动内核、构建完整的运行环境以及使ISO支持U盘启动和可写功能。 首先,我们从安装引导加载器开始。在Linux中, isolinux是常见的引导加载器...

    使用Python设置tmpfs来加速项目的教程

    标题所提及的“使用Python设置tmpfs来加速项目的教程”实际上是一种利用Linux系统中的tmpfs技术来优化项目执行效率的方法。tmpfs是一种特殊的文件系统,它将文件存储在系统的RAM(随机存取内存)中,而不是传统的...

    Linux3.10-x86_64内核配置选项简介

    Linux动态和持久设备命名(用户空间devfs)支持(CONFIG_GENTOO_LINUX_UDEV)涉及到了CONFIG_TMPFS和CONFIG_DEVTMPFS的配置,它们分别用于挂载tmpfs文件系统和devtmpfs文件系统。内核初始化系统(init)是内核启动后...

    inux系统下的ramdisk驱动

    Linux系统下的ramdisk驱动是一种特殊的存储技术,它利用系统的RAM(随机存取内存)作为临时的...通过分析提供的源代码,可以深入理解Linux内核驱动的实现细节,这对于内核开发者和技术爱好者来说是非常宝贵的学习资料。

    生产环境Linux系统优化方法.pdf

    * tmpfs文件系统是一种基于内存的文件系统,新版本的Linux发行版基本都支持该文件系统特性。 * 使用“df -hT”命令可以确认当前系统是否使用了tmpfs文件系统。 * 用户可以使用“vi /etc/fstab”命令编辑文件系统配置...

Global site tag (gtag.js) - Google Analytics