StuBS
GuardedScheduler Class Reference

Guarded interface to the Scheduler used by user applications. More...

#include <syscall/guarded_scheduler.h>

Inheritance diagram for GuardedScheduler:
[legend]
Collaboration diagram for GuardedScheduler:
[legend]

Static Public Member Functions

static void ready (Thread *that)
 Include a thread in scheduling decisions. More...
 
static void exit ()
 (Self-)termination of the calling thread. More...
 
static void kill (Thread *that)
 Kills the passed thread. More...
 
static void resume ()
 Issue a thread change. More...
 
- Static Public Member Functions inherited from Scheduler
static void schedule ()
 Start scheduling. More...
 
static void ready (Thread *that)
 Include a thread in scheduling decisions. More...
 
static void exit ()
 (Self-)termination of the calling thread. More...
 
static void kill (Thread *that)
 Kills the passed thread. More...
 
static void resume ()
 Issue a thread change. More...
 
- Static Public Member Functions inherited from Dispatcher
static Threadactive ()
 Returns the thread currently running on the CPU core calling this method.
 
static bool isActive (const Thread *thread, unsigned *cpu=nullptr)
 Check if thread is currently active. More...
 
static void go (Thread *first)
 This method stores first as life pointer for this CPU core and triggers the execution of first thread. More...
 
static void dispatch (Thread *next)
 Updates the life pointer to next and issues a thread change from the old to the new life pointer. More...
 

Detailed Description

Guarded interface to the Scheduler used by user applications.

Implements the system call interface for class Scheduler. All methods provided by this class are wrappers for the respective method from the base class, which provide additional synchronization by using the class Guarded.

Member Function Documentation

◆ ready()

static void GuardedScheduler::ready ( Thread that)
inlinestatic

Include a thread in scheduling decisions.

This method will register a thread for scheduling. It will be appended to the ready queue and dispatched once its time has come.

Parameters
thatThread to be scheduled
Note
This method is equal to the correspondent method in base class Scheduler, with the only difference that the call will be protected by a Guarded object.

◆ exit()

static void GuardedScheduler::exit ( )
inlinestatic

(Self-)termination of the calling thread.

This method can be used by a thread to exit itself. The calling thread will not be appended to the ready queue; a reschedule will be issued.

Note
This method is equal to the correspondent method in base class Scheduler, with the only difference that the call will be protected by a Guarded object.

◆ kill()

static void GuardedScheduler::kill ( Thread that)
inlinestatic

Kills the passed thread.

This method is used to kill the Thread that. For OOStuBS, it is sufficient to remove that from the ready queue and, thereby, exclude the thread from scheduling. For MPStuBS, a simple removal is not sufficient, as the thread might currently be running on another CPU core. In this case, the thread needs to be marked as dying (a flag checked by resume prior to enqueuing into the ready queue) and the executing CPU core needs to be notified.

Note
The thread should be able to kill itself.
See also
Dispatcher::isActive
Todo:
Adapt method (for MPStuBS)
Note
This method is equal to the correspondent method in base class Scheduler, with the only difference that the call will be protected by a Guarded object.

◆ resume()

static void GuardedScheduler::resume ( )
inlinestatic

Issue a thread change.

This method issues the change of the currently active thread without requiring the calling thread to be aware of the other threads. Scheduling decisions, i.e. which thread will be run next, are made by the scheduler itself with the knowledge of the currently ready threads. The currently active thread is appended to the end of the queue; the first thread in the queue will be activated (to implement the FIFO policy).

Note
This method is equal to the correspondent method in base class Scheduler, with the only difference that the call will be protected by a Guarded object.

The documentation for this class was generated from the following file: