zoukankan      html  css  js  c++  java
  • 异步通知fasync机制

      poll机制是应用程序主动检测相应的事件有没有发生,没发生进程就休眠,如果事件发生了,应用程序再执行相应的操作(如读写),对应用程序来说是一种主动的检测机制。

      不用poll机制,只用中断方式的话,需要应用程序去调用read、write函数,从而调用驱动程序中的xxx_readwrite函数,如果设备没准备好或事件没发生时,在驱动程序中将进程休眠,等待中断到来再唤醒进程。这样的方式也需要应用程序去主动读写,并在必要时休眠。

      异步通知fasync机制是一种让应用程序“被通知”的机制,当没有信号传来时,应用程序只需要专注于自己的事;当信号传来时,再执行相应的响应函数就行了。

    应用程序代码编写方式:

    1、注册信号种类和信号来临时执行的响应函数:

     2、把打开的设备文件需要发送信号的“主人”设为当前进程:

    3、给文件设置FASYNC标志,以启用异步通知机制

     文件标志一旦更改,内核就会调用驱动程序中的xxx_fasync函数

     驱动程序代码编写方式:

    1、定义一个fasync_struct类型的结构体

    2、驱动方法fasync中调用fasync_helper(),fasync_helper()的作用是将一个fasync_struct的对象注册进内核

    3、当数据到达时调用kill_fasync()发送信号(如中断中或write中调用)

    4、文件关闭时,release方法中调用fasync方法,从活动的异步读取进程列中删除该文件。

    XXX_fasync(-1, filp, 0);

    扩展:当有多个文件发送异步通知信号给一个进程时,进程无法知道是哪个文件发送的信号,这时候还是要借助poll的帮助完成IO

    参考文章:https://blog.csdn.net/u010481276/article/details/51093800

         https://www.cnblogs.com/xiaojiang1025/p/6376561.html

  • 相关阅读:
    专业开发: MSIL语言学习笔记
    (破解)去掉ILDasm的SuppressIldasmAttribute限制
    UDP编程中的connect
    linux 下的UDP client/server 示例
    HTML颜色代码表
    元素(Element)选择器(jQuery)
    ID选择器(jQuery)
    Photoshop快捷键大全
    MyEclipse快捷键大全
    Windows7快捷键大全
  • 原文地址:https://www.cnblogs.com/physworld/p/14839320.html
Copyright © 2011-2022 走看看