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 的文件系统

static struct file_system_type tmpfs_fs_type = {
	.owner		= THIS_MODULE,
	.name		= "tmpfs",
	.get_sb		= shmem_get_sb,
	.kill_sb	= kill_litter_super,
};

 

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

 

2. 更改file 的结构体的file_operations

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

static struct file_operations shmem_file_operations = {
	.mmap		= shmem_mmap,
#ifdef CONFIG_TMPFS
	.llseek		= generic_file_llseek,
	.read		= shmem_file_read,
	.write		= shmem_file_write,
	.fsync		= simple_sync_file,
	.sendfile	= shmem_file_sendfile,
#endif
};

 

也就是说在操作在 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.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux tmpfs是一种基于内存的文件系统,它将文件存储在RAM中,而不是硬盘上。它可以用于临时文件和缓存,因为它比硬盘更快,而且在系统重启后,它的内容会被清空。它也可以用于一些需要高速读写的应用程序,如数据库。 ### 回答2: Linux tmpfs 是一种基于内存的虚拟文件系统。它允许用户将磁盘上的临时文件存储到内存中,从而提高了系统的读写速度和性能。当应用程序需要存储临时文件时,它们可以将文件写入 Linux tmpfs 中,以获得更快的访问速度。 Linux tmpfs 很适合用于存储需要频繁读写的文件,比如访问日志、缓存文件等。由于它存储在内存中,所以它非常快,读取速度高,并且不会对磁盘资源造成太大的压力。 Linux tmpfs 也有一些限制。由于它是基于内存的,所以它的大小是有限的,而且它通常会占用一定的内存资源。此外,如果系统发生崩溃或意外关闭,Linux tmpfs 中的文件将会丢失,因为它们没有被保存在磁盘上。 总之,Linux tmpfs 是一个非常有用的虚拟文件系统,可以提高系统的读写速度和性能。然而,它不是所有应用程序都适合使用,需要用户根据实际情况进行评估和选择。同时,用户也要注意管理好内存资源,以避免系统崩溃或出现其他问题。 ### 回答3: tmpfs是一种在内存中创建的临时文件系统,可以用来暂存临时数据。它的设计非常简单,是基于内核的虚拟内存中,通过申请内存块来实现的。 与其他文件系统不同的是,tmpfs完全存储在内存中,而不是存储在磁盘上。这使得tmpfs相比于其他文件系统在读写速度和访问效率上更加高效。 tmpfs的优点主要有以下几点: 1.快速:由于tmpfs存储在内存中,因此访问速度非常快。如果需要快速读写一些临时数据,可以使用tmpfs来存储。 2.不占用磁盘空间:tmpfs不存储在磁盘上,因此不会占用磁盘空间。这对于磁盘空间比较紧张的系统来说是非常有用的。 3.易于使用:tmpfs的使用非常简单,只需要申请一块内存即可创建一个临时文件系统。同时,tmpfs也是一种自动管理内存的文件系统,当内存不足时,会自动释放一些不必要的数据。 4.安全:tmpfs文件系统不会存储在磁盘上,因此不会对硬盘造成任何影响。同时,由于tmpfs存储在内存中,所以不需要担心硬盘故障导致数据丢失的问题。 tmpfs也有一些缺点: 1.内存限制:tmpfs文件系统存储在内存中,因此其容量受到内存大小的限制。如果需要存储大量数据,可能会导致内存不足的问题。 2.数据丢失:由于tmpfs文件系统存储在内存中,所以当系统发生意外重启或崩溃时,tmpfs中的数据将会丢失。因此,tmpfs不适用于存储重要数据。 3.性能下降:当内存不足时,tmpfs会使用交换分区来存储数据,这可能会导致性能下降。 在实际应用中,tmpfs通常用于存储临时数据,如缓存、日志等。它在数据访问效率、操作简便、不占用磁盘空间等方面具有明显的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值