2006年6月17日星期六
当被调用的驱动程序无法满足调用者的请求,它应该阻塞该进程,进程置于休眠状态直到其请求可继续。
把进程置于休眠时,注意两条规则:1.不要在原子上下文中进入休眠。原子上下文是指:在执行多个步骤的时候,不能有并发的访问。 2. 被唤醒之后,必须检查,以确保我们等待的条件真正为真。
在linux中,等待队列通过“等待队列头”来管理,它是一个wait_queue_head_t的结构体,定义在 linux/wait.h中。可以用静态或者动态的方法来初始化一个等待队列头。
可以用四种wait_event宏来把进程置于休眠。它需要的参数是queue(等待队列头)和condition(布尔表达式,条件为真时,将被唤醒)。
唤醒用的宏是两种wake_up宏。
有时调用者进程会通知我们它不想被阻塞。显式的非阻塞的I/O由filp->f_flags中的O_NONBLOCK标志决定。 Linux/fcntl.h linux/fs.h。
在驱动程序中使用输出缓冲区可以提高性能。
注意 scull例子中如何使用while循环来实现 休眠和唤醒。
1054

被折叠的 条评论
为什么被折叠?



