注:本文档为《从0学x86操作系统》课程配套的学习文档,提供相应的辅助学习资料和答疑勘误。 有关该课程的信息,请点击这里访问:https://study.163.com/provider/1017884735/index.htm 在阅读本文档时,如有疑问和建议,欢迎在下方留言或者直接联系我。
本课时解决了处于队列头部的任务,如果不主动调用yield()时,如何强制其放弃CPU运行,从而给其它进程运行的机会。
主要内容
由于是需要强制处于队列头部的任务放弃CPU,因此必须借助中断才能强制中断当前进程的运行。而中断中,只有定时器最为合适。因此,本课时借助定时器强制剥夺进程的CPU使用权。
具体实现时,是以周期性的定时中断为基准,给每个任务相同的CPU使用时长,一旦超过时长则被强制剥夺进程的CPU使用权进入队尾。
举了生活中排队的例子,为了避免有些无赖的存在,就不能让一个处于队头的人总是在窗口的前面。如果发现他一直在前面赖着不走,可以强制要求他离开。
而如果队列中每个人都很急、都是VIP客户,为了保证公平;可以轮流给每个人都服务一会儿。
参考资料
在很多操作系统或者线程库中都提供了类似的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