An operating system combines preemptive scheduling with cooperative or
non-preemptive scheduling. In particular, tasks are divided into groups
of interdependent tasks. Interdependent tasks are tasks that utilize the
same modules of code or resources Each group includes tasks that should
not be run asynchronously relative to each other. The scheduler in the
operating system provides each group with a time slot of processor time.
The tasks within the group are cooperatively scheduled to exploit the
time slot assigned to the group. Dependencies between modules and tasks
are maintained to assure that no difficulties arise amongst preemptively
scheduled groups.