第9章 Linux设备驱动中的异步通知与异步I/O之异步通知

本章导读

在设备驱动中使用异步通知可以使得在进行对设备访问时,驱动主动通知应用程序进行访问。这样,使用非阻塞I/O的应用程序无须轮询设备是否可访问,而阻塞访问也可以被类似“中断”的异步通知所取代。

除异步通知以外,应用还可以在发起I/O请求后,立即返回。之后,再查询I/O完成情况,或者I/O完成后被调回。这个过程叫作异步I/O。

1、异步通知的概念与作用。
2、Linux异步通知的编程方法。

3、增加异步通知的globalfifo驱动及其在用户空间的验证。

4、Linux基于C库的异步I/O和内核本身异步I/O的用户空间编程接口,以及驱动如何支持AIO。

9.1 异步通知的概念与作用

阻塞与非阻塞访问、poll()函数提供较好的解决设备访问的机制,但是如果有了异步通知,整套机制更加完整。

异步通知是:一旦设备就绪,主动通知应用程序,应用程序根本不需要查询设备状态,这一点类似于硬件上“中断”的概念,比较准确的称谓是“信号驱动的异步I/O”。信号是在软件层次上模拟中断机制,从原理上来说,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。
阻塞I/O意味着一直等待设备可以访问后再进行访问,非阻塞I/O中使用poll()意味着查询设备是否可以访问。异步通知则意味着设备通知用户自身可访问,之后用户再进行I/O处理。

图9.1呈现了阻塞I/O,结合轮询的非阻塞I/O及基于SIGIO的异步通知在时间先后顺序上的不同。


图9.1 阻塞、结合轮询的非阻塞I/O和异步通知的区别

阻塞、非阻塞I/O、异步通知本身没有优劣,根据不同的应用场景合理选择。



猜你喜欢

转载自blog.csdn.net/xiezhi123456/article/details/80398551
今日推荐