Multiple Virtual Storage (MVS) is the most commonly used operating system on the System/370, System/390 and IBM Z IBM mainframe computers. IBM developed MVS, along with OS/VS1 and SVS, as a successor to OS/360. It is unrelated to IBM's other mainframe operating system lines, e.g., VSE, VM, TPF.
Overview First released in 1974, MVS was extended by program products with new names multiple times, retaining the term MVS in the nomenclature: first to MVS/SE (MVS/System Extensions),some print media used the singular, MVS/System Extension: Computerworld, 15 Dec 1980 - Page 5; 26 June 1978 - Page 8 next to MVS/SP (MVS/System Product) Version 1, next to MVS/XA (MVS/eXtended Architecture), next to MVS/ESA (MVS/Enterprise Systems Architecture),
and then extended
to OS/390 for the System/390 systems, and finally to z/OS (when 64-bit support was added with the zSeries models). IBM added UNIX support (originally called OpenEdition MVS) in MVS/SP V4.3 and has obtained POSIX and UNIX™ certifications at several different levels from IEEE, X/Open and The Open Group. The MVS core remains fundamentally the same operating system. By design, programs written for MVS run on z/OS without modification.
At first IBM described MVS as simply a new release of OS/VS2, but it is, in fact a major rewrite. OS/VS2 release 1 is an upgrade of OS/360 MVT that retained most of the original code and, like MVT, is mainly written in assembly language. The MVS core is almost entirely written in Assembler XF, although a few modules were written in PL/S, but not the performance-sensitive ones, in particular not the Input/Output Supervisor (IOS). IBM's use of "OS/VS2" emphasized upwards compatibility: application programs that ran under MVT did not even need recompiling to run under MVS. The same Job Control Language files could be used unchanged; utilities and other non-core facilities like TSO ran unchanged. IBM and users almost unanimously called the new system MVS from the start, and IBM continued to use the term MVS in the naming of later major versions such as MVS/XA.
Evolution of MVS OS/360 MFT (Multiprogramming with a Fixed number of Tasks) provides multiprogramming: several memory partitions, each of a fixed size, are set up when the operating system is installed and when the operator redefines them. For example, there could be a small partition, two medium partitions, and a large partition. If there were two large programs ready to run, one would have to wait until the other finished and vacated the large partition. OS/360 R19 added MFT sub-tasking (multitasking), the ability for a job to dynamically create new tasks with the ATTACH macro.
OS/360 MVT (Multiprogramming with a Variable number of Tasks) was an enhancement that further refined memory use. Instead of using fixed-size memory partitions, MVT allocates memory to regions for job steps as needed, provided enough contiguous physical memory is available. This is a significant advance over MFT's memory management, but has some weaknesses: if a job allocates memory dynamically (as most sort programs and database management systems do), the programmers has to estimate the job's maximum memory requirement and pre-define it for MVT. A job step that contains a mix of small and large programs wastes memory while the small programs run. Most seriously, memory can become fragmented, i.e., the memory not used by current jobs could be divided into uselessly small chunks between the areas used by current jobs, and the only remedy was to wait until some current jobs finished before starting any new ones.
In the early 1970s IBM sought to mitigate these difficulties by introducing virtual memory (which IBM called "virtual storage"), which allowed programs to request address spaces larger than physical memory. The original implementations had a single virtual address space, shared by all jobs. OS/VS1 is OS/360 MFT within a single virtual address space; OS/VS2 SVS was OS/360 MVT within a single virtual address space. So OS/VS1 and SVS in principle had the same disadvantages as MFT and MVT, but the impacts are less severe because jobs and operators could request much larger partitions with a 2 KiB granularity (for OS/VS1) or regions with a 4 KiB granularity (for SVS), and the requests came out of a 16MiB address space even if physical storage was smaller. As in OS/360 MVT, TSO users in SVS are assigned to a TSO region during login processing and competed with other users assigned to the same region, with essentially the same swap-in and swap-out logic as TSO in MVT.
+ MVS address spaces - global view MVS (shared part of all address spaces) App 1 App 2 App 3 Shared virtual area (controlled by MVS)
+ One application's view MVS App 1 Shared virtual area
In the mid-1970s IBM introduced MVS, which not only supported virtual storage that was larger than the available real storage,Some processors could take more physical storage than the size of a single address space, but still much smaller than the aggregate size of a typical workload's virtual storage. as did SVS, but also allowed an indefinite number of applications to run in different address spaces. Two concurrent programs might try to access the same virtual memory address, but the virtual memory system redirected these requests to different areas of physical memory. Each of these address spaces consisted of three areas: an operating system (one instance shared by all jobs), an application area unique for each application, and a shared virtual area used for various purposes, including inter-job communication. IBM promised that application areas would always be at least 8MB. This made MVS the perfect solution for business problems that resulted from the need to run more applications.
MVS maximized processing potential by providing multiprogramming and multiprocessing capabilities. Like its MVT and OS/VS2 SVS predecessors, MVS supported multiprogramming; program instructions and associated data are scheduled by a control program and given processing cycles. Unlike a single-programming operating system, these systems maximize the use of the processing potential by dividing processing cycles among the instructions associated with several different concurrently running programs. This way, the control program does not have to wait for the I/O operation to complete before proceeding. By executing the instructions for multiple programs, the computer is able to switch back and forth between active and inactive programs.
Early editions of MVS (mid-1970s) are among the first of the IBM OS series to support multiprocessor configurations, though the M65MP variant of OS/360 running on 360 Models 65 and 67 had provided limited multiprocessor support. The 360 Model 67 had also hosted the multiprocessor capable TSS/360, MTS and CP-67 operating systems. Because multiprocessing systems can execute instructions simultaneously, they offer greater processing power than single-processing system. As a result, MVS was able to address the business problems brought on by the need to process large amounts of data.
Multiprocessing systems are either loosely coupled, which means that each computer has access to a common workload, or tightly coupled, which means that the computers share the same real storage and are controlled by a single copy of the operating system. MVS retained both the loosely coupled multiprocessing of Attached Support Processor (ASP)Via Job Entry Subsystem 3 (JES3) and the tightly coupled multiprocessing of OS/360 Model 65 Multiprocessing. In tightly coupled systems, two CPUs shared concurrent access to the same memory (and copy of the operating system) and peripherals, providing greater processing power and a degree of graceful degradation if one CPU failed. In loosely coupled configurations each of a group of processors (single and / or tightly coupled) had its own memory and operating system but shared peripherals and the operating system component JES3 allowed managing the whole group from one console. This provided greater resilience and let operators decide which processor should run which jobs from a central job queue. MVS JES3 gave users the opportunity to network together two or more data processing systems via shared disks and Channel-to-Channel Adapters (CTCA's). This capability eventually became available to JES2 users as Multi-Access SPOOL (MAS).
MVS originally supported 24-bit addressing (i.e., up to 16MB). As the underlying hardware progressed, it supported 31-bit (XA and ESA; up to 2048MB) and now (as z/OS) 64-bit addressing. The most significant motives for the rapid upgrade to 31-bit addressing were the growth of large transaction-processing networks, mostly controlled by CICS, which ran in a single address space—and the DB2 relational database management system needed more than 8MB of application address space to run efficiently. (Early versions were configured into two address spaces that communicated via the shared virtual area, but this imposed a significant overhead since all such communications had transmit via the operating system.)
The main user interfaces to MVS are: Job Control Language (JCL), which was originally designed for batch processing but from the 1970s onwards was also used to start and allocate resources to long-running interactive jobs such as CICS; and TSO (Time Sharing Option), the interactive time-sharing interface, which was mainly used to run development tools and a few end-user information systems. ISPF is a TSO application for users on 3270-family terminals (and later, on VM as well), which allows the user to accomplish the same tasks as TSO's command line but in a menu and form oriented manner, and with a full screen editor and file browser. TSO's basic interface is command line, although facilities, such as ISPF, were added later for form-driven interfaces.
MVS took a major step forward in fault-tolerance, built on the earlier STAE facility, that IBM called software recovery. IBM decided to do this after years of practical real-world experience with MVT in the business world. System failures were now having major impacts on customer businesses, and IBM decided to take a major design jump, to assume that despite the very best software development and testing techniques, that 'problems WILL occur.' This assumption was pivotal in adding great percentages of fault-tolerance code to the system and likely contributed to the system's success in tolerating software and hardware failures.
This design specified a hierarchy of error-handling programs, in system (kernel/'privileged') mode, called Functional Recovery Routines, and in user ('task' or 'problem program') mode, called "ESTAE" (Extended Specified Task Abnormal Exit routines) that are invoked in case the system detected an error (hardware processor or storage error, or software error). Each recovery routine made the 'mainline' function reinvokable, captured error diagnostic data sufficient to debug the causing problem, and either 'retried' (reinvoke the mainline) or 'percolated' (escalated error processing to the next recovery routine in the hierarchy).
Thus, with each error the system captured diagnostic data, and attempted to perform a repair and keep the system up. The worst thing possible was to take down a user address space (a 'job') in the case of unrepaired errors. Though it was an initial design point, it was not until the most recent MVS version (z/OS), that recovery program was not only guaranteed its own recovery routine, but each recovery routine now has its own recovery routine. This recovery structure was embedded in the basic MVS control program, and programming facilities are available and used by application program developers and 3rd party developers.