Chapter 29: Operating Systems

Author’s Note:      This chapter is copied almost verbatim from the material in
                              Chapter 21 of the textbook by Peter Abel.  It is used by permission.

This chapter introduces material that is suitable for more advanced assembler programming.
The first section examines general operating systems and the various support programs.
Subsequent sections explain the functions of the program status word and the interrupt
system. Finally, there is a discussion of input/output channels, physical IOCS, and the
input/output system.

These topics provide an introduction to systems programming and the relationship between
the computer hardware and the manufacturer's software. A knowledge of these features can
be a useful asset when serious bugs occur and when a solution requires an intimate
knowledge of the system.

In an installation, one or more systems programmers, who are familiar with the computer
architecture and assembler language, provide .support for the operating system. Among the
software that IBM supplies to support the system are language translators such as assembler,
COBOL, and PL/I and utility programs for cataloging and sorting files.

OPERATING SYSTEMS

Operating systems were developed to minimize the need for operator intervention during the
processing of programs. An operating system is a collection of related programs that provide
for the preparation and execution of a user's programs. The system is stored on disk, and part
of it, the supervisor program, is loaded into the lower part of main storage.

You submit job control commands to tell the system what action to perform. For example,
you may want to assemble and execute a source program. To this end, you insert job control
commands before and after the source program and submit it as a job to the system. In simple
terms, the operating system performs the following steps:

1. Preceding the source program is a job control command that tells the operating system to
assemble a program. The system loads the assembler program from a disk library into storage
and transfers control to it for execution.

2. The assembler reads and translates the source program into an object program and stores it
on disk.

3. Another job control command tells the system to link–edit the object program. The system
loads the linkage editor from a disk library into storage and transfers control to it for
execution.

4. The linkage editor reads and translates the object program, adds any required input/output
modules, and stores it on disk as an executable module.

5. Another job control command tells the system to execute the executable module. The
system loads the module into storage and transfers control to it for execution.


6. The program executes until normal or abnormal termination, when it returns
processing control to the system.

7. A job command tells the system that this is the end of the job, since a job may
consist of any number of execution steps. The system then terminates that job and
prepares for the next job to be executed.

Throughout the processing, the system continually intervenes to handle all input/output,
interrupts for program checks, and protecting the supervisor and any other programs
executing in storage.

IBM provides various operating systems, depending on users' requirements, and they
differ in services offered and the amount of storage they require. These are some
major operating systems:

DOS             Disk Operating System        Medium-sized systems

DOS/VSE    Disk Operating System        Medium-sized systems with virtual storage

OS/VSl         Operating System                Large system

OS/VS2        Operating System                Large system

OS/MVS      Operating System                Large system

Systems Generation

The manufacturer typically supplies the operating system on reels of magnetic tape, along
with an extensive set of supporting manuals. A systems programmer has to tailor the
supplied operating system according to the installation's requirements, such as the
number and type of disk drives, the number and type of terminals to be supported, the
amount of processing time available to users, and the levels of security that are to prevail.
This procedure is known as systems generation, abbreviated as sysgen.

Operating System Organization

Figure 29–1 shows the general organization of Disk Operating System (DOS), on
which this text is largely based. The three main parts are the control program,
system service programs, and processing programs.

Figure 29–1   Disk Operating System Organization


Control Program

The control program, which controls all other programs being processed, consists
of initial program load (IPL), the supervisor, and job control. Under OS, the
functions are task management, data management, and job management.

IPL is a program that the operator uses daily or whenever required to load the supervisor
into storage. On some systems, this process is known as booting the system.

Job control handles the transition between jobs run on the system. Your job commands
tell the system what action to perform next.

The supervisor, the nucleus of the operating system, resides in lower storage, beginning
at location X'200'. The system loads user (problem) programs in storage following the
supervisor area, resulting in at least two programs in storage: the supervisor program
and one or more problem programs. Only one is executing at any time, but control
passes between them.

The supervisor is concerned with handling interrupts for input/output devices, fetching
required modules from the program library, and handling errors in program execution.
An important part of the supervisor is the input/output control system (IOCS), known
under OS as data management.

Figure 29–2 Supervisor areas

Figure 29–2 (not an exact representation) illustrates the general layout of the supervisor
in main storage. Let's examine its contents.

 


1. Communication Region. This area contains the following data:

LOCATION CONTENTS

00 – 07                        The current date, as mm/dd/yy or dd/mm/yy

08 – 11                        Reserved

12 – 22                        User area, set to zero when a JOB command is read to provide
                                    communication within a job step or between job steps

23                                User program status indicator (UPSI)

24 – 31                        Job name, entered from job control

32 – 35                        Address: highest byte of problem program area

36 – 39                        Address: highest byte of current problem program phase

40 – 43                        Address: highest byte of phase with highest ending address

44 – 45                        Length of label area for problem program

2. Channel Scheduler. The channels provide a path between main storage and the
input/output devices for all I/O interrupts and permit overlapping of program execution
with I/O operations. If the requested channel, control unit, and device are available, the
channel operation begins. If they are busy, the channel scheduler places its request in a
queue and waits until the device is available. The channel notifies the scheduler when
the I/O operation is complete or that an error has occurred.

3. Storage Protection. Storage protection prevents a problem program from erroneously
moving data into the supervisor area and destroying it. Under a multiprogramming
system, this feature also prevents a program in one partition from erasing a program in
another partition.

4. Interrupt Handling. An interrupt is a signal that informs the system to interrupt the
program that is currently executing and to transfer control to the appropriate supervisor
routine. A later section on the program status word covers this topic in detail.

5. System Loader. The system loader is responsible for loading programs into main
storage for execution.

6. Error Recovery Routines. A special routine hancl1es error recovery for each I/O
device or class of devices. When an error is sensed, the channel scheduler invokes
the required routine, which attempts to correct the error.

7. Program Information Block (PIB). The PIB contains information tables that the
supervisor needs to know about the current programs in storage.

8. I/O Devices Control Table. This area contains a table of I/O devices that relate
physical unit addresses (X'nnn') with logical addresses (SYSxxx).

9. Transient Area. This area provides temporary storage for less used routines that the
supervisor loads as required, such as OPEN, CLOSE, DUMP, end–of– job handling,
some error recovery, and checkpoint routines.


System Service Programs

System service programs include the linkage editor and the librarian.

Linkage editor. The linkage editor has two main functions:

1. To include input/output modules. An installation catalogs I/O modules in the system
library (covered next). When you code and assemble a program, it does not yet contain
the complete instructions for handling input/output. On completion of assembly, the
linkage editor includes all the required I/O modules from the library.

2. To link together separately assembled programs. You may code and assemble a
number of subprograms separately and link-edit these subprograms into one executable
program. The linkage editor enables data in one subprogram to be recognized in another
and facilitates transfer of control between subprograms at execution time.

Librarian. The operating system contains libraries on a disk known as SYSRES to
catalog both IBM programs and the installation's own commonly used programs and
subroutines. DOS/VS supports four libraries:

1. The source statement library (SSL) catalogs as a book any program, macro, or
subroutine still in source code. You can use the assembler directive COPY to include
cataloged code into your source program for subsequent assembling.

2. The relocatable library (RL) catalogs frequently used modules that are assembled but
not yet ready for execution. The assembler directs the linkage editor to include I/O
modules automatically, and you can use the INCLUDE command to direct the linkage
editor to include your own cataloged modules with your own assembled programs.

3. The core image library (CIL) contains phases in executable machine code, ready for
execution. The CIL contains; for example, the assembler, COBOL, PL/I, and other
translator programs, various utility programs such as LINK and SORT, and your own
production programs ready for execution. To request the supervisor to load a phase from
the CIL into main storage for execution, use the job control command
// EXEC phasename.

4. The procedure library (PL) contains cataloged job control to facilitate automatic
processing of jobs.

The OS libraries vary by name according to the version of OS, but basically the OS
libraries equivalent to the DOS source statement, relocatable, and core image are,
respectively, source library, object library, and load library, and they serve the same
functions.

Processing Programs

Processing programs are cataloged on disk in three groups:

1. Language translators that IBM supplies with the system include assembler, PL/I,
COBOL, and RPG.

2. Utility programs that IBM supplies include such special-purpose programs as disk
initialization, copy file–to–file, and sort/merge.

3. User–written programs that users in the installation write and that IBM does not
support.  All the programs in this text are user–written programs. For example, the job
command // EXEC ASSEMBLY causes the system to load the assembler from the CIL
into an available area ("partition") in storage and begins assembling a program. The job
command // OPTION LINK directs the assembler to write the assembled module on
SYSLNK in the relocatable library.

Once the program is assembled and stored on SYSLNK, the job command
// EXEC LNKEDT tells the linkage editor to load the module from SYSLNK into
storage, to complete addressing, and to include I/O modules from the RL. Assuming that
there was no job command to catalog it, the linkage editor writes the linked phase in
the CIL in a non–catalog area. If the next job command is // EXEC with no specified
phase name, the supervisor loads the phase from the non–catalog area into storage for
execution. The next program that the linkage editor links overlays the previous one in
the CIL non–catalog area.

The job command // OPTION CATAL instead of // OPTION LINK tells the system both
to link the program and to catalog the linked phase in the catalog area of the CIL. You
normally catalog production programs in the CIL and for immediate execution use the
job command // EXEC phase name.

MULTIPROGRAMMING

Multiprogramming is the concurrent execution of more than one program in storage.
Technically, a computer executes only one instruction at a time, but because of the fast
speed of the processor and the relative slowness of I/O devices, the computer's ability
to service a number of programs at the same time makes it appear that processing is
simultaneous. For this purpose, an operating system that supports multiprogramming
divides storage into various partitions and is consequently far more complex than a
single–job system.

The number and size of partitions vary according to the requirements of an installation.
One job in each partition may be subject to execution at the same time, although only one
program is actually executing. Each partition may handle jobs of a particular nature. For
example, one partition handles relatively short jobs of high priority, whereas another
partition handles large jobs of lower priority.

The job scheduler routes jobs to a particular partition according to its class. Thus a
system may assign class A to certain jobs, to be run in the first partition.

In Fig. 29–4, the job queue is divided into four classes, and main storage is divided into
three user partitions. Jobs in class A run in partition 1, jobs in classes B and C run in
partition 2, and jobs in class P run in partition 3.

Depending on the system, storage may be divided into many partitions, and a job class
may be designated to run in anyone of the partitions. Also, a partition may be designated
to run any number of classes.

When an operator uses the IPL procedure to boot the system, the supervisor is loaded
from the CIL into low storage. The supervisor next loads job control from the CIL into
the various partitions. The supervisor then scans the system readers and terminals for
job control commands.


FIXED STORAGE LOCATIONS

As mentioned earlier, the first X'200' (decimal 512)bytes of storage are reserved for use
by the CPU. Figure 29–3 lists the contents of these fixed storage locations.

Figure 29–3    Fixed Storage Locations


When a job completes processing, the job scheduler selects another job from the queue
to replace it. For example, if partition 1 is free, the job scheduler in Fig. 29–4 selects
from the class A queue either the job with the highest priority or, if all jobs have the
same priority, the first job in the queue.

The system has to provide a more or less equitable arrangement for processing jobs in
each partition. Under time slicing, each partition is allotted in turn a time slice of so many
milliseconds of execution. Control passes to the next partition when the time has expired,
the job is waiting for an I/O operation to complete, or the job is finished.

Figure 29–4 Job queue and partitions

VIRTUAL STORAGE

In a multiprogramming environment, a large program may not fit entirely in a partition. As a consequence, both DOS/VS and OS/VS
support a virtual storage system that divides programs into segments of 64K bytes, which are in turn divided into pages of 2K or
(usually) 4K bytes. On disk, the entire program is contained as pages in a page data set, and in storage VS arranges a page pool for
as much of the program as it can store, as shown in Fig. 29–5. As a consequence, a program that is 100K in size could run in a 64K
partition. If the executing program references  an address for a part of the program that is not in storage, VS swaps an  unneeded page
into the page data set on disk and pages in the required page from disk into the page pool in storage. (Actually, VS swaps onto disk only
if the program has not changed the contents of the page.) The 16 control registers handle much of the paging operations. Since a page
from disk may map into any page in the pool, VS has to change addresses; this process is known as dynamic address translation (DAT).

Figure 29–5:  Page Pool

When running a real–time application such as process control, a data communications manager, or an optical scan device, you may
not want VS to page it out. It is possible to assign an area of nonpageable (real) storage for such jobs or use a "page fix" to lock
certain pages into real storage.

PROGRAM STATUS WORD: PSW

The PSW is a doubleword of data stored in the control section of the CPU to control an executing program and to indicate its status.
The two PSW modes are basic control (BC) mode and extended control (EC) mode. A 0 in PSW bit 12 indicates BC mode, and a 1
indicates EC mode. EC mode provides an extended control facility for virtual storage.  One of the main features of the PSW
is to control the state of operation.

Figure 29–6: Two Variants of the PSW (Program Status Word)

[Note by ELB: In the original S/360 design, bit 12 of the PSW was the ASCII bit, with settings to allow running the computer with
either EBCDIC characters (PSW12 = 0) or ASCII characters PSW12 = 1.)  The ASCII option was so little used that most system managers
were completely unaware that it existed.  When the S/370 design with support for virtual memory was introduced, the designers needed a
bit to indicate what was essentially “S/370 mode” rather than the older “S/360 mode”.  Bit 12 was reassigned.]

Users of the system have no concern with certain operations such as storage management and allocation of I/O devices, and if they were
allowed access to every instruction, they could inadvertently access other users' partitions or damage the system. To provide protection, certain
instructions, such as Start I/O and Load PSW, are designated as privileged.

The PSW format is the same in only certain positions for .each mode. Figure 29–6, just above, illustrates the two modes, in which the bits are
numbered 0 through 63 from left to right. Some of the more relevant fields are explained next.

Bit 14: Wait state. When bit 14 is 0, the CPU is in the running state and executing instructions. When bit 14 is 1, the CPU is in wait state; which
involves waiting for an action such as an I/O operation to be completed.

Bit 15: State. For both modes, 0 = supervisor state and 1 = problem state.  When the computer is executing the supervisor program, the bit is 0 and
all instructions are valid. When in the problem state, the bit is 1 and privileged instructions cannot be executed.

Bits 16–31: Program interrupt code (BC mode). When a program interrupt occurs, the computer sets these bits according to the type. The following
list shows the interrupt codes in hex format:

0001    Operation exception

0002    Privileged operation exception

0003    Execute exception

0004    Protection exception

0005    Addressing exception

0006    Specification exception

0007    Data exception

0008    Fixed–point overflow exception

0009    Fixed–point divide exception

000A   Decimal overflow exception

000B   Decimal divide exception

000C   Exponent overflow exception

000D   Exponent underflow exception

000E    Significance exception

000F    Floating–point divide exception

0010    Segment translation exception

0011    Page translation exception

0012    Translation specification exception

0013    Special operation exception

0040    Monitor event

0080    Program event (may be combined with another code)

Bits 34–35: Condition code. BC mode only; the condition code under EC mode is in bits 18–19. Comparisons and
certain arithmetic instructions set this code.

Bits 40–63: Instruction address [Often called the PC, or Program Counter]. This area contains the address of the next instruction to
be executed. The CPU accesses the specified instruction from main storage, decodes it in the control section, and executes it in the
arithmetic/logic section. The first 2 bits of a machine instruction indicate its length. The CPU adds this length to the instruction address
in the PSW, which now indicates the address of the next instruction. For a branch instruction, the branch address may replace
the PSW instruction address.

INTERRUPTS

An interrupt occurs when the supervisor has to suspend normal processing to

perform a special task. The six main classes of interrupts are as follows:

1. Program Check Interrupt. This interrupt occurs when the computer cannot execute an operation,
such as performing arithmetic on invalid packed data.
This is the common type of interrupt when a program terminates abnormally.

2. Supervisor Call Interrupt. A problem program may issue a request for input/output or to terminate processing. A transfer from
the problem program to the supervisor requires a supervisor call (SVC) operation and causes an interrupt.

3. External Interrupt. An external device may need attention, such as the operator pressing the request key on the console
or a request for communications.

4. Machine Check Interrupt. The machine–checking circuits may detect a hardware error, such as a byte not containing an
odd number of on bits (odd parity).  [Note by ELB:  This refers to parity memory, in which an 8–bit byte is stored as 9 bits
in memory, with the extra bit (not transferred to the CPU) being the parity bit.]

5. Input/Output Interrupt. Completion of an I/O operation making a unit available or malfunction of an I/O device
(such as a disk head crash) cause this interrupt.

6. Restart Interrupt. This interrupt permits an operator or another CPU to invoke execution of a program.

The supervisor region contains an interrupt handler for each type of interrupt. On an interrupt, the system alters the PSW as
required and stores the PSW in a fixed storage location, where it is available to any program for testing.

The PSW discussed to this point is known as the current PSW. When an interrupt occurs, the computer stores the current PSW and
loads a new PSW that controls the new program, usually the supervisor. The current PSW is in the control section of the CPU,
whereas the old and new PSWs are stored in main storage, as the following indicates:

The interrupt replaces the current PSW in this way. (1) It stores the current PSW into main storage as the old PSW, and
(2) it fetches a new PSW from main storage, to become the current PSW. The old PSW now contains in its instruction address
the location following the instruction that caused the interrupt. The computer stores the Program Status Words in 12 doubleword
locations in fixed storage; 6 are for old PSWs and 6 are for new PSWs, depending on the class of interrupt.  There are eight bytes
allocated for each PSW; for this reason the following addresses appear to be decimal numbers.

Interrupt Type

Old PSW

New PSW

Restart

0008

0000

External

0024

0088

Supervisor Call

0032

0096

Program Old PSW

0040

0104

Machine Check

0048

0112

Input/Output

0056

0120

Let's trace the sequence of events following a supervisor interrupt. Assume that the supervisor has stored the address of each of
its interrupt routines as bits 40–63 of the PSW that is stored in the address associated with its interrupt type.  Loading the CPU
Program Status Word with the “New PSW” associated with an interrupt type essentially starts the interrupt handler on the next instruction.

Remember also that when an instruction executes, the computer updates the instruction address and the condition code in the
current PSW (in the CPU) as required.

1. A program requests input from disk. The GET or READ macro contains a SVC (Supervisor Call) to link to the supervisor
[ELB: a part of the Operating System] for input/output. This is a supervisor interrupt.

2. The instruction address in the current PSW contains the address in the program immediately following the SVC that caused
the interrupt. The CPU stores this current PSW in the old PSW for supervisor interrupt, location 32.

The new PSW for supervisor interrupt, location 96, contains supervisor state bit = 0 and the address of the supervisor interrupt
routine. The CPU moves this new PSW to the current PSW and is now in the supervisor state.

3. The PSW instruction address contains the address of the supervisor I/O routine, which now executes. The channel scheduler
requests the channel for disk input.

4. To return to the problem program, the supervisor loads the old PSW from location 32 back into the current PSW. The instruction
links to the PSW instruction address, which is the address in the program following the original SVC that caused the interrupt.
The system switches the PSW from supervisor state back to problem state.

[ELB Note:  This design reflects some older strategies that had yet to take full advantage of dynamic memory organizations, based on use of the stack and heap.]


In the event of a program check interrupt, the computer sets its cause on PSW bits 16-31, the program interrupt code. For example, if
the problem program attempts arithmetic on invalid data, the computer senses a data exception and stores X'0007' in PSW bits 16-31.
The computer then stores the current PSW in old PSW location 0040 and loads the new PSW from 0104 into the current PSW. This
PSW contains the address of the supervisor's program check routine, which tests the old PSW to determine what type of program
check caused the interrupt.

The supervisor displays the contents of the old PSW in hexadecimal and the cause of the program check (data exception), flushes the
interrupted program, and begins processing the next job. Suppose that the invalid operation is an MP [Multiply Packed] at location
X'6A320'. Since MP is 6 bytes long, the instruction address in the PSW and the one printed will be X'6A326'. You can tell from the
supervisor diagnostic message that the error is a data exception and that the invalid operation immediately precedes
the instruction at X'6A326'.

CHANNELS

A channel is a component that functions as a separate computer operated by channel commands to control I/O devices. It directs
data between devices and main storage and permits attaching a great variety of I/O devices. The more powerful the computer model,
the more channels it may support. The two types of channels are multiplexer and selector.

1. Multiplexer channels are designed to support simultaneous operation of more than one device by interleaving blocks of data. The two
types of multiplexer channels are byte-multiplexer and block-multiplexer. A byte-multiplexer channel typically handles low-speed devices,
such as printers and terminals.

A block-multiplexer can support higher-speed devices, and its ability to interleave blocks of data facilitates simultaneous I/O operations.

2. Selector channels, no longer common, are designed to handle high–speed devices, such as disk and tape drives. The channel can
transfer data from only one device at a time, a process known as burst mode.

Each channel has a 4–bit address coded as in the following example:

        CHANNEL       ADDRESS        TYPE

                 0                      0000              byte-multiplexer

                 1                      0001              block-multiplexer

                 2                      0010              block-multiplexer

                 3                      0011              block-multiplexer

                 4                      0100              block-multiplexer

                 5                      0101              block-multiplexer

                 6                      0110              block-multiplexer

A control unit, or controller, is required to interface with a channel. A channel is basically device–independent,
whereas a control unit is device–dependent.

Thus a block-multiplexer channel can operate many type of devices, but a disk drive control unit can operate only a disk drive.
Figure 29–7 illustrates a typical configuration of channels, control units, and devices.

Figure 29–7: Channels, Control Units, and Devices

For example, a computer uses a multiplexer channel to connect it to a printer's control unit. The control unit has a 4–bit address.
Further, each device has a 4–bit address and is known to the system by a physical address. The device address is therefore
a 12–bit code that specifies:

            DEVICE              CODE

            Channel                 0CCC

            Control unit           UUUU

            Device                   DDDD

If the printer's device number is 1110 (X'E') and it is attached to channel 0, control unit 1, then to the system its physical address is
0000 00011110, or X'01E'. Further, if two disk devices are numbered 0000 and 0001 and they are both attached to channel 1,
control unit 9, their physical addresses are X'190' and X'191', respectively.

This physical address permits the attaching of 28 , or 256 devices.

Symbolic Assignments

Although the supervisor references IJO devices by their physical numbers, your programs use symbolic names. You may assign a
symbolic name to any device temporarily or (more or less) permanently, and a device may have more than one symbolic name assigned.
The operating system uses certain names, known as system logical units, that include the following.

In addition, you may reference programmer logical units, SYS000-SYSnnn.


SYSIPT

The terminal, system reader, or disk device used as input for programs

SYSRDR

The terminal, system reader, or disk device used as input for job control for the system

SYSIN

The system name to assign both SYSIPT and SYSRDR to the same terminal, system reader, or disk device

SYSLST

The printer or disk used as the main output device for the system

SYSPCH

The device used as the main unit for output

SYSOUT

The system name to assign both SYSLST and SYSPCH to the same output device

SYSLNK

The disk area used as input for the linkage editor

SYSLOG

The console or printer used by the system to log operator messages and job control statements

SYSRES

The disk device where the operating system resides

SYSRLB

The disk device for the relocatable library

SYSSLB

The disk device for the system library

For example, you may assign the logical address SYS025 to a disk drive with physical address X'170'. The supervisor stores
the physical and logical addresses in an I/O devices control table in order to relate them. A simplified table could contain the following:

I/O Device

Physical Address

Logical Units

Reader

X‘00C’

SYSIPT, SYSRDR

Printer

X‘00E’

SYSLST

Disk Drive

X‘170’

SYSLNK, SYSRES, SYS025

Tape Drive

X‘280’

SYS031, SYS035

A reference to SYSLST is to the printer, and a reference to SYSLNK, SYSRES, or SYS025, depending on its particular use, is to disk device X'170'. You may assign a logical address permanently or temporarily and may change logical addresses from job to job. For instance, you could use an ASSGN job control command to reassign SYS035 for a program from a disk device X'170' to another disk device X'l72'.


I/O LOGIC MODULES

Consider a program that reads a tape file named TAPEFL. The program would require a DTFMT or DCB file definition macro to define
the characteristics of the file and tape device to generate a link to an I/O logic module. The assembler determines which particular logic
module, based on (1) the kind of DTF and (2) the specifications within the file definition, such as device number, an input or output file,
the number of buffers, and whether processing is in a work area (WORKA) or a buffer (IOREG). In the following example, the assembler
has generated a logic module named DFFBCWZ (the name would vary depending on specifications within the DTFMT).

When linking a program, the linkage editor searches for addresses in the external symbol dictionary that the assembler generates. For
this example, the ESD would contain entries at least for the program name and UFFBCWZ. The linker accesses the named module
cataloged on disk (provided it was ever cataloged) and includes it at the end of the assembled object program. One role of a
system programmer is to define and catalog these I/O modules.

On execution of the program, the GET macro links to the specified file definition macro, DTFMT. This macro contains the
address of the I/O logic module at the end of the object program where the linker included it. The module, combined with information
from the DTFMT, contains all the instructions necessary to notify the supervisor as to the actual type of I/O operation, device,
block size, and so forth.

The only remaining information is to determine which tape device; the supervisor derives it from the job control entry, which in
this example assigns X'281' as the physical address. The supervisor then (at last) delivers the physical request for input
via a channel command.

For example, the printer module, PRMOD, consists of three letters (IJD) and five option letters (abcde), as IJDabcde.
The options are based on the definitions in the DTFPR macro, as follows:

a           RECFORM: FlXUNB (F), VARUNB (V), UNDEF (U)

b          CILCHR: ASA (A), YES (Y), CONTROL (C)

c           PRINTOV=YES and ERROPT=YES (B), PRINTOV=YES and

            ERROPT not specified (Z), plus 14 other options

d          IOAREA2: defined (I), not defined (Z)

e           WORKA: YES (W), YES and RDONLY= YES (V), neither specified (Z)

A common printer module for IBM control character; two buffers, and a work area would be IJDFYZIW. For one buffer, the module is IJDFYZZW.

PHYSICAL IOCS

Physical I0CS (PIOCS), the basic level of I0CS, provides for channel scheduling, error recovery, and interrupt handling..
When using PIOCS, you write a channel program (the channel command word) and synchronize the program with completion of the
I/O operation. You must also provide for testing the command control block for certain errors, for checking wrong–length records,
for switching between I/O areas where two are used, and, if records are blocked, for blocking and deblocking.

PIOCS macros include CCW, CCB, EXCP, and WAIT.

Channel Command Word (CCW)

The CCW macro causes the assembler to construct an 8–byte channel command word that defines the I/O command to be executed.

Name

Operation

Operand

[LABEL]

CCW

command–code, data–address, flags, count–field

• command-code defines the operation to be performed, such as 1 = write, 2 = read,
X'09' = print and space one line.

• data-address provides the storage address of the first byte where data is to be read or written.

• flag bits determine the next action when the channel completes an operation defined in a CCW.
You can set flag bits to 1 to vary the channel's operation (explained in detail later).

• count-field provides an expression that defines the number of bytes in the data block that is to be processed.

Command Control Block (CCB)

You define a CCB macro for each I/O device that PIOCS macros reference. The CCB comprises the first 16 bytes of most
generated DTF tables. The CCB communicates information to PIOCS to cause required I/O operations and receives
status information after the operation.

Name

Operation

Operand

[LABEL]

CCB

SYSnnn, command–list–name

• blockname is the symbolic name associated with the CCB, used as an old PSW for the EXCP and WAIT macros.

• SYSnnn is the symbolic name of the 110 device associated with the CCB.

• command-list-name is the symbolic name of the first CCW used with the CCB.

Execute Channel Program (EXCP)

The EXCP macro requests physical I0CS to start an I/O operation, and PIOCS relates the block name to the CCB to determine
the device. When the channel and the device become available, the channel program is started.
Program control then returns to your program.

Name

Operation

Operand

[LABEL]

EXCP

block–name or (1)

The operand gives the symbolic name of the CCB macro to be referenced.

The WAIT Macro

The WAlT macro synchronizes program execution with completion of an I/O operation, since the program normally requires its completion
before it can continue execution. (When bit 0 of byte 2 of the CCB for the file is set to 1, the WAlT is completed and processing resumes.)
For example,
if you have issued an EXCP operation to read a data block, you now WAlT for delivery of the entire block
before you can begin processing it.

Name

Operation

Operand

[LABEL]

WAIT

block–name or (1)

CCW Flag Bits

You may set and use the flag bits in the CCW as follows:

• Bit 32 (chain data flag), set by X'80', specifies data chaining. When the CCW has processed the number of bytes defined
in its count field, the I/O operation does not terminate if this bit is set. The operation continues with the next CCW in storage.
You may use data chaining to read or write data into or out of storage areas that are not necessarily adjacent.

In the following three CCWs, the first two use X'80' in the flag bits, operand 3, to specify data chaining. An EXCP and CCB
may then reference the first CCW, and as a result, the chain of three CCWs causes the contents of an 80–byte input record to be
read into three separate areas in storage: 20 bytes in NAME, 30 bytes in ADDRESS, and 30 bytes in CITY.

DATCHAIN CCW 2,NAME,X'80',20     Read 20 bytes into NAME,
                                 and chain.

         CCW  ,ADDRESS,X'80',30  Read 30 bytes to ADDRESS,
                                 and chain.

         CCW  ,CITY,X'00',30     Read 30 bytes into CITY,
                                 and terminate.

• Bit 33 (chain command flag), set by X'40', specifies command chaining to enable the channel to execute more than one
CCW before terminating the I/O operation.
Each CCW applies to a separate I/O record.

The following set of Channel Command Words could provide for reading three input blocks, each 100 bytes long:

COMCHAIN  CCW 2,INAREA,X'40',100       Read record-l into
                                       INAREA, chain.

          CCW 2,INAREA+100,X'40',100   Read record-2 into
                                       
INAREA+l00, chain.

          CCW 2,INAREA+200,X'00',100   Read record-3 into
                                       INAREA+200, stop.


• Bit 34 (suppress length indication flag), set by X'20', is used to suppress an error indication that occurs when the number
of bytes transmitted differs from the count in the CCW.

• Bit 35 (skip flag), set by X'10', is used to suppress transmission of input data. The device actually reads the data,
but the channel does not transmit the record.

• Bit 36 (program controlled interrupt flag), set by X'08', causes an interrupt when this CCW's operation is complete.
(This is used when one supervisor SIO instruction executes more than one CCW.)

• Bit 37 (indirect data address flag), as well as other features about physical IOCS, is covered in the IBM Principles of
Operation manual and the appropriate supervisor manual for your system.

Sample Physical IOCS Program

The program in Fig. 29–8 illustrates many of the features of physical IOCS we have discussed. It performs the following operations:

• At initialization, prints three heading lines by means of command chaining (X'40').

• Reads input records one at a time containing salesman name and company.

• Prints each record.

• Terminates on reaching end–of–file.

Note that the program defines a CCB/CCW pair for each type of record, and the EXCP/WAIT operations reference the CCB name –
INDEVIC for the reader, OUTDEV1 for heading lines, and OUTDEV2 for sales detail lines. Each CCB contains the name of the
I/O device, SYSIPT or SYSLST, and the name of an associated CCW: INRECD, TITLES, and DETAIL, respectively.

Figure 29–8: Physical IOCS


KEY POINTS

• Systems generation (sysgen) involves tailoring the supplied operating system to the installation's requirements, such as the number
and type of disk drives, the number and type of terminals to be supported, the amount of process time available to users,
and the levels of security that are to prevail.

• The control program, which controls all other programs being processed, consists of initial program load (IPL), the supervisor,
and job control. Under OS, the functions are task management, data management, and job management.

• Initial program load (IPL) is a program that the operator uses daily or whenever required to load the supervisor into storage.
The system loader is responsible for loading programs into main storage for execution.

• The supervisor resides in lower storage, beginning at location X'200'. The supervisor is concerned with handling interrupts for
input/output devices, fetching required modules from the program library, and handling errors in program execution.

• Channels provide a path between main storage and the input/output devices and permit overlapping of program execution
with I/O operations. The channel scheduler handles all I/O interrupts.

• Storage protection prevents a problem program from erroneously moving data into the supervisor area and destroying it.

• An interrupt is a signal that informs the system to interrupt the program that is currently executing and to transfer control
to the appropriate supervisor routine.

• The source statement library (SSL) catalogs as a book any program, macro, or subroutine still in source code.

• The relocatable library (RL) catalogs frequently used modules that are assembled but not yet ready for execution.

• The core image library (CIL) contains phases in executable machine code, ready for execution.

• Multiprogramming is the concurrent execution of more than one program in storage. An operating system that supports
multiprogramming divides storage into various partitions. One job in each partition may be subject to execution at the
same time, although only one program is actually executing.

• The PSW is stored in the control section of the CPU to control an executing program and to indicate its status.
The two PSW modes are basic control mode (BC) and extended control (EC) mode.

• Certain instructions such as Start I/O and Load PSW are privileged to provide protection against users'
accessing the wrong partitions.

• An interrupt occurs when the supervisor has to suspend normal processing to perform a special task. The supervisor region
contains an interrupt handler for each type of interrupt.

• A channel is a component that functions as a separate computer operated by channel commands to control I/O devices.
It directs data between devices and main storage and permits the attachment of a variety of I/O devices.

The two types are multiplexer and selector.

• The operating system uses certain names, known as system logical units, such as SYSIPT, SYSLST, and SYSLOG.
Programmer logical units are referenced as SYS000-SYSnnn.

• Physical IOCS (PIOCS), the basic level of IOCS, provides for channel scheduling, error recovery, and interrupt handling.
When using PIOCS, you write a channel program (the channel command word) and synchronize the program
with completion of the I/O operation. .

• The CCW macro causes the assembler to construct an 8–byte channel command word that defines the I/O
command to be executed.