|
|
1.1 ! root 1: .\" Copyright (c) 1983 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)0.t 6.6 (Berkeley) 5/13/86 ! 6: .\" ! 7: .if n .ND ! 8: .TL ! 9: Berkeley Software Architecture Manual ! 10: .br ! 11: 4.3BSD Edition ! 12: .AU ! 13: William Joy, Robert Fabry, ! 14: .AU ! 15: Samuel Leffler, M. Kirk McKusick, ! 16: .AU ! 17: Michael Karels ! 18: .AI ! 19: Computer Systems Research Group ! 20: Computer Science Division ! 21: Department of Electrical Engineering and Computer Science ! 22: University of California, Berkeley ! 23: Berkeley, CA 94720 ! 24: .EH 'PS1:6-%''4.3BSD Architecture Manual' ! 25: .OH '4.3BSD Architecture Manual''PS1:6-%' ! 26: .AB ! 27: .FS ! 28: * UNIX is a trademark of Bell Laboratories. ! 29: .FE ! 30: This document summarizes the facilities ! 31: provided by the 4.3BSD version of the UNIX\|* operating system. ! 32: It does not attempt to act as a tutorial for use of the system ! 33: nor does it attempt to explain or justify the design of the ! 34: system facilities. ! 35: It gives neither motivation nor implementation details, ! 36: in favor of brevity. ! 37: .PP ! 38: The first section describes the basic kernel functions ! 39: provided to a UNIX process: process naming and protection, ! 40: memory management, software interrupts, ! 41: object references (descriptors), time and statistics functions, ! 42: and resource controls. ! 43: These facilities, as well as facilities for ! 44: bootstrap, shutdown and process accounting, ! 45: are provided solely by the kernel. ! 46: .PP ! 47: The second section describes the standard system ! 48: abstractions for ! 49: files and file systems, ! 50: communication, ! 51: terminal handling, ! 52: and process control and debugging. ! 53: These facilities are implemented by the operating system or by ! 54: network server processes. ! 55: .AE ! 56: .LP ! 57: .bp ! 58: .ft B ! 59: .br ! 60: .sv 2 ! 61: .ce ! 62: TABLE OF CONTENTS ! 63: .ft R ! 64: .LP ! 65: .sp 1 ! 66: .nf ! 67: .B "Introduction." ! 68: .LP ! 69: .if t .sp .5v ! 70: .nf ! 71: .B "0. Notation and types" ! 72: .LP ! 73: .if t .sp .5v ! 74: .nf ! 75: .B "1. Kernel primitives" ! 76: .LP ! 77: .if t .sp .5v ! 78: .nf ! 79: .nf ! 80: \fB1.1. Processes and protection\fP ! 81: 1.1.1. Host and process identifiers ! 82: 1.1.2. Process creation and termination ! 83: 1.1.3. User and group ids ! 84: 1.1.4. Process groups ! 85: .LP ! 86: .nf ! 87: \fB1.2. Memory management\fP ! 88: 1.2.1. Text, data and stack ! 89: 1.2.2. Mapping pages ! 90: 1.2.3. Page protection control ! 91: 1.2.4. Giving and getting advice ! 92: 1.2.5. Protection primitives ! 93: .LP ! 94: .if t .sp .5v ! 95: .nf ! 96: \fB1.3. Signals\fP ! 97: 1.3.1. Overview ! 98: 1.3.2. Signal types ! 99: 1.3.3. Signal handlers ! 100: 1.3.4. Sending signals ! 101: 1.3.5. Protecting critical sections ! 102: 1.3.6. Signal stacks ! 103: .LP ! 104: .if t .sp .5v ! 105: .nf ! 106: \fB1.4. Timing and statistics\fP ! 107: 1.4.1. Real time ! 108: 1.4.2. Interval time ! 109: .LP ! 110: .if t .sp .5v ! 111: .nf ! 112: \fB1.5. Descriptors\fP ! 113: 1.5.1. The reference table ! 114: 1.5.2. Descriptor properties ! 115: 1.5.3. Managing descriptor references ! 116: 1.5.4. Multiplexing requests ! 117: 1.5.5. Descriptor wrapping ! 118: .LP ! 119: .if t .sp .5v ! 120: .nf ! 121: \fB1.6. Resource controls\fP ! 122: 1.6.1. Process priorities ! 123: 1.6.2. Resource utilization ! 124: 1.6.3. Resource limits ! 125: .LP ! 126: .if t .sp .5v ! 127: .nf ! 128: \fB1.7. System operation support\fP ! 129: 1.7.1. Bootstrap operations ! 130: 1.7.2. Shutdown operations ! 131: 1.7.3. Accounting ! 132: .bp ! 133: .LP ! 134: .if t .sp .5v ! 135: .sp 1 ! 136: .nf ! 137: \fB2. System facilities\fP ! 138: .LP ! 139: .if t .sp .5v ! 140: .nf ! 141: \fB2.1. Generic operations\fP ! 142: 2.1.1. Read and write ! 143: 2.1.2. Input/output control ! 144: 2.1.3. Non-blocking and asynchronous operations ! 145: .LP ! 146: .if t .sp .5v ! 147: .nf ! 148: \fB2.2. File system\fP ! 149: 2.2.1 Overview ! 150: 2.2.2. Naming ! 151: 2.2.3. Creation and removal ! 152: 2.2.3.1. Directory creation and removal ! 153: 2.2.3.2. File creation ! 154: 2.2.3.3. Creating references to devices ! 155: 2.2.3.4. Portal creation ! 156: 2.2.3.6. File, device, and portal removal ! 157: 2.2.4. Reading and modifying file attributes ! 158: 2.2.5. Links and renaming ! 159: 2.2.6. Extension and truncation ! 160: 2.2.7. Checking accessibility ! 161: 2.2.8. Locking ! 162: 2.2.9. Disc quotas ! 163: .LP ! 164: .if t .sp .5v ! 165: .nf ! 166: \fB2.3. Interprocess communication\fP ! 167: 2.3.1. Interprocess communication primitives ! 168: 2.3.1.1.\0 Communication domains ! 169: 2.3.1.2.\0 Socket types and protocols ! 170: 2.3.1.3.\0 Socket creation, naming and service establishment ! 171: 2.3.1.4.\0 Accepting connections ! 172: 2.3.1.5.\0 Making connections ! 173: 2.3.1.6.\0 Sending and receiving data ! 174: 2.3.1.7.\0 Scatter/gather and exchanging access rights ! 175: 2.3.1.8.\0 Using read and write with sockets ! 176: 2.3.1.9.\0 Shutting down halves of full-duplex connections ! 177: 2.3.1.10.\0 Socket and protocol options ! 178: 2.3.2. UNIX domain ! 179: 2.3.2.1. Types of sockets ! 180: 2.3.2.2. Naming ! 181: 2.3.2.3. Access rights transmission ! 182: 2.3.3. INTERNET domain ! 183: 2.3.3.1. Socket types and protocols ! 184: 2.3.3.2. Socket naming ! 185: 2.3.3.3. Access rights transmission ! 186: 2.3.3.4. Raw access ! 187: .LP ! 188: .if t .sp .5v ! 189: .nf ! 190: \fB2.4. Terminals and devices\fP ! 191: 2.4.1. Terminals ! 192: 2.4.1.1. Terminal input ! 193: 2.4.1.1.1 Input modes ! 194: 2.4.1.1.2 Interrupt characters ! 195: 2.4.1.1.3 Line editing ! 196: 2.4.1.2. Terminal output ! 197: 2.4.1.3. Terminal control operations ! 198: 2.4.1.4. Terminal hardware support ! 199: 2.4.2. Structured devices ! 200: 2.4.3. Unstructured devices ! 201: .LP ! 202: .if t .sp .5v ! 203: .nf ! 204: \fB2.5. Process control and debugging\fP ! 205: .LP ! 206: .if t .sp .5v ! 207: .nf ! 208: \fBI. Summary of facilities\fP ! 209: .LP ! 210: .de sh ! 211: .ds RH \\$1 ! 212: .bp ! 213: .NH \\*(ss ! 214: \s+2\\$1\s0 ! 215: .PP ! 216: .PP ! 217: .. ! 218: .bp ! 219: .ds ss 1 ! 220: .de _d ! 221: .if t .ta .6i 2.1i 2.6i ! 222: .\" 2.94 went to 2.6, 3.64 to 3.30 ! 223: .if n .ta .84i 2.6i 3.30i ! 224: .. ! 225: .de _f ! 226: .if t .ta .5i 1.25i 2.5i 3.5i ! 227: .\" 3.5i went to 3.8i ! 228: .if n .ta .7i 1.75i 3.8i 4.8i ! 229: .. ! 230: .nr H1 -1 ! 231: .sh "Notation and types ! 232: .PP ! 233: The notation used to describe system calls is a variant of a ! 234: C language call, consisting of a prototype call followed by ! 235: declaration of parameters and results. ! 236: An additional keyword \fBresult\fP, not part of the normal C language, ! 237: is used to indicate which of the declared entities receive results. ! 238: As an example, consider the \fIread\fP call, as described in ! 239: section 2.1: ! 240: .DS ! 241: cc = read(fd, buf, nbytes); ! 242: result int cc; int fd; result char *buf; int nbytes; ! 243: .DE ! 244: The first line shows how the \fIread\fP routine is called, with ! 245: three parameters. ! 246: As shown on the second line \fIcc\fP is an integer and \fIread\fP also ! 247: returns information in the parameter \fIbuf\fP. ! 248: .PP ! 249: Description of all error conditions arising from each system call ! 250: is not provided here; they appear in the programmer's manual. ! 251: In particular, when accessed from the C language, ! 252: many calls return a characteristic \-1 value ! 253: when an error occurs, returning the error code in the global variable ! 254: \fIerrno\fP. ! 255: Other languages may present errors in different ways. ! 256: .PP ! 257: A number of system standard types are defined in the include file ! 258: .I <sys/types.h> ! 259: and used in the specifications here and in many C programs. ! 260: These include \fBcaddr_t\fP giving a memory address (typically as ! 261: a character pointer), ! 262: \fBoff_t\fP giving a file offset (typically as a long integer), ! 263: and a set of unsigned types \fBu_char\fP, \fBu_short\fP, \fBu_int\fP ! 264: and \fBu_long\fP, shorthand names for \fBunsigned char\fP, \fBunsigned ! 265: short\fP, etc.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.