first scheduler implementation
This commit is contained in:
@ -12,8 +12,6 @@
|
||||
#include "kernel/threads/Scheduler.h"
|
||||
#include "kernel/threads/IdleThread.h"
|
||||
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* Methode: Scheduler::schedule *
|
||||
*---------------------------------------------------------------------------*
|
||||
@ -23,11 +21,16 @@ void Scheduler::schedule () {
|
||||
|
||||
/* hier muss Code eingefuegt werden */
|
||||
|
||||
Thread* idle = new IdleThread();
|
||||
this->readyQueue.enqueue(idle);
|
||||
|
||||
/* Bevor diese Methode anufgerufen wird, muss zumindest der Idle-Thread
|
||||
* in der Queue eingefuegt worden sein.
|
||||
*/
|
||||
}
|
||||
|
||||
Thread& first = *(Thread*)this->readyQueue.dequeue();
|
||||
this->start(first);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Methode: Scheduler::ready *
|
||||
@ -41,9 +44,9 @@ void Scheduler::ready (Thread * that) {
|
||||
|
||||
/* hier muss Code eingefuegt werden */
|
||||
|
||||
this->readyQueue.enqueue(that);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* Methode: Scheduler::exit *
|
||||
*---------------------------------------------------------------------------*
|
||||
@ -56,9 +59,10 @@ void Scheduler::exit () {
|
||||
|
||||
/* hier muss Code eingefuegt werden */
|
||||
|
||||
Thread& next = *(Thread*)this->readyQueue.dequeue();
|
||||
this->dispatch(next);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* Methode: Scheduler::kill *
|
||||
*---------------------------------------------------------------------------*
|
||||
@ -73,10 +77,8 @@ void Scheduler::exit () {
|
||||
void Scheduler::kill(Thread* that) {
|
||||
|
||||
/* hier muss Code eingefuegt werden */
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* Methode: Scheduler::yield *
|
||||
*---------------------------------------------------------------------------*
|
||||
@ -92,4 +94,13 @@ void Scheduler::yield () {
|
||||
|
||||
/* hier muss Code eingefuegt werden */
|
||||
|
||||
if (this->readyQueue.isEmpty()) {
|
||||
// Idle thread running
|
||||
return;
|
||||
}
|
||||
|
||||
this->readyQueue.enqueue(this->get_active());
|
||||
|
||||
Thread& next = *(Thread*)this->readyQueue.dequeue();
|
||||
this->dispatch(next);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user