Multiprogramming operating systems are fairly sophisticated compared to
single-program, or uniprogramming , systems. To have several jobs ready to run,
they must be kept in main memory, requiring some form of memory management .
In addition, if several jobs are ready to run, the processor must decide which one
to run, this decision requires an algorithm for scheduling. These concepts are discussed
later in this chapter.