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.