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

  • 相关阅读:
    数据库连接池使用(一):使用C#数据库连接池
    开包即食的教程带你浅尝最新开源的C# Web引擎Blazor
    HTTP协议之内容协商
    浅谈Cookie、Session与Cache的区别
    应用程序框架(一):DDD分层架构:领域实体(基础篇)
    持续集成是什么?
    Git版本控制 Git、github,gitlab相关操作
    Spring-Cloud-Netflix-Ribbon&Feigen
    Spring-Cloud-Netflix-Eureka集群搭建
    java面试题-javaSE基础
  • 原文地址:https://www.cnblogs.com/physworld/p/14839320.html
Copyright © 2011-2022 走看看