Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-doc
Path: blob/main/documentation/content/en/books/design-44bsd/_index.po
18096 views
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2024-12-29 08:29-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#. type: YAML Front Matter: description
#: documentation/content/en/books/design-44bsd/_index.adoc:1
#, no-wrap
msgid "Donated by Addison-Wesley, provides a design overview of 4.4BSD, from which FreeBSD was originally derived"
msgstr ""

#. type: Title =
#: documentation/content/en/books/design-44bsd/_index.adoc:1
#: documentation/content/en/books/design-44bsd/_index.adoc:16
#, no-wrap
msgid "The Design and Implementation of the 4.4BSD Operating System"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:50
msgid "'''"
msgstr ""

#. type: Title ==
#: documentation/content/en/books/design-44bsd/_index.adoc:54
#, no-wrap
msgid "Design Overview of 4.4BSD"
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:57
#, no-wrap
msgid "4.4BSD Facilities and the Kernel"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:61
msgid ""
"The 4.4BSD kernel provides four basic facilities: processes, a filesystem, "
"communications, and system startup.  This section outlines where each of "
"these four basic services is described in this book."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:63
msgid ""
"Processes constitute a thread of control in an address space. Mechanisms for "
"creating, terminating, and otherwise controlling processes are described in "
"Chapter 4. The system multiplexes separate virtual-address spaces for each "
"process; this memory management is discussed in Chapter 5."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:64
msgid ""
"The user interface to the filesystem and devices is similar; common aspects "
"are discussed in Chapter 6. The filesystem is a set of named files, "
"organized in a tree-structured hierarchy of directories, and of operations "
"to manipulate them, as presented in Chapter 7. Files reside on physical "
"media such as disks. 4.4BSD supports several organizations of data on the "
"disk, as set forth in Chapter 8. Access to files on remote machines is the "
"subject of Chapter 9. Terminals are used to access the system; their "
"operation is the subject of Chapter 10."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:65
msgid ""
"Communication mechanisms provided by traditional UNIX systems include "
"simplex reliable byte streams between related processes (see pipes, Section "
"11.1), and notification of exceptional events (see signals, Section 4.7). "
"4.4BSD also has a general interprocess-communication facility. This "
"facility, described in Chapter 11, uses access mechanisms distinct from "
"those of the filesystem, but, once a connection is set up, a process can "
"access it as though it were a pipe. There is a general networking framework, "
"discussed in Chapter 12, that is normally used as a layer underlying the IPC "
"facility. Chapter 13 describes a particular networking implementation in "
"detail."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:66
msgid ""
"Any real operating system has operational issues, such as how to start it "
"running. Startup and operational issues are described in Chapter 14."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:70
msgid ""
"Sections 2.3 through 2.14 present introductory material related to Chapters "
"3 through 14.  We shall define terms, mention basic system calls, and "
"explore historical developments.  Finally, we shall give the reasons for "
"many major design decisions."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/design-44bsd/_index.adoc:71
#, no-wrap
msgid "The Kernel"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:78
msgid ""
"The _kernel_ is the part of the system that runs in protected mode and "
"mediates access by all user programs to the underlying hardware (e.g., CPU, "
"disks, terminals, network links) and software constructs (e.g., filesystem, "
"network protocols).  The kernel provides the basic system facilities; it "
"creates and manages processes, and provides functions to access the "
"filesystem and communication facilities.  These functions, called _system "
"calls_ appear to user processes as library subroutines.  These system calls "
"are the only interface that processes have to these facilities.  Details of "
"the system-call mechanism are given in Chapter 3, as are descriptions of "
"several kernel mechanisms that do not execute as the direct result of a "
"process doing a system call."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:84
msgid ""
"A _kernel_ in traditional operating-system terminology, is a small nucleus "
"of software that provides only the minimal facilities necessary for "
"implementing additional operating-system services.  In contemporary research "
"operating systems -- such as Chorus crossref:design-44bsd[biblio-rozier, "
"[Rozier et al, 1988]], Mach crossref:design-44bsd[biblio-accetta, [Accetta "
"et al, 1986]], Tunis crossref:design-44bsd[biblio-ewens, [Ewens et al, "
"1985]], and the V Kernel crossref:design-44bsd[biblio-cheriton, [Cheriton, "
"1988]] -- this division of functionality is more than just a logical one.  "
"Services such as filesystems and networking protocols are implemented as "
"client application processes of the nucleus or kernel."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:93
msgid ""
"The 4.4BSD kernel is not partitioned into multiple processes.  This basic "
"design decision was made in the earliest versions of UNIX.  The first two "
"implementations by Ken Thompson had no memory mapping, and thus made no "
"hardware-enforced distinction between user and kernel space crossref:"
"design-44bsd[biblio-ritchie, [Ritchie, 1988]].  A message-passing system "
"could have been implemented as readily as the actually implemented model of "
"kernel and user processes.  The monolithic kernel was chosen for simplicity "
"and performance.  And the early kernels were small; the inclusion of "
"facilities such as networking into the kernel has increased its size.  The "
"current trend in operating-systems research is to reduce the kernel size by "
"placing such services in user space."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:97
msgid ""
"Users ordinarily interact with the system through a command-language "
"interpreter, called a _shell_, and perhaps through additional user "
"application programs.  Such programs and the shell are implemented with "
"processes.  Details of such programs are beyond the scope of this book, "
"which instead concentrates almost exclusively on the kernel."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:100
msgid ""
"Sections 2.3 and 2.4 describe the services provided by the 4.4BSD kernel, "
"and give an overview of the latter's design.  Later chapters describe the "
"detailed design and implementation of these services as they appear in "
"4.4BSD."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:102
#, no-wrap
msgid "Kernel Organization"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:105
msgid ""
"In this section, we view the organization of the 4.4BSD kernel in two ways:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:108
msgid ""
"As a static body of software, categorized by the functionality offered by "
"the modules that make up the kernel"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:109
msgid ""
"By its dynamic operation, categorized according to the services provided to "
"users"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:112
msgid ""
"The largest part of the kernel implements the system services that "
"applications access through system calls.  In 4.4BSD, this software has been "
"organized according to the following:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:114
msgid ""
"Basic kernel facilities: timer and system-clock handling, descriptor "
"management, and process management"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:115
msgid "Memory-management support: paging and swapping"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:116
msgid ""
"Generic system interfaces: the I/O, control, and multiplexing operations "
"performed on descriptors"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:117
msgid ""
"The filesystem: files, directories, pathname translation, file locking, and "
"I/O buffer management"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:118
msgid ""
"Terminal-handling support: the terminal-interface driver and terminal line "
"disciplines"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:119
msgid "Interprocess-communication facilities: sockets"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:120
msgid ""
"Support for network communication: communication protocols and generic "
"network facilities, such as routing"
msgstr ""

#. type: Block title
#: documentation/content/en/books/design-44bsd/_index.adoc:121
#, no-wrap
msgid "Machine-independent software in the 4.4BSD kernel"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:125
#: documentation/content/en/books/design-44bsd/_index.adoc:165
#, no-wrap
msgid "Category"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:125
#: documentation/content/en/books/design-44bsd/_index.adoc:165
#, no-wrap
msgid "Lines of code"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:126
#: documentation/content/en/books/design-44bsd/_index.adoc:166
#, no-wrap
msgid "Percentage of kernel"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:126
#, no-wrap
msgid "headers"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:126
#, no-wrap
msgid "9,393"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:127
#, no-wrap
msgid "4.6"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:127
#, no-wrap
msgid "initialization"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:127
#, no-wrap
msgid "1,107"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:128
#, no-wrap
msgid "0.6"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:128
#, no-wrap
msgid "kernel facilities"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:128
#, no-wrap
msgid "8,793"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:129
#, no-wrap
msgid "4.4"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:129
#, no-wrap
msgid "generic interfaces"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:129
#, no-wrap
msgid "4,782"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:130
#, no-wrap
msgid "2.4"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:130
#, no-wrap
msgid "interprocess communication"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:130
#, no-wrap
msgid "4,540"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:131
#: documentation/content/en/books/design-44bsd/_index.adoc:136
#, no-wrap
msgid "2.2"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:131
#, no-wrap
msgid "terminal handling"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:131
#, no-wrap
msgid "3,911"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:132
#, no-wrap
msgid "1.9"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:132
#: documentation/content/en/books/design-44bsd/_index.adoc:169
#, no-wrap
msgid "virtual memory"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:132
#, no-wrap
msgid "11,813"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:133
#, no-wrap
msgid "5.8"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:133
#, no-wrap
msgid "vnode management"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:133
#, no-wrap
msgid "7,954"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:134
#, no-wrap
msgid "3.9"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:134
#, no-wrap
msgid "filesystem naming"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:134
#, no-wrap
msgid "6,550"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:135
#, no-wrap
msgid "3.2"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:135
#, no-wrap
msgid "fast filestore"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:135
#, no-wrap
msgid "4,365"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:136
#, no-wrap
msgid "log-structure filestore"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:136
#, no-wrap
msgid "4,337"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:137
#: documentation/content/en/books/design-44bsd/_index.adoc:139
#, no-wrap
msgid "2.1"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:137
#, no-wrap
msgid "memory-based filestore"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:137
#, no-wrap
msgid "645"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:138
#, no-wrap
msgid "0.3"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:138
#, no-wrap
msgid "cd9660 filesystem"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:138
#, no-wrap
msgid "4,177"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:139
#, no-wrap
msgid "miscellaneous filesystems (10)"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:139
#, no-wrap
msgid "12,695"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:140
#, no-wrap
msgid "6.3"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:140
#, no-wrap
msgid "network filesystem"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:140
#, no-wrap
msgid "17,199"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:141
#, no-wrap
msgid "8.5"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:141
#, no-wrap
msgid "network communication"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:141
#, no-wrap
msgid "8,630"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:142
#, no-wrap
msgid "4.3"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:142
#, no-wrap
msgid "internet protocols"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:142
#, no-wrap
msgid "11,984"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:143
#, no-wrap
msgid "5.9"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:143
#, no-wrap
msgid "ISO protocols"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:143
#, no-wrap
msgid "23,924"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:144
#, no-wrap
msgid "11.8"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:144
#, no-wrap
msgid "X.25 protocols"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:144
#, no-wrap
msgid "10,626"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:145
#, no-wrap
msgid "5.3"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:145
#, no-wrap
msgid "XNS protocols"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:145
#, no-wrap
msgid "5,192"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:146
#, no-wrap
msgid "2.6"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:149
msgid ""
"Most of the software in these categories is machine independent and is "
"portable across different hardware architectures."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:154
msgid ""
"The machine-dependent aspects of the kernel are isolated from the mainstream "
"code.  In particular, none of the machine-independent code contains "
"conditional code for specific architecture.  When an architecture-dependent "
"action is needed, the machine-independent code calls an architecture-"
"dependent function that is located in the machine-dependent code.  The "
"software that is machine dependent includes"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:156
msgid "Low-level system-startup actions"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:157
msgid "Trap and fault handling"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:158
msgid "Low-level manipulation of the run-time context of a process"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:159
msgid "Configuration and initialization of hardware devices"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:160
msgid "Run-time support for I/O devices"
msgstr ""

#. type: Block title
#: documentation/content/en/books/design-44bsd/_index.adoc:161
#, no-wrap
msgid "Machine-dependent software for the HP300 in the 4.4BSD kernel"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:166
#, no-wrap
msgid "machine dependent headers"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:166
#, no-wrap
msgid "1,562"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:167
#, no-wrap
msgid "0.8"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:167
#, no-wrap
msgid "device driver headers"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:167
#, no-wrap
msgid "3,495"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:168
#, no-wrap
msgid "1.7"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:168
#, no-wrap
msgid "device driver source"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:168
#, no-wrap
msgid "17,506"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:169
#, no-wrap
msgid "8.7"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:169
#, no-wrap
msgid "3,087"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:170
#: documentation/content/en/books/design-44bsd/_index.adoc:172
#, no-wrap
msgid "1.5"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:170
#, no-wrap
msgid "other machine dependent"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:170
#, no-wrap
msgid "6,287"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:171
#, no-wrap
msgid "3.1"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:171
#, no-wrap
msgid "routines in assembly language"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:171
#, no-wrap
msgid "3,014"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:172
#, no-wrap
msgid "HP/UX compatibility"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:172
#, no-wrap
msgid "4,683"
msgstr ""

#. type: Table
#: documentation/content/en/books/design-44bsd/_index.adoc:173
#, no-wrap
msgid "2.3"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:179
msgid ""
"crossref:design-44bsd[table-mach-indep, Machine-independent software in the "
"4.4BSD kernel] summarizes the machine-independent software that constitutes "
"the 4.4BSD kernel for the HP300.  The numbers in column 2 are for lines of C "
"source code, header files, and assembly language.  Virtually all the "
"software in the kernel is written in the C programming language; less than 2 "
"percent is written in assembly language.  As the statistics in crossref:"
"design-44bsd[table-mach-dep, Machine-dependent software in the 4.4BSD "
"kernel] show, the machine-dependent software, excluding HP/UX and device "
"support, accounts for a minuscule 6.9 percent of the kernel."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:185
msgid ""
"Only a small part of the kernel is devoted to initializing the system.  This "
"code is used when the system is _bootstrapped_ into operation and is "
"responsible for setting up the kernel hardware and software environment (see "
"Chapter 14).  Some operating systems (especially those with limited physical "
"memory) discard or _overlay_ the software that performs these functions "
"after that software has been executed.  The 4.4BSD kernel does not reclaim "
"the memory used by the startup code because that memory space is barely 0.5 "
"percent of the kernel resources used on a typical machine.  Also, the "
"startup code does not appear in one place in the kernel -- it is scattered "
"throughout, and it usually appears in places logically associated with what "
"is being initialized."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:187
#, no-wrap
msgid "Kernel Services"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:197
msgid ""
"The boundary between the kernel- and user-level code is enforced by hardware-"
"protection facilities provided by the underlying hardware.  The kernel "
"operates in a separate address space that is inaccessible to user "
"processes.  Privileged operations -- such as starting I/O and halting the "
"central processing unit (CPU) -- are available to only the kernel.  "
"Applications request services from the kernel with _system calls_.  System "
"calls are used to cause the kernel to execute complicated operations, such "
"as writing data to secondary storage, and simple operations, such as "
"returning the current time of day.  All system calls appear _synchronous_ to "
"applications: The application does not run while the kernel does the actions "
"associated with a system call.  The kernel may finish some operations "
"associated with a system call after it has returned.  For example, a _write_ "
"system call will copy the data to be written from the user process to a "
"kernel buffer while the process waits, but will usually return from the "
"system call before the kernel buffer is written to the disk."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:206
msgid ""
"A system call usually is implemented as a hardware trap that changes the "
"CPU's execution mode and the current address-space mapping.  Parameters "
"supplied by users in system calls are validated by the kernel before being "
"used.  Such checking ensures the integrity of the system.  All parameters "
"passed into the kernel are copied into the kernel's address space, to ensure "
"that validated parameters are not changed as a side effect of the system "
"call.  System-call results are returned by the kernel, either in hardware "
"registers or by their values being copied to user-specified memory "
"addresses.  Like parameters passed into the kernel, addresses used for the "
"return of results must be validated to ensure that they are part of an "
"application's address space.  If the kernel encounters an error while "
"processing a system call, it returns an error code to the user.  For the C "
"programming language, this error code is stored in the global variable "
"_errno_, and the function that executed the system call returns the value -1."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:211
msgid ""
"User applications and the kernel operate independently of each other.  "
"4.4BSD does not store I/O control blocks or other operating-system-related "
"data structures in the application's address space.  Each user-level "
"application is provided an independent address space in which it executes.  "
"The kernel makes most state changes, such as suspending a process while "
"another is running, invisible to the processes involved."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:213
#, no-wrap
msgid "Process Management"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:222
msgid ""
"4.4BSD supports a multitasking environment.  Each task or thread of "
"execution is termed a _process_.  The _context_ of a 4.4BSD process consists "
"of user-level state, including the contents of its address space and the run-"
"time environment, and kernel-level state, which includes scheduling "
"parameters, resource controls, and identification information.  The context "
"includes everything used by the kernel in providing services for the "
"process.  Users can create processes, control the processes' execution, and "
"receive notification when the processes' execution status changes.  Every "
"process is assigned a unique value, termed a _process identifier_ (PID).  "
"This value is used by the kernel to identify a process when reporting status "
"changes to a user, and by a user when referencing a process in a system call."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:227
msgid ""
"The kernel creates a process by duplicating the context of another process.  "
"The new process is termed a _child process_ of the original _parent process_ "
"The context duplicated in process creation includes both the user-level "
"execution state of the process and the process's system state managed by the "
"kernel.  Important components of the kernel state are described in Chapter 4."
msgstr ""

#. type: Block title
#: documentation/content/en/books/design-44bsd/_index.adoc:229
#, no-wrap
msgid "Process lifecycle"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:231
msgid "image:fig1.png[Process lifecycle]"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:238
msgid ""
"The process lifecycle is depicted in crossref:design-44bsd[fig-process-"
"lifecycle,Process lifecycle].  A process may create a new process that is a "
"copy of the original by using the _fork_ system call.  The _fork_ call "
"returns twice: once in the parent process, where the return value is the "
"process identifier of the child, and once in the child process, where the "
"return value is 0.  The parent-child relationship induces a hierarchical "
"structure on the set of processes in the system.  The new process shares all "
"its parent's resources, such as file descriptors, signal-handling status, "
"and memory layout."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:242
msgid ""
"Although there are occasions when the new process is intended to be a copy "
"of the parent, the loading and execution of a different program is a more "
"useful and typical action.  A process can overlay itself with the memory "
"image of another program, passing to the newly created image a set of "
"parameters, using the system call _execve_.  One parameter is the name of a "
"file whose contents are in a format recognized by the system -- either a "
"binary-executable file or a file that causes the execution of a specified "
"interpreter program to process its contents."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:246
msgid ""
"A process may terminate by executing an _exit_ system call, sending 8 bits "
"of exit status to its parent.  If a process wants to communicate more than a "
"single byte of information with its parent, it must either set up an "
"interprocess-communication channel using pipes or sockets, or use an "
"intermediate file.  Interprocess communication is discussed extensively in "
"Chapter 11."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:251
msgid ""
"A process can suspend execution until any of its child processes terminate "
"using the _wait_ system call, which returns the PID and exit status of the "
"terminated child process.  A parent process can arrange to be notified by a "
"signal when a child process exits or terminates abnormally.  Using the "
"_wait4_ system call, the parent can retrieve information about the event "
"that caused termination of the child process and about resources consumed by "
"the process during its lifetime.  If a process is orphaned because its "
"parent exits before it is finished, then the kernel arranges for the child's "
"exit status to be passed back to a special system process _init_: see "
"Sections 3.1 and 14.6)."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:253
msgid ""
"The details of how the kernel creates and destroys processes are given in "
"Chapter 5."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:257
msgid ""
"Processes are scheduled for execution according to a _process-priority_ "
"parameter.  This priority is managed by a kernel-based scheduling "
"algorithm.  Users can influence the scheduling of a process by specifying a "
"parameter (_nice_) that weights the overall scheduling priority, but are "
"still obligated to share the underlying CPU resources according to the "
"kernel's scheduling policy."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/design-44bsd/_index.adoc:258
#, no-wrap
msgid "Signals"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:267
msgid ""
"The system defines a set of _signals_ that may be delivered to a process.  "
"Signals in 4.4BSD are modeled after hardware interrupts.  A process may "
"specify a user-level subroutine to be a _handler_ to which a signal should "
"be delivered.  When a signal is generated, it is blocked from further "
"occurrence while it is being _caught_ by the handler.  Catching a signal "
"involves saving the current process context and building a new one in which "
"to run the handler.  The signal is then delivered to the handler, which can "
"either abort the process or return to the executing process (perhaps after "
"setting a global variable).  If the handler returns, the signal is unblocked "
"and can be generated (and caught) again."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:271
msgid ""
"Alternatively, a process may specify that a signal is to be _ignored_, or "
"that a default action, as determined by the kernel, is to be taken.  The "
"default action of certain signals is to terminate the process.  This "
"termination may be accompanied by creation of a _core file_ that contains "
"the current memory image of the process for use in postmortem debugging."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:274
msgid ""
"Some signals cannot be caught or ignored.  These signals include _SIGKILL_, "
"which kills runaway processes, and the job-control signal _SIGSTOP_."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:279
msgid ""
"A process may choose to have signals delivered on a special stack so that "
"sophisticated software stack manipulations are possible.  For example, a "
"language supporting coroutines needs to provide a stack for each coroutine.  "
"The language run-time system can allocate these stacks by dividing up the "
"single stack provided by 4.4BSD.  If the kernel does not support a separate "
"signal stack, the space allocated for each coroutine must be expanded by the "
"amount of space required to catch a signal."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:284
msgid ""
"All signals have the same _priority_.  If multiple signals are pending "
"simultaneously, the order in which signals are delivered to a process is "
"implementation specific.  Signal handlers execute with the signal that "
"caused their invocation to be blocked, but other signals may yet occur.  "
"Mechanisms are provided so that processes can protect critical sections of "
"code against the occurrence of specified signals."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:286
msgid ""
"The detailed design and implementation of signals is described in Section "
"4.7."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/design-44bsd/_index.adoc:287
#, no-wrap
msgid "Process Groups and Sessions"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:294
msgid ""
"Processes are organized into _process groups_.  Process groups are used to "
"control access to terminals and to provide a means of distributing signals "
"to collections of related processes.  A process inherits its process group "
"from its parent process.  Mechanisms are provided by the kernel to allow a "
"process to alter its process group or the process group of its descendants.  "
"Creating a new process group is easy; the value of a new process group is "
"ordinarily the process identifier of the creating process."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:298
msgid ""
"The group of processes in a process group is sometimes referred to as a "
"_job_ and is manipulated by high-level system software, such as the shell.  "
"A common kind of job created by a shell is a _pipeline_ of several processes "
"connected by pipes, such that the output of the first process is the input "
"of the second, the output of the second is the input of the third, and so "
"forth.  The shell creates such a job by forking a process for each stage of "
"the pipeline, then putting all those processes into a separate process group."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:301
msgid ""
"A user process can send a signal to each process in a process group, as well "
"as to a single process.  A process in a specific process group may receive "
"software interrupts affecting the group, causing the group to suspend or "
"resume execution, or to be interrupted or terminated."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:309
msgid ""
"A terminal has a process-group identifier assigned to it.  This identifier "
"is normally set to the identifier of a process group associated with the "
"terminal.  A job-control shell may create a number of process groups "
"associated with the same terminal; the terminal is the _controlling "
"terminal_ for each process in these groups.  A process may read from a "
"descriptor for its controlling terminal only if the terminal's process-group "
"identifier matches that of the process.  If the identifiers do not match, "
"the process will be blocked if it attempts to read from the terminal.  By "
"changing the process-group identifier of the terminal, a shell can arbitrate "
"a terminal among several different jobs.  This arbitration is called _job "
"control_ and is described, with process groups, in Section 4.8."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:312
msgid ""
"Just as a set of related processes can be collected into a process group, a "
"set of process groups can be collected into a _session_.  The main uses for "
"sessions are to create an isolated environment for a daemon process and its "
"children, and to collect together a user's login shell and the jobs that "
"shell spawns."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:314
#, no-wrap
msgid "Memory Management"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:324
msgid ""
"Each process has its own private address space.  The address space is "
"initially divided into three logical segments: _text_, _data_, and _stack_.  "
"The text segment is read-only and contains the machine instructions of a "
"program.  The data and stack segments are both readable and writable.  The "
"data segment contains the initialized and uninitialized data portions of a "
"program, whereas the stack segment holds the application's run-time stack.  "
"On most machines, the stack segment is extended automatically by the kernel "
"as the process executes.  A process can expand or contract its data segment "
"by making a system call, whereas a process can change the size of its text "
"segment only when the segment's contents are overlaid with data from the "
"filesystem, or when debugging takes place.  The initial contents of the "
"segments of a child process are duplicates of the segments of a parent "
"process."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:332
msgid ""
"The entire contents of a process address space do not need to be resident "
"for a process to execute.  If a process references a part of its address "
"space that is not resident in main memory, the system _pages_ the necessary "
"information into memory.  When system resources are scarce, the system uses "
"a two-level approach to maintain available resources.  If a modest amount of "
"memory is available, the system will take memory resources away from "
"processes if these resources have not been used recently.  Should there be a "
"severe resource shortage, the system will resort to _swapping_ the entire "
"context of a process to secondary storage.  The _demand paging_ and "
"_swapping_ done by the system are effectively transparent to processes.  A "
"process may, however, advise the system about expected future memory "
"utilization as a performance aid."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/design-44bsd/_index.adoc:333
#, no-wrap
msgid "BSD Memory-Management Design Decisions"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:339
msgid ""
"The support of large sparse address spaces, mapped files, and shared memory "
"was a requirement for 4.2BSD.  An interface was specified, called _mmap_, "
"that allowed unrelated processes to request a shared mapping of a file into "
"their address spaces.  If multiple processes mapped the same file into their "
"address spaces, changes to the file's portion of an address space by one "
"process would be reflected in the area mapped by the other processes, as "
"well as in the file itself.  Ultimately, 4.2BSD was shipped without the "
"_mmap_ interface, because of pressure to make other features, such as "
"networking, available."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:346
msgid ""
"Further development of the _mmap_ interface continued during the work on "
"4.3BSD.  Over 40 companies and research groups participated in the "
"discussions leading to the revised architecture that was described in the "
"Berkeley Software Architecture Manual crossref:design-44bsd[biblio-"
"mckusick-1, [McKusick et al, 1994]].  Several of the companies have "
"implemented the revised interface crossref:design-44bsd[biblio-gingell, "
"[Gingell et al, 1987]]."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:353
msgid ""
"Once again, time pressure prevented 4.3BSD from providing an implementation "
"of the interface.  Although the latter could have been built into the "
"existing 4.3BSD virtual-memory system, the developers decided not to put it "
"in because that implementation was nearly 10 years old.  Furthermore, the "
"original virtual-memory design was based on the assumption that computer "
"memories were small and expensive, whereas disks were locally connected, "
"fast, large, and inexpensive.  Thus, the virtual-memory system was designed "
"to be frugal with its use of memory at the expense of generating extra disk "
"traffic.  In addition, the 4.3BSD implementation was riddled with VAX memory-"
"management hardware dependencies that impeded its portability to other "
"computer architectures.  Finally, the virtual-memory system was not designed "
"to support the tightly coupled multiprocessors that are becoming "
"increasingly common and important today."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:364
msgid ""
"Attempts to improve the old implementation incrementally seemed doomed to "
"failure.  A completely new design, on the other hand, could take advantage "
"of large memories, conserve disk transfers, and have the potential to run on "
"multiprocessors.  Consequently, the virtual-memory system was completely "
"replaced in 4.4BSD.  The 4.4BSD virtual-memory system is based on the Mach "
"2.0 VM system crossref:design-44bsd[biblio-tevanian, [Tevanian, 1987]]. with "
"updates from Mach 2.5 and Mach 3.0.  It features efficient support for "
"sharing, a clean separation of machine-independent and machine-dependent "
"features, as well as (currently unused) multiprocessor support.  Processes "
"can map files anywhere in their address space.  They can share parts of "
"their address space by doing a shared mapping of the same file.  Changes "
"made by one process are visible in the address space of the other process, "
"and also are written back to the file itself.  Processes can also request "
"private mappings of a file, which prevents any changes that they make from "
"being visible to other processes mapping the file or being written back to "
"the file itself."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:370
msgid ""
"Another issue with the virtual-memory system is the way that information is "
"passed into the kernel when a system call is made.  4.4BSD always copies "
"data from the process address space into a buffer in the kernel.  For read "
"or write operations that are transferring large quantities of data, doing "
"the copy can be time consuming.  An alternative to doing the copying is to "
"remap the process memory into the kernel.  The 4.4BSD kernel always copies "
"the data for several reasons:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:372
msgid ""
"Often, the user data are not page aligned and are not a multiple of the "
"hardware page length."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:373
msgid ""
"If the page is taken away from the process, it will no longer be able to "
"reference that page. Some programs depend on the data remaining in the "
"buffer even after those data have been written."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:374
msgid ""
"If the process is allowed to keep a copy of the page (as it is in current "
"4.4BSD semantics), the page must be made _copy-on-write_. A copy-on-write "
"page is one that is protected against being written by being made read-only. "
"If the process attempts to modify the page, the kernel gets a write fault. "
"The kernel then makes a copy of the page that the process can modify. "
"Unfortunately, the typical process will immediately try to write new data to "
"its output buffer, forcing the data to be copied anyway."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:375
msgid ""
"When pages are remapped to new virtual-memory addresses, most memory-"
"management hardware requires that the hardware address-translation cache be "
"purged selectively. The cache purges are often slow. The net effect is that "
"remapping is slower than copying for blocks of data less than 4 to 8 Kbyte."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:378
msgid ""
"The biggest incentives for memory mapping are the needs for accessing big "
"files and for passing large quantities of data between processes.  The "
"_mmap_ interface provides a way for both of these tasks to be done without "
"copying."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/design-44bsd/_index.adoc:379
#, no-wrap
msgid "Memory Management Inside the Kernel"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:388
msgid ""
"The kernel often does allocations of memory that are needed for only the "
"duration of a single system call.  In a user process, such short-term memory "
"would be allocated on the run-time stack.  Because the kernel has a limited "
"run-time stack, it is not feasible to allocate even moderate-sized blocks of "
"memory on it.  Consequently, such memory must be allocated through a more "
"dynamic mechanism.  For example, when the system must translate a pathname, "
"it must allocate a 1-Kbyte buffer to hold the name.  Other blocks of memory "
"must be more persistent than a single system call, and thus could not be "
"allocated on the stack even if there was space.  An example is protocol-"
"control blocks that remain throughout the duration of a network connection."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:398
msgid ""
"Demands for dynamic memory allocation in the kernel have increased as more "
"services have been added.  A generalized memory allocator reduces the "
"complexity of writing code inside the kernel.  Thus, the 4.4BSD kernel has a "
"single memory allocator that can be used by any part of the system.  It has "
"an interface similar to the C library routines _malloc_ and _free_ that "
"provide memory allocation to application programs crossref:"
"design-44bsd[biblio-mckusick-2, [McKusick & Karels, 1988]].  Like the C "
"library interface, the allocation routine takes a parameter specifying the "
"size of memory that is needed.  The range of sizes for memory requests is "
"not constrained; however, physical memory is allocated and is not paged.  "
"The free routine takes a pointer to the storage being freed, but does not "
"require the size of the piece of memory being freed."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:400
#, no-wrap
msgid "I/O System"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:404
msgid ""
"The basic model of the UNIX I/O system is a sequence of bytes that can be "
"accessed either randomly or sequentially.  There are no _access methods_ and "
"no _control blocks_ in a typical UNIX user process."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:412
msgid ""
"Different programs expect various levels of structure, but the kernel does "
"not impose structure on I/O.  For instance, the convention for text files is "
"lines of ASCII characters separated by a single newline character (the ASCII "
"line-feed character), but the kernel knows nothing about this convention.  "
"For the purposes of most programs, the model is further simplified to being "
"a stream of data bytes, or an _I/O stream_.  It is this single common data "
"form that makes the characteristic UNIX tool-based approach work crossref:"
"design-44bsd[biblio-kernighan, [Kernighan & Pike, 1984]].  An I/O stream "
"from one program can be fed as input to almost any other program.  (This "
"kind of traditional UNIX I/O stream should not be confused with the Eighth "
"Edition stream I/O system or with the System V, Release 3 STREAMS, both of "
"which can be accessed as traditional I/O streams.)"
msgstr ""

#. type: Title ====
#: documentation/content/en/books/design-44bsd/_index.adoc:413
#, no-wrap
msgid "Descriptors and I/O"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:421
msgid ""
"UNIX processes use _descriptors_ to reference I/O streams.  Descriptors are "
"small unsigned integers obtained from the _open_ and _socket_ system calls.  "
"The _open_ system call takes as arguments the name of a file and a "
"permission mode to specify whether the file should be open for reading or "
"for writing, or for both.  This system call also can be used to create a "
"new, empty file.  A _read_ or _write_ system call can be applied to a "
"descriptor to transfer data.  The _close_ system call can be used to "
"deallocate any descriptor."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:424
msgid ""
"Descriptors represent underlying objects supported by the kernel, and are "
"created by system calls specific to the type of object.  In 4.4BSD, three "
"kinds of objects can be represented by descriptors: files, pipes, and "
"sockets."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:426
msgid ""
"A _file_ is a linear array of bytes with at least one name. A file exists "
"until all its names are deleted explicitly and no process holds a descriptor "
"for it. A process acquires a descriptor for a file by opening that file's "
"name with the _open_ system call. I/O devices are accessed as files."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:427
msgid ""
"A _pipe_ is a linear array of bytes, as is a file, but it is used solely as "
"an I/O stream, and it is unidirectional. It also has no name, and thus "
"cannot be opened with _open_. Instead, it is created by the _pipe_ system "
"call, which returns two descriptors, one of which accepts input that is sent "
"to the other descriptor reliably, without duplication, and in order. The "
"system also supports a named pipe or FIFO. A FIFO has properties identical "
"to a pipe, except that it appears in the filesystem; thus, it can be opened "
"using the _open_ system call. Two processes that wish to communicate each "
"open the FIFO: One opens it for reading, the other for writing."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:428
msgid ""
"A _socket_ is a transient object that is used for interprocess "
"communication; it exists only as long as some process holds a descriptor "
"referring to it. A socket is created by the _socket_ system call, which "
"returns a descriptor for it. There are different kinds of sockets that "
"support various communication semantics, such as reliable delivery of data, "
"preservation of message ordering, and preservation of message boundaries."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:430
msgid ""
"In systems before 4.2BSD, pipes were implemented using the filesystem; when "
"sockets were introduced in 4.2BSD, pipes were reimplemented as sockets."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:436
msgid ""
"The kernel keeps for each process a _descriptor table_, which is a table "
"that the kernel uses to translate the external representation of a "
"descriptor into an internal representation.  (The descriptor is merely an "
"index into this table.)  The descriptor table of a process is inherited from "
"that process's parent, and thus access to the objects to which the "
"descriptors refer also is inherited.  The main ways that a process can "
"obtain a descriptor are by opening or creation of an object, and by "
"inheritance from the parent process.  In addition, socket IPC allows passing "
"of descriptors in messages between unrelated processes on the same machine."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:442
msgid ""
"Every valid descriptor has an associated _file offset_ in bytes from the "
"beginning of the object.  Read and write operations start at this offset, "
"which is updated after each data transfer.  For objects that permit random "
"access, the file offset also may be set with the _lseek_ system call.  "
"Ordinary files permit random access, and some devices do, as well.  Pipes "
"and sockets do not."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:445
msgid ""
"When a process terminates, the kernel reclaims all the descriptors that were "
"in use by that process.  If the process was holding the final reference to "
"an object, the object's manager is notified so that it can do any necessary "
"cleanup actions, such as final deletion of a file or deallocation of a "
"socket."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/design-44bsd/_index.adoc:446
#, no-wrap
msgid "Descriptor Management"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:453
msgid ""
"Most processes expect three descriptors to be open already when they start "
"running.  These descriptors are 0, 1, 2, more commonly known as _standard "
"input_, _standard output_, and _standard error_, respectively.  Usually, all "
"three are associated with the user's terminal by the login process (see "
"Section 14.6) and are inherited through _fork_ and _exec_ by processes run "
"by the user.  Thus, a program can read what the user types by reading "
"standard input, and the program can send output to the user's screen by "
"writing to standard output.  The standard error descriptor also is open for "
"writing and is used for error output, whereas standard output is used for "
"ordinary output."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:457
msgid ""
"These (and other) descriptors can be mapped to objects other than the "
"terminal; such mapping is called _I/O redirection_, and all the standard "
"shells permit users to do it.  The shell can direct the output of a program "
"to a file by closing descriptor 1 (standard output) and opening the desired "
"output file to produce a new descriptor 1.  It can similarly redirect "
"standard input to come from a file by closing descriptor 0 and opening the "
"file."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:463
msgid ""
"Pipes allow the output of one program to be input to another program without "
"rewriting or even relinking of either program.  Instead of descriptor 1 "
"(standard output) of the source program being set up to write to the "
"terminal, it is set up to be the input descriptor of a pipe.  Similarly, "
"descriptor 0 (standard input) of the sink program is set up to reference the "
"output of the pipe, instead of the terminal keyboard.  The resulting set of "
"two processes and the connecting pipe is known as a _pipeline_.  Pipelines "
"can be arbitrarily long series of processes connected by pipes."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:470
msgid ""
"The _open_, _pipe_, and _socket_ system calls produce new descriptors with "
"the lowest unused number usable for a descriptor.  For pipelines to work, "
"some mechanism must be provided to map such descriptors into 0 and 1.  The "
"_dup_ system call creates a copy of a descriptor that points to the same "
"file-table entry.  The new descriptor is also the lowest unused one, but if "
"the desired descriptor is closed first, _dup_ can be used to do the desired "
"mapping.  Care is required, however: If descriptor 1 is desired, and "
"descriptor 0 happens also to have been closed, descriptor 0 will be the "
"result.  To avoid this problem, the system provides the _dup2_ system call; "
"it is like _dup_, but it takes an additional argument specifying the number "
"of the desired descriptor (if the desired descriptor was already open, "
"_dup2_ closes it before reusing it)."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/design-44bsd/_index.adoc:471
#, no-wrap
msgid "Devices"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:477
msgid ""
"Hardware devices have filenames, and may be accessed by the user via the "
"same system calls used for regular files.  The kernel can distinguish a "
"_device special file_ or _special file_, and can determine to what device it "
"refers, but most processes do not need to make this determination.  "
"Terminals, printers, and tape drives are all accessed as though they were "
"streams of bytes, like 4.4BSD disk files.  Thus, device dependencies and "
"peculiarities are kept in the kernel as much as possible, and even in the "
"kernel most of them are segregated in the device drivers."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:482
msgid ""
"Hardware devices can be categorized as either _structured_ or "
"_unstructured_; they are known as _block_ or _character_ devices, "
"respectively.  Processes typically access devices through _special files_ in "
"the filesystem.  I/O operations to these files are handled by kernel-"
"resident software modules termed _device drivers_.  Most network-"
"communication hardware devices are accessible through only the interprocess-"
"communication facilities, and do not have special files in the filesystem "
"name space, because the _raw-socket_ interface provides a more natural "
"interface than does a special file."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:486
msgid ""
"Structured or block devices are typified by disks and magnetic tapes, and "
"include most random-access devices.  The kernel supports read-modify-write-"
"type buffering actions on block-oriented structured devices to allow the "
"latter to be read and written in a totally random byte-addressed fashion, "
"like regular files.  Filesystems are created on block devices."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:490
msgid ""
"Unstructured devices are those devices that do not support a block "
"structure.  Familiar unstructured devices are communication lines, raster "
"plotters, and unbuffered magnetic tapes and disks.  Unstructured devices "
"typically support large block I/O transfers."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:493
msgid ""
"Unstructured files are called _character devices_ because the first of these "
"to be implemented were terminal device drivers.  The kernel interface to the "
"driver for these devices proved convenient for other devices that were not "
"block structured."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:499
msgid ""
"Device special files are created by the _mknod_ system call.  There is an "
"additional system call, _ioctl_, for manipulating the underlying device "
"parameters of special files.  The operations that can be done differ for "
"each device.  This system call allows the special characteristics of devices "
"to be accessed, rather than overloading the semantics of other system "
"calls.  For example, there is an _ioctl_ on a tape drive to write an end-of-"
"tape mark, instead of there being a special or modified version of _write_."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/design-44bsd/_index.adoc:500
#, no-wrap
msgid "Socket IPC"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:509
msgid ""
"The 4.2BSD kernel introduced an IPC mechanism more flexible than pipes, "
"based on _sockets_.  A socket is an endpoint of communication referred to by "
"a descriptor, just like a file or a pipe.  Two processes can each create a "
"socket, and then connect those two endpoints to produce a reliable byte "
"stream.  Once connected, the descriptors for the sockets can be read or "
"written by processes, just as the latter would do with a pipe.  The "
"transparency of sockets allows the kernel to redirect the output of one "
"process to the input of another process residing on another machine.  A "
"major difference between pipes and sockets is that pipes require a common "
"parent process to set up the communications channel.  A connection between "
"sockets can be set up by two unrelated processes, possibly residing on "
"different machines."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:516
msgid ""
"System V provides local interprocess communication through FIFOs (also known "
"as _named pipes_).  FIFOs appear as an object in the filesystem that "
"unrelated processes can open and send data through in the same way as they "
"would communicate through a pipe.  Thus, FIFOs do not require a common "
"parent to set them up; they can be connected after a pair of processes are "
"up and running.  Unlike sockets, FIFOs can be used on only a local machine; "
"they cannot be used to communicate between processes on different machines.  "
"FIFOs are implemented in 4.4BSD only because they are required by the "
"POSIX.1 standard.  Their functionality is a subset of the socket interface."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:523
msgid ""
"The socket mechanism requires extensions to the traditional UNIX I/O system "
"calls to provide the associated naming and connection semantics.  Rather "
"than overloading the existing interface, the developers used the existing "
"interfaces to the extent that the latter worked without being changed, and "
"designed new interfaces to handle the added semantics.  The _read_ and "
"_write_ system calls were used for byte-stream type connections, but six new "
"system calls were added to allow sending and receiving addressed messages "
"such as network datagrams.  The system calls for writing messages include "
"_send_, _sendto_, and _sendmsg_.  The system calls for reading messages "
"include _recv_, _recvfrom_, and _recvmsg_.  In retrospect, the first two in "
"each class are special cases of the others; _recvfrom_ and _sendto_ probably "
"should have been added as library interfaces to _recvmsg_ and _sendmsg_, "
"respectively."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/design-44bsd/_index.adoc:524
#, no-wrap
msgid "Scatter/Gather I/O"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:530
msgid ""
"In addition to the traditional _read_ and _write_ system calls, 4.2BSD "
"introduced the ability to do scatter/gather I/O.  Scatter input uses the "
"_readv_ system call to allow a single read to be placed in several different "
"buffers.  Conversely, the _writev_ system call allows several different "
"buffers to be written in a single atomic write.  Instead of passing a single "
"buffer and length parameter, as is done with _read_ and _write_, the process "
"passes in a pointer to an array of buffers and lengths, along with a count "
"describing the size of the array."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:535
msgid ""
"This facility allows buffers in different parts of a process address space "
"to be written atomically, without the need to copy them to a single "
"contiguous buffer.  Atomic writes are necessary in the case where the "
"underlying abstraction is record based, such as tape drives that output a "
"tape block on each write request.  It is also convenient to be able to read "
"a single request into several different buffers (such as a record header "
"into one place and the data into another).  Although an application can "
"simulate the ability to scatter data by reading the data into a large buffer "
"and then copying the pieces to their intended destinations, the cost of "
"memory-to-memory copying in such cases often would more than double the "
"running time of the affected application."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:538
msgid ""
"Just as _send_ and _recv_ could have been implemented as library interfaces "
"to _sendto_ and _recvfrom_, it also would have been possible to simulate "
"_read_ with _readv_ and _write_ with _writev_.  However, _read_ and _write_ "
"are used so much more frequently that the added cost of simulating them "
"would not have been worthwhile."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/design-44bsd/_index.adoc:539
#, no-wrap
msgid "Multiple Filesystem Support"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:545
msgid ""
"With the expansion of network computing, it became desirable to support both "
"local and remote filesystems.  To simplify the support of multiple "
"filesystems, the developers added a new virtual node or _vnode_ interface to "
"the kernel.  The set of operations exported from the vnode interface appear "
"much like the filesystem operations previously supported by the local "
"filesystem.  However, they may be supported by a wide range of filesystem "
"types:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:547
msgid "Local disk-based filesystems"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:548
msgid "Files imported using a variety of remote filesystem protocols"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:549
msgid "Read-only CD-ROM filesystems"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:550
msgid ""
"Filesystems providing special-purpose interfaces -- for example, the `/proc` "
"filesystem"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:553
msgid ""
"A few variants of 4.4BSD, such as FreeBSD, allow filesystems to be loaded "
"dynamically when the filesystems are first referenced by the _mount_ system "
"call.  The vnode interface is described in Section 6.5; its ancillary "
"support routines are described in Section 6.6; several of the special-"
"purpose filesystems are described in Section 6.7."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:555
#, no-wrap
msgid "Filesystems"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:560
msgid ""
"A regular file is a linear array of bytes, and can be read and written "
"starting at any byte in the file.  The kernel distinguishes no record "
"boundaries in regular files, although many programs recognize line-feed "
"characters as distinguishing the ends of lines, and other programs may "
"impose other structure.  No system-related information about a file is kept "
"in the file itself, but the filesystem stores a small amount of ownership, "
"protection, and usage information with each file."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:565
msgid ""
"A _filename_ component is a string of up to 255 characters. These filenames "
"are stored in a type of file called a _directory_.  The information in a "
"directory about a file is called a _directory entry_ and includes, in "
"addition to the filename, a pointer to the file itself.  Directory entries "
"may refer to other directories, as well as to plain files.  A hierarchy of "
"directories and files is thus formed, and is called a _filesystem_;"
msgstr ""

#. type: Block title
#: documentation/content/en/books/design-44bsd/_index.adoc:566
#, no-wrap
msgid "A small filesystem"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:569
msgid "image:fig2.png[A small filesystem]"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:574
msgid ""
"a small one is shown in crossref:design-44bsd[fig-small-fs, A small "
"filesystem].  Directories may contain subdirectories, and there is no "
"inherent limitation to the depth with which directory nesting may occur.  To "
"protect the consistency of the filesystem, the kernel does not permit "
"processes to write directly into directories.  A filesystem may include not "
"only plain files and directories, but also references to other objects, such "
"as devices and sockets."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:579
msgid ""
"The filesystem forms a tree, the beginning of which is the _root directory_, "
"sometimes referred to by the name _slash_, spelled with a single solidus "
"character (/).  The root directory contains files; in our example in Fig "
"2.2, it contains `vmunix`, a copy of the kernel-executable object file.  It "
"also contains directories; in this example, it contains the `usr` "
"directory.  Within the `usr` directory is the `bin` directory, which mostly "
"contains executable object code of programs, such as the files `ls` and `vi`."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:584
msgid ""
"A process identifies a file by specifying that file's _pathname_, which is a "
"string composed of zero or more filenames separated by slash (/) "
"characters.  The kernel associates two directories with each process for use "
"in interpreting pathnames.  A process's _root directory_ is the topmost "
"point in the filesystem that the process can access; it is ordinarily set to "
"the root directory of the entire filesystem.  A pathname beginning with a "
"slash is called an _absolute pathname_, and is interpreted by the kernel "
"starting with the process's root directory."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:590
msgid ""
"A pathname that does not begin with a slash is called a _relative pathname_, "
"and is interpreted relative to the _current working directory_ of the "
"process.  (This directory also is known by the shorter names _current "
"directory_ or _working directory_.)  The current directory itself may be "
"referred to directly by the name _dot_, spelled with a single period (`.`)  "
"The filename _dot-dot_ (`..`) refers to a directory's parent directory.  The "
"root directory is its own parent."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:594
msgid ""
"A process may set its root directory with the _chroot_ system call, and its "
"current directory with the _chdir_ system call.  Any process may do _chdir_ "
"at any time, but _chroot_ is permitted only a process with superuser "
"privileges.  _Chroot_ is normally used to set up restricted access to the "
"system."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:596
msgid ""
"Using the filesystem shown in Fig. 2.2, if a process has the root of the "
"filesystem as its root directory, and has `/usr` as its current directory, "
"it can refer to the file `vi` either from the root with the absolute "
"pathname `/usr/bin/vi`, or from its current directory with the relative "
"pathname `bin/vi`."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:602
msgid ""
"System utilities and databases are kept in certain well-known directories.  "
"Part of the well-defined hierarchy includes a directory that contains the "
"_home directory_ for each user -- for example, `/usr/staff/mckusick` and `/"
"usr/staff/karels` in Fig. 2.2.  When users log in, the current working "
"directory of their shell is set to the home directory.  Within their home "
"directories, users can create directories as easily as they can regular "
"files.  Thus, a user can build arbitrarily complex subhierarchies."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:609
msgid ""
"The user usually knows of only one filesystem, but the system may know that "
"this one virtual filesystem is really composed of several physical "
"filesystems, each on a different device.  A physical filesystem may not span "
"multiple hardware devices.  Since most physical disk devices are divided "
"into several logical devices, there may be more than one filesystem per "
"physical device, but there will be no more than one per logical device.  One "
"filesystem -- the filesystem that anchors all absolute pathnames -- is "
"called the _root filesystem_, and is always available.  Others may be "
"mounted; that is, they may be integrated into the directory hierarchy of the "
"root filesystem.  References to a directory that has a filesystem mounted on "
"it are converted transparently by the kernel into references to the root "
"directory of the mounted filesystem."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:614
msgid ""
"The _link_ system call takes the name of an existing file and another name "
"to create for that file.  After a successful _link_, the file can be "
"accessed by either filename.  A filename can be removed with the _unlink_ "
"system call.  When the final name for a file is removed (and the final "
"process that has the file open closes it), the file is deleted."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:621
msgid ""
"Files are organized hierarchically in _directories_.  A directory is a type "
"of file, but, in contrast to regular files, a directory has a structure "
"imposed on it by the system.  A process can read a directory as it would an "
"ordinary file, but only the kernel is permitted to modify a directory.  "
"Directories are created by the _mkdir_ system call and are removed by the "
"_rmdir_ system call.  Before 4.2BSD, the _mkdir_ and _rmdir_ system calls "
"were implemented by a series of _link_ and _unlink_ system calls being "
"done.  There were three reasons for adding systems calls explicitly to "
"create and delete directories:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:624
msgid ""
"The operation could be made atomic. If the system crashed, the directory "
"would not be left half-constructed, as could happen when a series of link "
"operations were used."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:625
msgid ""
"When a networked filesystem is being run, the creation and deletion of files "
"and directories need to be specified atomically so that they can be "
"serialized."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:626
msgid ""
"When supporting non-UNIX filesystems, such as an MS-DOS filesystem, on "
"another partition of the disk, the other filesystem may not support link "
"operations. Although other filesystems might support the concept of "
"directories, they probably would not create and delete the directories with "
"links, as the UNIX filesystem does. Consequently, they could create and "
"delete directories only if explicit directory create and delete requests "
"were presented."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:633
msgid ""
"The _chown_ system call sets the owner and group of a file, and _chmod_ "
"changes protection attributes.  _Stat_ applied to a filename can be used to "
"read back such properties of a file.  The _fchown_, _fchmod_, and _fstat_ "
"system calls are applied to a descriptor, instead of to a filename, to do "
"the same set of operations.  The _rename_ system call can be used to give a "
"file a new name in the filesystem, replacing one of the file's old names.  "
"Like the directory-creation and directory-deletion operations, the _rename_ "
"system call was added to 4.2BSD to provide atomicity to name changes in the "
"local filesystem.  Later, it proved useful explicitly to export renaming "
"operations to foreign filesystems and over the network."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:638
msgid ""
"The _truncate_ system call was added to 4.2BSD to allow files to be "
"shortened to an arbitrary offset.  The call was added primarily in support "
"of the Fortran run-time library, which has the semantics such that the end "
"of a random-access file is set to be wherever the program most recently "
"accessed that file.  Without the _truncate_ system call, the only way to "
"shorten a file was to copy the part that was desired to a new file, to "
"delete the old file, then to rename the copy to the original name.  As well "
"as this algorithm being slow, the library could potentially fail on a full "
"filesystem."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:641
msgid ""
"Once the filesystem had the ability to shorten files, the kernel took "
"advantage of that ability to shorten large empty directories.  The advantage "
"of shortening empty directories is that it reduces the time spent in the "
"kernel searching them when names are being created or deleted."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:645
msgid ""
"Newly created files are assigned the user identifier of the process that "
"created them and the group identifier of the directory in which they were "
"created.  A three-level access-control mechanism is provided for the "
"protection of files.  These three levels specify the accessibility of a file "
"to"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:648
msgid "The user who owns the file"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:649
msgid "The group that owns the file"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:650
msgid "Everyone else"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:652
msgid ""
"Each level of access has separate indicators for read permission, write "
"permission, and execute permission."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:662
msgid ""
"Files are created with zero length, and may grow when they are written.  "
"While a file is open, the system maintains a pointer into the file "
"indicating the current location in the file associated with the descriptor.  "
"This pointer can be moved about in the file in a random-access fashion.  "
"Processes sharing a file descriptor through a _fork_ or _dup_ system call "
"share the current location pointer.  Descriptors created by separate _open_ "
"system calls have separate current location pointers.  Files may have "
"_holes_ in them.  Holes are void areas in the linear extent of the file "
"where data have never been written.  A process can create these holes by "
"positioning the pointer past the current end-of-file and writing.  When "
"read, holes are treated by the system as zero-valued bytes."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:668
msgid ""
"Earlier UNIX systems had a limit of 14 characters per filename component.  "
"This limitation was often a problem.  For example, in addition to the "
"natural desire of users to give files long descriptive names, a common way "
"of forming filenames is as `basename.extension`, where the extension "
"(indicating the kind of file, such as `.c` for C source or `.o` for "
"intermediate binary object) is one to three characters, leaving 10 to 12 "
"characters for the basename.  Source-code-control systems and editors "
"usually take up another two characters, either as a prefix or a suffix, for "
"their purposes, leaving eight to 10 characters.  It is easy to use 10 or 12 "
"characters in a single English word as a basename (e.g., `multiplexer`)."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:673
msgid ""
"It is possible to keep within these limits, but it is inconvenient or even "
"dangerous, because other UNIX systems accept strings longer than the limit "
"when creating files, but then _truncate_ to the limit.  A C language source "
"file named `multiplexer.c` (already 13 characters) might have a source-code-"
"control file with `s.` prepended, producing a filename `s.multiplexer` that "
"is indistinguishable from the source-code-control file for `multiplexer.ms`, "
"a file containing `troff` source for documentation for the C program.  The "
"contents of the two original files could easily get confused with no warning "
"from the source-code-control system.  Careful coding can detect this "
"problem, but the long filenames first introduced in 4.2BSD practically "
"eliminate it."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:675
#, no-wrap
msgid "Filestores"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:680
msgid ""
"The operations defined for local filesystems are divided into two parts.  "
"Common to all local filesystems are hierarchical naming, locking, quotas, "
"attribute management, and protection.  These features are independent of how "
"the data will be stored. 4.4BSD has a single implementation to provide these "
"semantics."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:683
msgid ""
"The other part of the local filesystem is the organization and management of "
"the data on the storage media.  Laying out the contents of files on the "
"storage media is the responsibility of the filestore. 4.4BSD supports three "
"different filestore layouts:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:685
msgid "The traditional Berkeley Fast Filesystem"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:687
msgid ""
"The log-structured filesystem, based on the Sprite operating-system design "
"crossref:design-44bsd[biblio-rosenblum, [Rosenblum & Ousterhout, 1992]]"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:688
msgid "A memory-based filesystem"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:690
msgid ""
"Although the organizations of these filestores are completely different, "
"these differences are indistinguishable to the processes using the "
"filestores."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:695
msgid ""
"The Fast Filesystem organizes data into cylinder groups.  Files that are "
"likely to be accessed together, based on their locations in the filesystem "
"hierarchy, are stored in the same cylinder group.  Files that are not "
"expected to accessed together are moved into different cylinder groups.  "
"Thus, files written at the same time may be placed far apart on the disk."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:700
msgid ""
"The log-structured filesystem organizes data as a log.  All data being "
"written at any point in time are gathered together, and are written at the "
"same disk location.  Data are never overwritten; instead, a new copy of the "
"file is written that replaces the old one.  The old files are reclaimed by a "
"garbage-collection process that runs when the filesystem becomes full and "
"additional free space is needed."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:704
msgid ""
"The memory-based filesystem is designed to store data in virtual memory.  It "
"is used for filesystems that need to support fast but temporary data, such "
"as `/tmp`.  The goal of the memory-based filesystem is to keep the storage "
"packed as compactly as possible to minimize the usage of virtual-memory "
"resources."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:706
#, no-wrap
msgid "Network Filesystem"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:712
msgid ""
"Initially, networking was used to transfer data from one machine to "
"another.  Later, it evolved to allowing users to log in remotely to another "
"machine.  The next logical step was to bring the data to the user, instead "
"of having the user go to the data -- and network filesystems were born.  "
"Users working locally do not experience the network delays on each "
"keystroke, so they have a more responsive environment."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:718
msgid ""
"Bringing the filesystem to a local machine was among the first of the major "
"client-server applications.  The _server_ is the remote machine that exports "
"one or more of its filesystems.  The _client_ is the local machine that "
"imports those filesystems.  From the local client's point of view, a "
"remotely mounted filesystem appears in the file-tree name space just like "
"any other locally mounted filesystem.  Local clients can change into "
"directories on the remote filesystem, and can read, write, and execute "
"binaries within that remote filesystem identically to the way that they can "
"do these operations on a local filesystem."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:723
msgid ""
"When the local client does an operation on a remote filesystem, the request "
"is packaged and is sent to the server.  The server does the requested "
"operation and returns either the requested information or an error "
"indicating why the request was denied.  To get reasonable performance, the "
"client must cache frequently accessed data.  The complexity of remote "
"filesystems lies in maintaining cache consistency between the server and its "
"many clients."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:729
msgid ""
"Although many remote-filesystem protocols have been developed over the "
"years, the most pervasive one in use among UNIX systems is the Network "
"Filesystem (NFS), whose protocol and most widely used implementation were "
"done by Sun Microsystems.  The 4.4BSD kernel supports the NFS protocol, "
"although the implementation was done independently from the protocol "
"specification crossref:design-44bsd[biblio-macklem, [Macklem, 1994]].  The "
"NFS protocol is described in Chapter 9."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:731
#, no-wrap
msgid "Terminals"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:736
msgid ""
"Terminals support the standard system I/O operations, as well as a "
"collection of terminal-specific operations to control input-character "
"editing and output delays.  At the lowest level are the terminal device "
"drivers that control the hardware terminal ports.  Terminal input is handled "
"according to the underlying communication characteristics, such as baud "
"rate, and according to a set of software-controllable parameters, such as "
"parity checking."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:740
msgid ""
"Layered above the terminal device drivers are line disciplines that provide "
"various degrees of character processing.  The default line discipline is "
"selected when a port is being used for an interactive login.  The line "
"discipline is run in _canonical mode_; input is processed to provide "
"standard line-oriented editing functions, and input is presented to a "
"process on a line-by-line basis."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:744
msgid ""
"Screen editors and programs that communicate with other computers generally "
"run in _noncanonical mode_ (also commonly referred to as _raw mode_ or "
"_character-at-a-time mode_).  In this mode, input is passed through to the "
"reading process immediately and without interpretation.  All special-"
"character input processing is disabled, no erase or other line editing "
"processing is done, and all characters are passed to the program that is "
"reading from the terminal."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:747
msgid ""
"It is possible to configure the terminal in thousands of combinations "
"between these two extremes.  For example, a screen editor that wanted to "
"receive user interrupts asynchronously might enable the special characters "
"that generate signals and enable output flow control, but otherwise run in "
"noncanonical mode; all other characters would be passed through to the "
"process uninterpreted."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:749
msgid ""
"On output, the terminal handler provides simple formatting services, "
"including"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:751
msgid ""
"Converting the line-feed character to the two-character carriage-return-line-"
"feed sequence"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:752
msgid "Inserting delays after certain standard control characters"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:753
msgid "Expanding tabs"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:754
msgid ""
"Displaying echoed nongraphic ASCII characters as a two-character sequence of "
"the form `^C` (i.e., the ASCII caret character followed by the ASCII "
"character that is the character's value offset from the ASCII `@` character)."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:756
msgid ""
"Each of these formatting services can be disabled individually by a process "
"through control requests."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:758
#, no-wrap
msgid "Interprocess Communication"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:762
msgid ""
"Interprocess communication in 4.4BSD is organized in _communication "
"domains_.  Domains currently supported include the _local domain_, for "
"communication between processes executing on the same machine; the _internet "
"domain_, for communication between processes using the TCP/IP protocol suite "
"(perhaps within the Internet); the ISO/OSI protocol family for communication "
"between sites required to run them; and the _XNS domain_, for communication "
"between processes using the XEROX Network Systems (XNS) protocols."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:766
msgid ""
"Within a domain, communication takes place between communication endpoints "
"known as _sockets_.  As mentioned in Section 2.6, the _socket_ system call "
"creates a socket and returns a descriptor; other IPC system calls are "
"described in Chapter 11.  Each socket has a type that defines its "
"communications semantics; these semantics include properties such as "
"reliability, ordering, and prevention of duplication of messages."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:770
msgid ""
"Each socket has associated with it a _communication protocol_.  This "
"protocol provides the semantics required by the socket according to the "
"latter's type.  Applications may request a specific protocol when creating a "
"socket, or may allow the system to select a protocol that is appropriate for "
"the type of socket being created."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:774
msgid ""
"Sockets may have addresses bound to them.  The form and meaning of socket "
"addresses are dependent on the communication domain in which the socket is "
"created.  Binding a name to a socket in the local domain causes a file to be "
"created in the filesystem."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:779
msgid ""
"Normal data transmitted and received through sockets are untyped.  Data-"
"representation issues are the responsibility of libraries built on top of "
"the interprocess-communication facilities.  In addition to transporting "
"normal data, communication domains may support the transmission and "
"reception of specially typed data, termed _access rights_.  The local "
"domain, for example, uses this facility to pass descriptors between "
"processes."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:785
msgid ""
"Networking implementations on UNIX before 4.2BSD usually worked by "
"overloading the character-device interfaces.  One goal of the socket "
"interface was for naive programs to be able to work without change on stream-"
"style connections.  Such programs can work only if the _read_ and _write_ "
"systems calls are unchanged.  Consequently, the original interfaces were "
"left intact, and were made to work on stream-type sockets.  A new interface "
"was added for more complicated sockets, such as those used to send "
"datagrams, with which a destination address must be presented with each "
"_send_ call."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:790
msgid ""
"Another benefit is that the new interface is highly portable.  Shortly after "
"a test release was available from Berkeley, the socket interface had been "
"ported to System III by a UNIX vendor (although AT&T did not support the "
"socket interface until the release of System V Release 4, deciding instead "
"to use the Eighth Edition stream mechanism).  The socket interface was also "
"ported to run in many Ethernet boards by vendors, such as Excelan and "
"Interlan, that were selling into the PC market, where the machines were too "
"small to run networking in the main processor.  More recently, the socket "
"interface was used as the basis for Microsoft's Winsock networking interface "
"for Windows."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:792
#, no-wrap
msgid "Network Communication"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:797
msgid ""
"Some of the communication domains supported by the _socket_ IPC mechanism "
"provide access to network protocols.  These protocols are implemented as a "
"separate software layer logically below the socket software in the kernel.  "
"The kernel provides many ancillary services, such as buffer management, "
"message routing, standardized interfaces to the protocols, and interfaces to "
"the network interface drivers for the use of the various network protocols."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:806
msgid ""
"At the time that 4.2BSD was being implemented, there were many networking "
"protocols in use or under development, each with its own strengths and "
"weaknesses.  There was no clearly superior protocol or protocol suite.  By "
"supporting multiple protocols, 4.2BSD could provide interoperability and "
"resource sharing among the diverse set of machines that was available in the "
"Berkeley environment.  Multiple-protocol support also provides for future "
"changes.  Today's protocols designed for 10- to 100-Mbit-per-second "
"Ethernets are likely to be inadequate for tomorrow's 1- to 10-Gbit-per-"
"second fiber-optic networks.  Consequently, the network-communication layer "
"is designed to support multiple protocols.  New protocols are added to the "
"kernel without the support for older protocols being affected.  Older "
"applications can continue to operate using the old protocol over the same "
"physical network as is used by newer applications running with a newer "
"network protocol."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:808
#, no-wrap
msgid "Network Implementation"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:815
msgid ""
"The first protocol suite implemented in 4.2BSD was DARPA's Transmission "
"Control Protocol/Internet Protocol (TCP/IP).  The CSRG chose TCP/IP as the "
"first network to incorporate into the socket IPC framework, because a 4.1BSD-"
"based implementation was publicly available from a DARPA-sponsored project "
"at Bolt, Beranek, and Newman (BBN).  That was an influential choice: The "
"4.2BSD implementation is the main reason for the extremely widespread use of "
"this protocol suite.  Later performance and capability improvements to the "
"TCP/IP implementation have also been widely adopted.  The TCP/IP "
"implementation is described in detail in Chapter 13."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:818
msgid ""
"The release of 4.3BSD added the Xerox Network Systems (XNS) protocol suite, "
"partly building on work done at the University of Maryland and at Cornell "
"University.  This suite was needed to connect isolated machines that could "
"not communicate using TCP/IP."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:824
msgid ""
"The release of 4.4BSD added the ISO protocol suite because of the latter's "
"increasing visibility both within and outside the United States.  Because of "
"the somewhat different semantics defined for the ISO protocols, some minor "
"changes were required in the socket interface to accommodate these "
"semantics.  The changes were made such that they were invisible to clients "
"of other existing protocols.  The ISO protocols also required extensive "
"addition to the two-level routing tables provided by the kernel in 4.3BSD.  "
"The greatly expanded routing capabilities of 4.4BSD include arbitrary levels "
"of routing with variable-length addresses and network masks."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/design-44bsd/_index.adoc:826
#, no-wrap
msgid "System Operation"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:834
msgid ""
"Bootstrapping mechanisms are used to start the system running.  First, the "
"4.4BSD kernel must be loaded into the main memory of the processor.  Once "
"loaded, it must go through an initialization phase to set the hardware into "
"a known state.  Next, the kernel must do autoconfiguration, a process that "
"finds and configures the peripherals that are attached to the processor.  "
"The system begins running in single-user mode while a start-up script does "
"disk checks and starts the accounting and quota checking.  Finally, the "
"start-up script starts the general system services and brings up the system "
"to full multiuser operation."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:838
msgid ""
"During multiuser operation, processes wait for login requests on the "
"terminal lines and network ports that have been configured for user access.  "
"When a login request is detected, a login process is spawned and user "
"validation is done.  When the login validation is successful, a login shell "
"is created from which the user can run additional processes."
msgstr ""

#. type: Title ==
#: documentation/content/en/books/design-44bsd/_index.adoc:843
#, no-wrap
msgid "References"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:846
msgid ""
"[[biblio-accetta]] Accetta et al, 1986 Mach: A New Kernel Foundation for "
"UNIX Development\" M.Accetta R.Baron W.Bolosky D.Golub R.Rashid A.Tevanian M."
"Young 93-113 USENIX Association Conference Proceedings USENIX Association "
"June 1986"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:848
msgid ""
"[[biblio-cheriton]] Cheriton, 1988 The V Distributed System D. R.Cheriton "
"314-333 Comm ACM, 31, 3 March 1988"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:850
msgid ""
"[[biblio-ewens]] Ewens et al, 1985 Tunis: A Distributed Multiprocessor "
"Operating System P.Ewens D. R.Blythe M.Funkenhauser R. C.Holt 247-254 USENIX "
"Assocation Conference Proceedings USENIX Association June 1985"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:852
msgid ""
"[[biblio-gingell]] Gingell et al, 1987 Virtual Memory Architecture in SunOS "
"R.Gingell J.Moran W.Shannon 81-94 USENIX Association Conference Proceedings "
"USENIX Association June 1987"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:854
msgid ""
"[[biblio-kernighan]] Kernighan & Pike, 1984 The UNIX Programming Environment "
"B. W.Kernighan R.Pike Prentice-Hall Englewood Cliffs NJ 1984"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:856
msgid ""
"[[biblio-macklem]] Macklem, 1994 The 4.4BSD NFS Implementation R.Macklem "
"6:1-14 4.4BSD System Manager's Manual O'Reilly & Associates, Inc. Sebastopol "
"CA 1994"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:858
msgid ""
"[[biblio-mckusick-2]] McKusick & Karels, 1988 Design of a General Purpose "
"Memory Allocator for the 4.3BSD UNIX Kernel M. K.McKusick M. J.Karels "
"295-304 USENIX Assocation Conference Proceedings USENIX Assocation June 1998"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:860
msgid ""
"[[biblio-mckusick-1]] McKusick et al, 1994 Berkeley Software Architecture "
"Manual, 4.4BSD Edition M. K.McKusick M. J.Karels S. J.Leffler W. N.Joy R. S."
"Faber 5:1-42 4.4BSD Programmer's Supplementary Documents O'Reilly & "
"Associates, Inc. Sebastopol CA 1994"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:862
msgid ""
"[[biblio-ritchie]] Ritchie, 1988 Early Kernel Design private communication "
"D. M.Ritchie March 1988"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:864
msgid ""
"[[biblio-rosenblum]] Rosenblum & Ousterhout, 1992 The Design and "
"Implementation of a Log-Structured File System M.Rosenblum K.Ousterhout "
"26-52 ACM Transactions on Computer Systems, 10, 1 Association for Computing "
"Machinery February 1992"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:866
msgid ""
"[[biblio-rozier]] Rozier et al, 1988 Chorus Distributed Operating Systems M."
"Rozier V.Abrossimov F.Armand I.Boule M.Gien M.Guillemont F.Herrmann C.Kaiser "
"S.Langlois P.Leonard W.Neuhauser 305-370 USENIX Computing Systems, 1, 4 Fall "
"1988"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/design-44bsd/_index.adoc:867
msgid ""
"[[biblio-tevanian]] Tevanian, 1987 Architecture-Independent Virtual Memory "
"Management for Parallel and Distributed Environments: The Mach Approach "
"Technical Report CMU-CS-88-106, A.Tevanian Department of Computer Science, "
"Carnegie-Mellon University Pittsburgh PA December 1987"
msgstr ""