General
Features
Building
Running
Debugging
SeptemberOS Task Manager


Scheduler

SeptemberOS task manager provides "hard" real-time scheduling and common task management functions. There is a defined maximum number of priority levels (configured per application build) and unlimited number of tasks. Lower numbers designate higher priorities. A task with a higher priority always runs until it blocks or completes, and always preempts a running lower priority task once it became runnable.

When a task becomes runnable it doesn't preempt running task of the same priority (unless round-robin scheduling option is specified for both tasks). A running task loses CPU only when it terminates, blocks or when a higher-priority task becomes runnable.


Time Sharing

SeptemberOS task manager provides an option to share CPU time between tasks of the same priority level. In order to employ the feature, all tasks on that level must have the time sharing option set. When a task with that option set runs for a complete time slice (defined per application build) and there is runnable task on the same level, then the running task gives up the CPU and is placed in the last turn on its priority queue to get CPU for the next time. However, if there is a task without the time sharing option set on the same level, it will not give up CPU by the end of the slice; rather it will run to completion or until blocked or preempted by the higher-priority task.

"Fairness compensation" methods are not provided by the SeptemberOS task manager. If a task with time sharing option goes to sleep or blocks on event, it will not get "bonus" CPU time once it gets up.


Synchronization

The task manager provides basic tasks queue management API, scheduling and synchronization primitives (spinlocks, mutexes, counting semaphores, events, events multiplexers etc.) All the functions operate on task queues; direct dequeue and enqueue operations are also available.


Trust the Programmer

SeptemberOS doesn't prohibit higher-priority tasks to be terminated or changed priority or options by the lower-priority tasks (by means of deliberate API calls). This is part of general "trust the programmer" trend.
Documentation
Download
Links
Articles




Copyright (c) Daniel Drubin, 2010