Control program

Programs that are included in the online environment, other than ECB-controlled programs, are collectively called the control program (known previously as the core resident control program). The control program runs in 64-bit addressing mode. Although such programs reside in z/TPF online file storage for system restarts, the programs are assigned to main storage to control online z/TPF system processing. These programs are link-edited together for online processing with the GNU linker (rather than the z/TPF linker).

Many programs within the control program are reentrant, in the context of simultaneous running on several I-stream engines. This means that the program is shared among all I-stream engines and the program references data through private registers and the prefix area in the I-stream engine. Such a program can, however, enter a critical region to update data that is shared among all I-stream engines, in which case a processor lock must be invoked when the data is updated. Nevertheless, within an I-stream engine such a reentrant program remains serially reusable; that is, the program runs to completion before being invoked by another Entry on the same I-stream engine.

In a multiple I-stream engine environment, register save areas for a reentrant control program component necessary to make nested subroutine calls are private to an I-stream engine. If save areas were held within the subroutines, as on a uniprocessor, the simultaneous use of such a component could fail unless the save areas were treated as shared data on which locking would be necessary. Such locking would cause prohibitive performance degradation, and frequently make a multiprocessing environment look like a uniprocessor. So, private save areas, also called stacks, are used in the z/TPF system to maintain reentrancy for control program components across multiple I-stream engines. In some operating systems, stacks are used to allow a routine to make recursive calls to itself. This cannot be done in the z/TPF system.

A set of pointers to the private stacks is held in the prefix area of each I-stream engine. The stacks are classified according to the control program component that uses the area; for example, the SVC save area.

For example, in the course of invoking the FINDC macro service routine, the macro decoder program initializes the SVC stack pointer (which is register 13, a convention followed by the z/TPF system), which permits the FINDC macro service routine to make nested subroutine calls. See Figure 1.
Figure 1. Reentrant stacks
Alternate text