Annotation of 43BSDReno/share/doc/ps2/01.cacm/p1, revision 1.1

1.1     ! root        1: .\"    @(#)p1  6.2 (Berkeley) 4/25/86
        !             2: .\"
        !             3: .OH 'The UNIX Time-Sharing System''PS2:1-%'
        !             4: .EH 'PS2:1-%''The UNIX Time-Sharing System'
        !             5: .ds n \s+2
        !             6: .hw above-mentioned
        !             7: .ds s \s-2
        !             8: .ds m \v'-.3'.\v'.3'
        !             9: .TL
        !            10: The UNIX
        !            11: Time-Sharing System\f1\s10\v'-.2n'*\v'.2n'\s0\fP
        !            12: .AU
        !            13: D. M. Ritchie and K. Thompson
        !            14: .AB
        !            15: .FS
        !            16: * Copyright 1974,
        !            17: Association for Computing Machinery, Inc.,
        !            18: reprinted by permission.
        !            19: This is a revised version of an article
        !            20: that appeared in Communications of the \*sACM\*n,
        !            21: .IT 17 ,
        !            22: No. 7 (July 1974), pp. 365-375.
        !            23: That article was a
        !            24: revised version of a paper presented
        !            25: at the Fourth \*sACM\*n Symposium on Operating
        !            26: Systems Principles,
        !            27: \*sIBM\*n Thomas J. Watson Research Center,
        !            28: Yorktown Heights,
        !            29: New York,
        !            30: October 15-17, 1973.
        !            31: .FE
        !            32: .UX
        !            33: is a general-purpose, multi-user, interactive
        !            34: operating system for the larger Digital Equipment Corporation
        !            35: \*sPDP\*n-11 and
        !            36: the Interdata 8/32 computers.
        !            37: It offers a number of features
        !            38: seldom found even in larger operating
        !            39: systems, including
        !            40: .IP i
        !            41: A hierarchical file system incorporating
        !            42: demountable volumes,
        !            43: .IP ii
        !            44: Compatible file, device, and inter-process I/O,
        !            45: .IP iii
        !            46: The ability to initiate asynchronous processes,
        !            47: .IP iv
        !            48: System command language selectable on a per-user basis,
        !            49: .IP v
        !            50: Over 100 subsystems including a dozen languages,
        !            51: .IP vi
        !            52: High degree of portability.
        !            53: .LP
        !            54: This paper discusses the nature
        !            55: and implementation of the file system
        !            56: and of the user command interface.
        !            57: .AE
        !            58: .NH
        !            59: INTRODUCTION
        !            60: .PP
        !            61: There have been four versions of
        !            62: the
        !            63: .UX
        !            64: time-sharing system.
        !            65: .hy 12
        !            66: The earliest (circa 1969-70) ran on
        !            67: the Digital Equipment Corporation \*sPDP\*n-7 and -9 computers.
        !            68: The second version ran on the unprotected
        !            69: \*sPDP\*n-11/20 computer.
        !            70: The third incorporated multiprogramming and ran
        !            71: on the \*sPDP\*n-11/34, /40, /45, /60, and /70 computers;
        !            72: it is the one described in the previously published version
        !            73: of this paper, and is also the most widely used today.
        !            74: .hy 14
        !            75: This paper describes only the
        !            76: fourth, current
        !            77: system that runs on the \*sPDP\*n-11/70 and the
        !            78: Interdata 8/32 computers.
        !            79: In fact, the differences among the various systems is
        !            80: rather small;
        !            81: most of the revisions made to the originally published version of this
        !            82: paper,
        !            83: aside from those concerned with style,
        !            84: had to do with details of the implementation of the file system.
        !            85: .PP
        !            86: Since
        !            87: \*sPDP\*n-11
        !            88: .UX
        !            89: became operational
        !            90: in February, 1971,
        !            91: over 600 installations have been put into service.
        !            92: Most of them are engaged in applications such as
        !            93: computer science education,
        !            94: the preparation and formatting of documents
        !            95: and other textual material,
        !            96: the collection and processing of trouble data
        !            97: from various switching machines within the Bell System,
        !            98: and recording and checking telephone service
        !            99: orders.
        !           100: Our own installation is used mainly for research
        !           101: in operating systems, languages,
        !           102: computer networks,
        !           103: and other topics in computer science, and also for
        !           104: document preparation.
        !           105: .PP
        !           106: Perhaps the most important achievement of
        !           107: .UX
        !           108: is to demonstrate
        !           109: that
        !           110: a powerful operating system for interactive use
        !           111: need not be expensive either in equipment or in human
        !           112: effort:
        !           113: it
        !           114: can run on hardware costing as little as $40,000, and
        !           115: less than two man-years were spent on the main system
        !           116: software.
        !           117: We hope, however, that users find
        !           118: that the
        !           119: most important characteristics of the system
        !           120: are its simplicity, elegance, and ease of use.
        !           121: .PP
        !           122: Besides the operating system proper, some major programs
        !           123: available under
        !           124: .UX
        !           125: are
        !           126: .DS
        !           127: .nf
        !           128: C compiler
        !           129: Text editor based on \*sQED\*n
        !           130: .[
        !           131: qed lampson
        !           132: .]
        !           133: Assembler, linking loader, symbolic debugger
        !           134: Phototypesetting and equation setting programs
        !           135: .[
        !           136: cherry kernighan typesetting mathematics cacm
        !           137: .]
        !           138: .[
        !           139: kernighan lesk ossanna document preparation bstj
        !           140: %Q This issue
        !           141: .]
        !           142: .fi
        !           143: .in +3n
        !           144: .ll -5n
        !           145: .ti -3n
        !           146: Dozens of languages including
        !           147: Fortran 77, Basic, Snobol, \*sAPL\*n, Algol 68, M6, \*sTMG\*n, Pascal
        !           148: .in
        !           149: .ll
        !           150: .DE
        !           151: There is a host of maintenance, utility, recreation and novelty programs,
        !           152: all written locally.
        !           153: The
        !           154: .UX
        !           155: user community, which numbers in the thousands,
        !           156: has contributed many more programs and languages.
        !           157: It is worth noting that the system is totally self-supporting.
        !           158: All
        !           159: .UX
        !           160: software is maintained on
        !           161: the
        !           162: system;
        !           163: likewise, this paper and all other
        !           164: documents
        !           165: in this issue
        !           166: were generated and formatted by the
        !           167: .UX
        !           168: editor and text formatting
        !           169: programs.
        !           170: .SH
        !           171: II. HARDWARE AND SOFTWARE ENVIRONMENT
        !           172: .PP
        !           173: The \*sPDP\*n-11/70 on which the Research
        !           174: .UX
        !           175: system is installed is a 16-bit
        !           176: word (8-bit byte) computer with 768K bytes of core memory;
        !           177: the system kernel
        !           178: occupies 90K bytes
        !           179: about equally divided between code
        !           180: and data tables.
        !           181: This system, however, includes a very large number of
        !           182: device drivers
        !           183: and enjoys a generous allotment
        !           184: of space for I/O buffers and system tables;
        !           185: a minimal system capable of running the software
        !           186: mentioned above can
        !           187: require as little as 96K bytes
        !           188: of core altogether.
        !           189: There are even larger installations;
        !           190: see the description of the
        !           191: \*sPWB/UNIX\*n systems,
        !           192: .[
        !           193: dolotta mashey workbench software engineering
        !           194: .]
        !           195: .[
        !           196: dolotta haight mashey workbench bstj
        !           197: %Q This issue
        !           198: .]
        !           199: for example.
        !           200: There are also much smaller, though somewhat restricted,
        !           201: versions of the system.
        !           202: .[
        !           203: lycklama microprocessor bstj
        !           204: %Q This issue
        !           205: .]
        !           206: .PP
        !           207: Our own \*sPDP\*n-11 has two
        !           208: 200-Mb moving-head disks
        !           209: for file system storage and swapping.
        !           210: There are 20 variable-speed
        !           211: communications interfaces
        !           212: attached to 300- and 1200-baud data sets,
        !           213: and an additional 12 communication lines
        !           214: hard-wired to 9600-baud terminals and
        !           215: satellite computers.
        !           216: There are also several 2400- and 4800-baud
        !           217: synchronous communication interfaces
        !           218: used for machine-to-machine file transfer.
        !           219: Finally, there is a variety
        !           220: of miscellaneous
        !           221: devices including
        !           222: nine-track magnetic tape,
        !           223: a line printer,
        !           224: a voice synthesizer,
        !           225: a phototypesetter,
        !           226: a digital switching network,
        !           227: and a chess machine.
        !           228: .PP
        !           229: The preponderance of
        !           230: .UX
        !           231: software is written in the
        !           232: abovementioned C language.
        !           233: .[
        !           234: c programming language kernighan ritchie prentice-hall
        !           235: .]
        !           236: Early versions of the operating system were written in assembly language,
        !           237: but during the summer of 1973, it was rewritten in C.
        !           238: The size of the new system was about one-third greater
        !           239: than that of the old.
        !           240: Since the new system not only became much easier to
        !           241: understand and to modify but also
        !           242: included
        !           243: many functional improvements,
        !           244: including multiprogramming and the ability to
        !           245: share reentrant code among several user programs,
        !           246: we consider this increase in size quite acceptable.
        !           247: .SH
        !           248: III. THE FILE SYSTEM
        !           249: .PP
        !           250: The most important role of
        !           251: the system
        !           252: is to provide
        !           253: a file system.
        !           254: From the point of view of the user, there
        !           255: are three kinds of files: ordinary disk files,
        !           256: directories, and special files.
        !           257: .SH
        !           258: 3.1 Ordinary files
        !           259: .PP
        !           260: A file
        !           261: contains whatever information the user places on it,
        !           262: for example, symbolic or binary
        !           263: (object) programs.
        !           264: No particular structuring is expected by the system.
        !           265: A file of text consists simply of a string
        !           266: of characters, with lines demarcated by the newline character.
        !           267: Binary programs are sequences of words as
        !           268: they will appear in core memory when the program
        !           269: starts executing.
        !           270: A few user programs manipulate files with more
        !           271: structure;
        !           272: for example, the assembler generates, and the loader
        !           273: expects, an object file in a particular format.
        !           274: However,
        !           275: the structure of files is controlled by
        !           276: the programs that use them, not by the system.
        !           277: .SH
        !           278: 3.2 Directories
        !           279: .PP
        !           280: Directories provide
        !           281: the mapping between the names of files
        !           282: and the files themselves, and thus
        !           283: induce a structure on the file system as a whole.
        !           284: Each user has a directory of his own files;
        !           285: he may also create subdirectories to contain
        !           286: groups of files conveniently treated together.
        !           287: A directory behaves exactly like an ordinary file except that it
        !           288: cannot be written on by unprivileged programs, so that the system
        !           289: controls the contents of directories.
        !           290: However, anyone with
        !           291: appropriate permission may read a directory just like any other file.
        !           292: .PP
        !           293: The system maintains several directories
        !           294: for its own use.
        !           295: One of these is the
        !           296: .UL root
        !           297: directory.
        !           298: All files in the system can be found by tracing
        !           299: a path through a chain of directories
        !           300: until the desired file is reached.
        !           301: The starting point for such searches is often the
        !           302: .UL root .
        !           303: Other system directories contain all the programs provided
        !           304: for general use; that is, all the
        !           305: .IT commands .
        !           306: As will be seen, however, it is by no means necessary
        !           307: that a program reside in one of these directories for it
        !           308: to be executed.
        !           309: .PP
        !           310: Files are named by sequences of 14 or
        !           311: fewer characters.
        !           312: When the name of a file is specified to the
        !           313: system, it may be in the form of a
        !           314: .IT path
        !           315: .IT name ,
        !           316: which
        !           317: is a sequence of directory names separated by slashes, ``/\^'',
        !           318: and ending in a file name.
        !           319: If the sequence begins with a slash, the search begins in the
        !           320: root directory.
        !           321: The name
        !           322: .UL /alpha/beta/gamma
        !           323: causes the system to search
        !           324: the root for directory
        !           325: .UL alpha ,
        !           326: then to search
        !           327: .UL alpha
        !           328: for
        !           329: .UL beta ,
        !           330: finally to find
        !           331: .UL gamma
        !           332: in
        !           333: .UL beta .
        !           334: .UL \&gamma
        !           335: may be an ordinary file, a directory, or a special
        !           336: file.
        !           337: As a limiting case, the name ``/\^'' refers to the root itself.
        !           338: .PP
        !           339: A path name not starting with ``/\^'' causes the system to begin the
        !           340: search in the user's current directory.
        !           341: Thus, the name
        !           342: .UL alpha/beta
        !           343: specifies the file named
        !           344: .UL beta
        !           345: in
        !           346: subdirectory
        !           347: .UL alpha
        !           348: of the current
        !           349: directory.
        !           350: The simplest kind of name, for example,
        !           351: .UL alpha ,
        !           352: refers to a file that itself is found in the current
        !           353: directory.
        !           354: As another limiting case, the null file name refers
        !           355: to the current directory.
        !           356: .PP
        !           357: The same non-directory file may appear in several directories under
        !           358: possibly different names.
        !           359: This feature is called
        !           360: .IT linking ;
        !           361: a directory entry for a file is sometimes called a link.
        !           362: The
        !           363: .UX
        !           364: system
        !           365: differs from other systems in which linking is permitted
        !           366: in that all links to a file have equal status.
        !           367: That is, a file does not exist within a particular directory;
        !           368: the directory entry for a file consists merely
        !           369: of its name and a pointer to the information actually
        !           370: describing the file.
        !           371: Thus a file exists independently of any
        !           372: directory entry, although in practice a file is made to
        !           373: disappear along with the last link to it.
        !           374: .PP
        !           375: Each directory always has at least two entries.
        !           376: The name
        !           377: ``\|\fB.\|\fP'' in each directory refers to the directory itself.
        !           378: Thus a program
        !           379: may read the current directory under the name ``\fB\|.\|\fP'' without knowing
        !           380: its complete path name.
        !           381: The name ``\fB\|.\|.\|\fP'' by convention refers to the parent of the
        !           382: directory in which it appears, that is, to the directory in which
        !           383: it was created.
        !           384: .PP
        !           385: The directory structure is constrained to have the form
        !           386: of a rooted tree.
        !           387: Except for the special entries ``\|\fB\|.\|\fP'' and ``\fB\|.\|.\|\fP'', each directory
        !           388: must appear as an entry in exactly one other directory, which is its
        !           389: parent.
        !           390: The reason for this is to simplify the writing of programs
        !           391: that visit subtrees of the directory structure, and more
        !           392: important, to avoid the separation of portions of the hierarchy.
        !           393: If arbitrary links to directories were permitted, it would
        !           394: be quite difficult to detect when the last connection from
        !           395: the root to a directory was severed.
        !           396: .SH
        !           397: 3.3 Special files
        !           398: .PP
        !           399: Special files constitute the most unusual feature of the
        !           400: .UX
        !           401: file system.
        !           402: Each supported I/O device
        !           403: is associated with at least one such file.
        !           404: Special files are read and written just like ordinary
        !           405: disk files, but requests to read or write result in activation of the associated
        !           406: device.
        !           407: An entry for each special file resides in directory
        !           408: .UL /dev ,
        !           409: although a link may be made to one of these files
        !           410: just as it may to an ordinary file.
        !           411: Thus, for example,
        !           412: to write on a magnetic tape
        !           413: one may write on the file
        !           414: .UL /dev/mt .
        !           415: Special files exist for each communication line, each disk,
        !           416: each tape drive,
        !           417: and for physical main memory.
        !           418: Of course,
        !           419: the active disks
        !           420: and the memory special file are protected from
        !           421: indiscriminate access.
        !           422: .PP
        !           423: There is a threefold advantage in treating
        !           424: I/O devices this way:
        !           425: file and device I/O
        !           426: are as similar as possible;
        !           427: file and device names have the same
        !           428: syntax and meaning, so that
        !           429: a program expecting a file name
        !           430: as a parameter can be passed a device
        !           431: name; finally,
        !           432: special files are subject to the same
        !           433: protection mechanism as regular files.
        !           434: .SH
        !           435: 3.4 Removable file systems
        !           436: .PP
        !           437: Although the root of the file system is always stored on the same
        !           438: device,
        !           439: it is not necessary that the entire file system hierarchy
        !           440: reside on this device.
        !           441: There is a
        !           442: .UL mount
        !           443: system request with two arguments:
        !           444: the name of an existing ordinary file, and the name of a special
        !           445: file whose associated
        !           446: storage volume (e.g., a disk pack) should have the structure
        !           447: of an independent file system
        !           448: containing its own directory hierarchy.
        !           449: The effect of
        !           450: .UL mount
        !           451: is to cause
        !           452: references to the heretofore ordinary file
        !           453: to refer instead to the root directory
        !           454: of the file system on the removable volume.
        !           455: In effect,
        !           456: .UL mount
        !           457: replaces a leaf of the hierarchy tree (the ordinary file)
        !           458: by a whole new subtree (the hierarchy stored on the
        !           459: removable volume).
        !           460: After the
        !           461: .UL mount ,
        !           462: there is virtually no distinction
        !           463: between files on the removable volume and those in the
        !           464: permanent file system.
        !           465: In our installation, for example,
        !           466: the root directory resides
        !           467: on a small partition of one of
        !           468: our disk drives,
        !           469: while the other drive,
        !           470: which contains the user's files,
        !           471: is mounted by the system initialization
        !           472: sequence.
        !           473: A mountable file system is generated by
        !           474: writing on its corresponding special file.
        !           475: A utility program is available to create
        !           476: an empty file system,
        !           477: or one may simply copy an existing file system.
        !           478: .PP
        !           479: There is only one exception to the rule of identical
        !           480: treatment of files on different devices:
        !           481: no link may exist between one file system hierarchy and
        !           482: another.
        !           483: This restriction is enforced so as to avoid
        !           484: the elaborate bookkeeping
        !           485: that would otherwise be required to assure removal of the links
        !           486: whenever the removable volume is dismounted.
        !           487: .SH
        !           488: 3.5 Protection
        !           489: .PP
        !           490: Although the access control scheme
        !           491: is quite simple, it has some unusual features.
        !           492: Each user of the system is assigned a unique
        !           493: user identification number.
        !           494: When a file is created, it is marked with
        !           495: the user \*sID\*n of its owner.
        !           496: Also given for new files
        !           497: is a set of ten protection bits.
        !           498: Nine of these specify
        !           499: independently read, write, and execute permission
        !           500: for the
        !           501: owner of the file,
        !           502: for other members of his group,
        !           503: and for all remaining users.
        !           504: .PP
        !           505: If the tenth bit is on, the system
        !           506: will temporarily change the user identification
        !           507: (hereafter, user \*sID\*n)
        !           508: of the current user to that of the creator of the file whenever
        !           509: the file is executed as a program.
        !           510: This change in user \*sID\*n is effective only
        !           511: during the execution of the program that calls for it.
        !           512: The set-user-\*sID\*n feature provides
        !           513: for privileged programs that may use files
        !           514: inaccessible to other users.
        !           515: For example, a program may keep an accounting file
        !           516: that should neither be read nor changed
        !           517: except by the program itself.
        !           518: If the set-user-\*sID\*n bit is on for the
        !           519: program, it may access the file although
        !           520: this access might be forbidden to other programs
        !           521: invoked by the given program's user.
        !           522: Since the actual user \*sID\*n
        !           523: of the invoker of any program
        !           524: is always available,
        !           525: set-user-\*sID\*n programs
        !           526: may take any measures desired to satisfy themselves
        !           527: as to their invoker's credentials.
        !           528: This mechanism is used to allow users to execute
        !           529: the carefully written
        !           530: commands
        !           531: that call privileged system entries.
        !           532: For example, there is a system entry
        !           533: invokable only by the ``super-user'' (below)
        !           534: that creates
        !           535: an empty directory.
        !           536: As indicated above, directories are expected to
        !           537: have entries for ``\fB\|.\|\fP'' and ``\fB\|.\|.\|\fP''.
        !           538: The command which creates a directory
        !           539: is owned by the super-user
        !           540: and has the set-user-\*sID\*n bit set.
        !           541: After it checks its invoker's authorization to
        !           542: create the specified directory,
        !           543: it creates it and makes the entries
        !           544: for ``\fB\|.\|\fP'' and ``\fB\|.\|.\|\fP''.
        !           545: .PP
        !           546: Because anyone may set the set-user-\*sID\*n
        !           547: bit on one of his own files,
        !           548: this mechanism is generally
        !           549: available without administrative intervention.
        !           550: For example,
        !           551: this protection scheme easily solves the \*sMOO\*n
        !           552: accounting problem posed by ``Aleph-null.''
        !           553: .[
        !           554: aleph null software practice
        !           555: .]
        !           556: .PP
        !           557: The system recognizes one particular user \*sID\*n (that of the ``super-user'') as
        !           558: exempt from the usual constraints on file access; thus (for example),
        !           559: programs may be written to dump and reload the file
        !           560: system without
        !           561: unwanted interference from the protection
        !           562: system.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.