Multiprogramming is the process of running multiple, concurrent processes on a computer system. Modern PCs are multiprogrammed. The term is somewhat archaic, but still applicable to modern computers.

Multiprogramming can be contrasted with time sharing systems, like old pre-unix mainframes, or systems which run only a single process at a time, and must be manually loaded with a new process when the computer is idle. Multiprogramming was introduced as a computing concept because it allows much greater use to be made of a CPU, because work can be completed in one process while other processes are waiting (blocking on I/O, for instance).

Multiprogramming involves the ability to rapidly replace the current process on a CPU with a new one, while saving the state of the old process for later. Except for the time involved, this is transparent to the processes, and is handled completely in the scheduler or kernel of the operating system. There is some considerable overhead due to context switches, interrupt processing, and the like, but the overall efficiency of the system is greatly enhanced over less flexible designs.

Multiprogramming is a generic concept. It makes no statement about how the scheduling on any given processor is done. Different operating systems implement their scheduling differently.

As a historical note, Unix was not the first multiprogramming OS. ariels says (modestly edited), "Saying that UNIX was the first multiprogrammed OS (or, indeed, that it ran on mainframes) is incorrect. Many OSes before it (e.g. Multics) had multiprogramming. CDC had one too. So did IBM. Digital also had one, I think. And many others."

As a small rebuttal to the above, unix is probably the most well known example of a multiprogramming OS to a modern audience, and various unixes are the OSes of choice for modern mainframe computing.

References: My computer architecture classes at my university. The Operating Systems book by Stallings goes over this pretty reasonably, too.