Multiprogramming allows for several programs (jobs, transactions, etc) to be in memory at the same time, sharing the system resources, such as CPU and I/O devices. Most programs do not overlap their I/O and processing activities, so that while one program is making use of the processor, others are undergoing I/O processing. Therefore, multiprogramming leads to a better use of the system resources, by keeping I/O devices running concurrently with processors. If the memory of a system were unlimited, its throughput would be a nondecreasing function of the multiprogramming level. However, due to the finitude of real memory, the number of programs in execution (MPL) may effect system performance. Usually, operating systems control the overall load by acting upon the degree of multiprogramming. In a multiprogrammed system, jobs compete for resources. Before competing for processor and I/O devices, a job must acquire a memory partition. The number of partitions available (MPL) is represented by the pool of partitions. If all partitions are occupied a job must wait. All such jobs form a 'memory queue'. Once a job acquires a partition, it becomes ready to use processor and I/O components. After completing execution, the job releases the partition, which is immediately assigned to a job in the memory queue.
In most operating systems, a CPU scheduling policy is usually implemented considering job priorities. The CPU is alloted to the job with higher priority, even though lowew priority jobs have been waiting longer at the CPU. This is Priority scheduling. Priority scheduling may be preemptive or nonpreemptive. In preemptive type of scheduling, jobs lose control of the CPU when some other jobs of higher priority arrive. The stopped jobs resume their execution only when there are no other jobs of higher priority waiting for the CPU. This is called Preemptive resume priority scheduling. In the nonpreemtive case, low priority jobs are never interrupted by jobs of higher priority, while being served. The CPU scheduling priorities are modelled using approximate queuing network models.
Most modern computer systems have paging disks that hold the pages of the virtual addresses of the several processes. As the page fault rate for a process increases, a greater portion of the process execution time is spent on the paging device. This load on the paging device affects all processes in execution. Therefore, paging activity should be taken into account when modelling computer systems.
For more on Virtual Memory, refer to The Virtual Memory Module and Distributed Shared Memory ModuleThe issue of mulyiprocessing is very important in commercial as well as scientific computing. This aims basically at two goals: Performance and Availability. With regard to performance, multiprocessing has been employed primarily to increase system throughput. In multiprocessor systems, a single transaction does not take lesser time than in a uniprocessor, but more independent transactions can be completed in unit time. Thus, the waiting time component of the response time is shortened. However, the execution time remains unaltered. However, in parallel processing systems, multiprocessing has been used to cut down on execution time. Here many processors work simultaneously on the execution of the same job, reducing its execution time.