| |
| |
Foreword | |
| |
| |
Preface | |
| |
| |
About the Authors | |
| |
| |
Acknowledgments | |
| |
| |
| |
Introduction to Solaris Internals | |
| |
| |
| |
Introduction | |
| |
| |
| |
Key Features of Solaris 10, Solaris 9, and Solaris 8 | |
| |
| |
| |
Key Differentiators | |
| |
| |
| |
Kernel Overview | |
| |
| |
| |
Processes, Threads, and Scheduling | |
| |
| |
| |
Interprocess Communication | |
| |
| |
| |
Signals | |
| |
| |
| |
Memory Management | |
| |
| |
| |
Files and File Systems | |
| |
| |
| |
Resource Management | |
| |
| |
| |
The Process Model | |
| |
| |
| |
The Solaris Process Model | |
| |
| |
| |
Components of a Process | |
| |
| |
| |
Process Model Evolution | |
| |
| |
| |
Executable Objects | |
| |
| |
| |
Process Structures | |
| |
| |
| |
Kernel Process Table | |
| |
| |
| |
Process Resource Attributes | |
| |
| |
| |
Process Creation | |
| |
| |
| |
System Calls | |
| |
| |
| |
Process Termination | |
| |
| |
| |
The Process File System | |
| |
| |
| |
Signals | |
| |
| |
| |
Sessions and Process Groups | |
| |
| |
| |
MDB Reference | |
| |
| |
| |
Scheduling Classes and the Dispatcher | |
| |
| |
| |
Fundamentals | |
| |
| |
| |
Processor Abstractions | |
| |
| |
| |
Dispatcher Queues, Structures, and Variables | |
| |
| |
| |
Dispatcher Locks | |
| |
| |
| |
Dispatcher Initialization | |
| |
| |
| |
Scheduling Classes | |
| |
| |
| |
Thread Priorities | |
| |
| |
| |
Dispatcher Functions | |
| |
| |
| |
Preemption | |
| |
| |
| |
The Kernel Sleep/Wakeup Facility | |
| |
| |
| |
Interrupts | |
| |
| |
| |
Summary | |
| |
| |
| |
MDB Reference | |
| |
| |
| |
Interprocess Communication | |
| |
| |
| |
The System V IPC Framework | |
| |
| |
| |
System V IPC Resource Controls | |
| |
| |
| |
Configuring IPC Tuneables on Solaris 10 | |
| |
| |
| |
System V Shared Memory | |
| |
| |
| |
System V Semaphores | |
| |
| |
| |
System V Message Queues | |
| |
| |
| |
Posix IPC | |
| |
| |
| |
Solaris Doors | |
| |
| |
| |
MDB Reference | |
| |
| |
| |
Process Rights Management | |
| |
| |
| |
Then and Now | |
| |
| |
| |
Least Privilege in Solaris | |
| |
| |
| |
Process Privilege Models | |
| |
| |
| |
Privilege Awareness: The Details | |
| |
| |
| |
Least Privilege Interfaces | |
| |
| |
| |
Resource Management | |
| |
| |
| |
Zones | |
| |
| |
| |
Introduction | |
| |
| |
| |
Zone Runtime | |
| |
| |
| |
Booting Zones | |
| |
| |
| |
Security | |
| |
| |
| |
Process Model | |
| |
| |
| |
File Systems | |
| |
| |
| |
Networking | |
| |
| |
| |
Devices | |
| |
| |
| |
Interprocess Communication | |
| |
| |
| |
Resource Management and Observability | |
| |
| |
| |
MDB Reference | |
| |
| |
| |
Projects, Tasks, and Resource Controls | |
| |
| |
| |
Projects and Tasks Framework | |
| |
| |
| |
The Project Database | |
| |
| |
| |
Project and Task APIs | |
| |
| |
| |
Kernel Infrastructure for Projects and Tasks | |
| |
| |
| |
Resource Controls | |
| |
| |
| |
Interfaces for Resource Controls | |
| |
| |
| |
Kernel Interfaces for Resource Controls | |
| |
| |
| |
Memory | |
| |
| |
| |
Introduction to Solaris Memory | |
| |
| |
| |
Virtual Memory Primer | |
| |
| |
| |
Two Levels of Memory | |
| |
| |
| |
Memory Sharing and Protection | |
| |
| |
| |
Pages: Basic Units of Physical Memory | |
| |
| |
| |
Virtual-to-Physical Translation | |
| |
| |
| |
Physical Memory Management: Paging and Swapping | |
| |
| |
| |
Virtual Memory as a File System Cache | |
| |
| |
| |
New Features of the Virtual Memory Implementation | |
| |
| |
| |
Virtual Memory | |
| |
| |
| |
Design Overview | |
| |
| |
| |
Virtual Address Spaces | |
| |
| |
| |
Tracing the VM System | |
| |
| |
| |
Virtual Address Space Management | |
| |
| |
| |
Segment Drivers | |
| |
| |
| |
Anonymous Memory | |
| |
| |
| |
The Anonymous Memory Layer | |
| |
| |
| |
The swapfs Layer | |
| |
| |
| |
Virtual Memory Watchpoints | |
| |
| |
| |
Changes to Support Large Pages | |
| |
| |
| |
MDB Reference | |
| |
| |
| |
Physical Memory | |
| |
| |
| |
Physical Memory Allocation | |
| |
| |
| |
Pages: The Basic Unit of Solaris Memory | |
| |
| |
| |
The Page Scanner | |
| |
| |
| |
MDB Reference | |
| |
| |
| |
Kernel Memory | |
| |
| |
| |
Kernel Virtual Memory Layout | |
| |
| |
| |
Kernel Memory Allocation | |
| |
| |
| |
The Vmem Allocator | |
| |
| |
| |
Kernel Memory Allocator Tracing | |
| |
| |
| |
MDB Reference | |
| |
| |
| |
Hardware Address Translation | |
| |
| |
| |
HAT Overview | |
| |
| |
| |
The UltraSPARC HAT Layer | |
| |
| |
| |
The x64 HAT Layer | |
| |
| |
| |
MDB Reference | |
| |
| |
| |
Working with Multiple Page Sizes in Solaris | |
| |
| |
| |
Determining When to Use Large Pages | |
| |
| |
| |
Measuring Application Performance | |
| |
| |
| |
Configuring for Multiple Page Sizes | |
| |
| |
| |
File Systems | |
| |
| |
| |
File System Framework | |
| |
| |
| |
File System Framework | |
| |
| |
| |
Process-Level File Abstractions | |
| |
| |
| |
Solaris File System Framework | |
| |
| |
| |
File System Modules | |
| |
| |
| |
The Virtual File System (vfs) Interface | |
| |
| |
| |
The Vnode | |
| |
| |
| |
File System I/O | |
| |
| |
| |
File Systems and Memory Allocation | |
| |
| |
| |
Path-Name Management | |
| |
| |
| |
The Directory Name Lookup Cache | |
| |
| |
| |
The File System Flush Daemon | |
| |
| |
| |
File System Conversion to Solaris 10 | |
| |
| |
| |
MDB Reference | |
| |
| |
| |
The UFS File System | |
| |
| |
| |
UFS Development History | |
| |
| |
| |
UFS On-Disk Format | |
| |
| |
| |
The UFS Inode | |
| |
| |
| |
Access Control in UFS | |
| |
| |
| |
Extended Attributes in UFS | |
| |
| |
| |
Locking in UFS | |
| |
| |
| |
Logging | |
| |
| |
| |
MDB Reference | |
| |
| |
| |
Platform Specifics | |
| |
| |
| |
Support for NUMA and CMT Hardware | |
| |
| |
| |
Memory Hierarchy Designs | |
| |
| |
| |
Memory Placement Optimization Framework | |
| |
| |
| |
Initial Thread Placement | |
| |
| |
| |
Scheduling | |
| |
| |
| |
Memory Allocation | |
| |
| |
| |
Lgroup Implementation | |
| |
| |
| |
MPO APIs | |
| |
| |
| |
Locality Group Hierarchy | |
| |
| |
| |
MPO Statistics | |
| |
| |
| |
MDB Reference | |
| |
| |
| |
Locking and Synchronization | |
| |
| |
| |
Synchronization | |
| |
| |
| |
Parallel Systems Architectures | |
| |
| |
| |
Hardware Considerations for Locks and Synchronization | |
| |
| |
| |
Introduction to Synchronization Objects | |
| |
| |
| |
Mutex Locks | |
| |
| |
| |
Reader/Writer Locks | |
| |
| |
| |
Turnstiles and Priority Inheritance | |
| |
| |
| |
Kernel Semaphores | |
| |
| |
| |
DTrace Lockstat Provider | |
| |
| |
| |
Networking | |
| |
| |
| |
The Solaris Network Stack | |
| |
| |
| |
STREAMS and the Network Stack | |
| |
| |
| |
Solaris 10 Stack: Design Goals | |
| |
| |
| |
Solaris 10 Network Stack Framework | |
| |
| |
| |
TCP as an Implementation of the New Framework | |
| |
| |
| |
UDP | |
| |
| |
| |
Synchronous STREAMS | |
| |
| |
| |
IP | |
| |
| |
| |
Solaris Device Driver Framework | |
| |
| |
| |
Interrupt Model and NIC Speeds | |
| |
| |
| |
Summary | |
| |
| |
| |
MDB Reference | |
| |
| |
| |
Kernel Services | |
| |
| |
| |
Clocks and Timers | |
| |
| |
| |
The System Clock Thread | |
| |
| |
| |
Callouts and Callout Tables | |
| |
| |
| |
System Time Facilities | |
| |
| |
| |
The Cyclic Subsystem | |
| |
| |
| |
Task Queues | |
| |
| |
| |
Overview of Task Queues | |
| |
| |
| |
Dynamic Task Queues | |
| |
| |
| |
Task Queues Kernel Programming Interfaces | |
| |
| |
| |
Device Driver Interface for Task Queues | |
| |
| |
| |
Task Queue Observability | |
| |
| |
| |
Task Queue Implementation Notes | |
| |
| |
| |
Kmdb Implementation | |
| |
| |
| |
Introduction | |
| |
| |
Appendices | |
| |
| |
| |
Kernel Virtual Address Maps | |
| |
| |
| |
Adding a System Call to Solaris | |
| |
| |
| |
A Sample Procfs Utility | |
| |
| |
Bibliography | |
| |
| |
Index | |