Update cookies preferences

E-book: Design and Implementation of the FreeBSD Operating System, The

4.36/5 (206 ratings by Goodreads)
  • Format: 928 pages
  • Pub. Date: 28-Aug-2014
  • Publisher: Addison-Wesley Educational Publishers Inc
  • Language: eng
  • ISBN-13: 9780133761801
Other books in subject:
  • Format - PDF+DRM
  • Price: 44,45 €*
  • * the price is final i.e. no additional discount will apply
  • Add to basket
  • Add to Wishlist
  • This ebook is for personal use only. E-Books are non-refundable.
  • Format: 928 pages
  • Pub. Date: 28-Aug-2014
  • Publisher: Addison-Wesley Educational Publishers Inc
  • Language: eng
  • ISBN-13: 9780133761801
Other books in subject:

DRM restrictions

  • Copying (copy/paste):

    not allowed

  • Printing:

    not allowed

  • Usage:

    Digital Rights Management (DRM)
    The publisher has supplied this book in encrypted form, which means that you need to install free software in order to unlock and read it.  To read this e-book you have to create Adobe ID More info here. Ebook can be read and downloaded up to 6 devices (single user with the same Adobe ID).

    Required software
    To read this ebook on a mobile device (phone or tablet) you'll need to install this free app: PocketBook Reader (iOS / Android)

    To download and read this eBook on a PC or Mac you need Adobe Digital Editions (This is a free app specially developed for eBooks. It's not the same as Adobe Reader, which you probably already have on your computer.)

    You can't read this ebook with Amazon Kindle

The most complete, authoritative technical guide to the FreeBSD kernel’s internal structure has now been extensively updated to cover all major improvements between Versions 5 and 11. Approximately one-third of this edition’s content is completely new, and another one-third has been extensively rewritten.

Three long-time FreeBSD project leaders begin with a concise overview of the FreeBSD kernel’s current design and implementation. Next, they cover the FreeBSD kernel from the system-call level down–from the interface to the kernel to the hardware. Explaining key design decisions, they detail the concepts, data structures, and algorithms used in implementing each significant system facility, including process management, security, virtual memory, the I/O system, filesystems, socket IPC, and networking.

This Second Edition

• Explains highly scalable and lightweight virtualization using FreeBSD jails, and virtual-machine acceleration with Xen and Virtio device paravirtualization

• Describes new security features such as Capsicum sandboxing and GELI cryptographic disk protection

• Fully covers NFSv4 and Open Solaris ZFS support

• Introduces FreeBSD’s enhanced volume management and new journaled soft updates

• Explains DTrace’s fine-grained process debugging/profiling

• Reflects major improvements to networking, wireless, and USB support

Readers can use this guide as both a working reference and an in-depth study of a leading contemporary, portable, open source operating system. Technical and sales support professionals will discover both FreeBSD’s capabilities and its limitations. Applications developers will learn how to effectively and efficiently interface with it; system administrators will learn how to maintain, tune, and configure it; and systems programmers will learn how to extend, enhance, and interface with it.

Marshall Kirk McKusick writes, consults, and teaches classes on UNIX- and BSD-related subjects. While at the University of California, Berkeley, he implemented the 4.2BSD fast filesystem. He was research computer scientist at the Berkeley Computer Systems Research Group (CSRG), overseeing development and release of 4.3BSD and 4.4BSD. He is a FreeBSD Foundation board member and a long-time FreeBSD committer. Twice president of the Usenix Association, he is also a member of ACM, IEEE, and AAAS.

George V. Neville-Neil hacks, writes, teaches, and consults on security, networking, and operating systems. A FreeBSD Foundation board member, he served on the FreeBSD Core Team for four years. Since 2004, he has written the “Kode Vicious” column for Queue and Communications of the ACM. He is vice chair of ACM’s Practitioner Board and a member of Usenix Association, ACM, IEEE, and AAAS.

Robert N.M. Watson is a University Lecturer in systems, security, and architecture in the Security Research Group at the University of Cambridge Computer Laboratory. He supervises advanced research in computer architecture, compilers, program analysis, operating systems, networking, and security. A FreeBSD Foundation board member, he served on the Core Team for ten years and has been a committer for fifteen years. He is a member of Usenix Association and ACM.

Preface xxi
About the Authors xxix
Part I Overview
1(86)
Chapter 1 History and Goals
3(18)
1.1 History of the UNIX System
3(4)
Origins
3(1)
Research UNIX
4(1)
AT&T UNIX System III and System V
5(1)
Berkeley Software Distributions
6(1)
UNIX in the World
7(1)
1.2 BSD and Other Systems
7(2)
The Influence of the User Community
8(1)
1.3 The Transition of BSD to Open Source
9(5)
Networking Release 2
10(1)
The Lawsuit
11(2)
4.4BSD
13(1)
4.4BSD-Lite Release 2
13(1)
1.4 The FreeBSD Development Model
14(7)
References
17(4)
Chapter 2 Design Overview of FreeBSD
21(36)
2.1 FreeBSD Facilities and the Kernel
21(2)
The Kernel
22(1)
2.2 Kernel Organization
23(3)
2.3 Kernel Services
26(1)
2.4 Process Management
26(3)
Signals
28(1)
Process Groups and Sessions
29(1)
2.5 Security
29(7)
Process Credentials
31(1)
Privilege Model
31(1)
Discretionary Access Control
32(1)
Capability Model
32(1)
Jail Lightweight Virtualization
32(2)
Mandatory Access Control
34(1)
Event Auditing
35(1)
Cryptography and Random-Number Generators
35(1)
2.6 Memory Management
36(3)
BSD Memory-Management Design Decisions
36(2)
Memory Management Inside the Kernel
38(1)
2.7 I/O System Overview
39(5)
Descriptors and I/O
39(2)
Descriptor Management
41(1)
Devices
42(1)
Socket IPC
42(1)
Scatter-Gather I/O
43(1)
Multiple Filesystem Support
43(1)
2.8 Devices
44(1)
2.9 The Fast Filesystem
45(4)
Filestores
48(1)
2.10 The Zettabyte Filesystem
49(1)
2.11 The Network Filesystem
50(1)
2.12 Interprocess Communication
50(1)
2.13 Network-Layer Protocols
51(1)
2.14 Transport-Layer Protocols
52(1)
2.15 System Startup and Shutdown
52(5)
Exercises
54(1)
References
54(3)
Chapter 3 Kernel Services
57(30)
3.1 Kernel Organization
57(5)
System Processes
57(1)
System Entry
58(1)
Run-Time Organization
59(1)
Entry to the Kernel
60(1)
Return from the Kernel
61(1)
3.2 System Calls
62(2)
Result Handling
62(1)
Returning from a System Call
63(1)
3.3 Traps and Interrupts
64(1)
I/O Device Interrupts
64(1)
Software Interrupts
65(1)
3.4 Clock Interrupts
65(4)
Statistics and Process Scheduling
66(1)
Timeouts
67(2)
3.5 Memory-Management Services
69(4)
3.6 Timing Services
73(2)
Real Time
73(1)
External Representation
73(1)
Adjustment of the Time
74(1)
Interval Time
74(1)
3.7 Resource Services
75(2)
Process Priorities
75(1)
Resource Utilization
75(1)
Resource Limits
76(1)
Filesystem Quotas
77(1)
3.8 Kernel Tracing Facilities
77(10)
System-Call Tracing
77(1)
DTrace
78(4)
Kernel Tracing
82(2)
Exercises
84(1)
References
85(2)
Part II Processes
87(226)
Chapter 4 Process Management
89(58)
4.1 Introduction to Process Management
89(3)
Multiprogramming
90(1)
Scheduling
91(1)
4.2 Process State
92(7)
The Process Structure
94(4)
The Thread Structure
98(1)
4.3 Context Switching
99(15)
Thread State
100(1)
Low-Level Context Switching
100(1)
Voluntary Context Switching
101(5)
Synchronization
106(1)
Mutex Synchronization
107(2)
Mutex Interface
109(1)
Lock Synchronization
110(2)
Deadlock Prevention
112(2)
4.4 Thread Scheduling
114(12)
The Low-Level Scheduler
114(1)
Thread Run Queues and Context Switching
115(2)
Timeshare Thread Scheduling
117(5)
Multiprocessor Scheduling
122(3)
Adaptive Idle
125(1)
Traditional Timeshare Thread Scheduling
125(1)
4.5 Process Creation
126(2)
4.6 Process Termination
128(1)
4.7 Signals
129(7)
Posting of a Signal
132(3)
Delivering a Signal
135(1)
4.8 Process Groups and Sessions
136(6)
Process Groups
137(1)
Sessions
138(1)
Job Control
139(3)
4.9 Process Debugging
142(5)
Exercises
144(2)
References
146(1)
Chapter 5 Security
147(74)
5.1 Operating-System Security
148(1)
5.2 Security Model
149(2)
Process Model
149(1)
Discretionary and Mandatory Access Control
150(1)
Trusted Computing Base (TCB)
151(1)
Other Kernel-Security Features
151(1)
5.3 Process Credentials
151(3)
The Credential Structure
152(1)
Credential Memory Model
153(1)
Access-Control Checks
153(1)
5.4 Users and Groups
154(3)
Setuid and Setgid Binaries
155(2)
5.5 Privilege Model
157(2)
Implicit Privilege
157(1)
Explicit Privilege
157(2)
5.6 Interprocess Access Control
159(2)
Visibility
160(1)
Signals
160(1)
Scheduling Control
160(1)
Waiting on Process Termination
161(1)
Debugging
161(1)
5.7 Discretionary Access Control
161(13)
The Virtual-Filesystem Interface and DAC
162(1)
Object Owners and Groups
163(1)
UNIX Permissions
164(1)
Access Control Lists (ACLs)
165(3)
POSIX.1e Access Control Lists
168(3)
NFSv4 Access Control Lists
171(3)
5.8 Capsicum Capability Model
174(6)
Capsicum Application Structure
175(1)
Capability Systems
176(1)
Capabilities
177(2)
Capability Mode
179(1)
5.9 Jails
180(4)
5.10 Mandatory Access-Control Framework
184(16)
Mandatory Policies
186(1)
Guiding Design Principles
187(1)
Architecture of the MAC Framework
188(1)
Framework Startup
189(1)
Policy Registration
190(1)
Framework Entry-Point Design Considerations
191(1)
Policy Entry-Point Considerations
192(1)
Kernel Service Entry-Point Invocation
193(1)
Policy Composition
194(1)
Object Labelling
195(1)
Label Life Cycle and Memory Management
196(3)
Label Synchronization
199(1)
Policy-Agnostic Label Management from Userspace
199(1)
5.11 Security Event Auditing
200(6)
Audit Events and Records
201(1)
BSM Audit Records and Audit Trails
202(1)
Kernel-Audit Implementation
203(3)
5.12 Cryptographic Services
206(6)
Cryptographic Framework
206(2)
Random-Number Generator
208(4)
5.13 GELI Full-Disk Encryption
212(9)
Confidentiality and Integrity Protection
212(1)
Key Management
213(1)
Starting GELI
214(1)
Cryptographic Block Protection
215(1)
I/O Model
216(1)
Limitations
216(1)
Exercises
217(1)
References
217(4)
Chapter 6 Memory Management
221(92)
6.1 Terminology
221(6)
Processes and Memory
222(1)
Paging
223(1)
Replacement Algorithms
224(1)
Working-Set Model
225(1)
Swapping
225(1)
Advantages of Virtual Memory
225(1)
Hardware Requirements for Virtual Memory
226(1)
6.2 Overview of the FreeBSD Virtual-Memory System
227(3)
User Address-Space Management
228(2)
6.3 Kernel Memory Management
230(14)
Kernel Maps and Submaps
231(2)
Kernel Address-Space Allocation
233(3)
The Slab Allocator
236(2)
The Keg Allocator
238(1)
The Zone Allocator
239(2)
Kernel Malloc
241(2)
Kernel Zone Allocator
243(1)
6.4 Per-Process Resources
244(6)
FreeBSD Process Virtual-Address Space
245(1)
Page-Fault Dispatch
245(2)
Mapping to Vm_objects
247(2)
Vm_objects
249(1)
Vm_objects to Pages
249(1)
6.5 Shared Memory
250(8)
Mmap Model
251(2)
Shared Mapping
253(1)
Private Mapping
254(3)
Collapsing of Shadow Chains
257(1)
Private Snapshots
258(1)
6.6 Creation of a New Process
258(4)
Reserving Kernel Resources
259(1)
Duplication of the User Address Space
260(1)
Creation of a New Process Without Copying
261(1)
6.7 Execution of a File
262(1)
6.8 Process Manipulation of Its Address Space
263(3)
Change of Process Size
263(1)
File Mapping
264(2)
Change of Protection
266(1)
6.9 Termination of a Process
266(1)
6.10 The Pager Interface
267(9)
Vnode Pager
269(1)
Device Pager
270(2)
Physical-Memory Pager
272(1)
Swap Pager
272(4)
6.11 Paging
276(13)
Hardware-Cache Design
280(2)
Hardware Memory Management
282(2)
Superpages
284(5)
6.12 Page Replacement
289(9)
Paging Parameters
291(1)
The Pageout Daemon
292(3)
Swapping
295(1)
The Swap-In Process
296(2)
6.13 Portability
298(15)
The Role of the pmap Module
299(2)
Initialization and Startup
301(3)
Mapping Allocation and Deallocation
304(2)
Change of Access and Wiring Attributes for Mappings
306(1)
Maintenance of Physical Page-Usage Information
307(1)
Initialization of Physical Pages
308(1)
Management of Internal Data Structures
308(1)
Exercises
308(2)
References
310(3)
Part III I/O System
313(278)
Chapter 7 I/O System Overview
315(46)
7.1 Descriptor Management and Services
316(17)
Open File Entries
318(1)
Management of Descriptors
319(2)
Asynchronous I/O
321(1)
File-Descriptor Locking
322(2)
Multiplexing I/O on Descriptors
324(3)
Implementation of Select
327(2)
Kqueues and Kevents
329(3)
Movement of Data Inside the Kernel
332(1)
7.2 Local Interprocess Communication
333(6)
Semaphores
335(2)
Message Queues
337(1)
Shared Memory
338(1)
7.3 The Virtual-Filesystem Interface
339(5)
Contents of a Vnode
339(3)
Vnode Operations
342(1)
Pathname Translation
342(1)
Exported Filesystem Services
343(1)
7.4 Filesystem-Independent Services
344(8)
The Name Cache
346(1)
Buffer Management
347(3)
Implementation of Buffer Management
350(2)
7.5 Stackable Filesystems
352(9)
Simple Filesystem Layers
354(1)
The Union Filesystem
355(2)
Other Filesystems
357(1)
Exercises
358(1)
References
359(2)
Chapter 8 Devices
361(70)
8.1 Device Overview
361(6)
The PC I/O Architecture
362(2)
The Structure of the FreeBSD Mass Storage I/O Subsystem
364(2)
Device Naming and Access
366(1)
8.2 I/O Mapping from User to Device
367(3)
Device Drivers
368(1)
I/O Queueing
369(1)
Interrupt Handling
370(1)
8.3 Character Devices
370(4)
Raw Devices and Physical I/O
372(1)
Character-Oriented Devices
373(1)
Entry Points for Character Device Drivers
373(1)
8.4 Disk Devices
374(4)
Entry Points for Disk Device Drivers
374(1)
Sorting of Disk I/O Requests
375(1)
Disk Labels
376(2)
8.5 Network Devices
378(4)
Entry Points for Network Drivers
378(1)
Configuration and Control
379(1)
Packet Reception
380(1)
Packet Transmission
381(1)
8.6 Terminal Handling
382(9)
Terminal-Processing Modes
383(2)
User Interface
385(2)
Process Groups, Sessions, and Terminal Control
387(1)
Terminal Operations
388(1)
Terminal Output (Upper Half)
388(1)
Terminal Output (Lower Half)
389(1)
Terminal Input
390(1)
Closing of Terminal Devices
391(1)
8.7 The GEOM Layer
391(8)
Terminology and Topology Rules
392(1)
Changing Topology
393(3)
Operation
396(1)
Topological Flexibility
397(2)
8.8 The CAM Layer
399(3)
The Path of a SCSI I/O Request Through the CAM Subsystem
400(2)
ATA Disks
402(1)
8.9 Device Configuration
402(12)
Device Identification
405(2)
Autoconfiguration Data Structures
407(5)
Resource Management
412(2)
8.10 Device Virtualization
414(17)
Interaction with the Hypervisor
414(1)
Virtio
415(4)
Xen
419(8)
Device Pass-Through
427(1)
Exercises
428(1)
References
429(2)
Chapter 9 The Fast Filesystem
431(92)
9.1 Hierarchical Filesystem Management
431(2)
9.2 Structure of an Inode
433(10)
Changes to the Inode Format
435(1)
Extended Attributes
436(2)
New Filesystem Capabilities
438(1)
File Flags
439(2)
Dynamic Inodes
441(1)
Inode Management
442(1)
9.3 Naming
443(8)
Directories
444(2)
Finding of Names in Directories
446(1)
Pathname Translation
447(2)
Links
449(2)
9.4 Quotas
451(3)
9.5 File Locking
454(5)
9.6 Soft Updates
459(21)
Update Dependencies in the Filesystem
460(4)
Dependency Structures
464(2)
Bitmap Dependency Tracking
466(1)
Inode Dependency Tracking
467(2)
Direct-Block Dependency Tracking
469(1)
Indirect-Block Dependency Tracking
470(1)
Dependency Tracking for New Indirect Blocks
471(1)
New Directory-Entry Dependency Tracking
472(2)
New Directory Dependency Tracking
474(1)
Directory-Entry Removal-Dependency Tracking
475(1)
File Truncation
476(1)
File and Directory Inode Reclamation
476(1)
Directory-Entry Renaming Dependency Tracking
476(1)
Fsync Requirements for Soft Updates
477(1)
File-Removal Requirements for Soft Updates
478(2)
Soft-Updates Requirements for fsck
480(1)
9.7 Filesystem Snapshots
480(7)
Creating a Filesystem Snapshot
481(2)
Maintaining a Filesystem Snapshot
483(1)
Large Filesystem Snapshots
484(2)
Background fsck
486(1)
User-Visible Snapshots
487(1)
Live Dumps
487(1)
9.8 Journaled Soft Updates
487(9)
Background and Introduction
487(1)
Compatibility with Other Implementations
488(1)
Journal Format
488(1)
Modifications That Require Journaling
489(1)
Additional Requirements of Journaling
490(2)
The Recovery Process
492(1)
Performance
493(1)
Future Work
494(1)
Tracking File-Removal Dependencies
495(1)
9.9 The Local Filestore
496(5)
Overview of the Filestore
497(2)
User I/O to a File
499(2)
9.10 The Berkeley Fast Filesystem
501(22)
Organization of the Berkeley Fast Filesystem
502(1)
Boot Blocks
503(1)
Optimization of Storage Utilization
504(1)
Reading and Writing to a File
505(2)
Layout Policies
507(3)
Allocation Mechanisms
510(4)
Block Clustering
514(2)
Extent-Based Allocation
516(1)
Exercises
517(2)
References
519(4)
Chapter 10 The Zettabyte Filesystem
523(28)
10.1 Introduction
523(4)
10.2 ZFS Organization
527(5)
ZFS Dnode
528(1)
ZFS Block Pointers
529(2)
ZFS objset Structure
531(1)
10.3 ZFS Structure
532(3)
The MOS Layer
533(1)
The Object-Set Layer
534(1)
10.4 ZFS Operation
535(12)
Writing New Data to Disk
536(2)
Logging
538(2)
RAIDZ
540(2)
Snapshots
542(1)
ZFS Block Allocation
542(1)
Freeing Blocks
543(2)
Deduplication
545(1)
Remote Replication
546(1)
10.5 ZFS Design Tradeoffs
547(4)
Exercises
549(1)
References
549(2)
Chapter 11 The Network Filesystem
551(40)
11.1 Overview
551(2)
11.2 Structure and Operation
553(14)
The FreeBSD NFS Implementation
558(4)
Client-Server Interactions
562(2)
Security Issues
564(1)
Techniques for Improving Performance
565(2)
11.3 NFS Evolution
567(24)
Namespace
572(1)
Attributes
572(2)
Access Control Lists
574(1)
Caching, Delegation, and Callbacks
574(7)
Locking
581(2)
Security
583(1)
Crash Recovery
584(2)
Exercises
586(1)
References
587(4)
Part IV Interprocess Communication
591(182)
Chapter 12 Interprocess Communication
593(56)
12.1 Interprocess-Communication Model
593(6)
Use of Sockets
596(3)
12.2 Implementation Structure and Overview
599(2)
12.3 Memory Management
601(5)
Mbufs
601(4)
Storage-Management Algorithms
605(1)
Mbuf Utility Routines
606(1)
12.4 IPC Data Structures
606(6)
Socket Addresses
611(1)
Locks
612(1)
12.5 Connection Setup
612(3)
12.6 Data Transfer
615(5)
Transmitting Data
616(1)
Receiving Data
617(3)
12.7 Socket Shutdown
620(1)
12.8 Network-Communication Protocol Internal Structure
621(5)
Data Flow
623(1)
Communication Protocols
624(2)
12.9 Socket-to-Protocol Interface
626(5)
Protocol User-Request Routines
627(3)
Protocol Control-Output Routine
630(1)
12.10 Protocol-to-Protocol Interface
631(3)
pr_output
632(1)
pr_input
632(1)
pr_ctlinput
633(1)
12.11 Protocol-to-Network Interface
634(9)
Network Interfaces and Link-Layer Protocols
634(7)
Packet Transmission
641(1)
Packet Reception
642(1)
12.12 Buffering and Flow Control
643(1)
Protocol Buffering Policies
643(1)
Queue Limiting
643(1)
12.13 Network Virtualization
644(5)
Exercises
646(2)
References
648(1)
Chapter 13 Network-Layer Protocols
649(72)
13.1 Internet Protocol Version 4
650(7)
IPv4 Addresses
652(1)
Broadcast Addresses
653(1)
Internet Multicast
654(1)
Link-Layer Address Resolution
655(2)
13.2 Internet Control Message Protocols (ICMP)
657(2)
13.3 Internet Protocol Version 6
659(11)
IPv6 Addresses
660(2)
IPv6 Packet Formats
662(2)
Changes to the Socket API
664(2)
Autoconfiguration
666(4)
13.4 Internet Protocols Code Structure
670(5)
Output
671(2)
Input
673(1)
Forwarding
674(1)
13.5 Routing
675(11)
Kernel Routing Tables
677(3)
Routing Lookup
680(3)
Routing Redirects
683(1)
Routing-Table Interface
683(1)
User-Level Routing Policies
684(1)
User-Level Routing Interface: Routing Socket
685(1)
13.6 Raw Sockets
686(2)
Control Blocks
686(1)
Input Processing
687(1)
Output Processing
687(1)
13.7 Security
688(12)
IPSec Overview
689(1)
Security Protocols
690(3)
Key Management
693(5)
IPSec Implementation
698(2)
13.8 Packet-Processing Frameworks
700(21)
Berkeley Packet Filter
700(1)
IP Firewalls
701(1)
IPFW and Dummynet
702(4)
Packet Filter (PF)
706(1)
Netgraph
707(5)
Netmap
712(3)
Exercises
715(2)
References
717(4)
Chapter 14 Transport-Layer Protocols
721(52)
14.1 Internet Ports and Associations
721(2)
Protocol Control Blocks
722(1)
14.2 User Datagram Protocol (UDP)
723(2)
Initialization
723(1)
Output
724(1)
Input
724(1)
Control Operations
725(1)
14.3 Transmission Control Protocol (TCP)
725(7)
TCP Connection States
727(3)
Sequence Variables
730(2)
14.4 TCP Algorithms
732(9)
Timers
733(2)
Estimation of Round-Trip Time
735(1)
Connection Establishment
736(3)
SYN Cache
739(1)
SYN Cookies
739(1)
Connection Shutdown
740(1)
14.5 TCP Input Processing
741(4)
14.6 TCP Output Processing
745(16)
Sending Data
746(1)
Avoidance of the Silly-Window Syndrome
746(1)
Avoidance of Small Packets
747(1)
Delayed Acknowledgments and Window Updates
748(1)
Selective Acknowledgment
749(2)
Retransmit State
751(1)
Slow Start
752(2)
Buffer and Window Sizing
754(1)
Avoidance of Congestion with Slow Start
755(1)
Fast Retransmission
756(2)
Modular Congestion Control
758(1)
The Vegas Algorithm
759(1)
The Cubic Algorithm
760(1)
14.7 Stream Control Transmission Protocol (SCTP)
761(12)
Chunks
762(1)
Association Setup
762(2)
Data Transfer
764(2)
Association Shutdown
766(1)
Multihoming and Heartbeats
767(1)
Exercises
768(2)
References
770(3)
Part V System Operation
773(34)
Chapter 15 System Startup and Shutdown
775(32)
15.1 Firmware and BIOSes
776(1)
15.2 Boot Loaders
777(5)
Master Boot Record and Globally Unique Identifier Partition Table
778(1)
The Second-Stage Boot Loader: gptboot
779(1)
The Final-Stage Boot Loader: /boot/loader
779(2)
Boot Loading on Embedded Platforms
781(1)
15.3 Kernel Boot
782(16)
Assembly-Language Startup
783(1)
Platform-Specific C-Language Startup
784(1)
Modular Kernel Design
785(1)
Module Initialization
785(2)
Basic Kernel Services
787(5)
Kernel-Thread Initialization
792(2)
Device-Module Initialization
794(2)
Loadable Kernel Modules
796(2)
15.4 User-Level Initialization
798(2)
/sbin/init
798(1)
System Startup Scripts
798(1)
/usr/libexec/getty
799(1)
/usr/bin/login
799(1)
15.5 System Operation
800(7)
Kernel Configuration
800(1)
System Shutdown and Autoreboot
801(1)
System Debugging
802(1)
Passage of Information To and From the Kernel
803(2)
Exercises
805(1)
References
806(1)
Glossary 807(40)
Index 847
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 filesystem 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. 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 has twice been president of the board of the Usenix Association, is currently a member of the FreeBSD Foundation Board of Directors, a member of the editorial board of ACMs Queue magazine, a senior member of the IEEE, and a member of the Usenix Association, ACM, and AAAS. 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://www.McKusick.com/cgi-bin/readhouse) in the basement of the house that he shares with Eric Allman, his partner of 35-and-some-odd years and husband since 2013.

George V. Neville-Neil hacks, writes, teaches, and consults in the areas of Security, Networking, and Operating Systems. Other areas of interest include embedded and real-time systems, network time protocols, and code spelunking. In 2007, he helped start the AsiaBSDCon series of conferences in Tokyo, Japan, and has served on the program committee every year since then. He is a member of the FreeBSD Foundation Board of Directors, and was a member of the FreeBSD Core Team for 4 years. Contributing broadly to open source, he is the lead developer on the Precision Time Protocol project (http://ptpd.sf.net) and the developer of the Packet Construction Set (http://pcs.sf.net). Since 2004, he has written a monthly column, Kode Vicious, that appears both in ACMs Queue and Communications of the ACM. He serves on the editorial board of ACMs Queue magazine, is vice-chair of ACMs Practitioner Board, and is a member of the Usenix Association, ACM, IEEE, and AAAS. He earned his bachelors degree in computer science at Northeastern University in Boston, Massachusetts. He is an avid bicyclist, hiker, and traveler who has lived in Amsterdam, The Netherlands, and Tokyo, Japan. He is currently based in Brooklyn, New York, where he lives with his husband, Kaz Senju.

Robert N.M. Watson is a University Lecturer in Systems, Security, and Architecture in the Security Research Group at the University of Cambridge Computer Laboratory. He supervises doctoral students and postdoctoral researchers in cross-layer research projects spanning computer architecture, compilers, program analysis, program transformation, operating systems, networking, and security. Dr. Watson is a member of the FreeBSD Foundation Board of Directors, was a member of the FreeBSD Core Team for 10 years, and has been a FreeBSD committer for 15 years. His open-source contributions include work on FreeBSD networking, security, and multiprocessing. Having grown up in Washington, D. C., he earned his undergraduate degree in Logic and Computation, with a double major in Computer Science, at Carnegie Mellon University in Pittsburgh, Pennsylvania, and then worked at a series of industrial research labs investigating computer security. He earned his doctoral degree at the University of Cambridge, where his graduate research was in extensible operating system access control. Dr. Watson and his wife Dr. Leigh Denault have lived in Cambridge, England, for 10 years.