
{   PURPOSE:
{     The task control block is the job template description of a task and
{     its relationship with its superior and subordinates within a job.
{
{     The task control block services two major purposes: 1) communication
{     between a parent task and its children; and 2) as a convenient container
{     for structures related to preemptive communication (system flags and
{     signals).
{
{   DESIGN:
{     The task control block is internal to PROGRAM MANAGEMENT (tasking
{     and preemptive communication); its contents are the sole responsibility
{     of PROGRAM MANAGEMENT; and its domain of reference is to be limited to
{     PROGRAM MANAGEMENT.
{
{     Task control blocks are always created and released in a parent task.
{
{     1)  Parent / Child Communication
{         task_id: task id of owner of the task control block -
{                initialized in parent when creating a child task;
{                used to discover task control blocks and XCBs of tasks other
{                than the requestor.
{         parent: pointer to parent's task control block -
{                initialized in parent when creating a child task;
{                used to determine if a task is a job monitor (in ring 2
{                and above); used in a parent to establish the relationship
{                among siblings.
{         first_child, next_sibling: this 'list' establishs the relationship
{                between the parent and its children -
{                managed in parent when creating and releasing a child task;
{                the 'list' is used to reference all child tasks as group -
{                signal all children, flag all children, and wait for all
{                children;
{                the 'list' is also used to verify that a specified task is
{                a child of the requestor - terminate or wait for a specific
{                child.
{         program_description, program_parameters, target_ring, debug_input,
{           debug_output, abort_file, and initial_debug_ring: these fields are
{                the vehicle by which the associated data is passed from the
{                parent to the child task -
{                initialized in parent when creating the child task;
{                used within the child task in creating its local environment.
{         termination_status, parent_task_status_variable: these fields are
{                the vehicle by which the task status variable is returned to
{                the returned to the requestor of PMP$EXECUTE -
{                initialized in parent when creating the child task;
{                termiantion_status is updated in child as part of exit
{                processing;
{                parent_task_status_variable is used within the parent to
{                locate the destination of task status.
{
{         flag_execution_ring, signal_execution_ring: these arrays contain
{                the ring in which an outstanding flag or signal should be
{                processed -
{                initalized in parent when creating the child task;
{                managed within the child by preemptive communication
{                processing (i.e., tmm$allocate_execution_rings,
{                tmm$manage_signals_and_flags).
{         task_local_signal_list: this 'list' augments the XCB's signal
{                buffer -
{                initialized in parent when creating the child task;
{                managed within the child by preemptive communication
{                processing (i.e., tmm$allocate_execution_rings,
{                tmm$manage_signals_and_flags).
{
