`

《linux设备驱动详解》学习笔记(五)---异步通知与异步I/O

 
阅读更多
一、应用程序——信号的接收

1、自定义信号处理函数,参数为所接收的信号值

2、绑定信号与信号处理函数

3、有的设备文件须如下设置方能发送信号(如输入流文件STDIN_FILENO


设置文件拥有者为本进程

设置文件支持FASYNC异步通知模式

有的设备不需要(如键盘)


二、驱动程序——信号的发送

1、当文件属性改为FASYNC异步通知模式时,就会调用驱动程序中的fasync()操作来将设备文件添加到异步通知列表中(该操作中的fasync_helper()就是处理FASYNC标志变更的),即生成一个fasync_struct结构体并插入异步通知列表中,然后将异步结构体指针指向它


2、驱动程序通过kill_fasync释放信号给应用程序,实现异步通知

3、可通过globalfifo_fasync(-1,filp,0)把异步通知结构体从异步通知列表中删除


三、AIO系列API

1intaio_read(struct aiocb *)请求一个异步读操作

2intaio_write(struct aiocb *)请求一个异步写操作

3intaio_error(struct aiocb *)确定请求状态

4ssize_taio_return(struct aiocb *)获取传输的字节数

5intaio_suspend(const struct aiocb *,int,const struct timespec*)挂起(或阻塞)调用进程

6intaio_cancel(int,struct aiocb *)取消某个请求

7intlio_listio(int,struct aiocb *,int,struct sigevent *)一次启用大量I/O操作


structaiocb{

aio_buf;

aio_fildes;

aio_nbytes;

aio_offset;

}

一个这样的结构体代表着一个I/O操作请求


四、异步通知——驱动程序

异步I/O——应用程序

1、使用信号作为AIO的通知

2、使用回调函数作为AIO的通知


五、1、在用户空间验证globalfifo的异步通知


2、使用信号作为AIO的通知


1)设置AIO请求

2)设置sig_act(signal和处理函数)

3)链接AIO请求和signal


3、使用回调函数作为AIO的通知


1)设置AIO请求

2)链接AIO请求和回调函数


六、1/proc/sys/fs/aio-nr

异步IO请求现有数目

2/proc/sys/fs/aio-max-nr

异步IO请求最大数目


七、1、在内核中,每一个I/O请求都有对应的一个kiobc结构体

2、字符设备驱动程序中,file_operation包含3个与AIO有关的成员函数

*aio_read() *aio_write() *aio_fasync()

3、应用程序中的aio_read()aio_write()函数本身不一定完成了读写操作,只是发起初始化读和写操作


八、设备驱动中的异步I/O函数



分享到:
评论

相关推荐

    Windows驱动开发技术详解

    本书共分23章,内容涵盖了Windows操作系统的基本原理、NT驱动程序与WDM驱动程序的构造、驱动程序中的同步异步处理方法、驱动程序中即插即用功能、驱动程序的各种调试技巧等。同时,还针对流行的PCI驱动程序、USB驱动...

    vc深入详解

    VC++深入详解学习笔记 1 Lesson1: Windows程序运行原理及程序编写流程 1 Lesson2: 掌握C++基本语法 6 Lesson3: MFC框架程序剖析 7 Lesson4: 简单绘图 9 Lesson5: 文本编程 12 Lesson6: 菜单编程 15 Lesson7: 对话框...

    markdown:前端学习笔记

    学习笔记(持续更新) 验证你是否真正掌握一个知识的最好方法,就是看你能否用直白浅显的语言把复杂深奥的问题和知识讲清楚 -- 费曼技巧「以教为学」 大纲 前端杂记 策略模式 发布订阅者模式 责任链模式(todo) 0.1...

    详解koa2学习中使用 async 、await、promise解决异步的问题

    在学习koa2的时候遇到了获取数据后再进行模板渲染的异步问题。在查找各种资料后成功的解决了该问题,现在写个笔记记录一下。 先说一下async、await,第一次见到这两个词是在学习vue的时候。因为前端在写代码的时候...

    详解CAN总线信号传输位定时与位同步

    CAN协议与其它现场总线协议的区别中有一个是:它使用同步数据传输而不是异步传输(面向字符)。这意味着传输性能得到更有效的发挥,但是另一方面,这需要更加复杂的位同步方法。

    webpack学习笔记之代码分割和按需加载的实例详解

    本文介绍了webpack学习笔记之代码分割和按需加载的实例详解,分享给大家,也给自己留个笔记 为什么需要代码分割和按需加载 代码分割就是我们根据实际业务需求将代码进行分割,然后在合适的时候在将其加载进入文档中...

    整理后java开发全套达内学习笔记(含练习)

    float 32bit, 9位有效数字,含小数(四舍五入)(小数点算一位,正负号不算) double 64bit, 18位有效数字 注:float 和 double 的小数部分不可能精确,只能近似。 比较小数时,用 double i=0.01; if ( i - 0.01 ...

    asp.net知识库

    VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...

    Wininet编程资料及代码

    WinInet编程中如何使用异步 winInet_API浅谈 Wininet详解 WinInet中的几个网络函数 WinInet学习笔记 异步下载类 等等

    ajax数据传输方式实例详解

    在异步应用程序中发送和接收信息时,常见的可以选择以纯文本和XML作为数据格式(可参考《jQuery学习笔记之Ajax用法实例详解》),现在还有一种比较流行的方式:JSON(JavaScript Object Notation)。好了,下面举例...

    详解vue前后台数据交互vue-resource文档

    这两天学习了vue-resource插件个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。 Vue可以构建一个完全不依赖后端服务的应用,同时也可以与服务端进行数据交互来同步界面的动态更新。 Vue通过插件的形式...

    电源技术-信号完整性资料合集.zip

    同步通信与异步通信区别 SPI总线的特点工作方式以及常见错误解析 USB与串口的区别简要总结 二、信号调制技术方式 5G系统物理层的信道调制技术 调制信号和载波的关系介绍 工程师必须了解的IQ信号和调制知识 浅谈...

    java文集

    ext学习笔记一 小试iBatis RIA(Rich Internet Application)的现状和未来 Java应用中域名解析不过期的解决方法 Java编程那些事儿45—数组使用示例1 一步步熟悉OFBiz 用Java做客户端调用.NET写...

    jQuery的deferred对象使用详解

    所以,我把自己的学习笔记整理出来了,希望对大家有用。 本文不是初级教程,针对的读者是那些已经具备jQuery使用经验的开发者。如果你想了解jQuery的基本用法,请阅读我编写的《jQuery设计思想》和《jQuery最佳实践...

    DWR实现Ajax的配置过程

    struts2使用Dwr实现Ajax异步提交信息的使用步骤和配置详解。

Global site tag (gtag.js) - Google Analytics