linux异步io驱动程序实现,支持异步IO的Linux字符设备驱动程序

4 应用程序

《Linux设备驱动开发详解(第2版)》和网上很多资料介绍的aio_*系列编程接口实际上并没有使用设备驱动程序提供的aio接口。glibc提供的这个aio编程接口使用线程和阻塞调用来模拟异步IO,性能很差。要让应用程序真正调用驱动程序提供的aio接口,必须使用libaio库,其源代码可以在http://libaio.sourcearchive.com/下载。libaio提供的接口不同于glibc提供的,介绍其使用的文章似乎不多。为方便libaio的使用,Oracle对其进行了简单的封装,提供了libaio-oracle库,其主页地址是http://oss.oracle.com/projects/libaio-oracle/。libaio-oracle封装了libaio库,提供与glibc的aio编程接口非常相似的接口,使用起来较为方便。libaio-oracle不足之处在于,没有实现类似glibc的aio接口那样的、使用信号或者回调函数的异步通知机制,只能使用aio_suspend()挂起调用线程,等待异步IO完成。

笔者使用libaio-oracle编写的异步IO测试程序monitor_fifo主要代码如下:

l 发起AIO读取请求:

d64b607c24eb1b21b404f3e72d4de1fe.png

l 等待AIO完成:

5c7dd6d920e2943368cc4fe3648ef1aa.png

使用时,先启动monitor_fifo程序,它会发起一个异步读取请求。因为设备中没有数据可供读取,读取请求会被排队。然后执行echo "abcde" > /dev/fifo 向设备写入一些数据。由于设备中有数据可供读取了,驱动程序处理排队待处理的读取请求,monitor_fifo程序会输出读取操作执行完成的提示信息。这才是真正的异步IO,类似于套接字上的异步读取操作:等待直到有数据到达,读取操作才真正被执行。0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值