Disk Operating System/360, also DOS/360, or simply DOS, is a discontinued operating system for IBM mainframes. It was announced by IBM on the last day of 1964, and it was first delivered in June 1966. In its time, DOS/360 was the most widely used operating system in the world.
TOS/360 (Tape Operating System/360, not a DOS as such and not so called) was an IBM operating system for the System/360, used in the early days around 1965 to support the IBM 360 model 30 and similar platforms.
TOS went through 14 releases, and was discontinued when disks such as the IBM 2311 and IBM 2314 became more affordable at the time of System/360, whereas they had been an expensive luxury on the IBM 7090.
DOS/360 was the primary operating system for most small to midsize S/360 installations.
DOS/VS was released in 1972. The first DOS/VS release was numbered "Release 28" to signify an incremental upgrade from DOS/360. It added virtual memory in support of the new System/370 series hardware. It used a fixed page table which mapped a single address space of up to 16 megabytes for all partitions combined.
DOS/VS increased the number of partitions (separate simultaneous programs) from three (named Background, Foreground 1 and Foreground 2) to five (BG and F1 through F4) and allowed a system wide total of fifteen subtasks.:pp.24–28
DOS/VS was succeeded by DOS/VSE through z/VSE.
DOS/VSE was introduced in 1979 as an "extended" version of DOS/VS to support the new 4300 processors. The 4300 systems included a feature called ECPS:VSE that provided a single-level storage for both the processor and the I/O channels. DOS/VSE provided support for ECPS:VSE, but could also run on a System/370 without that feature. VSE was the last free version of DOS.
SSX/VSE ("Small System Executive") was an attempt by IBM to simplify purchase and installation of VSE by providing a pre-generated system containing the OS and the most popular products. SSX was released in 1982, and later replaced by VSE/SP.
In 1986 IBM released VSE/SP ("System Product") in conjunction with the announcement of the 9370 processors. VSE/SP replaced SSX/VSE and bundled VSE with the most popular VSE program products such as VSE/AF, ACF/VTAM, CICS, and POWER/VS. VSE/SP supported only 24-bit addresses, despite customer requests to provide an XA (31 bit) version.
VSE/ESA was a 31-bit DOS/VSE version, which was released in 1990 with support for up to 384 MB of real storage. It provided up to twelve static partitions and allowed VSE/POWER and ACF/VTAM to be run in private address spaces. It introduced a new feature called dynamic partitions which could allow up to 150 concurrent jobs, each in its own address space. Version 1 could run in either ESA or 370 mode, with the ESA mode also supporting XA hardware with limitations. Version 2 only supported ESA mode with ESA hardware.
IBM released z/VSE 3.1 in 2005. This change in naming reflected the new "System z" branding for IBM's mainframe product line, but did not represent a fundamental change in architecture from VSE/ESA 2.7 which preceded it. In particular, it did not support the new 64-bit z/Architecture, running only in 31-bit mode even on 64-bit capable machines. z/VSE 4.1 released in 2007 introduced support for 64-bit real addressing, with up to 8GB of memory. However, while parts of the supervisor run in 64-bit mode, it only provides 31-bit virtual address spaces to problem state applications. As of 2011 one estimate placed the number of sites using z/VSE at around 4000.
When developing a new hardware generation of unified System/360 (or S/360) computers, IBM had originally committed to delivering a single operating system, OS/360, also compatible with low-end machines; but hardware was already available and the OS/360 project fell further and further behind schedule, as described at length by Fred Brooks. IBM was forced to quickly develop four additional systems:
When OS/360 was finally released, a year late, it required at least 64 KB of memory. DOS was designed to use little memory, and could run on 16 kB machines, a configuration available on the low-end S/360 model 30. Unlike OS/360, DOS/360 was initially a single-job system which did not support multitasking. A version with multitasking, supporting up to three memory partitions, requiring 32 kB of memory was later released. Despite its limitations, DOS/360 became the most widely used operating system for processors with less than 256 KB of memory because: System/360 hardware sold very well; DOS/360 ran well on System/360 processors which medium-sized organizations could afford; and it was better than the "operating systems" these customers had before.
DOS/360 was the operating system which filled the time gap between the announcement of the System/360 and the availability of the intended operating system, OS/360. As a result of the delay, a number of customers implemented DOS systems and committed significant investments to run them. IBM expected that DOS/360 users would soon upgrade to OS/360, but as a result of those investments, they were reluctant to commit to such conversion. IBM then needed to continue to offer DOS/360 as an additional operating system. The Hacker's Jargon File incorrectly states that GECOS (also known as GCOS) was copied from DOS/360, which was not the case.
DOS/360 required a System/360 CPU (model 25 and above) with the standard instruction set (decimal and floating-point instruction sets optional). The minimum memory requirement was 16KB; storage protection was required only if multiprogramming was used. A 1052 Model 7[NB 2] printer-keyboard, either a selector or multiplexor channel, and at least one disk drive was required — initially a 2311 holding 7.25MB. A card reader, card punch and line printer were usually included, but magnetic tape drives could be substituted.:p.10
A typical configuration might consist of a S/360 model 30 with 32KB memory and the decimal instruction set, an IBM 2540 card reader/card punch, an IBM 1403 printer, two or three IBM 2311 disks, two IBM 2415 magnetic tape drives, and the 1052-7 console.
The following description applies to DOS/360 except as otherwise noted. Later versions offer additional functionality.
Because DOS/360 was designed to run on low-end models of System/360 memory usage was a concern. It was possible to generate a DOS supervisor, the resident portion of the operating system, as small as 5902 bytes.:p.297 Detailed charts listed memory requirements for each sysgen option, often as little as 100 bytes. A minimum system would leave just over 10KB of storage available for a single batch partition which was enough to run utilities and all compilers except COBOL, PL/I, and full FORTRAN IV. To keep memory usage as small as possible, DOS was coded entirely in assembly language.
To further reduce memory usage the supervisor employed overlays called transients that were read into one of two reserved transient areas as required. Two types of transient routines, called physical transients and logical transients handled hardware exceptions and provided program services such as OPEN/CLOSE respectively. Transient module names all began with $$A or $$B which sped up loading by storing their names first in the directory. They were often referred to as "A-Transients" or "B-transients."
Like all System/360 operating software initial releases of DOS could run only one program at a time. Later versions of "real" DOS were able to run up to three programs concurrently, in separate memory partitions, supported by the same hardware memory protection features of the more scalable OS/360 operating system. These were identified as BG (background), F1 (foreground 1) and F2 (foreground 2). Multiprogramming was an optional feature of DOS/360, selectable at system generation. :p.34 Another SYSGEN option allowed batch operation run in either FG partition. Otherwise foreground programs had to be manually started by the computer operator.
DOS-VS allowed up to seven concurrent programs, although five or six was a more common number due to the smaller scale of the hardware usually hosting DOS systems. Both DOS and DOS-VS allow the number of partitions to be set at IPL (Initial Program Load), the IBM term for Boot load.
Executable programs were stored in a Core Image Library. While running, DOS could not reclaim space as programs were deleted or replaced with newer versions. When the Core Image Library became full, it had to be compressed by one of the utility programs, and this could halt development work for as much as half a day. Many shops simply froze changes for a day, compressed the CIL "off-line", and IPLed with the new Core Image Library at the beginning of a business day. A relocatable library for linkable object programs and a source statement library for assembler macros and include text were also supported. Installations could define additional private relocatable and source statement libraries on other disk volumes.
DOS/360 had a good set of utility programs, an Assembler, and compilers for FORTRAN, COBOL and eventually PL/I. And it supported a useful range of file organizations with access methods to help in using them:
Sequential and ISAM files could store either fixed-length or variable-length records, and all types could occupy more than one disk volume.
DOS/360 also offered BTAM, a data communications facility which was primitive and hard to use by later standards. However, BTAM could communicate with almost any type of terminal, which was a big advantage at a time when there was little standardization of communications protocols. The simplicity of its API also allowed the relatively easy interface of external communications processors, which facilitated DOS/360 machines becoming nodes in the multi-tier networks of large organizations.
All DOS job control statements began with "//" in card columns one and two except end-of-job which was "/&␢", end-of-data, "/*␢", and comments , "*␢". (In the description that follows the character "␢" represents a single blank.)
JOBstatement indicates "the beginning of control information for a job." The format is
// JOB <jobname> <comments>. <jobname> must be one to eight alphanumeric characters to identify the job. <comments> are ignored.
EXECstatement identifies a program to be executed as a job step. "All control statements necessary for execution must be processed" before the
EXECstatement is read. The format is
// EXEC <program>
PAUSEstatement "can be used to allow for operator action between job steps." The format is
// PAUSE <comment>. The comment is used to provide a message to the operator.
commentsstatement may be used to display a message to the operator. The format is
/*. Any data on the statement following the blank is ignored.
/&. Any data on the statement following the blank is ignored.
OPTIONstatement specifies values of system options that apply to this job. The format is
// OPTION <option1>[,<option2>...].
ASSGNstatement "is used to assign a logical I/O unit to a physical device." The format is
// ASSGN SYSxxx,<device>[,<tape option>]. SYSxxx indicates a logical unit such as SYS001 or SYSIPT. <device> is either "X'cuu'" to indicate a physical device (channel and unit), "IGN" for ignore, or "UA" for unassigned. <tape option> specifies either tape mode settings such as density, parity, etc., or "ALT" to indicate an alternate device.
RESETstatement resets specified I/O unit assignments to their permanent values. The format is
// RESET <option>. <option> may be "SYS" to reset all system logical unit assignments, "PROG" to reset all programmer assignments, "ALL" to reset all assignments, or "SYSxxx" to reset the assignment for the logical unit "SYSxxx", for example SYS002.
LISTIOstatement instructs the system to print a listing of all specified I/O assignments currently in effect. The format is
// LISTIO <option>. <option> is "SYS" to list all system assignments, "PROG", "F1", or "F2" to list all assignments for the background or specified foreground partition, "ALL", "SYSxxx", "X'cuu'", "UNITS" to list all assigned units, 'UA" to list all unassigned units, or "DOWN" to list all units marked as inoperative.
MTCstatement issues command to a magnetic tape unit. The format is
// MTC <opcode>,SYSxxx[,<nn>]. <opcode> is a function such as "FSF" to forward space one file or "REW" to rewind the tape. <nn> is a number that can specify the number of times the operation is to be performed, such as forward space two files.
VOLstatement provides disk or tape volume label information for standard label checking. The format is
// VOL SYSxxx,<volume>.
TPLABstatement for tape label information and the
XTENTstatements for disk label and extent information. At least as early as 1968 the
TPLABstatement had been replaced by
DLBL. These statements used numerous positional parameters and had fairly high information densities.
DOS JCL was designed for parsing speed and simplicity; the resulting positional syntax was significantly more cryptic than OS/360 keyword-driven job control.
Early DOS included no spooling sub-system to improve the efficiency of punched card and line printer I/O. By the late 1960s both IBM and aftermarket vendors began filling this void. IBM's spooler was an option called POWER, and Software Design, Inc., an independent software company, sold a spooler called GRASP.
DOS/360 had no relocating loader, so programmers had to link edit a separate executable version of each program for each partition, or address space, in which the program was likely to be run. Alternatively assembler-language programs could be written as self-relocating, but that imposed a size penalty, albeit a small one. Large DOS shops with multiple machines and multiple partition layouts often wrote their own relocating loader to circumvent this issue.
The DOS/360 application programming interface was incompatible with OS/360. High level language programs written for DOS needed to be compiled and linked before they could be used with OS/360. Minor differences between compilers of DOS as opposed to OS sometimes required modifications to programs. The port in the other direction however was more challenging. Since OS/360 had significantly more features supported in its API, any use of those features would have to be removed from programs being ported to DOS. This was less of a problem for programmers working in high level languages such as COBOL. Assembler programs, on the other hand tended to utilize those very features more often and usually needed greater modification to run on DOS.
Don't forget TOS, the bastard cousin of DOS. Either could be generated from the same set of distribution libraries...