NACHOS调度算法的实现

这篇博客详细介绍了在NACHOS操作系统中实现Shortest Job First、Shortest Remaining Next、Priority、Round-Robin及Multiple Queues这5种调度算法的过程。作者分享了自己在阅读文档和理解线程调度概念的体验,并提供了代码示例,解释了如何通过Scheduler类的ReadyToRun和ShouldISwitch函数来实现不同调度策略。同时,文章提到了对中断处理和时间片的控制,以确保正确执行各个调度策略。
摘要由CSDN通过智能技术生成

基于当时刚刚接触NACHOS时无从下手的窘迫,现在贴出一份自己的实验报告,跟大家交流下

操作系统实验3

 

关于调度算法的实现

我们实现的是Shortest Job First ,Shortest Remaining Next & Priority,Round-Robin Multiple Queues5个调度的算法。

 

经过我一个多星期对文档的阅读和与同学的讨论,初步弄明白了Nachos的线程调度的基本的概念和流程。

 

本次的实验,Nachos用了一个叫List的模板类来维护进程的链表以及其他的链表,所有的链表操作都可以通过里面定义的函数来操作,里面有很关键的SortedInsert函数,确保可以按照一定的顺序来插入数据。另外通过对线程类型的阅读,也发现了里面有timeLeft,priority等的私有成员,可以记录剩余时间和优先级。对于其他的成员函数就不是十分熟悉他们的整个执行的流程了。

 

对于进程的调度,是由一个叫做scheduler的类来控制整个线程的调度,包括执行队列,线程间切换,线程的运行,处理机的时间分块运行。本次实验通过对两个函数, ReadyToRun()ShouldISwitch()来实现我们的调度策略。

 

Void Scheduler::ReadyToRun (Thread *thread)

{

  DEBUG('t', "Putting thread %s on ready list./n", thread->getName());

  thread->setStatus(READY);

  switch (policy)

  {

    case SCHED_PRIO:

              readyList->SortedInsert(thread,20-thread->getPriority());break;    // Priority

    case SCHED_MQ:  

              readyList->SortedInsert(thread,20-thread->getPriority());break;

                // Multiple Queues

    case SCHED_SJF: 

             

              readyList->SortedInsert(thread,thread->getTimeLeft());

              break;// Shortest Job First

    case SCHED_SRTN:  

              readyList->SortedInsert(thread,thread->getTimeLeft());

                                          break; // Shortest Remaining Time Next

    case SCHED_FCFS:    

              readyList->Append(thread);

                                          break;// First Come First Served (FCFS) scheduling

                         // FCFS is the NachOS default

    case SCHED_RR:

               readyList->Append(thread);

                            break;// Round Robin scheduling

    default:

      readyList->Append(thread);

      break;

  }

}

 

bool Scheduler::ShouldISwitch (Thread  * oldThread, Thread * newThread)

{

  bool answer;

  switch( policy )

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值