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
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.
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.
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.
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
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.