ISPF is invoked using either the ISPSTART, ISPF, or PDF command. The command runs in a task of its own. This is nothing unusual because these commands are TSO command processors, and all command processors run in tasks of their own. You can identify this task because the CDE entry (Contents Directory Entry) for the current RB (Request Block) points to a load module called ISPMAIN. This is referred to as the "ISPMAIN task".
Each ISPF logical screen runs in its own task, and is a subtask of the "ISPMAIN task". These are referred to as the "ISPTASK subtasks". The first "ISPTASK subtask" is attached by the "ISPMAIN task" during initialization. Subsequent "ISPTASK subtasks" are attached by the "ISPMAIN task" when a new logical screen is created using the SPLIT or START commands. When you end a logical screen, the associated subtask is terminated.
A program invoked with the SELECT PGM service runs in the "ISPTASK subtask" for the logical screen, even if the SELECT PGM service was called from a subtask. LINK (SVC 6) is used to invoke programs via the SELECT PGM service. Control is passed to ISPF services (ISPEXEC, ISPLINK) via a CALL from a program invoked using the SELECT PGM service.
A program invoked with the SELECT CMD service runs as a subtask of the "ISPTASK subtask". The MVS ATTACH macro is used to pass control to a program invoked using the SELECT CMD service. After the ATTACH, the "ISPTASK subtask" goes into a wait until the program invoked using the SELECT CMD service either terminates or issues an ISPF service. The ISPF service causes a POST to be issued to the "ISPTASK subtask" which then runs the requested ISPF service.
SZERO=NO indicates that SUBPOOL 0 is not shared with the subtask.
When designing ISPF applications, the subtask structure used by ISPF should be taken into account in order to avoid potential problems. Consider the example in the diagram below.
- The SELECT CMD service is used to invoke the program CMD1
- CMD1 calls the SELECT PGM service to invoke program PGM1, which runs at the "ISPTASK subtask" level
- PGM1 uses the MVS ATTACH macro to invoke program CMD2
Program CMD2 cannot issue calls to ISPF services because the "ISPTASK subtask" is not in a wait state after the LINK to invoke PGM1. If CMD2 tries to issue a call to an ISPF service it will go into an indefinite wait because the "ISPTASK subtask" will never issue a POST to the ECB (Event Control Block) that CMD2 is waiting on.