阻塞型IO(等待队列)

如何在驱动程序中实现一个阻塞型IO,等待队列就是最常用的方法。

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

一、休眠的简单介绍

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值