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

本课时解决了处于队列头部的任务,如果不主动调用yield()时,如何强制其放弃CPU运行,从而给其它进程运行的机会。

主要内容

由于是需要强制处于队列头部的任务放弃CPU,因此必须借助中断才能强制中断当前进程的运行。而中断中,只有定时器最为合适。因此,本课时借助定时器强制剥夺进程的CPU使用权。
image.png
具体实现时,是以周期性的定时中断为基准,给每个任务相同的CPU使用时长,一旦超过时长则被强制剥夺进程的CPU使用权进入队尾。
举了生活中排队的例子,为了避免有些无赖的存在,就不能让一个处于队头的人总是在窗口的前面。如果发现他一直在前面赖着不走,可以强制要求他离开。
而如果队列中每个人都很急、都是VIP客户,为了保证公平;可以轮流给每个人都服务一会儿。
image.png

参考资料

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