Linux开发:Fuse介绍

Fuse(filesystem in userspace),是一个用户空间的文件系统。通过fuse内核模块的支持,开发者只需要根据fuse提供的接口实现具体的文件操作时所对应的回调函数,就可以实现一个文件系统。由于其主要实现代码位于用户空间中,因此不需要重新编译内核。

Fuse的运行原理

Fuse包含一个内核模块和一个用户空间守护进程(下文称fuse daemon)。内核模块加载时被注册成 Linux 虚拟文件系统的一个 fuse 文件系统驱动。此外,还注册了一个/dev/fuse的字符设备。

$ ls /dev/fuse -al
crw-rw-rw- 1 root root 10, 229  7月 13 12:51 /dev/fuse

该设备作为fuse daemon与内核通信的桥梁,fuse daemon通过/dev/fuse读取fuse request,处理后将reply写回/dev/fuse。

用户空间与内核空间的交互流程是这样:

1.用户开发基于libfuse的户空间文件系统程序,该程序会提供对文件系统操作,比如打开关闭,读写操作的回调函数。

2.当有应用程序操作通过fuse挂载的文件系统时,VFS会将这些操作路由至fuse的内核模块,也就是fuse driver,fuse driver创建了一个fuse request结构体,并把request保存在请求队列中。此时,执行操作的应用程序进程会被阻塞。

3.fuse daemon通过读取/dev/fuse将request从内核队列中取出,根据操作调用步骤1中注册的相应回调,也就是回调会具体处理对fuse文件系统的操作请求,当处理完请求后,fuse daemon会将reply通过/dev/fuse传递给fuse driver,此后fuse daemon把requset标记为completed,最终唤醒用户进程。

相关推荐

  1. Linux开发:Ubuntu22.04安装Fuse3

    2024-07-13 22:18:03       27 阅读
  2. pytorch之model.eval()、model.fuse()及model.fuse.eval()介绍

    2024-07-13 22:18:03       31 阅读
  3. Linux开篇介绍

    2024-07-13 22:18:03       51 阅读
  4. Linux介绍

    2024-07-13 22:18:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 22:18:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 22:18:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 22:18:03       58 阅读
  4. Python语言-面向对象

    2024-07-13 22:18:03       69 阅读

热门阅读

  1. 如何在PostgreSQL正确的 使用UUID 作为主键

    2024-07-13 22:18:03       20 阅读
  2. 《NX二次开发官方案例》专栏目录B

    2024-07-13 22:18:03       18 阅读
  3. 并行编程实战——TBB编程流图的问题

    2024-07-13 22:18:03       21 阅读
  4. MySQL零散拾遗

    2024-07-13 22:18:03       22 阅读
  5. 使用 GPT-4 和 ChatGPT 构建应用程序

    2024-07-13 22:18:03       22 阅读
  6. llama-recipes

    2024-07-13 22:18:03       25 阅读
  7. 排序算法基础(未完待续)

    2024-07-13 22:18:03       25 阅读