Introduction to MVS 2 - The Console
===================================

Like all the other OSes you're probably familiar with, MVS also has a
'console'. Unlike those other OSes, a console is *required* in MVS,
and there may be more than one.

Historically, the console(s) were 3270 terminals connected to the
physical machine. Today, they're virtual consoles connected via the
HMC (Hardware Management Console - a LAN-connected x86 machine running
a custom linux with a number of mainframe management software
applications installed). Shoutout to any AIX/iOS admins reading, who
also probably have HMCs.

Unix is generally pretty happy running without a console, as it's used
mainly for informational read-only messages and lots of places I've
worked at redirected console output elsewhere (eg. to a file). If MVS
cannot find a console, a couple of things might happen, depending on
what you're doing at the time:

- IPL (Initial Program Load ie. boot) will fail very early on

or

- The system will eventually grind to a halt (the console output will
 be buffered while no display device is available)

IPL Time
--------

In common with other systems, the console is used to display boot-time
information. Below is a small and probably mostly-incomprehensible
extract from an OS/390 system:

IEF403I IEESYSAS - STARTED - TIME=23.29.16
IRR813I NO PROFILE WAS FOUND IN THE STARTED CLASS FOR 411
       CATALOG WITH JOBNAME CATALOG. RACF WILL USE ICHRIN03.
IEF403I IEESYSAS - STARTED - TIME=23.29.16
IWM041I WORKLOAD MANAGEMENT ADDRESS SPACE MODIFY COMMAND AVAILABLE
IEF196I IEF237I 0A80 ALLOCATED TO SYS00001
IEF196I IEF237I 0A80 ALLOCATED TO SYS00002
IEF196I IEF237I 0A80 ALLOCATED TO IEFPARM

All the messages are prefixed with a message ID. More details on them
can be found in the numerous 'Messages Guide' manuals. Taking an
example above, 'IRR813I' (and copy-pasting from the relevant manual):

"IRR813I NO PROFILE WAS FOUND IN THE STARTED CLASS FOR member-name
[WITH JOBNAME jobname]. RACF WILL USE ICHRIN03.

Explanation

An MVS START command was processed and the STARTED class is
active. One of the following problems occurred:

o The STARTED class is SETROPTS RACLISTed, but no profile was found to
assign security information for the procedure or job being started.

o A profile to assign security information for the procedure or job
being started is defined, but the STARTED class for SETROPTS RACLISTed
is not, or for SETROPTS RACLIST REFRESHed is not on the system where
the START command was issued.

System action

RACF uses the information in the started procedures table (ICHRIN03)
to assign security information for this started procedure or job.

Operator response

Notify the systems programmer or security administrator. Tell them the
member name and job name (if any) contained in the message text.

System programmer response

Do one of the following tasks:

o The security administrator responsible for profiles in the STARTED
class did not define a profile to be used when starting the indicated
procedure or job. Inform the administrator that this message occurred
so a profile can be defined, if one is wanted.

o Profiles exist or are defined in the STARTED class for the indicated
procedure or job, but the security administrator has not SETROPTS
RACLISTed or SETROPTS RACLIST REFRESHed the STARTED class. Inform the
administrator that this message occurred so the STARTED class can be
SETROPTS RACLISTed or SETROPTS RACLIST REFRESHed."

Pretty thorough, right? I love the MVS docs.

Operator Requests
-----------------

Originally, mainframe systems required a number of 'operations' staff
to keep the thing running - loading and unloading tapes and disk
packs, tending to printers and print jobs, and so on. Ops were
requested to perform various jobs via the system console - the system
might ask for a particular tape volume to be mounted in a particular
drive, for instance. Once the manual labour had been completed, the
operator would need to reply to the request via the console so that
the system could resume the job that was requesting the resource.

This sort of request/reply pattern is still used in MVS, but
day-to-day is generally handled by automation applications. There are
still some difficult or undesirable-to-automate conditions of course,
and most installations will still have a (reduced) number of operators.

The operator requests look something like this:

*06 ICK003D REPLY U TO ALTER VOLUME A8F CONTENTS, ELSE T

06 is the operator request ID

ICK003D is the message ID

The rest of the line is the message text. In this case, a request to
confirm alteration of the disk volume at address A8F. To respond to
this, an operator would enter at the console:

R 6,U

to confirm ('Reply U to alter...'), and the operation would proceed. '6'
is the request ID ('06' is also acceptable input), and the response is
'U'. As you might guess, a response of:

R 6,T

in this particular example would cancel the request (and the job which
is the source of the request gets to deal with that however it sees fit).

Other Facilities
----------------

The console also provides an interface to query and modify the state
of the system. There are a whole bunch of commands available, and
interested/insomniac readers are directed to the 'MVS System Commands'
reference at [1]. For the purposes of demontration however, I'll show
you the 'DISPLAY' and 'VARY' commands in action.

The DISPLAY command will unsurprisingly let you see the status of
various aspects of the system. Here's an example of querying the
devices present at a particular set of hardware addresses:

00- 11.29.25           D U,,,0130,8
   11.29.25           IEE457I 11.29.25 UNIT STATUS 532
   UNIT TYPE STATUS        VOLSER     VOLSTATE
   0130 3380 O             WRK000      PUB/RSDNT
   0131 3380 A             WRK001      PUB/RSDNT
   0132 3380 A             WRK002      PUB/RSDNT
   0133 3380 A             WRK003      PUB/RSDNT
   0134 3380 A             WRK004      PUB/RSDNT
   0135 3380 F-NRD                        /RSDNT
   0136 3380 F-NRD                        /RSDNT
   0137 3380 F-NRD                        /RSDNT

The VARY command sets a device (or range of devices) online or offline:

 - 11.32.56           V 0133,OFFLINE
   11.32.56           IEF524I 0133, VOLUME WRK003 PENDING OFFLINE
00- 11.33.05           D U,,,0130,8
   11.33.05           IEE457I 11.33.05 UNIT STATUS 545
   UNIT TYPE STATUS        VOLSER     VOLSTATE
   0130 3380 O             WRK000      PUB/RSDNT
   0131 3380 A             WRK001      PUB/RSDNT
   0132 3380 A             WRK002      PUB/RSDNT
   0133 3380 A-PND         WRK003      PUB/RSDNT
   0134 3380 A             WRK004      PUB/RSDNT
   0135 3380 F-NRD                        /RSDNT
   0136 3380 F-NRD                        /RSDNT
   0137 3380 F-NRD                        /RSDNT


00- 11.36.35           V 0133,ONLINE
   11.36.35           IEE302I 0133     ONLINE
   11.36.35           IOS452I 0133,01, OPERATIONAL PATH ADDED TO PATH GROUP


There's loads more to dig into here, but I think that's quite enough
about the console for the time being eh?


[1] https://www-01.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R3sa380666/$file/ieag100_v2r3.pdf