Michigan Terminal System
The Michigan Terminal System (MTS) is a pioneering time-sharing operating system developed at the University of Michigan for IBM System/360 and System/370 mainframe computers, providing multi-user interactive access and batch processing from its initial release in 1967 until the late 1990s.[1] Designed to support a growing academic community, MTS enabled up to 100 simultaneous users by the early 1970s, integrating seamlessly into university workflows much like a telephone system and fostering a shared computing environment through disk files and magnetic tapes.[1] Its development began in 1966 on an IBM 360/50 prototype, becoming operational in January 1967 on the IBM 360/67 hardware, which facilitated time-sharing for an initial group of about five terminal users and one batch stream.[2] A key innovation in MTS was the introduction of virtual memory in November 1967, implemented via paging and high-speed drum storage, which dramatically increased system capacity and allowed efficient resource sharing among users.[2] The system evolved to support multiprocessing starting in August 1968 with a dual-processor IBM 360/67 configuration, and it transitioned to more powerful hardware like the IBM 370/168 in January 1975, alongside Amdahl mainframes such as the 470V series.[2] MTS featured a modular architecture with robust file management, including public and private files, access controls via the PERMIT command, and defensive updating mechanisms to prevent data loss during crashes; it also offered a command-driven interface, an integrated file editor, and support for programming languages like ALGOL, APL, and SNOBOL.[3][2] By the 1980s, enhancements included network server capabilities for services like FTP and time/date queries, full-screen terminal support, and integration with university networks such as UMnet and Michnet.[2] MTS's longevity—spanning nearly three decades—and its role in academic computing had a profound impact, training generations of users including notable figures like Bill Joy, and influencing the design of subsequent operating systems through its emphasis on accessibility, reliability, and multi-user efficiency.[1] Deployed at universities across the United States, United Kingdom, and Canada, it ran on emulators like Hercules into the modern era, with its source code and documentation now openly available under a Creative Commons license for historical study.[4] The system's documentation, compiled in volumes like MTS Volume 1 published in November 1991, detailed its internal structure as a multiprogramming, multiprocessing supervisor with reentrant programs, underscoring its foundational contributions to time-sharing technology.[2][5]Introduction
Overview
The Michigan Terminal System (MTS) is an interactive, multi-user time-sharing operating system developed for IBM mainframe computers at the University of Michigan.[6][7] Its core purpose is to enable simultaneous access for hundreds of users via remote terminals, facilitating academic and research computing tasks such as program execution, file management, and batch processing in a shared environment.[2] MTS supported substantial scale, with individual installations handling over 250 concurrent terminal users on typical days during the late 1970s, alongside thousands of total accounts and jobs processed monthly across university sites.[8] By the late 1980s, peak capacity at the primary site exceeded 600 simultaneous interactive sessions.[7] First becoming operational in 1967, the system remained in primary use through the late 1990s at multiple academic institutions.[7] The system was built primarily in assembly language, incorporating components in high-level languages like FORTRAN and PL/I for user programs, and operated on modified IBM System/360 and System/370 hardware with virtual memory support.[9][2]Historical Significance
The Michigan Terminal System (MTS) emerged as a pioneer in interactive computing during the mid-1960s, well before the advent of widespread personal computers, by enabling remote access to mainframe resources via terminals for students, faculty, and researchers. Developed at the University of Michigan starting in 1967 on the IBM System/360 Model 67, MTS shifted computing from batch processing to real-time, multi-user interaction, allowing thousands of users to share a single machine efficiently.[10][11] This capability democratized access to computational power, supporting diverse tasks from simple student programs to complex simulations requiring extensive resources.[12] MTS played a key role in advancing time-sharing paradigms, demonstrating scalable multi-user support that handled up to 13,000 users and 86,000 jobs per month at its primary site.[12] Unlike batch-oriented systems such as OS/360, which prioritized sequential job processing, MTS emphasized immediate responsiveness and virtual memory segmentation to facilitate concurrent operations.[13] It complemented IBM's TSS/360 by providing a more reliable alternative for academic environments, where TSS/360 struggled with performance and delays.[13] In academic settings, MTS had profound impact, facilitating research projects, theses, and publications across universities by offering robust tools for computational experimentation and data analysis.[14] Adopted by the MTS Consortium—comprising eight universities (University of Michigan, University of Alberta, University of British Columbia, Queen's University, University of Newcastle upon Tyne, University of Victoria, Wayne State University, and University of Western Ontario) in the United States, Canada, and the United Kingdom—and additional sites including the University of Maryland and Ford Motor Company, it supported installations worldwide, with IBM receiving orders for over 40 compatible systems shortly after its debut.[14][11] The long-term legacy of MTS underscores the end of an era in mainframe-based time-sharing, with the University of Michigan retiring its system in 1996 and the final major installation at Rensselaer Polytechnic Institute shutting down in June 1999.[14][13] This closure marked the transition to distributed and client-server computing models, yet MTS's innovations in interactive access and resource sharing continued to inform operating system design principles.[11]Development History
Origins
The Michigan Terminal System (MTS) originated in 1964 at the University of Michigan's Computing Center, where the need for interactive, time-sharing computing emerged to overcome the limitations of batch processing on early mainframes. This drive stemmed from the desire to enable concurrent access for multiple users in educational and research environments, inspired by pioneering efforts such as MIT's Project MAC and the Dartmouth Time-Sharing System, which demonstrated the feasibility of multi-user systems. This effort was funded by the ARPA-sponsored Project on Concepts of Computer Composition (ConComp).[2][7] Key figures in the project's inception included Mike Alexander and Don Boettner, who served as principal architects, along with Bernie Galler, Frank Westervelt, and others at the Computing Center, who recognized the potential of emerging hardware for widespread interactive use. The initial goals focused on developing a robust time-sharing system capable of supporting over 300 terminals connected to the new IBM System/360 Model 67, thereby facilitating real-time access for students, faculty, and researchers across diverse disciplines.[15][7][2] Early planning encountered significant challenges in adapting IBM's OS/360 for time-sharing, as it proved inadequate due to its complexity, lack of native terminal support, and incompatibility with the interactive demands of the Model 67's virtual memory architecture. Consequently, the team decided to construct MTS from scratch, bypassing modifications to the existing OS to achieve greater flexibility and performance tailored to time-sharing needs.[2][16][7] Prototype development commenced in 1966 on an IBM System/360 Model 50, initially leveraging elements from MIT's systems to build core components like the UMMPS executive, marking the transition from conceptual planning to practical implementation.[2][7]MTS Consortium
The MTS Consortium was formed in 1967 as a non-profit collaboration among universities to share the costs of developing and maintaining the Michigan Terminal System (MTS), enabling broader adoption beyond the University of Michigan.[17] The University of Michigan led the effort, with early participating institutions including the University of British Columbia (joining in 1968), the University of Newcastle upon Tyne (1969), the University of Alberta (1970), and Wayne State University (1971).[18] Over time, the consortium expanded to a peak of 13 sites across the United States, Canada, and the United Kingdom, fostering a network of shared expertise in time-sharing computing.[17] Governance operated through annual workshops and meetings, starting around 1970, where administrators and programmers from member sites exchanged information, coordinated joint bug fixes, and planned enhancements to MTS features.[14] The shared funding model relied on contributions from participants, including fees for distributing magnetic tapes containing MTS software and documentation, which supported ongoing maintenance and updates.[17] The consortium's structure provided key benefits by allowing institutions to implement MTS without bearing full development expenses, including support for compatible hardware from vendors like Amdahl, and promoting standardization of the system across varied IBM System/360 and System/370 configurations.[18] This collaboration extended MTS's reach, enabling efficient resource use in academic computing environments. Among its primary activities were coordinated software releases and collective efforts to produce comprehensive documentation, with the first formal MTS workshop held in 1974 at the University of British Columbia to align on system improvements.[18] These joint initiatives ensured MTS remained robust and adaptable, supporting time-sharing operations at multiple sites for decades.[14]Key Milestones
The Michigan Terminal System (MTS) achieved its first production release in May 1967 on the IBM System/360 Model 67 at the University of Michigan, marking the system's initial deployment as a time-sharing operating system capable of supporting multiple conversational users and batch jobs simultaneously.[18] Initially limited to 3-4 interactive users, the system was enhanced later that year with relocation hardware and a paging drum, significantly increasing its capacity to handle a broader range of workloads on the virtual memory-enabled hardware.[16] In the early 1970s, MTS expanded to support the IBM System/370 architecture following the University of Michigan's acquisition of a Model 158 in 1972, enabling compatibility with the newer mainframe series and its advanced virtual storage features.[18] Ports to compatible clones, including the Amdahl 470V/6 installed in 1975, further broadened hardware support while maintaining performance advantages over IBM equivalents.[19] By 1978, enhancements aligned with System/370's virtual storage capabilities allowed MTS to manage larger address spaces and improved memory efficiency, as documented in system internals from that period.[20] A notable event was the 1969 MTS Summer Conference, where developers presented on the system's architecture and shared experiences among early adopters.[21] During the 1980s, MTS reached its peak with widespread adoption across university sites, including integration with BITNET for inter-site networking and resource sharing starting in the early part of the decade.[20] By the mid-1980s, the system operated at multiple installations, with the University of Michigan running three concurrent MTS instances and other consortium members like NUMAC supporting dual systems, facilitating collaborative computing among over a dozen institutions.[18] In 1985, MTS enabled hybrid configurations integrating with IBM's Conversational Monitor System (CMS) for enhanced user environments at select sites.[13] The decline of MTS began in the 1990s amid the rise of UNIX-based systems and distributed minicomputers, leading to phased retirements across installations. The University of Michigan ceased MTS operations on May 30, 1997, after three decades of service.[17] The final active site, Rensselaer Polytechnic Institute, shut down its MTS system in 1999, marking the end of the operating system's operational history.[13]Hardware Support
Compatible Platforms
The Michigan Terminal System (MTS) was originally designed for the IBM System/360 Model 67 mainframe, which debuted in 1967 and provided the foundational hardware platform for its time-sharing capabilities. This model supported virtual memory through dynamic address translation hardware, enabling MTS to manage multiple users efficiently on a single processor configuration.[9] MTS was subsequently adapted for the IBM System/370 series, with support for Models 158 and 168, announced in 1972 to leverage improved performance and expanded addressing. These models allowed MTS installations to scale for larger user bases, with the System/370 architecture providing compatibility for 24- and 32-bit addressing modes essential to the system's operation. Later extensions included the System/370 Model 168 in January 1975, further enhancing reliability for academic and research environments, along with support for the IBM 3033 in the 1980s, 3090-400 (October 1986), 3090-600E (July 1988), and ES/9000-720 (June 1991).[9][22][2] Third-party compatible systems expanded MTS's reach in the late 1970s and 1980s, including the Amdahl V/370 series starting with the 470V/6 model in July 1975, followed by the 470V/7 in 1979 and 470V/8 in 1980. Support for Hitachi HITAC and Fujitsu mainframes emerged in the 1980s, with the Hitachi H-65 (equivalent to IBM 3033) installed in 1982 and the Fujitsu M-200 (equivalent to IBM 3081) in 1983, requiring specific microcode modifications to ensure compatibility with MTS's virtual memory and I/O requirements. These adaptations allowed non-IBM hardware to run MTS without major software changes, though detailed hardware tweaks are covered in related documentation.[9] MTS installations required channel-attached disk storage such as IBM 3330 units for file systems and paging. Terminal access relied on multiplexers like the IBM 2701 or 3705 to connect multiple 3270-compatible devices, supporting up to hundreds of concurrent users. The system did not natively support IBM System/390 or later architectures without emulation, remaining focused on 24/32-bit addressing environments.[22][23] Primarily at universities and research institutions, MTS sites included the original consortium members and additional academic installations worldwide. The University of Michigan's primary installation featured dual CPUs for redundancy, ensuring continuous operation during maintenance or failures on its System/360 Model 67 and subsequent upgrades.[24]Hardware Modifications
The Michigan Terminal System (MTS) required specific hardware adaptations to the IBM System/360 Model 67 to enable efficient time-sharing, particularly through the integration of dynamic relocation hardware that supported virtual addressing without imposing significant software overhead. This hardware facilitated address translation for problem programs, allowing dynamic loading into virtual memory and resolution of external symbols, which contributed to a tenfold increase in the number of tasks serviced compared to earlier configurations. A high-speed drum was incorporated for paging operations, enhancing the system's ability to manage multiple users concurrently.[2] To handle high terminal throughput essential for time-sharing, MTS installations incorporated channel extensions and custom I/O interfaces, including support for polled multiplexors that connected numerous terminals to the system. These modifications centralized I/O management through device support routines, enabling efficient handling of high-speed devices and supporting up to hundreds of simultaneous users across various terminal types.[2] On the IBM System/370 series, MTS benefited from memory upgrades that extended virtual memory capacity to 64 MB via paging mechanisms, dividing the address space into 64 segments of 1,048,576 bytes each (256 pages of 4,096 bytes). Additional hardware, such as extended control storage, was added to accommodate larger workloads and more users, building on the base platforms like the 370 series.[2] Third-party hardware modifications, particularly from Amdahl, were adapted for MTS at sites like the University of Michigan, including the Amdahl 470V/6 (installed July 1975), 470V/7 (March 1979), 470V/8 (September 1980), and 5860 (November 1982). These faster processors required compatibility adjustments to MTS, including tweaks to the kernel for timing and enhanced memory management to leverage the increased cycle speeds.[2] For reliability at large installations, MTS supported dual-processor configurations, such as the upgrade to a dual IBM 360/67 in August 1968, which enabled multiprocessing and failover capabilities. This setup allowed switching between processors and resources like core boxes and channels to maintain operations during failures, ensuring high availability for time-sharing environments.[2][15]System Architecture
Core Design Principles
The Michigan Terminal System (MTS) was designed around a modular resident monitor to enhance maintainability and flexibility in a time-sharing environment. The core is implemented by the UMMPS supervisor, a multiprogramming executive managing resident reentrant programs for system services. This monitor is structured into key components, including the swapper for managing program movement between main memory and secondary storage, the scheduler for allocating CPU time among active processes, and device handlers known as Device Support Routines (DSRs) for each supported hardware type. These elements interact through a centralized interface for input/output operations, allowing independent development and updates without disrupting the overall system. This modularity facilitated the system's evolution over decades while supporting diverse hardware configurations on IBM System/360 and System/370 computers.[20][12] Central to MTS's operation is its time-sharing model, which employs priority-based scheduling with FIFO dispatching within priority classes (1-10 levels) to ensure responsive access for interactive users while handling batch loads. Jobs are dispatched according to priority, with higher-priority tasks receiving preferential treatment to minimize response times for interactive sessions. This approach supports concurrent terminal, batch, and server workloads using a unified command language, enabling seamless integration of interactive and non-interactive computing. The design prioritized low-latency user interaction on limited hardware resources, distinguishing MTS from purely batch-oriented systems of the era.[20][12] Backward compatibility with OS/360 was a foundational principle, allowing MTS to execute unmodified batch jobs and applications from IBM's earlier operating system alongside time-shared sessions. Programs written in languages like Fortran or PL/I could typically run without changes, leveraging OS/360-like services for file handling and job control. This compatibility eased migration for institutions adopting time-sharing, preserving investments in legacy software while introducing interactive capabilities.[12] MTS's security model emphasizes user isolation through virtual address spaces, where each task operates in a protected environment inaccessible to others. Private segments for user data are safeguarded by dynamic address translation, preventing unauthorized access, while shared system segments rely on hardware protection mechanisms. Absent a superuser role akin to those in later operating systems, privileged operations occur in a dedicated system mode accessible only to trusted routines, reducing the risk of escalation vulnerabilities. This design provided robust separation for multi-user environments without centralized administrative overrides.[20][25] Scalability was achieved through dynamic resource allocation, enabling MTS to support from dozens to over 600 simultaneous terminal users on appropriately configured hardware, with total registered accounts reaching thousands at major installations like the University of Michigan. The modular architecture and efficient scheduling allowed the system to handle up to 86,000 jobs per month by adapting to varying loads without requiring hardware overprovisioning. This flexibility made MTS suitable for academic and research settings with fluctuating demand.[20][12]Memory Management
The Michigan Terminal System (MTS) utilized virtual memory to support multi-user time-sharing on IBM System/360 and System/370 hardware, allocating up to a 16 MB address space per user on 24-bit hardware (expandable to larger effective spaces on later configurations) through demand paging with a fixed page size of 4 KB. MTS employs segmented virtual memory, dividing the address space into 64 segments of 1 MB each (256 pages of 4 KB), with paging for demand loading and protection. This approach allowed programs to exceed the physical memory limits of the host machine by transferring pages between main memory and secondary storage as needed, enabling efficient resource sharing among concurrent users. The system automatically manages page faults and transfers without user intervention.[2] Swapping complemented paging by handling entire user contexts—comprising the active program's core image and associated data—when memory demand exceeded available real pages. Swapping moves entire user contexts to secondary storage when memory is constrained, complementing paging for efficient multi-user support, with system-managed page transfers.[2] Virtual memory was introduced in November 1967 on the IBM 360/67, with further enhancements for System/370 hardware in subsequent releases around 1973, marking a significant evolution from earlier swapping-only mechanisms and leveraging System/370 hardware modifications for dynamic address relocation. Performance metrics from this era highlighted the system's scalability, with paging activity enabling a tenfold increase in concurrent tasks compared to non-virtualized predecessors, while maintaining low overhead through optimized page-in rates tracked via system monitors.[2]Features
User Interaction
The Michigan Terminal System (MTS) provided users with a text-based, command-line interface characterized by a distinctive dollar sign () [prompt](/page/Prompt), which facilitated line-oriented input for executing system commands. Users entered commands such as run to initiate program execution (e.g., run *TAPESUBMIT), edit to invoke the file editor, and $systemstatus to query system resources, with each command line limited to 255 characters and continuable using a hyphen (-) or a custom continuation character set via the SET CONTCHAR command.[2] This processor acted as the primary interface between the user and the operating system, processing inputs asynchronously and supporting batch-like operations within interactive sessions.[2] MTS supported a range of terminal types through dedicated facilities for both asynchronous and synchronous communication modes. Asynchronous terminals, such as the IBM 2741, handled character-by-character transmission, while synchronous terminals like the IBM 3270 enabled block-mode operations for more efficient data exchange.[2] Editing capabilities were enhanced on display terminals via escape sequences, allowing visual-mode or full-screen interactions, such as those in the FILEMENU editor using program function (PF) keys for navigation and modification.[2] The system lacked any graphical user interface, relying entirely on text-based input and output, often with prefix characters like '#' or ':' to denote system responses.[2] User sessions in MTS began with a login procedure at the "Which Host?" prompt, where individuals entered SIGNON followed by their user ID and optional password (e.g., SIGNON userid password).[2] Upon authentication, users could specify a job class to determine execution priority, with predefined options like NORMAL or LOW, or numeric values ranging from 1 to 10 for computation and 0 to 15 for printing; these could also be adjusted mid-session using SET CLASS.[2] Sessions concluded with the $SIGNOFF command, which terminated the connection and displayed a summary of resource usage and costs incurred.[2] Error handling in MTS emphasized interactive diagnostics to assist users in resolving issues promptly. The $STATUS command, for instance, retrieved detailed information on job queues, system load, and pending operations, enabling users to monitor and troubleshoot their activities.[2] When errors occurred, such as exceeding global resource limits (e.g., "GLOBAL item LIMIT EXCEEDED"), the system often prompted interactively for corrections, like requesting a new file or device name, thereby minimizing disruptions in the user workflow.[2] To enhance usability, MTS incorporated scripting capabilities through macros and command files, allowing users to automate repetitive tasks without a graphical environment. Macros were defined using a structured syntax, such as >MACRO name followed by commands and concluded with >ENDMACRO, and could be enabled system-wide via SET MACROS=ON.[2] Command files, often called signature files (sigfiles), were invoked with SET SIGFILE=filename or executed via $SOURCE, supporting input/output redirection modifiers like SOURCE and SINK for streamlined operations.[2] These features promoted efficient, customizable interactions tailored to both novice and advanced users.[2]File and Device Management
The file system in the Michigan Terminal System (MTS) organizes data using a flat structure based on userID:filename conventions, without traditional hierarchical directories. Private files are associated with a specific user identifier followed by a filename up to 12 characters long (e.g., 1ABC:MYLOG), while public files use an asterisk prefix (e.g., *NEWS) and temporary files a hyphen prefix. Files are stored in 4096-byte pages on direct-access disk volumes, supporting types such as LINE files for fixed-length records with line numbers and SEQ files for variable-length sequential records without line numbers. Maximum file size is 32,767 pages, equivalent to approximately 128 MB.[9] Access to files is controlled through the PERMIT command, which assigns permissions like READ, WRITE-APPEND, TRUNCATE, or UNLIMITED to specific users, projects, or program keys (e.g., PERMIT MYFILE READ OTHERS). By default, users have full access to their own files but none to others, with sharing enabled explicitly via PERMIT and checked using FILESTATUS. Locking mechanisms via LOCK and UNLOCK commands prevent concurrent modifications, supporting options like WAIT or NOWAIT for contention resolution. Disk space quotas are enforced per user through accounting records, limiting total storage allocation and monitored during operations like file creation or renaming; defaults vary by installation but are adjustable at sign-on.[9] Device management in MTS utilizes centralized Device Support Routines (DSRs) for unified I/O operations across peripherals, abstracting hardware differences through pseudodevices and modifiers like SEQUENTIAL or EBCDIC encoding. Supported disks include IBM 2311 and 3330 models, providing on-line storage with automatic expansion (default 10% overhead) and buffer management for efficient access. Tapes, primarily 9-track at densities of 800, 1600, or 6250 BPI, are user-mounted via MOUNT and controlled with commands like REWIND, FORWARD SPACE RECORD, or POSITION TO END-OF-TAPE. Printers are handled via spooled output to the *PRINT pseudodevice, with the COPY command directing files (e.g., COPY FILENAME TO *PRINT), supporting carriage control, formatting options like LANDSCAPE or PORTRAIT, and routing to specific stations.[9][23] Backup and restore processes emphasize incremental and full dumps to tape, with no native journaling filesystem; recovery relies on periodic snapshots generated by system utilities. Daily backups of changed files occur automatically using *SAV on 9-track tapes (retained for about six weeks), while weekly full saves via *SVW cover all files over multiple tape sets. Users invoke restores with *RESTORE, specifying files from backup volumes, or manually copy to tapes for personal archiving using CONTROL commands. Defensive programming practices, such as explicit buffer flushing with CLOSEFIL, minimize data loss between snapshots.[23][9] Special devices facilitate batch and peripheral I/O, including IBM 2501 card readers for input via the *SOURCE pseudodevice in sequential or EBCDIC modes, enabling job submission from punched cards. Line printers, such as the IBM 1403 (up to 1100 lines per minute at 132 characters wide and 6 lines per inch), output to *SINK for conversational mode or *PRINT for batch, with 66 lines per page on 11-inch paper and support for character sets like TN or PN via CONTROL options.[23][9]Resource Allocation
The Michigan Terminal System (MTS) implemented resource allocation through a combination of priority-based scheduling and enforced limits to balance interactive and batch workloads across multiple users. Central to this was a priority-based round-robin CPU scheduling algorithm featuring 16 priority classes, which ensured fair distribution of processing time while favoring responsive interactive sessions.[2] Interactive jobs received higher priority execution, typically in classes 1 through 10, determined by estimated CPU time requirements, allowing them to run immediately under low system load conditions. Batch jobs, in contrast, operated at lower priorities and were deferred until interactive demand subsided, preventing contention for resources during peak user activity. Print priorities ranged from 0 to 15, scaled by estimated output pages, further optimizing output device usage without disrupting core computation. The scheduler dynamically adjusted these classes to maintain system responsiveness, with users able to query their current class via theCLASS command.[2]
Resource limits were strictly imposed to prevent monopolization, including per-job CPU time caps set globally via the $SIGNON command (up to a maximum of 27,000 seconds) or locally via the RUN command, with a default of 3 seconds for short tasks. Connect time was managed through a funds-based system, where usage depleted allocated "money" units—defaulting to 50 pages equivalent—and jobs terminated upon exhaustion, adjustable via parameters like PAGES=400. Additional constraints covered output pages, input cards, and plot time, all configurable to align with site policies and prevent resource exhaustion.[2]
Batch and interactive processing utilized separate queues to isolate workloads: interactive sessions executed in real-time with precedence, while batch jobs were submitted using the $SUBMIT command (or variants like $COPY *SOURCE* *BATCH*) and held in dedicated queues until interactive load permitted processing. The EXQ command displayed waiting batch jobs, and flags like BP indicated batch-preferred execution modes during off-peak periods, ensuring efficient throughput without compromising user interactivity.[2]
Accounting mechanisms tracked resource consumption via integrated meters for CPU time, I/O operations, virtual storage integrals, terminal connect time, printed pages, and punched cards, enabling precise billing at consortium installations. Usage data appeared on job tail sheets (e.g., computing costs of $0.64) and could be monitored in real-time with commands like COST={ON | OFF}, which displayed accumulated charges, remaining funds, and disk quotas. Post-job adjustments refined billing accuracy, supporting equitable cost recovery across shared systems.[2]
In multi-processor configurations, MTS optimized allocation through load balancing across available CPUs, distributing jobs to idle processors while maintaining priority hierarchies to enhance overall system efficiency. This approach, inherent to MTS's multiprocessing support, minimized bottlenecks in environments like the University of Michigan's installations.[2]
Software Ecosystem
Programming Languages
The Michigan Terminal System (MTS) natively supported a variety of programming languages tailored for its time-sharing environment on IBM System/360 and System/370 mainframes, emphasizing interactive development, educational use, and system-level programming. These languages included enhancements for file I/O, virtual memory integration, and batch processing, reflecting MTS's focus on multi-user accessibility and computational efficiency. Key implementations ranged from high-level languages like SNOBOL4 and FORTRAN to low-level assembly tools, with support for over 40 languages by the late 1980s.[26] SNOBOL4 served as the primary string-processing language in MTS, designed for pattern matching and symbolic manipulation. It featured four processors: the standard SNOBOL4 interpreter, SNOBOL4B for enhanced block operations and 2D/3D output (including overstriking for graphs and flowcharts), SPITBOL as a compiler achieving up to 10 times the speed of the interpreter with object module saving, and SNOSTORM as a preprocessor adding structured constructs like IF, LOOP, and CASE for improved readability and debugging. MTS-specific enhancements included robust file I/O extensions, such as support for logical units (e.g., SCARDS for input, SPRINT for output), variable-record-length processing without padding, and format-free I/O via INPUT/OUTPUT functions, enabling seamless integration with MTS's file management subsystem. These features made SNOBOL4 ideal for text analysis and report generation in a multi-user setting.[27] BASIC in MTS, often invoked as an interactive system via $RUN *BASIC, was developed for educational purposes, providing an accessible entry point for students and novice programmers. Known as MTS BASIC or Simple MTS BASIC, it supported matrix operations, basic graphics, and immediate execution modes, with features like built-in functions for mathematical computations and simple program editing. This implementation emphasized conversational programming, allowing users to test code snippets interactively while leveraging MTS's terminal-oriented interface for quick feedback and error handling.[28][29] FORTRAN implementations in MTS centered on the FTN compiler family, including FORTRAN-G (standard IBM FORTRAN IV) and FORTRAN-H (optimizing variant offering 25-50% faster execution), alongside VS FORTRAN for full ANSI compliance. These supported versions up to FORTRAN 77, incorporating block IF statements, PARAMETER declarations, and free-format I/O. A key MTS-specific feature was virtual array support through subroutines like ARINIT, ARRAY, and EXTEND, enabling dynamic dimensioning and subscript checking (via SUBCHK) without fixed memory allocation, which aligned with MTS's virtual memory model for efficient resource sharing among users. Additional tools like the OVERDRIVE preprocessor added structured elements (e.g., IF-THEN-ELSE, loops), while interactive modes in systems like *IF77 facilitated debugging and compilation in a time-sharing context.[30] For system programming, MTS provided BAL (Basic Assembly Language), a low-level assembler based on IBM System/360 and 370 instructions, invoked via *ASMH for efficient code generation close to the hardware. BAL supported features like literal pooling, labeled USINGS for base register management, and extensions for Amdahl-specific opcodes (e.g., DXR for extended precision). Complementing BAL was the MACRO assembler, which expanded capabilities through libraries like SYSMAC for nested macros, structured control (e.g., IF-ENDIF, DO-ENDDO), and I/O operations via routines like IOH and READ/WRITE. These tools were essential for developing MTS command extensions, device drivers, and subroutines, with options for symbolic debugging and flag management (e.g., SET ATTN,ON) to handle interrupts and errors in a multi-user environment. The ASSIST subset further simplified BAL for educational system programming, restricting intermixing of control sections while adding execution-time services like GETSPACE.[31] Other natively supported languages included a PL/I subset via the PL/C compiler, a teaching-oriented implementation of PL/I(F) that omitted advanced optimizing features but retained core elements like block structure and exception handling for portability and simplicity in academic settings. LISP implementations encompassed the full LISP processor for list processing and symbolic computation, alongside UTILISP as a utility variant optimized for MTS's storage management, supporting dynamic garbage collection and interactive evaluation. Native C support was absent until late ports in the 1990s, as MTS prioritized established mainframe languages over emerging Unix-derived ones.[32]MTS-Specific Software
The Michigan Terminal System (MTS) featured several original software tools developed specifically for its environment, enhancing user productivity in text editing, document preparation, data visualization, statistical analysis, and system management. These programs were integral to the system's ecosystem, leveraging MTS's time-sharing capabilities to support interactive and batch processing on IBM System/360 and System/370 hardware. The EDIT editor provided a powerful line-oriented interface for manipulating text files, invoked via the command$EDIT filename. It supported essential operations such as inserting, deleting, moving, and copying lines within specified ranges, using line numbers from -2147483.648 to +2147483.647 or symbolic references like *F for the first line and *L for the last. Global search and replace functions were facilitated through commands like SCAN for pattern matching and ALTER or CHANGE for substitutions, employing SNOBOL4-inspired algorithms that allowed concatenation, alternation, and case-insensitive options (e.g., @AC modifier). Additional features included justification for text alignment, checkpointing to track changes with UNDO or RESTORE capabilities, and edit procedures for reusable command sequences with looping via GOTO. A visual mode enabled screen-based cursor navigation and insertions on display terminals, customizable through Visual Program Functions (VPFs). These capabilities made EDIT a foundational tool for academic and research editing tasks, influencing subsequent line-oriented editors in university computing environments.[33][34]
RUNOFF served as a dedicated text formatter for producing formatted output suitable for manuals and reports, processing input files with embedded commands to control pagination, spacing, and carriage returns. Invoked via $RUN *RUNOFF, it handled both terminal display and printer output, integrating with MTS's I/O devices like the SPRINT unit for high-quality rendering. Key directives allowed users to define margins, headers, footers, and font styles, making it effective for technical documentation. As an early interactive formatter in a time-sharing system, RUNOFF laid groundwork for later tools like nroff by emphasizing markup-based text processing in multi-user settings.[34]
The GRAPHICS subsystem, detailed in the Integrated Graphics System, offered a suite of plotting tools for visualizing research data on terminals and printers, supporting device-independent output across hardware like the Tektronix 4010/4114 and CalComp plotters. Core components included PLOTSYS for FORTRAN-callable subroutines that generated plot description files (PDS) from data arrays, enabling line graphs, scatter plots, and contour maps with scaling and labeling options. Complementary utilities like PLOTSEE allowed previewing and editing of PDS files interactively, with features for rotation, combination of multiple plots, and direct queuing to remote plotters via CCQUEUE, which managed costs and priorities (e.g., ASAP mode with ballpoint pens). TELLAGRAF provided conversational 2D graphics for bar charts, histograms, and pie charts, incorporating fonts and enhancements for professional output. These tools facilitated data-driven research by allowing real-time visualization in MTS sessions.[35][34]
MTS incorporated statistical packages tailored for interactive analysis, prominently featuring the Biomedical Computer Programs (BMD) suite originally developed at UCLA but adapted and distributed within MTS for widespread use. BMD enabled biomedical and social science researchers to perform analyses such as regression, ANOVA, factor analysis, and discriminant functions on datasets via conversational or batch modes, with programs like BMDX72 for factor analysis processing card-punched or direct input. Integrated with MTS's file system, it supported data transformation and output to printers or graphics devices, contributing to thousands of studies in fields like epidemiology and psychology due to its accessibility in time-sharing environments. Other built-in options, such as TAXIR for n-way tabulations and subtotals in data banks, complemented BMD by allowing ad-hoc queries and reports.[34][36]
System utilities included $diskuse for monitoring and managing disk space allocation, displaying metrics like total virtual storage used (in pages) and associated CPU time for user files (e.g., "Total virtual storage used = 3 pages. CPU time = 0.055343 seconds"). This tool aided administrators and users in optimizing resource usage under MTS's segmented file structure. Custom loaders supported overlay programs by enabling efficient module linking and optimization; for instance, LINKEDIT combined object modules into loadable formats via SPUNCH output, while OBJUTIL edited object files to add, replace, or delete modules, generating compact library files for overlay hierarchies. These loaders reduced memory overhead in large applications by prioritizing symbol searches and removing unnecessary records with tools like ENDJUNK, essential for running complex programs in MTS's virtual memory constraints.[34]
Third-Party Compatibility
The Michigan Terminal System (MTS) offered significant compatibility with IBM's OS/360 operating system, primarily through emulation of OS/360 services and support for standard IBM file formats. This allowed many OS/360 batch jobs to run under MTS after conversion, facilitated by tools like the Houston Automatic Spooling Priority (HASP) system for batch processing and direct compatibility with OS/360 magnetic tapes and disks in IBM-labeled formats.[22] Shared libraries from OS/360 environments could be integrated via MTS's public file system, which provided flexible access and protection mechanisms superior to those in OS/360 for user-shared resources.[22] Additionally, runtime libraries for languages like FORTRAN and PL/I were converted from OS/360 versions, enabling unmodified execution of corresponding programs without full recompilation in many cases.[16] Several third-party applications from other ecosystems were ported to MTS during the 1970s, enhancing its utility for academic and research tasks. A prominent example is the Statistical Package for the Social Sciences (SPSS), originally developed for IBM systems, which was adapted as a subsystem on MTS to support statistical analysis in social sciences and related fields.[37] Early email functionality was also integrated via consortium networks connecting MTS installations across universities, allowing inter-site messaging that built on protocols from broader ARPANET developments.[38] Academic simulators for domains like physics and chemistry, such as the Structurally Oriented Simulation System (SOSS) for molecular modeling, were ported or adapted to leverage MTS's interactive environment.[39] MTS included limited emulation layers for interoperability with CP/CMS, providing command equivalents that allowed basic file access and operations across systems on shared IBM System/360 hardware, though full file compatibility required manual intervention due to differing formats.[22] Some installations operated hybrid MTS/CMS configurations to combine time-sharing with virtual machine capabilities, enabling limited cross-system file handling.[40] Porting third-party software to MTS faced challenges, particularly during migrations from System/360 to System/370 hardware, where architectural enhancements like dynamic address translation necessitated recompilation of many components to maintain performance and compatibility.[41] There was no binary compatibility with UNIX systems, as MTS targeted IBM mainframes while UNIX ran on disparate architectures, requiring full source-level ports for any cross-adoption.[42] These hurdles were mitigated through MTS's modular design, but they underscored the effort needed for integrating external legacies.[16]Documentation
User Documentation
The primary user documentation for the Michigan Terminal System (MTS) is provided in MTS Volume 1: The Michigan Terminal System, first published in 1967 and regularly updated through subsequent editions, such as the November 1991 version corresponding to Release 6.0A.[2][6] This manual serves as the foundational guide for end-users, offering a comprehensive overview of the system's command-line interface, which operates in a conversational mode with a "#" prompt for entering MTS commands prefixed by "", such as `SIGNONto initiate a session.[](http://www.bitsavers.org/pdf/univOfMichigan/mts/volumes/MTSVol01-TheMichiganTerminalSystem-Nov1991.pdf) It details session management, including sign-on procedures (e.g.,SIGNON userID password), mode transitions between command, edit, and execution states, and handling of pseudodevices like SOURCE` for input redirection, all illustrated with practical examples to facilitate interactive terminal use.[2]
Introductory tutorials within the manual and related guides emphasize accessibility for novice users, particularly students, by providing step-by-step examples of basic operations. For instance, a typical "getting started" sequence might involve signing on, creating a simple file with CREATE filename, editing it via the edit mode prompt ":", and listing contents with LIST filename, as demonstrated in the manual's command prototypes and sample sessions.[2] These tutorials cover essential workflows, such as running programs with RUN programname or submitting batch jobs via *BATCH*, with explanations tailored to non-expert users unfamiliar with time-sharing systems.[2] Appendices further support beginners by including setup instructions for terminals, such as configuring I/O modifiers for devices like the IBM 3278 or Xerox 9700 printer.[2]
Reference materials in the manual include detailed command summaries and error code explanations, updated across releases to reflect new features like the FTP command for file transfers in later editions.[2] Command references list syntax prototypes (e.g., COPY [FROM] {FDlist1} [[TO] FDlist2]) and options, while error handling sections describe common messages such as "FDname does not exist" or interrupt codes (e.g., Privileged operation = 1), enabling users to troubleshoot issues like invalid sign-ons or resource limits.[2] For quick reference during sessions, MTS provides an integrated online help system accessible via the $HELP command (or HELP topic), which delivers context-specific guidance on commands and facilities directly from the terminal, drawing from the same documentation corpus.[2][43]
Distribution of user documentation occurred through printed volumes shared among the MTS consortium institutions, with updates disseminated via the University of Michigan's computing services to reflect system releases.[6] Online access via $HELP ensured immediate availability without physical copies, supporting remote users across networked terminals.[2] As of the 2020s, the full series of MTS user documentation (Volumes 1–23) is digitized and freely available online through archives such as Bitsavers and the University of Michigan's Deep Blue repository.[44][6] The materials were designed for broad accessibility, prioritizing clear language and examples over technical depth to accommodate users without prior programming experience, while consortium-shared revisions kept content aligned with evolving hardware and software capabilities.[2][6]