操作系统NACHOS实验(二)具有优先级的线程调度

本文介绍了在NACHOS操作系统中如何实现具有优先级的线程调度。通过修改scheduler.cc的FindNextToRun ()方法,以及在Thread创建时设置优先级标志,实现了线程调度。在调试过程中遇到构造函数错误,通过重载解决。测试结果显示,通过调整Yield ()方法的顺序,可以避免线程饿死并确保优先级高的线程优先执行。
摘要由CSDN通过智能技术生成

操作系统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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值