FUSE(Filesystem in Userspace)

CONFIG_FUSE_FS: FUSE (Filesystem in Userspace) support

FUSE – Filesystems in Userspace

http://www.oug.org/files/presentations/losug-fuse.pdf

FUSE(Filesystem in Userspace)

 阿棍儿_Leon Excellent 关注

 0.1 2018.05.11 15:00* 字数 2929 阅读 546评论 0喜欢 1

前言

最近解决问题涉及到了FUSE,遂在此简单总结一下。
代码导读部分未经过实际运行验证,所以分析的流程可能是错的。

FUSE

什么是FUSE

Filesystem in Userspace顾名思义,即在用户空间的文件系统。
为什么要强调用户空间呢?接触过Linux内核的同学大概会知道,文件系统一般是实现在内核里面的,比如,Ext4、Fat32、NTFS(Kernel原生版)等常见的文件系统,其代码都在内核中,而FUSE特殊之处就是,其文件系统的核心逻辑是在用户空间实现的。

为什么FUSE会存在

事物的存在的原因之一是其优势大于劣势,下面是它的优劣描述。

优势

  • 文件系统的改动不用更新内核
    FUSE的核心逻辑在用户空间,所以修改文件系统的行为绝大部分修改会在用户空间。这在很多场合是一件很方便的事情。
  • 很容易实现自己的文件系统
    理论上它可以实现任何天马行空的文件系统,只要一个开发者实现了基本的文件操作。而这个所谓的文件操作也是自己定义的,甚至可以这个操作可能只是一句打印而已,或者是一件超级复杂的事情,只要这个操作符合开发者的要求,他就完成了一个符合开发者需求的文件系统(也许本质上并不是文件系统了,这种情况是有现实例子的)。

劣势

  • 效率较低
    这是显而易见的,就针对块设备的文件系统而言,用户层肯定不如内核实现的效率高,毕竟用户态/内核态切换的开销是少不了的。这也是符合一般软件规律的,越高层次的软件易用性越高,效率越低。

FUSE实现原理

下面这张图体现了FUSE工作的基本套路,是根据WIki里的画的,这张图感觉更符合我看到的代码的状况。

fuse基本工作流程


图中体现了FUSE的2个关键部分(绿色方框),分别是Kernel中的那个FUSE(这里简称kernel FUSE)和user space中的那个fuse_user程序。其中kernel FUSE是负责把从用户层过来的文件系统操作请求传递给fuse_user程序的,而这个fuse_user程序实现了前面所说的文件系统的核心逻辑。
下面分步描述一下在用户对一个FUSE分区上的文件执行ls命令时发生了什么,当然,这里隐含了个前提,即这个系统的/tmp目录已经属于某个FUSE分区了,为了达到这种状况,前面还需要有一个mount的过程。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值