- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux_kernel_fuse_源码摘要
FUSE源码剖析?1.?前言? ? ? ?本文是对FUSE-2.9.2源码的学习总结。FUSE代码在用户空间和内核空间都有运行,为了突出重点,先简要描述了在基于FUSE的用户空间文件系统中执行write操作的一般流程,接下来介绍了重要的数据结构,最后以FUSE的运行过程为线索,剖析FUSE程序运行过程的3个关键步骤:???????1.FUSE模块加载?????????2.mount和open过程????????3.对文件write。???????对于虚拟文件系统和设备驱动的相关概念本文仅作简要说明。需要说明的是,由于内核的复杂性及个人能力的有限,本文省略了包括内核同步,异常检查在内的诸多内容,希望可以突出重点。?2.?FUSE下write的一般流程? ? ? ? ?????????????????????????????????????????????????????????????????????????????? ?图1???????在基于FUSE的用户空间文件系统中执行write操作的流程如图1所示(由于版面关系,图中部分函数是缩写,请参考源码):???????1.客户端在mount目录下面,对一个regular?file调用write,?这一步是在用户空间执行???????2.write内部会调用虚拟文件系统提供的一致性接口vfs_write???????3.根据FUSE模块注册的file_operations信息,vfs_write会调用fuse_file_aio_write,将写请求放入fuse?connection的request?pending?queue,?随后进入睡眠等待应用程序reply???????4.用户空间的libfuse有一个守护进程通过函数fuse_session_loop轮询杂项设备/dev/fuse,?一旦request?queue有请求即通过fuse_kern_chan_receive接收???????5.fuse_kern_chan_receive通过read读取request?queue中的内容,read系统调用实际上是调用的设备驱动接口fuse_dev_read???????6.在用户空间读取并分析数据,执行用户定义的write操作,将状态通过fuse_reply_write返回给kernel???????7.fuse_reply_write调用VFS提供的一致性接口vfs_write???????8.vfs_write最终调用fuse_dev_write将执行结果返回给第3步中等待在waitq的进程,此进程得到reply?后,write返回?3.?数据结构???????本节主要介绍了FUSE中比较重要的数据结构,需要说明的是图示中只列出了与叙述相关的数据成员,完整的数据结构细节请参考源码。3.1.?内核部分? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ?图2???????struct?fuse_conn:每一次mount会实例化一个struct?fuse_conn即fuse?connection,?它代表了用户空间和内核的通信连接。fuse?connection维护了包括pending?list,?processing?list和io?list在内的request?queue,fuse?connection通过这些队列管理用户空间和内核空间通信过程。???????struct?fuse_req:每次执行系统调用时会生成一个struct?fuse_req,?这些fuse_req依据state被组织在不同的队列中,struct?fuse_conn维护了这些队列.??????struct?file:?存放打开文件与进程之间进行交互的有关信息,描述了进程怎样与一个打开的文件进行交互,这类信息仅当进程访问文件期间存在于内核内存中。???????struct?inode:文件系统处理文件所需要得所有信息都放在一个名为inode(索引节点)的数据结构中。文件名可以随时更改,但是索引节点对文件是唯一的,并且随着文件的存在而存在。???????struct?file_operation:定义了可以对文件执行的操作。?3.2.?用户空间部分? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图3???????struct?fuse_req:这个结构和上文中内核的fuse_req同名,有着类似的作用,但是数据成员不同。???????struct?fuse_session:定义了客户端管理会话的结构体,包含
您可能关注的文档
最近下载
- 领导力与管理沟通PPT课件(共19章)第8章 书面表达.pptx VIP
- 2025年农村公路路面改造以工代赈项目可行性研究报告-新大纲.docx VIP
- 江苏省化工和危险化学品生产企业安全审计表解读 2025年1月2日.pptx VIP
- 领导力与管理沟通PPT课件(共19章)第7章 口头表达.pptx VIP
- 2024版精简范本房屋买卖合同起诉状.docx VIP
- 领导力与管理沟通PPT课件(共19章)第2章 领导力解读.pptx VIP
- 2024-2025学年初中信息技术(信息科技)七年级全册河北大学版(2012)教学设计合集.docx
- 苏教版五年级上册数学全册课件.pptx VIP
- 领导力与管理沟通PPT课件(共19章)第16章 客户沟通.pptx VIP
- CH∕T 9017-2012 三维地理信息模型数据库规范.docx VIP
文档评论(0)