The scheduler is at the heart of the operating system: it governs when everything—system services, applications, and so on—runs. Scheduling is especially important in real-time systems, where tasks are expected to run in a timely and deterministic manner. If the designer doesn’t have complete control of scheduling, unpredictable and unwanted system behavior can occur. Software developers and system designers should understand how a particular OS scheduler works in order to be able to understand why something doesn’t execute properly. This paper describes some of the more commonly used scheduling algorithms and how scheduling works. This knowledge can help developers debug and correct scheduling problems and create more efficient systems.