|簡體中文

比思論壇

 找回密碼
 按這成為會員
搜索



查看: 534|回復: 0
打印 上一主題 下一主題

用户态文件系统框架FUSE的介绍及示例

[複製鏈接]

56

主題

0

好友

475

積分

中學生

Rank: 3Rank: 3

  • TA的每日心情

    2024-3-15 19:20
  • 簽到天數: 191 天

    [LV.7]常住居民III

    推廣值
    0
    貢獻值
    0
    金錢
    179
    威望
    475
    主題
    56
    樓主
    發表於 2020-11-23 16:21:15
    了解Linux文件系统的同学都清楚,Linux的文件系统都是在内核态开发的。内核态开发最大的问题是涉及的内容比价多,调试不太方便。因此,很多应用都不太原因涉及内核态的开发。而fuse解决了文件系统必须在内核态的的难题。 它将文件系统的实现从内核态搬到了用户态,也就是我们可以在用户态实现一个文件系统。fuse有很多应用,比如与对象存储(例如S3等)结合,可以实现通过普通目录访问云对象存储的方式,简化应用访问对象存储的复杂性。
    本号将陆续推出3-5篇文章介绍fuse,今天是第一篇,将介绍fuse的基本原理,及给出一个非常简单的示例程序。多说无益,我们接下来实际操作一下fuse。
    软件安装
    要使用该库进行用户态文件系统的开发,必需先安装。包括软件包和开发用的头文件等内容。不同的平台安装方法略有不同,下面分别介绍一下。
    Ubuntu 16.04
    sudo apt-get install libfuse2 libfuse-dev
    CentOS 6
    yum install fuse fuse-devel
    本文安装的是fuse-devel-2.9.4-1.0.4.el6.x86_64版本的,后续示例程序也是该版本的,如果版本不一致在测试时可能略有不同。

    fuse基本原理

    简单的理解,fuse实现了一个对文件系统访问的回调。fuse分为内核态的模块和用户态的库两部分。其中用户态的库为程序开发提供接口,也是我们实际开发时用的接口,我们通过这些接口将请求处理功能注册到fuse中。内核态模块是具体的数据流程的功能实现,它截获文件的访问请求,然后调用用户态注册的函数进行处理。
    图1 fuse处理流程
    如图1所示,其中fuse_user是开发的用户态的文件系统程序,该程序启动的时候会将自己开发的接口注册到fuse中,比如读写文件的接口,遍历目录的接口等等。
    同时,通过该程序在系统某个路径挂载fuse文件系统,比如/tmp/file_on_fuse_fs。此时如果在该目录中有相关操作时,请求会经过VFS到fuse的内核模块(上图中的步骤1),fuse内核模块根据请求类型,调用用户态应用注册的函数(上图中步骤2),然后将处理结果通过VFS返回给系统调用(步骤3)。

    重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

    手機版| 廣告聯繫

    GMT+8, 2024-5-16 03:07 , Processed in 0.018345 second(s), 29 queries , Gzip On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回頂部