Difference between revisions of "PWB/UNIX"

From Computer History Wiki
Jump to: navigation, search
m (link to papers)
(External links: Add some direct links to interesting nuggets)
 
(3 intermediate revisions by the same user not shown)
Line 19: Line 19:
 
The PWB 1.0 kernel includes a number of other changes, compared to V6, but it is not clear if they were done by the PWB project, or if they were done by Research personnel for their own use, as part of their program of continuous system improvement - after V6 was released, but before PWB copied the system. (V6 was released in May 1975, but PWB 1.0, the code examined for this list, was released on July 1, 1977.) Major changes included:
 
The PWB 1.0 kernel includes a number of other changes, compared to V6, but it is not clear if they were done by the PWB project, or if they were done by Research personnel for their own use, as part of their program of continuous system improvement - after V6 was released, but before PWB copied the system. (V6 was released in May 1975, but PWB 1.0, the code examined for this list, was released on July 1, 1977.) Major changes included:
  
* addition of the access(), tell(), alarm(), pause() and setpgrp() system calls (these seem to have been removed from V6; as the entries in sysent.c are there, but blank)
+
* addition of the access(), tell(), alarm(), pause() and setpgrp() [[system call]]s (these seem to have been removed from V6; as the entries in sysent.c are there, but blank)
 
* the exec() [[system call]] was changed to temporarily hold its arguments in [[swapping|swap]] space, rather than doing so in [[disk]] [[buffer]]s; this allowed use of much larger argument lists to exec() (V6 had limited the number of [[process]]es allowed to be in an exec() call simultaneously, to prevent [[deadlock]]s)
 
* the exec() [[system call]] was changed to temporarily hold its arguments in [[swapping|swap]] space, rather than doing so in [[disk]] [[buffer]]s; this allowed use of much larger argument lists to exec() (V6 had limited the number of [[process]]es allowed to be in an exec() call simultaneously, to prevent [[deadlock]]s)
 
* improved locking on use of '[[UNIX V6 internals#exec() and pure-text images|pure texts]]' (shared copies of read-only [[object code|executable binaries]])
 
* improved locking on use of '[[UNIX V6 internals#exec() and pure-text images|pure texts]]' (shared copies of read-only [[object code|executable binaries]])
 
* changes to the logic for [[swapping]] processes in and out
 
* changes to the logic for [[swapping]] processes in and out
 +
* support for 'huge' files (which use double-indirect blocks) was removed
  
The first two changes in the list would have been visible to users; the rest were purely internal.  
+
The first two changes in the list, and the last, would have been visible to users; the others were purely internal.
 +
 
 +
(The rationale for the removal of the support for 'huge' files is not known; removal of that code saved only a small amount of space in the kernel. Without them, the largest file supported was 512*256*8=1,048,576 bytes, and it is likely that given the use to which PWB systems were put, larger files were not needed.)
  
 
===User-visible compatability===
 
===User-visible compatability===
Line 43: Line 46:
  
 
* [https://minnie.tuhs.org/cgi-bin/utree.pl?file=PWB1 PWB1] - Complete source and binary
 
* [https://minnie.tuhs.org/cgi-bin/utree.pl?file=PWB1 PWB1] - Complete source and binary
 +
** [https://minnie.tuhs.org/cgi-bin/utree.pl?file=PWB1/usr/news/pibs pibs] - PWB User's Manual memos; "Installation of PWB/UNIX Edition 1.0" gives some clues as to PWB history before PWB 1.0
 +
** [https://minnie.tuhs.org/cgi-bin/utree.pl?file=PWB1/usr/news/roadmap roadmap] - introduction to PWB documentation
 +
** [https://minnie.tuhs.org/cgi-bin/utree.pl?file=PWB1/sys/source/s8/config.c config.c] - configuration file generator
 +
** [https://minnie.tuhs.org/cgi-bin/utree.pl?file=PWB1/sys/source/s8/fsdb.c fsdb.c] - file system repair tool
 
* T. A. Dolotta, R. C. Haight, J. R. Mashey, [https://archive.org/details/bstj57-6-2177 ''The Programmer's Workbench''], [[Bell System Technical Journal]], Vol. 57, No. 6, July-August 1978
 
* T. A. Dolotta, R. C. Haight, J. R. Mashey, [https://archive.org/details/bstj57-6-2177 ''The Programmer's Workbench''], [[Bell System Technical Journal]], Vol. 57, No. 6, July-August 1978
 
* T. A. Dolotta, J. R. Mashey, [https://www.ics.uci.edu/~andre/ics228s2006/dolottamashey.pdf ''An introduction to the Programmer's Workbench''], International Conference on Software Engineering, 13th October 1976
 
* T. A. Dolotta, J. R. Mashey, [https://www.ics.uci.edu/~andre/ics228s2006/dolottamashey.pdf ''An introduction to the Programmer's Workbench''], International Conference on Software Engineering, 13th October 1976

Latest revision as of 15:49, 27 September 2023

PWB/UNIX (usually called just 'PWB; the acronym is from its formal name, the 'Programmer's Workbench') was a variant of early UNIX (initially V6 Unix) inside Bell Labs, with minor changes to the kernel make it more suitable for use in a production environment (e.g. better response to resource exhaustion, both disk and processing power); minor changes to applications (in particular, to the shell), to use those changes, were also needed.

Of more consequence were other changes found in the applications: several major new ones, such as 'make' and the Source Code Control System, and also changes to the shell. The latter included both functionality improvement, mostly for use in shell programming; and also increased efficiency there (in part by making control flow operations 'built-ins') - the PWB machines had large user communities, and were heavily loaded; extensive use was made of shell programs (to the point that roughly 80% of the commands executed on the PWB systems came from within shell scripts). Existing applications, notably UNIX's native text processing tools, were also heavily used.

The effort started in mid-1973 after a suggestion by M. L. Ivie, acquiring its first PDP-11/45 later that year. The intent was to provide a good environment for large programming projects, which were producing software for other, larger computers. Those machines were usually batch processing systems, so extensive remote job entry sub-systems were developed to interact with them (including handling the output). The PWB machines themselves provided tools for the programmers of each project to manage their source code, and collaborate with other individuals in their project.

By October, 1977 it ran on a group of seven PDP-11/45's and PDP-11/70's in a computing center of the Business Information Systems Program (BISP) group at Bell, with a user community of over 1,000 people. (The importance and ubiquity of the PWB systems as 'front ends' for the batch processing systems is shown by the estimate that 90+% of the card images submitted to the latter came from the PWB systems.) It had rapidly spread inside Bell, so by that point there were about 10 other PWB sites (some with more than one system) in Bell Labs, and a half-dozen more inside the Bell System (the population of PWB systems inside Bell overall doubled every 11 months for 4-1/2 years); others outside also ran it.

PWB 1.0

The first major version of PWB, 'PWB 1.0', was, as indicated above, a V6 variant. The operating system itself had only minor modifications:

  • a new system call, ustat() (one of 4 functions which shared the new pwbsys() system call), which allowed the amount of free space in a given file system to be discovered (to prevent un-noticed file truncation when a file system was full)
  • another new system call, udata (also in pwbsys(), along with calls to retrieve the system's name, and modify file times), which was used to hold the user's name and home directory in the process' 'user segment' (a file containing a 'search path' for commands was also added to the home directory, mostly for use by the shell)
  • an improved disk device driver to maximize the drives' throughput (primarily by keeping per-drive request queues)

Other kernel changes

The PWB 1.0 kernel includes a number of other changes, compared to V6, but it is not clear if they were done by the PWB project, or if they were done by Research personnel for their own use, as part of their program of continuous system improvement - after V6 was released, but before PWB copied the system. (V6 was released in May 1975, but PWB 1.0, the code examined for this list, was released on July 1, 1977.) Major changes included:

  • addition of the access(), tell(), alarm(), pause() and setpgrp() system calls (these seem to have been removed from V6; as the entries in sysent.c are there, but blank)
  • the exec() system call was changed to temporarily hold its arguments in swap space, rather than doing so in disk buffers; this allowed use of much larger argument lists to exec() (V6 had limited the number of processes allowed to be in an exec() call simultaneously, to prevent deadlocks)
  • improved locking on use of 'pure texts' (shared copies of read-only executable binaries)
  • changes to the logic for swapping processes in and out
  • support for 'huge' files (which use double-indirect blocks) was removed

The first two changes in the list, and the last, would have been visible to users; the others were purely internal.

(The rationale for the removal of the support for 'huge' files is not known; removal of that code saved only a small amount of space in the kernel. Without them, the largest file supported was 512*256*8=1,048,576 bytes, and it is likely that given the use to which PWB systems were put, larger files were not needed.)

User-visible compatability

PWB supports all the standard V6 system calls. Most V6 applications will run without object code modification on PWB 1.0.

PWB 2.0

The next major version of PWB, 'PWB 2.0', was a Unix Seventh Edition variant. This version is apparently no longer extant, and nothing is known of it.

External links