Answer : D
More than one program loaded into main memory at the same time.
If a program waits for certain event another program is immediately scheduled
If the execution of a program terminates, another program is immediately scheduled
In a multi-programming system there are one or more programs loaded in main memory which are ready to execute. Only one program at a time is able to get the CPU for executing its instructions (i.e., there is at most one process running on the system) while all the others are waiting their turn.
The main idea of multi-programming is to maximize the use of CPU time. Indeed, suppose the currently running process is performing an I/O task (which, by definition, does not need the CPU to be accomplished). Then, the OS may interrupt that process and give the control to one of the other in-main-memory programs that are ready to execute (i.e. process context switching). In this way, no CPU time is wasted by the system waiting for the I/O task to be completed, and a running process keeps executing until either it voluntarily releases the CPU or when it blocks for an I/O operation. Therefore, the ultimate goal of multi-programming is to keep the CPU busy as long as there are processes ready to execute.
Reference : Definition of Multiprogramming Operating System is Here