FUSE的内部原理(给网友的回复)

本文深入解析了FUSE(Filesystem in Userspace)的核心组件及其功能,详细阐述了文件系统、设备驱动和用户空间模块之间的交互过程,并以一个具体的请求为例,展现了FUSE如何将用户命令转化为文件系统操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经常有网友问到关于fuse内部实现原理方面的问题,下面的内容是给一个网友的回复,简单的讲述了fuse的原理,并分析了一个特定请求的处理过程。

 

fuse主要包含3个模块:

一个fuse文件系统模块(1),一个设备驱动模块(2),一个用户空间模块(3

 

fuse文件系统这一部分跟其它的文件系统实现差不多,实现了一个文件系统应该提供的借口(如readwriteopen等),这就是为什么你挂在了用fuse实现的文件系统后,能直接使用shell命令.(shell命令 --> vfs -> fuse文件系统)。

 

设备驱动模块主要是用来协调1,3两个模块,并用于1,3之间交换数据。 在内核态与用户态交换数据的方法有很多种,如通过系统调用,通过设备驱动程序,procfs netlink等,fuse选择的是通过设备驱动程序的方式。这里的设备驱动程序相当于一个中介。

 

用户模块一直轮询设备驱动,如果有请求(即能通过fuse_dev_read读取到数据),就分析请求的类型,并调用回调函数(也就是我们实现文件系统时的一组函数)。

 

整个工作过程大概是这样的。

 

1。 你编写了一个xx文件系统,实现了一组接口(回调函数),并注册这组接口,接下来fuse用户模块会调用fuse_dev_read从设备驱动读取数据(请求),这个读取请求会被加入到某个请求队列。

 

2。 你在挂载目录的命令行敲了一个mkdir的命令,它会调用系统调用mkdir,最终会调用fuse文件系统的mkdir接口,这个接口的实现实际上就是唤醒正在等待fuse_dev_read的队列,这是用户空间的fuse_dev_read可以读取数据了(请求),然后会把mkdir这个请求的信息(fuse有自己的请求包格式)读取到用户空间,并根据请求信息调用回调函数xx_mkdirxx文件系统实现的mkdir方法),并将数据(有可能只是一个错误码)通过fuse_dev_write返回给等待返回的mkdir调用。

 

3 fuse文件系统的mkdir收到返回码后就继续向上返回。

 

至此一个请求完成了。

 

转载于:https://www.cnblogs.com/yunnotes/archive/2013/04/19/3032430.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值