# RC 4000 multiprogramming system

> Mediated Wiki article. Canonical URL: https://mediated.wiki/source/RC_4000_multiprogramming_system
> Markdown URL: https://mediated.wiki/source/RC_4000_multiprogramming_system.md
> Source: https://en.wikipedia.org/wiki/RC_4000_multiprogramming_system
> Source revision: 1296955543
> License: Creative Commons Attribution-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/)

Technological System (Discontinued)

This article includes a list of references, related reading, or external links, but its sources remain unclear because it lacks inline citations. Please help improve this article by introducing more precise citations. (January 2019) (Learn how and when to remove this message)

Operating system

RC 4000 Multiprogramming System Developer Regnecentralen Working state Discontinued Initial release 1969; 57 years ago (1969) Marketing target Research Available in English Update method Compile from source code Supported platforms RC 4000 Kernel type Microkernel

The **RC 4000 Multiprogramming System** (also termed **Monitor** or **RC 4000** depending on reference) is a discontinued [operating system](/source/Operating_system) developed for the RC-4000 third generation computer in 1969.[1] For clarity, this article mostly uses the term Monitor.

## Overview

The RC 4000 Multiprogramming System was the first attempt to break down an operating system into a group of interacting programs communicating via a [message passing](/source/Message_passing) [kernel](/source/Kernel_(operating_system)). RC 4000 was not widely used, but was highly influential, sparking the [microkernel](/source/Microkernel) concept that dominated operating system research through the 1970s and 1980s.

Monitor was created largely by one programmer, [Per Brinch Hansen](/source/Per_Brinch_Hansen), who worked at [Regnecentralen](/source/Regnecentralen) where the RC 4000 was being designed. Leif Svalgaard participated in implementing and testing Monitor. Brinch Hansen found that no existing operating system was suited to the new machine, and was tired of having to adapt existing systems. He felt that a better solution was to build an underlying kernel, which he referred to as the *nucleus*, that could be used to build up an operating system from interacting programs. [Unix](/source/Unix), for instance, uses small interacting programs for many tasks, transferring data through a system called *[pipelines or pipes](/source/Pipeline_(Unix))*. However, a large amount of fundamental code is integrated into the kernel, things like [file systems](/source/File_system) and program control. Monitor would relocate such code also, making almost the entire system a set of interacting programs, reducing the kernel (nucleus) to a communications and support system only.

Monitor used a pipe-like system of shared memory as the basis of its [inter-process communication](/source/Inter-process_communication) (IPC). Data to be sent from one process to another was copied into an empty memory [data buffer](/source/Data_buffer), and when the receiving program was ready, back out again. The buffer was then returned to the pool. Programs had a very simple application programming interface ([API](/source/API)) for passing data, using an [asynchronous](https://en.wiktionary.org/wiki/asynchronous) set of four methods. Client applications send data with send message and could optionally block using wait answer. Servers used a mirroring set of calls, wait message and send answer. Note that messages had an implicit "return path" for every message sent, making the semantics more like a [remote procedure call](/source/Remote_procedure_call) than [Mach's](/source/Mach_(kernel)) completely [input/output](/source/Input%2Foutput) (I/O) based system.

Monitor divided the application space in two: *internal processes* were the execution of traditional programs, started on request, while *external processes* were effectively device drivers. External processes were handled outside of user space by the nucleus, although they could be started and stopped just like any other program. Internal processes were started in the context of the *parent* that launched them, so each user could effectively build up their own operating system by starting and stopping programs in their own context.

[Scheduling](/source/Scheduling_(computing)) was left entirely to the programs, if required at all (in the 1960s, [computer multitasking](/source/Computer_multitasking) was a feature of debatable value). One user could start a session in a [pre-emptive multitasking](/source/Pre-emptive_multitasking) environment, while another might start in a single-user mode to run [batch processing](/source/Batch_processing) at higher speed. [Real-time](/source/Real-time_computing) scheduling could be supported by sending messages to a timer process that would only return at the appropriate time.

These two areas have seen the vast majority of development since Monitor's release, driving newer designs to use hardware to support messaging, and supporting threads within applications to reduce launch times. For instance, Mach required a [memory management unit](/source/Memory_management_unit) to improve messaging by using the [copy-on-write](/source/Copy-on-write) protocol and mapping (instead of copying) data from process to process. Mach also used threading extensively, allowing the external programs, or *servers* in more modern terms, to easily start up new handlers for incoming requests. Still, Mach IPC was too slow to make the microkernel approach practically useful. This only changed when [Jochen Liedtke](/source/Jochen_Liedtke)'s [L4 microkernel](/source/L4_microkernel_family) demonstrated IPC overheads reduced by an order-of-magnitude.

## See also

- [THE multiprogramming system](/source/THE_multiprogramming_system)

- [Timeline of operating systems](/source/Timeline_of_operating_systems)

## References

1. **[^](#cite_ref-1)** ["Nuclear · Lecture Note for 221"](https://yutingwang.gitbooks.io/lecture-note-for-221/content/nuclear1.html). *yutingwang.gitbooks.io*. Retrieved 10 April 2024.

- Hansen, Per Brinch (1970). ["The Nucleus of a Multiprogramming Operating System"](http://www.brinch-hansen.net/papers/1970a.pdf) (PDF). *Communications of the ACM*. **13** (4). [Association for Computing Machinery](/source/Association_for_Computing_Machinery): 238–250. [CiteSeerX](/source/CiteSeerX_(identifier)) [10.1.1.105.4204](https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.105.4204). [doi](/source/Doi_(identifier)):[10.1145/362258.362278](https://doi.org/10.1145%2F362258.362278). [S2CID](/source/S2CID_(identifier)) [9414037](https://api.semanticscholar.org/CorpusID:9414037).

- [RC 4000 Software: Multiprogramming System](http://brinch-hansen.net/papers/1969a.pdf)

- [RC 4000 Reference Manual](http://bitsavers.org/pdf/regnecentralen/RC_4000_Reference_Manual_Jun69.pdf) at bitsavers.org

v t e Microkernels-nanokernels Kernels L4 family Eumel → L3 → L4° Macintosh hosted Mac OS nanokernel NuKernel Psion EKA1 → EKA2^° Amiga-type Exec ExecSG Quark WarpOS EROS^° K42° Little Kernel Mach° GNU Mach° MicroEmpix µ-velOSity^ nucleus Off++ → Plan B Opus PowerUP RTLinux° TI-RTOS kernel^° Vanguard Operating systems POSIX support Unix-like ARX GNU Hurd° Lites MeikOS Minix° Minix-vmd° Minix 3° MkLinux° Multi-Environment Real-Time^ (MERT – Unix-RT) OS2000 QNX^ RedoxOS° Spring Tinix UNICOS VSTa Partial ChorusOS^ Integrity^ Nucleus RTOS^ NuttX^° OSE^ RIOT^° Capability-based GNOSIS → KeyKOS → EROS → CapROS Hydra seL4^° Midori NLTSS HarmonyOS NEXT (OpenHarmony, Oniro OS) → HarmonyOS L4 kernel L4Linux^° PikeOS^ REX OS^ Wombat^° Java virtual machine JavaOS (Chorus/Jazz^ integrates ChorusOS^) JX° Macintosh hosted Unix-like MachTen MacMach Copland Classic Mac OS (PowerPC kernel) Psion EPOC → Symbian OS^° Amiga-type AmigaOS AROS° AspireOS° Broadway° Icaros Desktop° MorphOS Microsoft Singularity ThreadX^° Verve AIM alliance Pink → Taligent OS → Workplace OS Amoeba° BeRTOS^° ChibiOS/RT^° FreeRTOS^° HelenOS° µC/OS^° MQX^ OpenComRTOS^ Phantom OS^° RC 4000 SharpOS° SPIN° Thoth^ → Harmony^ → V VRTX^ Frameworks, kits Cosmos° Genode° TI-RTOS^° Developers Gordon Bell Thomas Bushnell David Cheriton Dan Dodge Per Brinch Hansen Gernot Heiser Jochen Liedtke James G. Mitchell Ike Nassi Richard Rashid Andrew S. Tanenbaum Avie Tevanian William Wulf Italics = discontinued ^ = Real-time ° = Open-source software Category: Microkernel-based operating systems Category: Microkernels

---
Adapted from the Wikipedia article [RC 4000 multiprogramming system](https://en.wikipedia.org/wiki/RC_4000_multiprogramming_system) by Wikipedia contributors ([contributor history](https://en.wikipedia.org/wiki/RC_4000_multiprogramming_system?action=history)). Available under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/). Changes may have been made.
