Linux内核驱动fsync机制图解
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。定义一个全局结构fasync_struct指针;
2、在file_operations的fasync方法的实施基本上是调用内核的辅助功能,fasync_helper。
3、在常规驱动特定的数据访问的信息kill_fasync函数调用。
通过上述内核和应用程序的协调,可以方便地使用内核异步通知机制,这种机制简单易用,其机制在一开始就非常复杂。一旦我们已经解决了所有相关的结构和程序,我们会发现,该机制的实施是很清楚的。我一直认为内核的学习首先要明确结构和数据结构之间的关系。看着别人的代码分析可以给你一个正确的认识框架,和最终的关键在于你自己的rtfsc。所以我不分析博客的代码,但只有框架图,代码需要分析他们自己感兴趣的朋友。