1. <fieldset id='nmpnf'></fieldset>
      1. <tr id='nmpnf'><strong id='nmpnf'></strong><small id='nmpnf'></small><button id='nmpnf'></button><li id='nmpnf'><noscript id='nmpnf'><big id='nmpnf'></big><dt id='nmpnf'></dt></noscript></li></tr><ol id='nmpnf'><table id='nmpnf'><blockquote id='nmpnf'><tbody id='nmpnf'></tbody></blockquote></table></ol><u id='nmpnf'></u><kbd id='nmpnf'><kbd id='nmpnf'></kbd></kbd>
      2. <span id='nmpnf'></span>
        <dl id='nmpnf'></dl>
          <ins id='nmpnf'></ins>

          <code id='nmpnf'><strong id='nmpnf'></strong></code>
          <acronym id='nmpnf'><em id='nmpnf'></em><td id='nmpnf'><div id='nmpnf'></div></td></acronym><address id='nmpnf'><big id='nmpnf'><big id='nmpnf'></big><legend id='nmpnf'></legend></big></address>

          <i id='nmpnf'></i>

          1. <i id='nmpnf'><div id='nmpnf'><ins id='nmpnf'></ins></div></i>

            Linux内核驱动fsync机制实现图解

            • 时间:
            • 浏览:6
            • 来源:124软件资讯网

                在Linux内核中的IO模子基天职为4类:

                1、同步壅闭I/O

                2、同步非壅闭I/O

                3、异步壅闭I/O

                4、异步非壅闭I/O

                同步:应用显式地通过函数会见数据  ,在此函数返回时就会获得效果(乐成或失败) 。

                异步:应用会显示地通过函数提出会见或关注申请  。数据到达时 ,硬件和驱动会通知应用  ,此时代码一样平常不在读写会见函数中  ,而是获得通知了再去有目的的会见数据 。

                壅闭:在等候数据的历程中会休眠在此处  ,而非壅闭即函数不休眠立刻返回  ,可执行接下来的代码 。

                对于这4种机制  ,在《深入Linux装备驱动法式内核机制》中有解说  ,对于异步非壅闭I/O实在内核提供了两种实现一个是aio  ,另一个就是fasync  。aio应该算是一个比力新的框架 ,较为庞大  ,本人没有深入的研究过 ,以后研究事后在写总结 。对于fasync  ,《深入Linux装备驱动法式内核机制》中有详细的解说以及实验  ,在看完了这知识以后  ,我像往常一样 ,画了一个框图来梳理所有的代码关联 。这个图在两个月前画好的 ,由于我的宝宝及事情的关系就延误了公布  。

                (上面的图片比力下  , 建议下载到当地打开)

                要明白内核的fasync机制  ,可以联合这个图和《深入Linux装备驱动法式内核机制》中的解说  。我凭据这个流程图  ,总结下我自己的熟悉:

                首先  ,fasync机制是通过内核发送出的SIGIO信号来实现通知机制的  ,并不是通过休眠叫醒  。

                从这个角度来说  ,应用就必须做以下事情:

                1、安装SIGIO信号(信号例程处置惩罚内核数据可会见的情形)

                2、告诉内核所需要通知的历程ID

                3、设置FASYNC标志  ,内核会通过驱动挪用fasync要领为以后的信号通知做准备  。

                在应用法式完成了相关设定后  ,就可以做此外事了  ,若是有任何问题 ,内核会通过SIGIO信号通知  ,应用安装的信号例程就会被挪用  。

                而在内核空间这端  ,相关的驱动法式需要实现以下事情:

                1、界说一个全局的struct fasync_struct指针;

                2、实现file_operations中的fasync要领 ,基本就是挪用内核的辅助函数fasync_helper  。

                3、在驱动某个可以获知数据可会见信息的例程中挪用kill_fasync函数 。

                通过以上内核与应用的配合  ,就可以利便的使用内核异步通知机制  。这种机制用起来简朴  ,观其机制 ,一最先以为挺庞大的  ,一旦深入将所有相关的结构体和例程整理一下就会发现 ,实在这个机制的实现也很清晰明晰  。小我私家一直以为对于内核的学习  ,首先要理清构架及数据结构间的关系  。而看别人的代码剖析能让你适当的明白下构架  ,最后要害在于自己RTFSC 。以是我现在一样平常不再博文中剖析代码  ,而只说构架和图解 ,代码需要有兴趣的朋侪自己剖析  。