操作系统NACHOS实验(二)具有优先级的线程调度
可能会有一些小错误,但是基本思路应该还是没问题的。
实验思路
首先找到控制线程调度的代码 scheduler.h 和 scheduler.cc ,阅读代码后可知,其包含的主要方法由ReadyToRun (Thread *thread);FindNextToRun ();Run (Thread *nextThread);三个方法,分别是用来将线程加入ready队列、选择下一个要run的线程,以及将线程状态转换到run。要想设计并实现具有优先级的线程调度策略,我们需要改变的是控制选择下一个将要装入CPU的线程的方法,即FindNextToRun (),或者在将线程加入就绪队列时就对其按照优先级进行排序。
由于list类中提供了现有的SortedInsert(void *item, int sortKey)按照给定的sortKey将元素插入队列中的方法,我决定从线程加入就绪队列时入手。
当然,在改变方法之前,我们要在线程创建时赋予其一个优先级的标志,这样才能够根据优先级实现线程的调度。线程创建的相关代码位于thread.cc中的Thread()方法。
值得一提的是,按照优先级进行线程调度可能会导致线程饿死的情况发生,我们可以通过根据等待时间长短逐步提升线程优先级来防止此类情况发生,但由于题目未做要求,程序中仍然采用的是传统的按照优先级的调度方法。
测试实验是否成功需要更改threadtest.cc中代码后运行nachos进行测试。
关键源代码注释及说明
Thread.h更改部分
class Thread {
private:
// NOTE: DO NOT CHANGE the