关闭

LDD3笔记(3)

726人阅读 评论(0) 收藏 举报

2006617星期六

当被调用的驱动程序无法满足调用者的请求,它应该阻塞该进程,进程置于休眠状态直到其请求可继续。

把进程置于休眠时,注意两条规则:1.不要在原子上下文中进入休眠。原子上下文是指:在执行多个步骤的时候,不能有并发的访问。 2. 被唤醒之后,必须检查,以确保我们等待的条件真正为真。

linux中,等待队列通过“等待队列头”来管理,它是一个wait_queue_head_t的结构体,定义在 linux/wait.h中。可以用静态或者动态的方法来初始化一个等待队列头。

可以用四种wait_event宏来把进程置于休眠。它需要的参数是queue(等待队列头)和condition(布尔表达式,条件为真时,将被唤醒)。

唤醒用的宏是两种wake_up宏。

有时调用者进程会通知我们它不想被阻塞。显式的非阻塞的I/Ofilp->f_flags中的O_NONBLOCK标志决定。 Linux/fcntl.h  linux/fs.h

在驱动程序中使用输出缓冲区可以提高性能。

注意 scull例子中如何使用while循环来实现 休眠和唤醒。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:103402次
    • 积分:1673
    • 等级:
    • 排名:千里之外
    • 原创:53篇
    • 转载:45篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论