Multiprogramming defined

Multiprogramming is defined within the context of the use of one I-stream engine because a single I-stream engine can only process a stream of instructions for one program at a time. When several program instruction streams are shared in a single I-stream engine and a dispatching mechanism exists to switch among the programs, the environment is said to be multiprogrammed.

The z/TPF system is designed on the assumption that the processing required for a single message places relatively heavy demands on database access and only a little demand on I-stream processing cycles. This assumption identifies a fundamental principle of multiprogramming in the z/TPF system: To keep an I-stream engine busy when programs are delayed by I/O operations. Multiprogramming is useful when an application program is delayed due to I/O requests, and the I-stream engine is more efficiently utilized if another program can be processed by the I-stream engine during that delay. Multiprogramming makes sense because a channel subsystem represents independent processors sharing storage with I-stream engines. So, in reality, multiprogramming on an I-stream engine within the z/TPF system environment is done in support of multiprocessing, where a channel subsystem and a single I-stream engine represent the multiple processors. Multiprogramming is also effective when a program must wait for the use of the services of an I-stream engine that is different than the I-stream engine on which the program is running.

There are other reasons for multiprogramming, some of which do not exist in the z/TPF system. For example, computationally intensive programs are not tolerated in the z/TPF system where most Entries complete in less than one-half second. However, multiprogramming is used in other systems to force computationally intensive programs to give up control to higher priority work.