注:本文档为《从0学x86操作系统》课程配套的学习文档,提供相应的辅助学习资料和答疑勘误。 有关该课程的信息,请点击这里访问:https://study.163.com/provider/1017884735/index.htm 在阅读本文档时,如有疑问和建议,欢迎在下方留言或者直接联系我。

本课时介绍了将进程主动放弃CPU的操作接口。

主要内容

目前的系统中,CPU总是被用于安排运行处于就绪队列头部的进程的代码,所以导致了如果该进程总是处于头部,那么其后的任务将迟迟得不到运行的机会,会被活活“饿死”。
image.png
解决方法有多种,本课时提供的方法为:让进程自己主动放弃CPU,自觉移到队列尾部,从而给其它进程留出运行的机会。
为实现该功能,主要做了两点操作:

  • 进程将自己移到队列尾部
  • 调用task_dispatch()获取下一将要运行的任务并切换过去

其中task_dispatch()的功能比较简单,只是获取处于就绪队列头部的进程,然后切换过去。
而在高级一些的操作系统中,并不会这么简单,它会给进程添加不同的优先级,并且放置于多种队列中。类似task_dispatch()功能的函数,实现起来更为复杂。本课时只做简单的实现,在未来的高级扩展课程中,可能会对这块做更为复杂的处理。

参考资料

在很多操作系统或者线程库中都提供了类似的yield函数,功能是大体类似,请参考下面的链接。