The RTS/8 Operating System

Introduction

RTS/8 was a real-time operating system developed from an earlier system, SRT-8, dating back to 1973. Even the last versions of RTS/8 continued to support paper-tape and DECtape. SRT-8 was a real-time system for the family of PDP-8 computers. It allowed up to 64 tasks to run concurrently, competing for resources on a fixed-priority basis. Included in the SRT-8 system are system tasks which control standard Digital Equipment Corporation I/O hardware, a task which allows interactive system control from the console Teletype and a task which allows a single copy of the OS/8 monitor system to run in the background.

RTS/8 also offered a virtual PDP-8 for background processing, unlike ETOS, this did not require special hardware; instead, software emulation was used to retain control of the machine between the CIF instruction and a following JMP or JMS.

A bit of background on ETOS: Jim Dempsey, an alum of the OS/8 group at DEC, developed ETOS for Educomp (later Quodata) for the PDP-8/E; this was a true virtual machine operating system in the spirit of IBM's VM/370, and a special board was required to optionally trap JMP and JMS instructions; this was enabled after an emulated CIF instruction so that the actual change of instruction field could be emulated when the JMP or JMS was attempted. After leaving Quodata and founding Network-Systems Design in 1976, Dempsey went on to develop OMNI-8, first installed at Ripon College; initially it was priced at $4900, several hundred copies were sold. The OMNI-8 operating system supported the enlarged PDP-8 address space of the CESI (Computer Extension Systems Inc) memory cards, and when CESI began making PDP-8 clones, OMNI-8 was extended to support asymmetric multiprocessors (one CPU handled the I/O). The end of OMNI-8 development came around 1990. Dumps of the ETOS kernel and drivers survive in various places.

RTS-8 is a small real-time system which uses any family-of-8 processor (with the exception of the PDP-8/S). It allows up to 63 tasks to run concurrently, competing for resources on a fixed-priority basis. Included in the RTS-8 system are system tasks which control most standard Digital Equipment Corporation I/O devices, a task which allows interactive system control from the console terminal, and a task which allows a single copy of the OS/8 monitor system to run in the background.

A real-time system is a software framework under which the resources at hand (core, CPU time, peripheral devices) are divided among several tasks. The term "task" is difficult to define, as it overlaps with the definitions of "program" and "subroutine", but basically a task is a portion of machine code which performs a specific function; sometimes this function is an end in itself, sometimes it is related only to the needs of other tasks. The real-time system distributes resources to tasks at any time depending on whether the tasks can make use of them, and whether a more privileged (higher priority) task wants to preempt resources already in use.

Most real-time systems consist of a group of programs or tasks that run at varying times or frequencies and alternate between being compute bound and I/O bound. To efficiently use the central processor, these tasks cannot be run in series since the central processor will be poorly utilized during the periods that tasks are I/O bound. In addition, real-time tasks are time-dependent in one sense or another and in general cannot wait for a slow, less important I/O or compute bound task to finish before starting execution. Multiprogramming and some sort of priority scheme for scheduling the central processor are thus required.

Multiprogramming allows many tasks to be in some state of execution simultaneously. When one task cannot use all the available central processor time because it must wait for an I/O operation or is blocked by some other condition, the central processor can be switched to another task to make use of the available time. It is possible even in a multiprogramming environment that there may not be a task in an executable state to utilize this available time. While this condition is certainly possible, it is less likely to occur than in a uni-programming environment.

A priority scheme is needed to distinguish the relative importance of the various tasks in the system. It must be possible to interrupt the execution of a less important task to execute a critical real-time program. A fixed priority scheme has been chosen. Fixed priority meets the above requirement, is simple and adequate, and requires low scheduling overhead.

Task Management

The controlling program in an RTS-8 System is the RTS-8 Executive. The Executive decides which task should be running (based on the priorities of the tasks which are able to run) and also provides services to the tasks by means of Executive Requests. Each task in an RTS-8 system has an associated unique Task Number between 1 and 63, which serves the following purposes:

  • 1. The Task Number is used by the RTS-8 Executive as an index to various system tables where information about tasks is kept.
  • 2. The Task Number is used by other tasks in the system for reference in Executive Requests.
  • 3. The Task Number determines the task's priority; the lower the Task Number, the higher the priority of the task.

The Executive uses three internal tables to maintain information about the tasks in the system. Each task's Task Number is used as an index into these tables to retrieve and update information for that task. The Executive decides which tasks should run (basing its decisions on the priorities of any other runnable task or tasks), services these tasks by means of Executive Requests (which are special processing routines within the Executive), and administers interactive communication.

RTS/8 supports both resident and nonresident tasks. (A resident task is a task that resides permanently in memory; a nonresident task is one in which a portion of the task resides on a mass storage device.) The Executive loads a nonresident task into memory only as it becomes executable. By allowing several tasks to share the same area of memory, RTS/8 minimizes the amount of memory that it needs to execute user tasks.

RTS/8 includes system tasks that control most standard I/O devices, including RK8, RK8E, and RL01 moving-head disks, DF32 and RF08 fixed-head disks, TC08 DECtape, RX8 floppy disks, LINCtape, DECcassette, and LS8, LS8E, LP8, and LV8 line printers. (Note that RTS/8 does not support TD8E DECtape.)

The Monitor Console Routine provides the user with an interface between the console terminal and the system. The Monitor Console Routine accepts a series of interactive commands which control, inspect, and, to some extent, debug the system. It also allows the user to schedule and execute tasks at specified intervals, suspend task execution, and print system status information. RTS/8 also contains a system task that allows a single copy of the OS/8 operating system to run in the background. Thus, a user may create a real-time foreground-OS/8 background system. With OS/8 in the background, a user can assemble, debug, edit, and link programs.

Sources: