Scheduler and Job handling ========================== The purpose of the _Scheduler_ is to run small self contained _Jobs_ ordered by priority and observing specific timing constraints. Scheduler implementation ideas ------------------------------ Use multiple priority queues - background work - foreground high-priority - soft-realtime actions About Jobs ---------- A job is a closure to run a small and limited action or operation, which in itself _should not block_. Job may depend on each other and on resources to be provided. A job may be conained in multiple queues and may be marked as _canceled_ -- in which case the job function will never run and the job will be discarded on occasion. Job States ~~~~~~~~~~ [source,C] -------------- enum job_state { done, // already done, nothing to do running, // job is running waiting, // waits for some resource (annother job) rejected, // sorry, cant do that dave, time will run out expired, // time expired aborted // got aborted } --------------