Multiprogramming OS and Multitasking OS 

Multiprogramming increases CPU utilization by keeping multiple jobs (code and data) in the memory so that the CPU always has one toexecute in case some job gets busy with I/O.

    - Single CPU

    - Context switching for processes.

    - Switch happens when the current process goes to the wait state.

    - CPU idle time reduced. 

Multitasking is a logical extension of multiprogramming.

    - Single CPU

    - Able to run more than one task simultaneously.

    - Context switching and time sharing used.

    - Increases responsiveness.

    - CPU idle time is further reduced.