Difference between revisions of "TENEX"

From Computer History Wiki
Jump to: navigation, search
m (See also: +TENEX sharable save file)
m (External links: + recent version of Muphy paper)
 
(26 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
{{Infobox OS
 
{{Infobox OS
 
| name = TENEX
 
| name = TENEX
<!-- | image = v6unix.png
+
<!-- | image =  
| caption = Logging into a v6 unix system -->
+
| caption = -->
 
| creator = [[BBN]]
 
| creator = [[BBN]]
<!-- | current version = v6 -->
+
<!-- | current version = -->
 
| year introduced = June, 1970
 
| year introduced = June, 1970
 
| type = Multi-tasking, multi-user, virtual memory
 
| type = Multi-tasking, multi-user, virtual memory
Line 10: Line 10:
 
}}
 
}}
  
'''TENEX''' was an early [[operating system]] for the [[PDP-10]] line of computers; it was the ancestor of the later [[DEC]]-supplied operating system for the [[DECSYSTEM-20]], [[TOPS-20]].
+
'''TENEX''' was an early [[operating system]] for the [[PDP-10]] line of computers; it was the ancestor of the later [[Digital Equipment Corporation|DEC]]-supplied operating system for the [[DECSYSTEM-20]], [[TOPS-20]].
  
[[Image:TenexPager.jpg|200px|thumb|left|The TENEX paging box for the KA10]]
+
It was written by a small team at [[Bolt, Beranek, and Newman|BBN]] for a [[KA10]], modified to add the [[BBN Pager]] hardware for [[virtual memory]] (much as the [[MIT Artificial Intelligence Laboratory|MIT AI Lab]] added hardware to their KA10 for the same purpose). (The lack of a DEC [[mainframe]] with virtual memory, at the time, was the primary driver for the creation of TENEX.)
  
It was written by a small team at [[BBN]] for a [[KA10]] modified to add the hardware for [[virtual memory|paging]] (much as the MIT AI Lab added hardware to their KA10 for the same purpose). (The lack of a DEC [[mainframe]] with paging at the time was the primary driver for the creation of TENEX.) It was later adapted to run on the paging hardware supplied by DEC with the [[KI10]] (although not as efficiently).
+
The [[Berkeley Time-Sharing System]] for the [[SDS 940]] was an important source of concepts for TENEX, along with [[Multics]].
 +
 
 +
It was later adapted to run on the virtual memory hardware supplied by DEC with the [[KI10]] (although not as efficiently). There is also a report of one [[KL10]] running TENEX. It was the native operating system for [[Xerox PARC]]'s [[Maxc]] computers, as well as the [[Foonly]] machines.
 +
 
 +
==Overview==
  
 
Each user can have a hierarchy of [[process]]es, starting with the 'EXEC', the [[command processor]] (the collection being referred to as a 'job'); a 'superior' process has complete control over an 'inferior'. Processes may share memory with each other, and also map [[file]]s into their [[address space]]; memory shared between processes can be either readable, writeable, or 'copy on write'. [[Interrupt]]s may arrive from either the controlling keyboard of the job, or from another process in the job; [[trap]]s can be caused by the process' operation (e.g. illegal memory references).
 
Each user can have a hierarchy of [[process]]es, starting with the 'EXEC', the [[command processor]] (the collection being referred to as a 'job'); a 'superior' process has complete control over an 'inferior'. Processes may share memory with each other, and also map [[file]]s into their [[address space]]; memory shared between processes can be either readable, writeable, or 'copy on write'. [[Interrupt]]s may arrive from either the controlling keyboard of the job, or from another process in the job; [[trap]]s can be caused by the process' operation (e.g. illegal memory references).
  
It provided the by-then-usual hierarchical file system, with protection (list, read, write, append, execute) to prevent one user from damaging another's files. File names included version numbers, which were automatically incremented when a file is written.
+
It provided a [[file system]] with protection (list, read, write, append, execute) to prevent one user from damaging another's files. File names included version numbers, which were automatically incremented when a file is written. It did not have the by-then-usual hierarchical [[directory]] [[tree]], just a single level. (There were discussions about making it hierarchical, but this never happened; eventually that was added in TOPS-20.)
  
The system included three different debuggers, all versions of [[DDT]]. The first operated on the OS itself, when the OS was not running; it could be used to debug any part of the OS. The second wass a close variant; it also operated on the OS, but with the OS running. The third was used to debug user processes.
+
The system included three different [[debugger]]s, all versions of [[DDT]]. The first operated on the OS itself, when the OS was not running; it could be used to debug any part of the OS. The second was a close variant; it also operated on the OS, but with the OS running. The third was used to debug user processes.
 +
 
 +
TENEX was native to the [[ARPANET]] and came with support for [[Network Control Protocol|NCP]], and was updated for [[TCP/IP]] (it was one of the [[Terminal Interface Unit|very first systems]] to implement TCP). Third parties added support for [[Tymnet]], [[PARC Universal Packet|PUP]] and [[Chaosnet|Chaos]].
  
 
==Connection to Berkeley Project Genie SDS 940 Timesharing System==
 
==Connection to Berkeley Project Genie SDS 940 Timesharing System==
Line 26: Line 32:
 
Fred Wright wrote to the info-tops20 mailing list in 2005:
 
Fred Wright wrote to the info-tops20 mailing list in 2005:
  
''[TENEX] wasn't really a new design in its own right, being merely a rewrite of the [[Scientific Data Systems|SDS]] [[SDS 940|940]] system for the PDP-10.  The 940 system, as well as the hardware enhancements that turned the 930 into the 940, came from Project Genie at UC Berkeley.
+
''[TENEX] wasn't really a new design in its own right, being merely a rewrite of the SDS 940 system for the PDP-10.  The 940 system, as well as the hardware enhancements that turned the [[SDS 930|930]] into the 940, came from Project Genie at UC Berkeley.
  
 
''The 940 OS (mostly written by Peter Deutsch) was based on paging, viewed memory primarily as a cache for drum, had jobs with multiple forks which could optionally share pages, used the topmost fork of the job for the "shell", and had command and filename completion.  Sound familiar?
 
''The 940 OS (mostly written by Peter Deutsch) was based on paging, viewed memory primarily as a cache for drum, had jobs with multiple forks which could optionally share pages, used the topmost fork of the job for the "shell", and had command and filename completion.  Sound familiar?
Line 32: Line 38:
 
''TENEX was really not much more than a port of the 940 OS to the PDP-10, except for changing some things that didn't scale well to larger address spaces and storage devices.  I can recall seeing TENEX code that looked literally like a line-by-line translation of 940 code, right down to using only three registers (like the 940's A, B, and X), and with half the instructions being MOVEs and MOVEMs since you can't keep much in three registers.  They did, however, use a stack and PUSHJ/POPJ instead of JSR/JRST. :-) The exception model for system calls was as ugly as their hardware, instead of adopting an ITS-like [[PCLSRing]] approach - another step backwards from the 940 system, which in essence had simplified PCLSR.
 
''TENEX was really not much more than a port of the 940 OS to the PDP-10, except for changing some things that didn't scale well to larger address spaces and storage devices.  I can recall seeing TENEX code that looked literally like a line-by-line translation of 940 code, right down to using only three registers (like the 940's A, B, and X), and with half the instructions being MOVEs and MOVEMs since you can't keep much in three registers.  They did, however, use a stack and PUSHJ/POPJ instead of JSR/JRST. :-) The exception model for system calls was as ugly as their hardware, instead of adopting an ITS-like [[PCLSRing]] approach - another step backwards from the 940 system, which in essence had simplified PCLSR.
  
Butler Lampson writes in http://bwlampson.site/Systems.htm about the SDS 940 operating system:
+
Butler Lampson writes in [http://bwlampson.site/Systems.htm Systems] about the SDS 940 operating system:
  
''This system was copied directly in the design of the Tenex system for the PDP-10, except for the memory management.
+
''This system was copied directly in the design of the Tenex system for the PDP-10, except for the memory management.''
  
Many of the TEN-SYS memos (see external links below) refer to a 940 system, presumably the BBN [[SDS]] 940 running the Berkely timesharing system and used for [[BBN LISP|940 LISP]].
+
Many of the TEN-SYS memos (see external links below) refer to a 940 system, presumably the BBN SDS 940 running the Berkely timesharing system and used for [[BBN LISP|940 LISP]].
  
 
==See also==
 
==See also==
  
 +
* [[August]] - variant of TENEX hosting Augment
 +
* [[FOONEX]] - variant of TENEX for [[Foonly]] computers
 +
* [[Maxc]] - [[Xerox PARC]] computers running TENEX
 +
* [[TENEX file system layout]]
 
* [[TENEX sharable save file]]
 
* [[TENEX sharable save file]]
 +
* [[DUMPER tape format]]
  
 
==External links==
 
==External links==
  
 +
* [https://opost.com/tenex/ TECO, TENEX, and TOPS-20 Papers] - from Dan Murphy, includes assorted memorabilia such as images
 +
** [https://opost.com/tenex/tenex72.txt TENEX, A Paged Time Sharing System for the PDP-10] - the ACM paper which introduced TENEX
 +
** [https://opost.com/tenex/hbook.html Origins and Development of TOPS-20] - provides details on how the KI10 and KL10 were made to support TENEX-style paging
 +
* [https://ieeexplore.ieee.org/document/7057591 TENEX and TOPS-20] - recent update of the above
 +
* [http://www.bitsavers.org/pdf/bbn/tenex/ TENEX] TENEX documentation (papers, manuals, etc) at [[Bitsavers]]
 +
** [http://www.bitsavers.org/pdf/bbn/tenex/TENEX_Memos_Mar72.pdf Status of the TENEX Memos] - useful overview of early documentation
 +
** [http://www.bitsavers.org/pdf/bbn/tenex/MonitorTechSummary_Feb72.pdf TENEX Monitor Manual] - detailed overview
 +
* [https://walden-family.com/bbn/10-SYS/ TEN-SYS memos from 1969]
 +
* [https://xeroxalto.computerhistory.org/_cd8_/pup/.tenex-pup.press!1.pdf Implementation of Pup in Tenex]
 
* [https://github.com/PDP-10/tenex TENEX source]
 
* [https://github.com/PDP-10/tenex TENEX source]
* [https://walden-family.com/bbn/10-SYS/ TEN-SYS memos from 1969]
 
  
 
[[Category: PDP-10 Operating Systems]]
 
[[Category: PDP-10 Operating Systems]]
 
[[Category: Non-DEC Operating Systems]]
 
[[Category: Non-DEC Operating Systems]]

Latest revision as of 17:28, 28 June 2024


TENEX
Type: Multi-tasking, multi-user, virtual memory
Creator: BBN
Architecture: PDP-10
Date Released: June, 1970


TENEX was an early operating system for the PDP-10 line of computers; it was the ancestor of the later DEC-supplied operating system for the DECSYSTEM-20, TOPS-20.

It was written by a small team at BBN for a KA10, modified to add the BBN Pager hardware for virtual memory (much as the MIT AI Lab added hardware to their KA10 for the same purpose). (The lack of a DEC mainframe with virtual memory, at the time, was the primary driver for the creation of TENEX.)

The Berkeley Time-Sharing System for the SDS 940 was an important source of concepts for TENEX, along with Multics.

It was later adapted to run on the virtual memory hardware supplied by DEC with the KI10 (although not as efficiently). There is also a report of one KL10 running TENEX. It was the native operating system for Xerox PARC's Maxc computers, as well as the Foonly machines.

Overview

Each user can have a hierarchy of processes, starting with the 'EXEC', the command processor (the collection being referred to as a 'job'); a 'superior' process has complete control over an 'inferior'. Processes may share memory with each other, and also map files into their address space; memory shared between processes can be either readable, writeable, or 'copy on write'. Interrupts may arrive from either the controlling keyboard of the job, or from another process in the job; traps can be caused by the process' operation (e.g. illegal memory references).

It provided a file system with protection (list, read, write, append, execute) to prevent one user from damaging another's files. File names included version numbers, which were automatically incremented when a file is written. It did not have the by-then-usual hierarchical directory tree, just a single level. (There were discussions about making it hierarchical, but this never happened; eventually that was added in TOPS-20.)

The system included three different debuggers, all versions of DDT. The first operated on the OS itself, when the OS was not running; it could be used to debug any part of the OS. The second was a close variant; it also operated on the OS, but with the OS running. The third was used to debug user processes.

TENEX was native to the ARPANET and came with support for NCP, and was updated for TCP/IP (it was one of the very first systems to implement TCP). Third parties added support for Tymnet, PUP and Chaos.

Connection to Berkeley Project Genie SDS 940 Timesharing System

Fred Wright wrote to the info-tops20 mailing list in 2005:

[TENEX] wasn't really a new design in its own right, being merely a rewrite of the SDS 940 system for the PDP-10. The 940 system, as well as the hardware enhancements that turned the 930 into the 940, came from Project Genie at UC Berkeley.

The 940 OS (mostly written by Peter Deutsch) was based on paging, viewed memory primarily as a cache for drum, had jobs with multiple forks which could optionally share pages, used the topmost fork of the job for the "shell", and had command and filename completion. Sound familiar?

TENEX was really not much more than a port of the 940 OS to the PDP-10, except for changing some things that didn't scale well to larger address spaces and storage devices. I can recall seeing TENEX code that looked literally like a line-by-line translation of 940 code, right down to using only three registers (like the 940's A, B, and X), and with half the instructions being MOVEs and MOVEMs since you can't keep much in three registers. They did, however, use a stack and PUSHJ/POPJ instead of JSR/JRST. :-) The exception model for system calls was as ugly as their hardware, instead of adopting an ITS-like PCLSRing approach - another step backwards from the 940 system, which in essence had simplified PCLSR.

Butler Lampson writes in Systems about the SDS 940 operating system:

This system was copied directly in the design of the Tenex system for the PDP-10, except for the memory management.

Many of the TEN-SYS memos (see external links below) refer to a 940 system, presumably the BBN SDS 940 running the Berkely timesharing system and used for 940 LISP.

See also

External links