Linux内核:schedule()函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux内核:schedule()函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1754字,纯文字阅读大概需要3分钟。
内容图文
![Linux内核:schedule()函数](/upload/InfoBanner/zyjiaocheng/962/0c2ac3704e7f46e7b892456df172d6e6.jpg)
我在论坛上看到了几个关于这个schedule()函数的问题,但我的问题有点不同.我已经看过几个关于它的理论,算法和实现方面的讨论和文献.
不清楚的问题和被问到的问题是执行方面.当然,深入查看内核的源代码并进行所有必需的调试,跟踪bla bla …可能会回答这个问题,但重新发明轮子似乎并不明智.
问题/困惑如下:
内核级别的多线程用户程序遍历的路径是什么?
谁安排线程?哪个中断上下文?任何名字? (如果我们看到内核级别的跟踪,没有任何称为“sched”,但有交换器,inits,ksoft * bla bla)Deos它是这样的:
其子线程的进程(用户程序)首先由内核占用,然后内核将它们作为可执行线程(通过将它们与schedule()和/或其他函数合并,即,这个新的可执行线程有一些指令来自内核可能来自schedule()/其他,嵌入了用户任务指令.如果情况发生,它会自动安排)
要么
schedule()总是在某个协处理器上执行,以便在必要时从该协处理器进行观察和操作?这就是为什么,有时当我们看到任何两个线程切换到cpu时,只有交换器在中间和之前和之后执行,即,在该级别没有任何称为调度程序,对吧?
感谢阅读并抱歉写下我的困惑与大家分享.
解决方法:
X或Y – 两者都没有.
这些抢占式多线程操作系统内核总体上完全相同.
看看,(非常简单),像这样:
OS内核调度程序/调度程序是一个复杂的大型中断处理程序.操作系统中的中断有两种形式:
来自磁盘,网络,键盘,鼠标等外围设备的硬件中断.这些中断会导致驱动程序运行,并且驱动程序可能会在内核退出时请求从内核运行调度.
软件从线程中断 – 可以改变线程状态的系统调用,例如.线程可能会请求不立即可用的输入,因此在输入可用之前线程不会运行.
当中断发生时,内核使用其内部状态数据以及来自中断的请求数据来运行其调度算法并确定哪些线程应在可用内核上运行.如果它决定运行线程集需要更改,它可以通过使用内核驱动程序来停止运行该线程的核心的硬件中断,从而阻止任何核心上运行的任何线程.
如果没有中断,内核什么都不做.它无法做任何事情,因为它不是从任何地方输入的.它不需要在任何协处理器上执行.它不需要将任何调用“注入”到用户代码中.
它是一个状态机,中断作为输入,一组运行线程作为输出.
内容总结
以上是互联网集市为您收集整理的Linux内核:schedule()函数全部内容,希望文章能够帮你解决Linux内核:schedule()函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。