I. A Scheduler For Closely Co-Operating Processes. We've recently switched from a polling scheduler (each process provides a predicate to determine whether it is runnable) to an event-driven scheduler. The new scheduler has several interesting features (1) support for co-operating processes that can have complicated, interconnected, scheduling requirements, (2) a priority promotion scheme that has no overhead in the contention free case, (3) a very efficient, and robust, timer mechanism that allows arbitrary user code to execute asynchronously, and (4) fully replaceable, user-supplied, policy modules to allow the scheduler to support widely different policies on different computers. Forced compatibility with the existing scheduler suggested new scheduling primitives. We think these hybrids may be generally useful; they combine the flexibility of the polling scheduler with the efficiency of the event-driven process mechanism.