注:本文档为《从0学x86操作系统》课程配套的学习文档,提供相应的辅助学习资料和答疑勘误。 有关该课程的信息,请点击这里访问:https://study.163.com/provider/1017884735/index.htm 在阅读本文档时,如有疑问和建议,欢迎在下方留言或者直接联系我。
主要内容
目前的系统中,CPU总是被用于安排运行处于就绪队列头部的进程的代码,所以导致了如果该进程总是处于头部,那么其后的任务将迟迟得不到运行的机会,会被活活“饿死”。
解决方法有多种,本课时提供的方法为:让进程自己主动放弃CPU,自觉移到队列尾部,从而给其它进程留出运行的机会。
为实现该功能,主要做了两点操作:
- 进程将自己移到队列尾部
- 调用task_dispatch()获取下一将要运行的任务并切换过去
其中task_dispatch()的功能比较简单,只是获取处于就绪队列头部的进程,然后切换过去。
而在高级一些的操作系统中,并不会这么简单,它会给进程添加不同的优先级,并且放置于多种队列中。类似task_dispatch()功能的函数,实现起来更为复杂。本课时只做简单的实现,在未来的高级扩展课程中,可能会对这块做更为复杂的处理。
参考资料
在很多操作系统或者线程库中都提供了类似的yield函数,功能是大体类似,请参考下面的链接。
- 进程管理之yield():https://blog.csdn.net/sunnybeike/article/details/6947137
- 线程中的yield()方法:https://blog.csdn.net/Terrence_he/article/details/78333753
- 多线程 Thread.yield 方法到底有什么用?:https://zhuanlan.zhihu.com/p/50374332