Jobs and job resources

A job is a container for storage and other resources, and it cannot run by itself. Job resources are resources that are accessible by all threads within the job.

Every job has two basic kinds of storage associated with it.

Data:
Data is where all of the program variables are stored. It is broken down into storage for global and static variables (static), thread local storage (TLS), storage for dynamically allocated storage (heap), and storage for variables that are local to the function (automatic). The storage for program variables is allocated from the activation group into which the program was activated. Static storage is accessible to all threads that are running in the activation group. Thread local storage and automatic storage are local to the thread. Access to heap storage depends on the storage type for the heap-storage pointer.
Stack:
The stack contains data about the program or procedure call flow in a thread. The stack, along with thread local storage and automatic storage, is allocated for each thread created. When in use by a thread, the stack, thread local storage, and automatic storage are considered to be thread resources. When the thread ends, these resources return to the process for subsequent use by another thread.

Job resources are as follows:

All threads running in an activation group can share activation group resources, such as static and heap storage. When a thread changes a job resource, the new value is immediately visible to all threads. For example, changing the signal handling action in one thread effectively changes the signal handling action in all threads.