<code id='6gxbb'><strong id='6gxbb'></strong></code>
<fieldset id='6gxbb'></fieldset>
  • <tr id='6gxbb'><strong id='6gxbb'></strong><small id='6gxbb'></small><button id='6gxbb'></button><li id='6gxbb'><noscript id='6gxbb'><big id='6gxbb'></big><dt id='6gxbb'></dt></noscript></li></tr><ol id='6gxbb'><table id='6gxbb'><blockquote id='6gxbb'><tbody id='6gxbb'></tbody></blockquote></table></ol><u id='6gxbb'></u><kbd id='6gxbb'><kbd id='6gxbb'></kbd></kbd>

      1. <i id='6gxbb'></i>
        <acronym id='6gxbb'><em id='6gxbb'></em><td id='6gxbb'><div id='6gxbb'></div></td></acronym><address id='6gxbb'><big id='6gxbb'><big id='6gxbb'></big><legend id='6gxbb'></legend></big></address>

          <dl id='6gxbb'></dl>
          1. <ins id='6gxbb'></ins>
            <span id='6gxbb'></span>
            <i id='6gxbb'><div id='6gxbb'><ins id='6gxbb'></ins></div></i>

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

            • 时间:
            • 浏览:13
            • 来源: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  。以是我现在一样平常不再博文中剖析代码  ,而只说构架和图解  ,代码需要有兴趣的朋侪自己剖析 。