Multi programming: Multiprogramming is the method of running numerous programs at a time employing timesharing.
It permits a computer to do numerous things at similar time. Multiprogramming makes logical parallelism.
The concept of multi-programming is that the operating system keeps numerous jobs in memory concurrently. The operating system chooses a job from the job pool and begins executing a job, whenever that job requires waiting for any input/output operations the CPU is switched to other job. Therefore the main concept here is that the CPU is not at all idle.