The Design and Implementation of the
4.4BSD Operating System

Marshall Kirk McKusick
Consultant
Keith Bostic
Berkeley Software Design, Inc.
Michael J. Karels
Berkeley Software Design, Inc.
John S. Quarterman
Texas Internet Consulting

Addison-Wesley Publishing Company

Reading, Massachusetts • Menlo Park, California • New York

Don Mills, Ontario • Harlow, United Kingdom • Amsterdam • Bonn
Sydney • Singapore • Tokyo • Madrid • San Juan • Milan • Paris

This book is in the Addison-Wesley UNIX and Open Systems Series

Series Editors: Marshall Kirk McKusick and John S. Quarterman
Publishing Partner: Peter S. Gordon
Associate Editor: Deborah R. Lafferty
Associate Production Supervisor: Patricia A. Oduor
Marketing Manager: Bob Donegan
Senior Manufacturing Manager: Roy E. Logan
Cover Designer: Barbara Atkinson
Troff Macro Designer: Jaap Akkerhuis
Copy Editor: Lyn Dupré
Cover Art: John Lasseter

UNIX is a registered trademark of X/Open in the United States and other countries. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and Addison-Wesley was aware of a trademark claim, the designations have been printed in initial caps or all caps.

The programs and applications presented in this book have been included for their instructional value. They have been tested with care, but are not guaranteed for any particular purpose. The publisher offers no warranties or representations, nor does it accept any liabilities with respect to the programs or applications.

Library of Congress Cataloging-in-Publication Data

The design and implementation of the 4.4BSD operating system /
    Marshall Kirk McKusick … [et al.].
         p. cm.
         Includes bibliographical references and index.
         ISBN 0-201-54979-4
         1. UNIX (Computer file) 2. Operating systems (Computers)
         I. McKusick, Marshall Kirk.
    QA76.76.063D4743 1996              96-2433
    005.4′3 -- dc20                             CIP

Copyright © 1996 by Addison-Wesley Publishing Company, Inc.

All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior written permission of the publisher. Printed in the United States of America. Published simultaneously in Canada.

123456789 10-MA-99989796

Dedication

This book is dedicated to the BSD community.
Without the contributions of that community’s members,
there would be nothing about which to write.

Preface

This book is an extensive revision of the first authoritative and full-length description of the design and implementation of the research versions of the UNIX system developed at the University of California at Berkeley. Most detail is given about 4.4BSD, which incorporates the improvements of the previous Berkeley versions. Although 4.4BSD includes nearly 500 utility programs in addition to the kernel, this book concentrates almost exclusively on the kernel.

The UNIX System

The UNIX system runs on computers ranging from personal home systems to the largest supercomputers. It is the operating system of choice for most multiprocessor, graphics, and vector-processing systems, and is widely used for its original purpose of timesharing. It is the most common platform for providing network services (from FTP to WWW) on the Internet. It is the most portable operating system ever developed. This portability is due partly to its implementation language, C [Kernighan & Ritchie, 1978] (which is itself one of the most widely ported languages), and partly to the elegant design of the system. Many of the system’s features are imitated in other systems [O’Dell, 1987].

Since its inception in 1969 [Ritchie & Thompson, 1978], the UNIX system has developed in a number of divergent and rejoining streams. The original developers continued to advance the state of the art with their Ninth and Tenth Edition UNIX inside AT&T Bell Laboratories, and then their Plan 9 successor to UNIX. Meanwhile, AT&T licensed UNIX System V as a product, before selling it to Novell. Novell passed the UNIX trademark to X/OPEN and sold the source code and distribution rights to Santa Cruz Operation (SCO). Both System V and Ninth Edition UNIX were strongly influenced by the Berkeley Software Distributions produced by the Computer Systems Research Group (CSRG) of the University of California at Berkeley.

Berkeley Software Distributions

These Berkeley systems have introduced several useful programs and facilities to the UNIX community:

• 2BSD (the Berkeley PDP-11 system): the text editor vi

• 3BSD (the first Berkeley VAX system): demand-paged virtual-memory support

• 4.0BSD: performance improvements

• 4.1BSD: job control, autoconfiguration, and long C identifiers

• 4.2BSD and 4.3BSD: reliable signals; a fast filesystem; improved networking, including a reference implementation of TCP/IP; sophisticated interprocess-communication (IPC) primitives; and more performance improvements

• 4.4BSD: a new virtual memory system; a stackable and extensible vnode interface; a network filesystem (NFS); a log-structured filesystem, numerous filesystem types, including loopback, union, and uid/gid mapping layers; an ISO9660 filesystem (e.g., CD-ROM); ISO networking protocols; support for 68K, SPARC, MIPS, and PC architectures; POSIX support, including termios, sessions, and most utilities; multiple IP addresses per interface; disk labels; and improved booting

4.2BSD, 4.3BSD, and 4.4BSD are the bases for the UNIX systems of many vendors, and are used internally by the development groups of many other vendors. Many of these developments have also been incorporated by System V, or have been added by vendors whose products are otherwise based on System V.

The implementation of the TCP/IP networking protocol suite in 4.2BSD and 4.3BSD, and the availability of those systems, explain why the TCP/IP networking protocol suite is implemented so widely throughout the world. Numerous vendors have adapted the Berkeley networking implementations, whether their base system is 4.2BSD, 4.3BSD, 4.4BSD, System V, or even Digital Equipment Corporation’s VMS or Microsoft’s Winsock interface in Windows’95 and Windows/NT.

4BSD has also been a strong influence on the POSIX (IEEE Std 1003.1) operating-system interface standard, and on related standards. Several features—such as reliable signals, job control, multiple access groups per process, and the routines for directory operations—have been adapted from 4.3BSD for POSIX.

Material Covered in this Book

This book is about the internal structure of 4.4BSD [Quarterman et al, 1985], and about the concepts, data structures, and algorithms used in implementing 4.4BSD’s system facilities. Its level of detail is similar to that of Bach’s book about UNIX System V [Bach, 1986]; however, this text focuses on the facilities, data structures, and algorithms used in the Berkeley variant of the UNIX operating system. The book covers 4.4BSD from the system-call level down—from the interface to the kernel to the hardware itself. The kernel includes system facilities, such as process management, virtual memory, the I/O system, filesystems, the socket IPC mechanism, and network protocol implementations. Material above the system-call level—such as libraries, shells, commands, programming languages, and other user interfaces—is excluded, except for some material related to the terminal interface and to system startup. Like Org anick’s book about Multics [Organick, 1975], this book is an in-depth study of a contemporary operating system.

Where particular hardware is relevant, the book refers to the Hewlett-Packard HP300 (Motorola 68000-based) architecture. Because 4.4BSD was developed on the HP300, that is the architecture with the most complete support, so it provides a convenient point of reference.

Readers who will benefit from this book include operating-system implementors, system programmers, UNIX application developers, administrators, and curious users. The book can be read as a companion to the source code of the system, falling as it does between the manual [CSRG, 1994] and the code in detail of treatment. But this book is specifically neither a UNIX programming manual nor a user tutorial (for a tutorial, see [Libes & Ressler, 1988]). Familiarity with the use of some version of the UNIX system (see, for example, [Kernighan & Pike, 1984]), and with the C programming language (see, for example, [Kernighan & Ritchie, 1988]) would be extremely useful.

Use in Courses on Operating Systems

This book is suitable for use as a reference text to provide background for a primary textbook in a second-level course on operating systems. It is not intended for use as an introductory operating-system textbook; the reader should have already encountered terminology such as memory management, process scheduling, and I/O systems [Silberschatz & Galvin, 1994]. Familiarity with the concepts of network protocols [Tanenbaum, 1988; Stallings, 1993; Schwartz, 1987] will be useful for understanding some of the later chapters.

Exercises are provided at the end of each chapter. The exercises are graded into three categories indicated by zero, one, or two asterisks. The answers to exercises that carry no asterisks can be found in the text. Exercises with a single asterisk require a step of reasoning or intuition beyond a concept presented in the text. Exercises with two asterisks present major design projects or open research questions.

Organization

This text discusses both philosophical and design issues, as well as details of the actual implementation. Often, the discussion starts at the system-call level and descends into the kernel. Tables and figures are used to clarify data structures and control flow. Pseudocode similar to the C language is used to display algorithms. Boldface font identifies program names and filesystem pathnames. Italics font introduces terms that appear in the glossary and identifies the names of system calls, variables, routines, and structure names. Routine names (other than system calls) are further identified by the name followed by a pair of parenthesis (e.g., malloc() is the name of a routine, whereas argv is the name of a variable).

The book is divided into five parts, organized as follows:

Part 1, Overview       Three introductory chapters provide the context for the complete operating system and for the rest of the book. Chapter 1, History and Goals, sketches the historical development of the system, emphasizing the system’s research orientation. Chapter 2, Design Overview of 4.4BSD, describes the services offered by the system, and outlines the internal organization of the kernel. It also discusses the design decisions that were made as the system was developed. Sections 2.3 through 2.14 in Chapter 2 give an overview of their corresponding chapter. Chapter 3, Kernel Services, explains how system calls are done, and describes in detail several of the basic services of the kernel.

Part 2, Processes       The first chapter in this part—Chapter 4, Process Management—lays the foundation for later chapters by describing the structure of a process, the algorithms used for scheduling the execution of processes, and the synchronization mechanisms used by the system to ensure consistent access to kernel-resident data structures. In Chapter 5, Memory Management, the virtual-memory–management system is discussed in detail.

Part 3, I/O System       First, Chapter 6, I/O System Overview, explains the system interface to I/O and describes the structure of the facilities that support this interface. Following this introduction are four chapters that give the details of the main parts of the I/O system. Chapter 7, Local Filesystems, details the data structures and algorithms that implement filesystems as seen by application programs. Chapter 8, Local Filestores, describes how local filesystems are interfaced with local media. Chapter 9, The Network Filesystem, explains the network filesystem from both the server and client perspectives. Chapter 10, Terminal Handling, discusses support for character terminals, and provides a description of a character-oriented device driver.

Part 4, Interprocess Communication       Chapter 11, Interprocess Communication, describes the mechanism for providing communication between related or unrelated processes. Chapters 12 and 13, Network Communication and Network Protocols, are closely related, as the facilities explained in the former are implemented by specific protocols, such as the TCP/IP protocol suite, explained in the latter.

Part 5, System Operation       Chapter 14, System Startup, discusses system startup, shutdown, and configuration, and explains system initialization at the process level, from kernel initialization to user login.

The book is intended to be read in the order that the chapters are presented, but the parts other than Part 1 are independent of one another and can be read separately. Chapter 14 should be read after all the others, but knowledgeable readers may find it useful independently.

At the end of the book are a Glossary with brief definitions of major terms and an Index. Each chapter contains a Reference section with citations of related material.

Getting 4.4BSD

Current information about the availability of 4.4BSD source code can be found at the sites listed below. At press time, the source code for the 4.4BSD-Lite Release 2 system, as well as that for the FreeBSD version of 4.4BSD, which is compiled and ready to run on PC-compatible hardware, are available from Walnut Creek CDROM. Contact Walnut Creek for more information at 1-800-786-9907, or use [email protected], or http://www.cdrom.com/. The NetBSD distribution is compiled and ready to run on most workstation architectures. For more information, contact the NetBSD Project at [email protected] (send a message body of “lists”), or http://www.NetBSD.ORG/. The OpenBSD distribution is compiled and ready to run on a wide variety of workstation architectures and has been extensively vetted for security and reliability. For more information, visit the OpenBSD project’s Web Site at http://www.OpenBSD.org/. A fully supported commercial release, BSD/OS, is available from Berkeley Software Design, Inc., at 1-800-800-4273, [email protected], or http://www.bsdi.com/. The 4.4BSD manuals are jointly published by Usenix and O’Reilly. O’Reilly sells the five volumes individually or in a set (ISBN 1-56592-082-1): 1-800-889-8969, [email protected], or http://www.ora.com/.

For you diehards who actually read to the end of the preface, your reward is finding out that you can get T-shirts that are a reproduction of the the original artwork drawn by John Lasseter for the cover of this book (yes, he is the John Lasseter of Walt Disney/Pixar fame who masterminded the production of “Toy Story”). These shirts were made available to the people who helped with the creation, reviewing, and editing of the book and to those folks who first reported errors in the book. A variation on these shirts that is clearly different from the originals (so as not to diminish the rarity of the ones that people had to work to get) is now available. For further information on purchasing a shirt, send a self-addressed envelope (United States residents please include return postage) to

M. K. McKusick
1614 Oxford St.
Berkeley, CA 94709-1608

Alternatively, you can visit the “History of BSD T-shirts” web page at http://www.mckusick.com/beastie/index.html.

Acknowledgments

We extend special thanks to Mike Hibler (University of Utah) who coauthored Chapter 5 on memory management, and to Rick Macklem (University of Guelph), whose NFS papers provided much of the material on NFS for Chapter 9.

We also thank the following people who read and commented on nearly the entire book: Paul Abrahams (Consultant), Susan LoVerso (Orca Systems), George Neville-Neil (Wind River Systems), and Steve Stepanek (California State University, Northridge).

We thank the following people, all of whom read and commented on early drafts of the book: Eric Allman (Pangaea Reference Systems), Eric Anderson (University of California at Berkeley), Mark Andrews (Alias Research), Mike Beede (Secure Computing Corporation), Paul Borman (Berkeley Software Design), Peter Collinson (Hillside Systems), Ben Cottrell (NetBSD user), Patrick Cua (De La Salle University, Philippines), John Dyson (The FreeBSD Project), Sean Eric Fagan (BSD developer), Mike Fester (Medieus Systems Corporation), David Greenman (The FreeBSD Project), Wayne Hathaway (Auspex Systems), John Heidemann (University of California at Los Angeles), Jeff Honig (Berkeley Software Design), Gordon Irlam (Cygnus Support), Alan Langerman (Orca Systems), Sam Leffler (Silicon Graphics), Casimir Lesiak (NASA/Ames Research Center), Gavin Lim (De La Salle University, Philippines), Steve Lucco (Carnegie Mellon University), Jan-Simon Pendry (Sequent, UK), Arnold Robbins (Georgia Institute of Technology), Peter Salus (UNIX historian), Wayne Sawdon (Carnegie Mellon University), Margo Seltzer (Harvard University), Keith Sklower (University of California at Berkeley), Keith Smith (Harvard University), and Humprey C. Sy (De La Salle University, Philippines).

This book was produced using James Clark’s implementations of pic, tbl, eqn, and groff. The index was generated by awk scripts derived from indexing programs written by Jon Bentley and Brian Kernighan [Bentley & Kernighan, 1986]. Most of the art was created with xfig. Figure placement and widow elimination were handled by the groff macros, but orphan elimination and production of even page bottoms had to be done by hand.

We encourage readers to send us suggested improvements or comments about typographical or other errors found in the book; please send electronic mail to [email protected].

References

Bach, 1986.
M. J. Bach, The Design of the UNIX Operating System, Prentice-Hall, Englewood Cliffs, NJ, 1986.

Bentley & Kernighan, 1986.
J. Bentley & B. Kernighan, “Tools for Printing Indexes,” Computing Science Technical Report 128, AT&T Bell Laboratories, Murray Hill, NJ, 1986.

CSRG, 1994.
CSRG, in 4.4 Berkeley Software Distribution, O’Reilly & Associates, Inc., Sebastopol, CA, 1994.

Kernighan & Pike, 1984.
B. W. Kernighan & R. Pike, The UNIX Programming Environment, Prentice-Hall, Englewood Cliffs, NJ, 1984.

Kernighan & Ritchie, 1978.
B. W. Kernighan & D. M. Ritchie, The C Programming Language, Prentice-Hall, Englewood Cliffs, NJ, 1978.

Kernighan & Ritchie, 1988.
B. W. Kernighan & D. M. Ritchie, The C Programming Language, 2nd ed, Prentice-Hall, Englewood Cliffs, NJ, 1988.

Libes & Ressler, 1988.
D. Libes & S. Ressler, Life with UNIX, Prentice-Hall, Englewood Cliffs, NJ, 1988.

O’Dell, 1987.
M. O’Dell, “UNIX: The World View,” Proceedings of the 1987 Winter USENIX Conference, p. 35–45, January 1987.

Organick, 1975.
E. I. Organick, The Multics System: An Examination of Its Structure, MIT Press, Cambridge, MA, 1975.

Quarterman et al, 1985.
J. S. Quarterman, A. Silberschatz, & J. L. Peterson, “4.2BSD and 4.3BSD as Examples of the UNIX System,” ACM Computing Surveys, vol. 17, no. 4, p. 379–418, December 1985.

Ritchie & Thompson, 1978.
D. M. Ritchie & K. Thompson, “The UNIX Time-Sharing System,” Bell System Technical Journal, vol. 57, no. 6, Part 2, p. 1905–1929, July–August 1978. The original version [Comm. ACM vol. 7, no. 7, pp. 365–375 (July 1974)] described the 6th edition; this citation describes the 7th edition.

Schwartz, 1987.
M. Schwartz, Telecommunication Networks, Series in Electrical and Computer Engineering, Addison-Wesley, Reading, MA, 1987.

Silberschatz & Galvin, 1994.
A. Silberschatz & P. Galvin, Operating System Concepts, 4th Edition, Addison-Wesley, Reading, MA, 1994.

Stallings, 1993.
R. Stallings, Data and Computer Communications, 4th Edition, Macmillan, New York, NY, 1993.

Tanenbaum, 1988.
A. S. Tanenbaum, Computer Networks, 2nd ed, Prentice-Hall, Englewood Cliffs, NJ, 1988.

About the Authors

Left to right: Mike Karels, Keith Bostic, Kirk McKusick, and John Quarterman together for the first time at a Usenix Conference in San Diego.

Marshall Kirk McKusick writes books and articles, consults, and teaches classes on UNIX- and BSD-related subjects. While at the University of California at Berkeley, he implemented the 4.2BSD fast file system, and was the Research Computer Scientist at the Berkeley Computer Systems Research Group (CSRG) overseeing the development and release of 4.3BSD and 4.4BSD. His particular areas of interest are the virtual-memory system and the filesystem. One day, he hopes to see them merged seamlessly. He earned his undergraduate degree in Electrical Engineering from Cornell University, and did his graduate work at the University of California at Berkeley, where he received Masters degrees in Computer Science and Business Administration, and a doctoral degree in Computer Science. He is a past president of the Usenix Association, and is a member of ACM and IEEE. In his spare time, he enjoys swimming, scuba diving, and wine collecting. The wine is stored in a specially constructed wine cellar (accessible from the web at http://winecellar.mckusick.com/cgi-bin/readhouse or using “telnet winecellar.McKusick.COM 451”) in the basement of the house that he shares with Eric Allman, his domestic partner of 17-and-some-odd years.

Keith Bostic is a member of the technical staff at Berkeley Software Design, Inc. He spent 8 years as a member of the CSRG, overseeing the development of over 400 freely redistributable UNIX-compatible utilities, and is the recipient of the 1991 Distinguished Achievement Award from the University of California, Berkeley, for his work to make 4.4BSD freely redistributable. Concurrently, he was the principal architect of the 2.10BSD release of the Berkeley Software Distribution for PDP-11s, and the coauthor of the Berkeley Log Structured Filesystem and the Berkeley database package (DB). He is also the author of the widely used vi implementation, nvi. He received his undergraduate degree in Statistics and his Masters degree in Electrical Engineering from George Washington University. He is a member of the ACM, the IEEE, and several POSIX working groups. In his spare time, he enjoys scuba diving in the South Pacific, mountain biking, and working on a tunnel into Kirk and Eric’s specially constructed wine cellar. He liv es in Massachusetts with his wife, Margo Seltzer, and their cats.

Michael J. Karels is the System Architect and Vice President of Engineering at Berkeley Software Design, Inc. He spent 8 years as the Principal Programmer of the CSRG at the University of California, Berkeley as the system architect for 4.3BSD. Karels received his Bachelor’s degree in Microbiology from the University of Notre Dame. While a graduate student in Molecular Biology at the University of California, he was the principal developer of the 2.9BSD UNIX release of the Berkeley Software Distribution for the PDP-11. He is a member of the ACM, the IEEE, and several POSIX working groups. He lives with his wife Teri Karels in the backwoods of Minnesota.

John S. Quarterman is a partner in Texas Internet Consulting (TIC), which consults in networks and open systems with particular emphasis on TCP/IP networks, UNIX systems, and standards. He is the author of The Matrix: Computer Networks and Conferencing Systems Worldwide (Digital Press, 1990), and is a coauthor of UNIX, POSIX, and Open Systems: The Open Standards Puzzle (1993), Practical Internetworking with TCP/IP and UNIX (1993), The Internet Connection: System Connectivity and Configuration (1994), and The E-Mail Companion: Communicating Effectively via the Internet and Other Global Networks (1994), all published by Addison-Wesley. He is editor of Matrix News, a monthly newsletter about issues that cross network, geographic, and political boundaries, and of Matrix Maps Quarterly; both are published by Matrix Information and Directory Services, Inc. (MIDS) of Austin, Texas. He is a partner in Zilker Internet Park, which provides Internet access from Austin. He and his wife, Gretchen Quarterman, split their time among his home in Austin, hers in Buffalo, New York, and various other locations.

Contents

Part 1 Overview

Chapter 1 History and Goals

1.1 History of the UNIX System

Origins

Research UNIX

AT&T UNIX System III and System V

Other Organizations

Berkeley Software Distributions

UNIX in the World

1.2BSD and Other Systems

The Influence of the User Community

1.3 Design Goals of 4BSD

4.2BSD Design Goals

4.3BSD Design Goals

4.4BSD Design Goals

1.4 Release Engineering

References

Chapter 2 Design Overview of 4.4BSD

2.1 4.4BSD Facilities and the Kernel

The Kernel

2.2 Kernel Organization

2.3 Kernel Services

2.4 Process Management

Signals

Process Groups and Sessions

2.5 Memory Management

BSD Memory-Management Design Decisions

Memory Management Inside the Kernel

2.6 I/O System

Descriptors and I/O

Descriptor Management

Devices

Socket IPC

Scatter/Gather I/O

Multiple Filesystem Support

2.7 Filesystems

2.8 Filestores

2.9 Network Filesystem

2.10 Terminals

2.11 Interprocess Communication

2.12 Network Communication

2.13 Network Implementation

2.14 System Operation

Exercises

References

Chapter 3 Kernel Services

3.1 Kernel Organization

System Processes

System Entry

Run-Time Organization

Entry to the Kernel

Return from the Kernel

3.2 System Calls

Result Handling

Returning from a System Call

3.3 Traps and Interrupts

Traps

I/O Device Interrupts

Software Interrupts

3.4 Clock Interrupts

Statistics and Process Scheduling

Timeouts

3.5 Memory-Management Services

3.6 Timing Services

Real Time

Adjustment of the Time

External Representation

Interval Time

3.7 User, Group, and Other Identifiers

Host Identifiers

Process Groups and Sessions

3.8 Resource Services

Process Priorities

Resource Utilization

Resource Limits

Filesystem Quotas

3.9 System-Operation Services

Accounting

Exercises

References

Part 2 Processes

Chapter 4 Process Management

4.1 Introduction to Process Management

Multiprogramming

Scheduling

4.2 Process State

The Process Structure

The User Structure

4.3 Context Switching

Process State

Low-Level Context Switching

Voluntary Context Switching

Synchronization

4.4 Process Scheduling

Calculations of Process Priority

Process-Priority Routines

Process Run Queues and Context Switching

4.5 Process Creation

4.6 Process Termination

4.7 Signals

Comparison with POSIX Signals

Posting of a Signal

Delivering a Signal

4.8 Process Groups and Sessions

Sessions

Job Control

4.9 Process Debugging

Exercises

References

Chapter 5 Memory Management

5.1 Terminology

Processes and Memory

Paging

Replacement Algorithms

Working-Set Model

Swapping

Advantages of Virtual Memory

Hardware Requirements for Virtual Memory

5.2 Overview of the 4.4BSD Virtual-Memory System

5.3 Kernel Memory Management

Kernel Maps and Submaps

Kernel Address-Space Allocation

Kernel Malloc

5.4 Per-Process Resources

4.4BSD Process Virtual-Address Space

Page-Fault Dispatch

Mapping to Objects

Objects

Objects to Pages

5.5 Shared Memory

Mmap Model

Shared Mapping

Private Mapping

Collapsing of Shadow Chains

Private Snapshots

5.6 Creation of a New Process

Reserving Kernel Resources

Duplication of the User Address Space

Creation of a New Process Without Copying

5.7 Execution of a File

5.8 Process Manipulation of Its Address Space

Change of Process Size

File Mapping

Change of Protection

5.9 Termination of a Process

5.10 The Pager Interface

Vnode Pager

Device Pager

Swap Pager

5.11 Paging

5.12 Page Replacement

Paging Parameters

The Pageout Daemon

Swapping

The Swap-In Process

5.13 Portability

The Role of the pmap Module

Initialization and Startup

Mapping Allocation and Deallocation

Change of Access and Wiring Attributes for Mappings

Management of Page-Usage Information

Initialization of Physical Pages

Management of Internal Data Structures

Exercises

References

Part 3 I/O System

Chapter 6 I/O System Overview

6.1 I/O Mapping from User to Device

Device Drivers

I/O Queueing

Interrupt Handling

6.2 Block Devices

Entry Points for Block-Device Drivers

Sorting of Disk I/O Requests

Disk Labels

6.3 Character Devices

Raw Devices and Physical I/O

Character-Oriented Devices

Entry Points for Character-Device Drivers

6.4 Descriptor Management and Services

Open File Entries

Management of Descriptors

File-Descriptor Locking

Multiplexing I/O on Descriptors

Implementation of Select

Movement of Data Inside the Kernel

6.5 The Virtual-Filesystem Interface

Contents of a Vnode

Vnode Operations

Pathname Translation

Exported Filesystem Services

6.6 Filesystem-Independent Services

The Name Cache

Buffer Management

Implementation of Buffer Management

6.7 Stackable Filesystems

Simple Filesystem Layers

The Union Mount Filesystem

Other Filesystems

Exercises

References

Chapter 7 Local Filesystems

7.1 Hierarchical Filesystem Management

7.2 Structure of an Inode

Inode Management

7.3 Naming

Directories

Finding of Names in Directories

Pathname Translation

Links

7.4 Quotas

7.5 File Locking

7.6 Other Filesystem Semantics

Large File Sizes

File Flags

Exercises

References

Chapter 8 Local Filestores

8.1 Overview of the Filestore

8.2 The Berkeley Fast Filesystem

Organization of the Berkeley Fast Filesystem

Optimization of Storage Utilization

Reading and Writing to a File

Filesystem Parameterization

Layout Policies

Allocation Mechanisms

Block Clustering

Synchronous Operations

8.3 The Log-Structured Filesystem

Organization of the Log-Structured Filesystem

Index File

Reading of the Log

Writing to the Log

Block Accounting

The Buffer Cache

Directory Operations

Creation of a File

Reading and Writing to a File

Filesystem Cleaning

Filesystem Parameterization

Filesystem-Crash Recovery

8.4 The Memory-Based Filesystem

Organization of the Memory-Based Filesystem

Filesystem Performance

Future Work

Exercises

References

Chapter 9 The Network Filesystem

9.1 History and Overview

9.2 NFS Structure and Operation

The NFS Protocol

The 4.4BSD NFS Implementation

Client–Server Interactions

RPC Transport Issues

Security Issues

9.3 Techniques for Improving Performance

Leases

Crash Recovery

Exercises

References

Chapter 10 Terminal Handling

10.1 Terminal-Processing Modes

10.2 Line Disciplines

10.3 User Interface

10.4 The tty Structure

10.5 Process Groups, Sessions, and Terminal Control

10.6 C-lists

10.7 RS-232 and Modem Control

10.8 Terminal Operations

Open

Output Line Discipline

Output Top Half

Output Bottom Half

Input Bottom Half

Input Top Half

The stop Routine

The ioctl Routine

Modem Transitions

Closing of Terminal Devices

10.9 Other Line Disciplines

Serial Line IP Discipline

Graphics Tablet Discipline

Exercises

References

Part 4 Inter process Communication

Chapter 11 Interprocess Communication

11.1 Interprocess-Communication Model

Use of Sockets

11.2 Implementation Structure and Overview

11.3 Memory Management

Mbufs

Storage-Management Algorithms

Mbuf Utility Routines

11.4 Data Structures

Communication Domains

Sockets

Socket Addresses

11.5 Connection Setup

11.6 Data Transfer

Transmitting Data

Receiving Data

Passing Access Rights

Passing Access Rights in the Local Domain

11.7 Socket Shutdown

Exercises

References

Chapter 12 Network Communication

12.1 Internal Structure

Data Flow

Communication Protocols

Network Interfaces

12.2 Socket-to-Protocol Interface

Protocol User-Request Routine

Internal Requests

Protocol Control-Output Routine

12.3 Protocol–Protocol Interface

pr_output

pr_input

pr_ctlinput

12.4 Interface between Protocol and Network Interface

Packet Transmission

Packet Reception

12.5 Routing

Kernel Routing Tables

Routing Lookup

Routing Redirects

Routing-Table Interface

User-Level Routing Policies

User-Level Routing Interface: Routing Socket

12.6 Buffering and Congestion Control

Protocol Buffering Policies

Queue Limiting

12.7 Raw Sockets

Control Blocks

Input Processing

Output Processing

12.8 Additional Network-Subsystem Topics

Out-of-Band Data

Address Resolution Protocol

Exercises

References

Chapter 13 Network Protocols

13.1 Internet Network Protocols

Internet Addresses

Subnets

Broadcast Addresses

Internet Multicast

Internet Ports and Associations

Protocol Control Blocks

13.2 User Datagram Protocol (UDP)

Initialization

Output

Input

Control Operations

13.3 Internet Protocol (IP)

Output

Input

Forwarding

13.4 Transmission Control Protocol (TCP)

TCP Connection States

Sequence Variables

13.5 TCP Algorithms

Timers

Estimation of Round-Trip Time

Connection Establishment

Connection Shutdown

13.6 TCP Input Processing

13.7 TCP Output Processing

Sending of Data

Avoidance of the Silly-Window Syndrome

Avoidance of Small Packets

Delayed Acknowledgments and Window Updates

Retransmit State

Slow Start

Source-Quench Processing

Buffer and Window Sizing

Avoidance of Congestion with Slow Start

Fast Retransmission

13.8 Internet Control Message Protocol (ICMP)

13.9 OSI Implementation Issues

13.10 Summary of Networking and Interprocess Communication

Creation of a Communication Channel

Sending and Receiving of Data

Termination of Data Transmission or Reception

Exercises

References

Part 5 System Operation

Chapter 14 System Startup

14.1 Overview

14.2 Bootstrapping

The boot Program

14.3 Kernel Initialization

Assembly-Language Startup

Machine-Dependent Initialization

Message Buffer

System Data Structures

14.4 Autoconfiguration

Device Probing

Device Attachment

New Autoconfiguration Data Structures

New Autoconfiguration Functions

Device Naming

14.5 Machine-Independent Initialization

14.6 User-Level Initialization

/sbin/init

/etc/rc

/usr/libexec/getty

/usr/bin/login

14.7 System-Startup Topics

Kernel Configuration

System Shutdown and Autoreboot

System Debugging

Passage of Information To and From the Kernel

Exercises

References

Glossary

Index

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.218.168.16