User Tools

Site Tools


systems:pdp7_unix

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
systems:pdp7_unix [2015/12/29 23:54] wktsystems:pdp7_unix [2023/02/16 08:04] (current) admin
Line 3: Line 3:
 **Release Date:** Developed from mid-1969 to the end of 1970\\ **Release Date:** Developed from mid-1969 to the end of 1970\\
 **Released By:** Never released outside of Bell Labs\\ **Released By:** Never released outside of Bell Labs\\
-**Source Code: ** No longer exists\\ +**Source Code:** [[https://github.com/DoctorWkt/pdp7-unix|Reconstructed from original listings]]\\ 
-**Documentation: ** No longer exists+**Documentation:** [[https://github.com/DoctorWkt/pdp7-unix|Reconstructed from original listings]]
  
 Ken Thompson began the development of the system that was to become Unix, first as a file system on paper and then on a "little-used PDP-7" (Dennis Ritchie, [[https://www.bell-labs.com/usr/dmr/www/hist.html|The Evolution of the Unix Time-sharing System]]). Ken Thompson began the development of the system that was to become Unix, first as a file system on paper and then on a "little-used PDP-7" (Dennis Ritchie, [[https://www.bell-labs.com/usr/dmr/www/hist.html|The Evolution of the Unix Time-sharing System]]).
Line 10: Line 10:
 ===== Details from "The Evolution of Unix" ===== ===== Details from "The Evolution of Unix" =====
  
-Also during 1969, Thompson developed the game of `Space Travel.' First written on Multics, then transliterated into Fortran for GECOS (the operating system for the GE, later Honeywell, 635), it was nothing less than a simulation of the movement of the major bodies of the Solar System, with the player guiding a ship here and there, observing the scenery, and attempting to land on the various planets and moons. The GECOS version was unsatisfactory in two important respects: first, the display of the state of the game was jerky and hard to control because one had to type commands at it, and second, a game cost about $75 for CPU time on the big computer. It did not take long, therefore, for Thompson to find a little-used PDP-7 computer with an excellent display processor; the whole system was used as a Graphic-II terminal. He and I rewrote Space Travel to run on this machine. The undertaking was more ambitious than it might seem; because we disdained all existing software, we had to write a floating-point arithmetic package, the pointwise specification of the graphic characters for the display, and a debugging subsystem that continuously displayed the contents of typed-in locations in a corner of the screen. All this was written in assembly language for a cross-assembler that ran under GECOS and produced paper tapes to be carried to the PDP-7.+Also during 1969, Thompson developed the game of `Space Travel.' First written on [[https://www.multicians.org/|Multics]], then transliterated into Fortran for GECOS (the operating system for the GE, later Honeywell, 635), it was nothing less than a simulation of the movement of the major bodies of the Solar System, with the player guiding a ship here and there, observing the scenery, and attempting to land on the various planets and moons. The GECOS version was unsatisfactory in two important respects: first, the display of the state of the game was jerky and hard to control because one had to type commands at it, and second, a game cost about $75 for CPU time on the big computer. It did not take long, therefore, for Thompson to find a little-used PDP-7 computer with an excellent display processor; the whole system was used as a Graphic-II terminal. He and I rewrote Space Travel to run on this machine. The undertaking was more ambitious than it might seem; because we disdained all existing software, we had to write a floating-point arithmetic package, the pointwise specification of the graphic characters for the display, and a debugging subsystem that continuously displayed the contents of typed-in locations in a corner of the screen. All this was written in assembly language for a cross-assembler that ran under GECOS and produced paper tapes to be carried to the PDP-7.
  
 Space Travel, though it made a very attractive game, served mainly as an introduction to the clumsy technology of preparing programs for the PDP-7. Soon Thompson began implementing the paper file system (perhaps `chalk file system' would be more accurate) that had been designed earlier. A file system without a way to exercise it is a sterile proposition, so he proceeded to flesh it out with the other requirements for a working operating system, in particular the notion of processes. Then came a small set of user-level utilities: the means to copy, print, delete, and edit files, and of course a simple command interpreter (shell). Up to this time all the programs were written using GECOS and files were transferred to the PDP-7 on paper tape; but once an assembler was completed the system was able to support itself. Although it was not until well into 1970 that Brian Kernighan suggested the name `Unix,' in a somewhat treacherous pun on `Multics,' the operating system we know today was born. Space Travel, though it made a very attractive game, served mainly as an introduction to the clumsy technology of preparing programs for the PDP-7. Soon Thompson began implementing the paper file system (perhaps `chalk file system' would be more accurate) that had been designed earlier. A file system without a way to exercise it is a sterile proposition, so he proceeded to flesh it out with the other requirements for a working operating system, in particular the notion of processes. Then came a small set of user-level utilities: the means to copy, print, delete, and edit files, and of course a simple command interpreter (shell). Up to this time all the programs were written using GECOS and files were transferred to the PDP-7 on paper tape; but once an assembler was completed the system was able to support itself. Although it was not until well into 1970 that Brian Kernighan suggested the name `Unix,' in a somewhat treacherous pun on `Multics,' the operating system we know today was born.
Line 30: Line 30:
 <code> <code>
 link(dir, file, newname) link(dir, file, newname)
- +</code>
-</file>+
  
 where //dir//  was a directory file in the current directory, //file//  an existing entry in that directory, and //newname//  the name of the link, which was added to the current directory. Because //dir//  needed to be in the current directory, it is evident that today's prohibition against links to directories was not enforced; the PDP-7 Unix file system had the shape of a general directed graph. where //dir//  was a directory file in the current directory, //file//  an existing entry in that directory, and //newname//  the name of the link, which was added to the current directory. Because //dir//  needed to be in the current directory, it is evident that today's prohibition against links to directories was not enforced; the PDP-7 Unix file system had the shape of a general directed graph.
Line 37: Line 36:
 So that every user did not need to maintain a link to all directories of interest, there existed a directory called //dd//  that contained entries for the directory of each user. Thus, to make a link to file //x//  in directory //ken//, I might do So that every user did not need to maintain a link to all directories of interest, there existed a directory called //dd//  that contained entries for the directory of each user. Thus, to make a link to file //x//  in directory //ken//, I might do
  
-<code>ln dd ken ken+<code> 
 +ln dd ken ken
 ln ken x x ln ken x x
 rm ken rm ken
Line 118: Line 118:
 <code> <code>
 sh comfile>output sh comfile>output
- +</code>
-</file>+
  
 The sequence of events was The sequence of events was
Line 133: Line 132:
 The very convenient notation for IO redirection, using the `>' and `<' characters, was not present from the very beginning of the PDP-7 Unix system, but it did appear quite early. Like much else in Unix, it was inspired by an idea from Multics. Multics has a rather general IO redirection mechanism [3] embodying named IO streams that can be dynamically redirected to various devices, files, and even through special stream-processing modules. Even in the version of Multics we were familiar with a decade ago, there existed a command that switched subsequent output normally destined for the terminal to a file, and another command to reattach output to the terminal. Where under Unix one might say The very convenient notation for IO redirection, using the `>' and `<' characters, was not present from the very beginning of the PDP-7 Unix system, but it did appear quite early. Like much else in Unix, it was inspired by an idea from Multics. Multics has a rather general IO redirection mechanism [3] embodying named IO streams that can be dynamically redirected to various devices, files, and even through special stream-processing modules. Even in the version of Multics we were familiar with a decade ago, there existed a command that switched subsequent output normally destined for the terminal to a file, and another command to reattach output to the terminal. Where under Unix one might say
  
-<code>ls>xx+<code> 
 +ls>xx
 </code> </code>
  
Line 142: Line 142:
 list list
 iocall attach user_output syn user_i/o iocall attach user_output syn user_i/o
- +</code>
-</file>+
  
 Even though this very clumsy sequence was used often during the Multics days, and would have been utterly straightforward to integrate into the Multics shell, the idea did not occur to us or anyone else at the time. I speculate that the reason it did not was the sheer size of the Multics project: the implementors of the IO system were at Bell Labs in Murray Hill, while the shell was done at MIT. We didn't consider making changes to the shell (it was //their//  program); correspondingly, the keepers of the shell may not even have known of the usefulness, albeit clumsiness, of //iocall//. (The 1969 Multics manual [4] lists //iocall//  as an `author-maintained,' that is non-standard, command.) Because both the Unix IO system and its shell were under the exclusive control of Thompson, when the right idea finally surfaced, it was a matter of an hour or so to implement it. Even though this very clumsy sequence was used often during the Multics days, and would have been utterly straightforward to integrate into the Multics shell, the idea did not occur to us or anyone else at the time. I speculate that the reason it did not was the sheer size of the Multics project: the implementors of the IO system were at Bell Labs in Murray Hill, while the shell was done at MIT. We didn't consider making changes to the shell (it was //their//  program); correspondingly, the keepers of the shell may not even have known of the usefulness, albeit clumsiness, of //iocall//. (The 1969 Multics manual [4] lists //iocall//  as an `author-maintained,' that is non-standard, command.) Because both the Unix IO system and its shell were under the exclusive control of Thompson, when the right idea finally surfaced, it was a matter of an hour or so to implement it.
Line 149: Line 148:
 ===== Extant PDP-7 Unix Source Code ===== ===== Extant PDP-7 Unix Source Code =====
  
-The only extant source code from the PDP-7 version of Unix appears to be the source code to the //dsw//  command that Dennis [[http://minnie.tuhs.org/pipermail/pups/1999-November/000139.html|posted on the net.unix-wizards]] Usenet newsgroup in 1984. He wrote:+For many years, the only extant source code from the PDP-7 version of Unix appeared to be the source code to the //dsw//  command that Dennis [[http://www.tuhs.org/pipermail/pups/1999-November/000139.html|posted on the net.unix-wizards]] Usenet newsgroup in 1984. He wrote:
  
-I happened to dredge up an old notebook and found a listing of the PDP-7 version of dsw.  Because several people have approached me recently about reviving a version of PDP-7 Unix as a sort of paleontological exhibit, and because the subject has been discussed here, I thought people might be interested in seeing the code. I first considered net.sources, but decided not to carry whimsy too far.+I happened to dredge up an old notebook and found a listing of the PDP-7 version of dsw. Because several people have approached me recently about reviving a version of PDP-7 Unix as a sort of paleontological exhibit, and because the subject has been discussed here, I thought people might be interested in seeing the code. I first considered net.sources, but decided not to carry whimsy too far.
  
 Notes: Notes:
Line 160: Line 159:
   - "sys save" makes a core image.   - "sys save" makes a core image.
  
-<code>" dsw+<code> 
 +" dsw
  
    lac djmp    lac djmp
Line 200: Line 200:
  
 In October 2009, Dennis sent Warren Toomey a private e-mail that said "In other news, I have found the book that has the [PDP-7] listings that I knew I had, that of (some) of the user-level commands. I wonder what's the best way to get it scanned?". Unfortunately, Dennis passed away before he could get the listings scanned in. In October 2009, Dennis sent Warren Toomey a private e-mail that said "In other news, I have found the book that has the [PDP-7] listings that I knew I had, that of (some) of the user-level commands. I wonder what's the best way to get it scanned?". Unfortunately, Dennis passed away before he could get the listings scanned in.
 +
 +In 2016, [[https://www.teach.cs.toronto.edu/~norman/pers/index.html|Norman Wilson]] discovered a set of paper copies PDP-7 Unix listings he had done while he worked at Bell Labs.  Warren Toomey organized [[https://github.com/DoctorWkt/pdp7-unix|a project to attempt to resurrect PDP-7 Unix]] with source code derived from scans of the listings.  The listings were partial, but there was enough to create a system that would boot and run.
 +
 +October 2019 saw another notebook of listings discovered (by Dennis Ritchie's heirs?).  Those were scanned, proofread and corrected, creating a more complete and original PDP-7 Unix.  A month later, the [[https://www.youtube.com/watch?v=pvaPaWyiuLA|Living Computer Museum bootstrapped the reconstructed operating system on renovated PDP-7 hardware]].
 +
 +===== PDP-9 Unix =====
 +
 +In several places, including the [[http://www.tuhs.org/Archive/Documentation/Papers/unix_cacm74.pdf|CACM paper]], there is mention made of Unix running on a PDP-9. Dennis Ritchie posted [[http://www.tuhs.org/pipermail/pups/2002-August/000529.html|a message on the PUPS mailing list]] in August 2002 which said:
 +
 +The [PDP-]7, 9, 15 were very compatible.  I think the -15 had some scheme for using an index register, which the earlier ones didn't have, but it was otherwise pretty much identical in IS architecture.
 +
 +There was very little rewriting to try Unix out on the -9 and -15; perhaps just some tweaks in
 +the disk device commands.  I don't think the system actually ran on either for more than a few hours. Ken was just playing around.
 +
 +The -15 may have had an electrically different bus, but I'm reasonably sure it was not a Unibus. All of them used IOT instructions, not memory-mapped IO registers.
 +
 +Both of the machines we tried were being used by other groups and we couldn't squat on them as with the PDP-7. I recall that  the -15's main job was controlling a step-and-repeat camera that exposed LSI masks.
 +
  
systems/pdp7_unix.1451393641.txt.gz · Last modified: 2015/12/29 23:54 by wkt