第十二章 读书笔记
第十二章 Linux 驱动程序中的 阻塞和非阻塞 I/O
等待队列是 Linux 内核的一种实现进程休眠的技术。在上一章介绍的自旋锁使用的是不断循环 的方式阻塞 Linux 驱动,这种方式很占 CPU 资源。而等待队列的你眠技术可以大大降低休眠进程对 CPU 资源的消耗,信号量就是利用等待队列实现了对临界区的锁定。本节将介绍等待队列的原 理以及相关的函数和宏,最后会使用一个完整的例子来演示如何使用等待队列休眠和唤醒进程。
运行在用户空间的应用程序可以使用 select函数检测设备文件是否可以读写以及是否发生异常。使用 select 函数不断检测设备文件的编程方法也称为轮询编程。
Linux 驱动的休眠和唤醒是Lim肌肉核的技术,利用 wait_event_interruptible 、 wake_ up_ interruptible 等宏可以休眠和唤醒内核进程,当被唤醒线程满足 condition 条件后 wait_ event_ interruptible 宏就会立即返回以便执行后面的操作。当应用程序以阻塞方式访问休眠的内 核进程,应用程序将被阻塞。如果应用程序以非阻塞方式访问休眠线程,虽然并不会被阻塞,但应用程序要想知道 Linux 驱动什么时候被唤醒,就需要使用轮询检测技术,也就是 select和 poll 函数。 当然, 在 poll 函数中还需要使用 poll_wait 函数将等待队列头添加到轮询表 Cpoll_ table) 中,并返回相应的掩码。
http://www.cnblogs.com/yangsasa/