阻塞型IO(等待队列)

本文介绍了如何在Linux驱动中实现阻塞型IO,重点讲解了等待队列的工作原理和使用。休眠的两个关键规则是在非原子上下文进行和检查唤醒条件。等待队列用于管理等待特定事件的进程链表,通过wait_event宏实现休眠,而wake_up函数用于唤醒进程。
摘要由CSDN通过智能技术生成
如何在驱动程序中实现一个阻塞型IO,等待队列就是最常用的方法。

    对于一个阻塞操作来说,我们的驱动程序应该阻塞该进程,将其置入休眠状态直到请求可继续。

一、休眠的简单介绍

    当一个进程被置为睡眠,它被标识为处于一个特殊的状态并且从调度器的运行队列中去除。直到发生某些情况下改变了这个状态, 进程将才会在任意 CPU 上调度,,即运行该进程。 休眠中的进程会被搁置到系统的一边, 等待将来的某个事件发生。
    
    对Linux驱动来说,让一个进程、进入休眠状态很容易。但是,为了将进程以一种安全的方式进入休眠,我们需要牢记及两条规则:

第一条:
        永远不要在原子上下文中进入休眠。那什么是原子上下文呢:在执行多个步骤时,不能被间断,不能有任何的并发访问。这就意味着,对于休眠来说,我们的驱动程序不能使在持有自旋锁,seqlock或者RCU锁时休眠。如果我们禁止了中断,也不能休眠。
        在持有信号量时休眠是合法的,但是必须仔细检查持有信号量时休眠的那段代码。如果代码在拥有信号量时休眠,任何其他等待该信号量的线程也会休眠,所以任何持有信号量而休眠的代码必须很短。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值