关于linux哪些能调用schedule或者等待事件的问题

关于linux哪些能调用schedule或者等待事件的问题,第1张

概述关于linux哪些能调用schedule或者等待事件的问题 对同步问题,需要注意: 1)不能调用schedule的情况(wait_event、sleep等, 等待函数内部会调用schedule): (1)中断、 (2)软中断、 (3)tasklet、 (4)timer(基于软中断实现)、 (5)hrtimer (软中断或硬中断环境下执行)执行环境下、 (6)或者“内核线程、普通线程内核态环境下调用 关于linux哪些能调用schedule或者等待事件的问题

对同步问题,需要注意:
1)不能调用schedule的情况(wait_event、sleep等, 等待函数内部会调用schedule):
(1)中断、
(2)软中断、
(3)tasklet、
(4)timer(基于软中断实现)、
(5)hrtimer (软中断或硬中断环境下执行)执行环境下、
(6)或者“内核线程、普通线程内核态环境下调用了preempt_disable()/local_irq_disable()后”,
不能调用schedule()函数。

因为spin_lock成功后,spin_lock内部调用了preempt_disable,所以spin_lock后,不能调用schedule()。当然spin_unlock会调用preempt_enable,所以后面可以根据什么执行context来判断是否能调用schedule()函数。

2)能调用等待函数的情况
(1) workqueue(内部实现用到kernel thread)、
(2) kernel thread、
(3) 普通线程的内核态,
这些context下,可以调用schedule()。前提是没有调用preempt_disable禁止抢占和local_irq_disable禁止中断等 *** 作时。

具体的原因和原理,请看我的课程:
https://edu.51cto.com/course/17155.html

https://edu.51cto.com/course/17132.html

关于具体的写linux驱动的方法、技巧和注意事项,欢迎观看我的《如何编写linux设备驱动》的视频:
https://edu.51cto.com/course/17132.html

另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html

另外我的免费的linux各种驱动开发课程如下:
https://edu.51cto.com/course/17138.html

总结

以上是内存溢出为你收集整理的关于linux哪些能调用schedule或者等待事件的问题全部内容,希望文章能够帮你解决关于linux哪些能调用schedule或者等待事件的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1030422.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存