| | Copyright |
| | Foreword |
| | Preface |
| | About the Authors |
| | Acknowledgments |
| | Part One: Introduction to Solaris Internals |
| | | Chapter 1. Introduction |
| | | Section 1.1. Key Features of Solaris 10, Solaris 9, and Solaris 8 |
| | | Section 1.2. Key Differentiators |
| | | Section 1.3. Kernel Overview |
| | | Section 1.4. Processes, Threads, and Scheduling |
| | | Section 1.5. Interprocess Communication |
| | | Section 1.6. Signals |
| | | Section 1.7. Memory Management |
| | | Section 1.8. Files and File Systems |
| | | Section 1.9. Resource Management |
| | Part Two: The Process Model |
| | | Chapter 2. The Solaris Process Model |
| | | Section 2.1. Components of a Process |
| | | Section 2.2. Process Model Evolution |
| | | Section 2.3. Executable Objects |
| | | Section 2.4. Process Structures |
| | | Section 2.5. Kernel Process Table |
| | | Section 2.6. Process Resource Attributes |
| | | Section 2.7. Process Creation |
| | | Section 2.8. System Calls |
| | | Section 2.9. Process Termination |
| | | Section 2.10. The Process File System |
| | | Section 2.11. Signals |
| | | Section 2.12. Sessions and Process Groups |
| | | Section 2.13. MDB Reference |
| | | Chapter 3. Scheduling Classes and the Dispatcher |
| | | Section 3.1. Fundamentals |
| | | Section 3.2. Processor Abstractions |
| | | Section 3.3. Dispatcher Queues, Structures, and Variables |
| | | Section 3.4. Dispatcher Locks |
| | | Section 3.5. Dispatcher Initialization |
| | | Section 3.6. Scheduling Classes |
| | | Section 3.7. Thread Priorities |
| | | Section 3.8. Dispatcher Functions |
| | | Section 3.9. Preemption |
| | | Section 3.10. The Kernel Sleep/Wakeup Facility |
| | | Section 3.11. Interrupts |
| | | Section 3.12. Summary |
| | | Section 3.13. MDB Reference |
| | | Chapter 4. Interprocess Communication |
| | | Section 4.1. The System V IPC Framework |
| | | Section 4.2. System V IPC Resource Controls |
| | | Section 4.3. Configuring IPC Tuneables on Solaris 10 |
| | | Section 4.4. System V Shared Memory |
| | | Section 4.5. System V Semaphores |
| | | Section 4.6. System V Message Queues |
| | | Section 4.7. POSIX IPC |
| | | Section 4.8. Solaris Doors |
| | | Section 4.9. MDB Reference |
| | | Chapter 5. Process Rights Management |
| | | Section 5.1. Then and Now |
| | | Section 5.2. Least Privilege in Solaris |
| | | Section 5.3. Process Privilege Models |
| | | Section 5.4. Privilege Awareness: The Details |
| | | Section 5.5. Least Privilege Interfaces |
| | | Section 5.5.5. System Call Interfaces |
| | | Section 5.5.6. Library Interfaces |
| | | Section 5.5.7. Using Privileges with Role-Based Access Control |
| | | Section 5.5.8. Using Privileges with Role-Based Access Control |
| | | Section 5.5.9. Using DTrace for Tracking Privileges |
| | | Section 5.5.10. Enhancements to proc(4) and Core Dumps |
| | | Section 5.5.11. Privilege Debugging |
| | | Section 5.5.12. Privilege Auditing |
| | | Section 5.5.13. Device Protection |
| | Part Three: Resource Management |
| | | Chapter 6. Zones |
| | | Section 6.1. Introduction |
| | | Section 6.2. Zone Runtime |
| | | Section 6.3. Booting Zones |
| | | Section 6.4. Security |
| | | Section 6.5. Process Model |
| | | Section 6.6. File Systems |
| | | Section 6.7. Networking |
| | | Section 6.8. Devices |
| | | Section 6.9. Interprocess Communication |
| | | Section 6.10. Resource Management and Observability |
| | | Section 6.11. MDB Reference |
| | | Chapter 7. Projects, Tasks, and Resource Controls |
| | | Section 7.1. Projects and Tasks Framework |
| | | Section 7.2. The Project Database |
| | | Section 7.3. Project and Task APIs |
| | | Section 7.4. Kernel Infrastructure for Projects and Tasks |
| | | Section 7.5. Resource Controls |
| | | Section 7.6. Interfaces for Resource Controls |
| | | Section 7.7. Kernel Interfaces for Resource Controls |
| | Part Four: Memory |
| | | Chapter 8. Introduction to Solaris Memory |
| | | Section 8.1. Virtual Memory Primer |
| | | Section 8.2. Two Levels of Memory |
| | | Section 8.3. Memory Sharing and Protection |
| | | Section 8.4. Pages: Basic Units of Physical Memory |
| | | Section 8.5. Virtual-to-Physical Translation |
| | | Section 8.6. Physical Memory Management: Paging and Swapping |
| | | Section 8.7. Virtual Memory as a File System Cache |
| | | Section 8.8. New Features of the Virtual Memory Implementation |
| | | Chapter 9. Virtual Memory |
| | | Section 9.1. Design Overview |
| | | Section 9.2. Virtual Address Spaces |
| | | Section 9.3. Tracing the VM System |
| | | Section 9.4. Virtual Address Space Management |
| | | Section 9.5. Segment Drivers |
| | | Section 9.6. Anonymous Memory |
| | | Section 9.7. The Anonymous Memory Layer |
| | | Section 9.8. The swapfs Layer |
| | | Section 9.9. Virtual Memory Watchpoints |
| | | Section 9.10. Changes to Support Large Pages |
| | | Section 9.11. MDB Reference |
| | | Chapter 10. Physical Memory |
| | | Section 10.1. Physical Memory Allocation |
| | | Section 10.2. Pages: The Basic Unit of Solaris Memory |
| | | Section 10.3. The Page Scanner |
| | | Section 10.4. MDB Reference |
| | | Chapter 11. Kernel Memory |
| | | Section 11.1. Kernel Virtual Memory Layout |
| | | Section 11.2. Kernel Memory Allocation |
| | | Section 11.3. The Vmem Allocator |
| | | Section 11.4. Kernel Memory Allocator Tracing |
| | | Section 11.5. MDB Reference |
| | | Chapter 12. Hardware Address Translation |
| | | Section 12.1. HAT Overview |
| | | Section 12.2. The UltraSPARC HAT Layer |
| | | Section 12.3. The x64 HAT Layer |
| | | Section 12.4. MDB Reference |
| | | Chapter 13. Working with Multiple Page Sizes in Solaris |
| | | Section 13.1. Determining When to Use Large Pages |
| | | Section 13.2. Measuring Application Performance |
| | | Section 13.3. Configuring for Multiple Page Sizes |
| | Part Five: File Systems |
| | | Chapter 14. File System Framework |
| | | Section 14.1. File System Framework |
| | | Section 14.2. Process-Level File Abstractions |
| | | Section 14.3. Solaris File System Framework |
| | | Section 14.4. File System Modules |
| | | Section 14.5. The Virtual File System (vfs) Interface |
| | | Section 14.6. The Vnode |
| | | Section 14.7. File System I/O |
| | | Section 14.8. File Systems and Memory Allocation |
| | | Section 14.9. Path-Name Management |
| | | Section 14.10. The Directory Name Lookup Cache |
| | | Section 14.11. The File System Flush Daemon |
| | | Section 14.12. File System Conversion to Solaris 10 |
| | | Section 14.13. MDB Reference |
| | | Chapter 15. The UFS File System |
| | | Section 15.1. UFS Development History |
| | | Section 15.2. UFS On-Disk Format |
| | | Section 15.3. The UFS Inode |
| | | Section 15.4. Access Control in UFS |
| | | Section 15.5. Extended Attributes in UFS |
| | | Section 15.6. Locking in UFS |
| | | Section 15.7. Logging |
| | | Section 15.8. MDB Reference |
| | Part Six: Platform Specifics |
| | | Chapter 16. Support for NUMA and CMT Hardware |
| | | Section 16.1. Memory Hierarchy Designs |
| | | Section 16.2. Memory Placement Optimization Framework |
| | | Section 16.3. Initial Thread Placement |
| | | Section 16.4. Scheduling |
| | | Section 16.5. Memory Allocation |
| | | Section 16.6. Lgroup Implementation |
| | | Section 16.7. MPO APIs |
| | | Section 16.8. Locality Group Hierarchy |
| | | Section 16.9. MPO Statistics |
| | | Section 16.10. MDB Reference |
| | | Chapter 17. Locking and Synchronization |
| | | Section 17.1. Synchronization |
| | | Section 17.2. Parallel Systems Architectures |
| | | Section 17.3. Hardware Considerations for Locks and Synchronization |
| | | Section 17.4. Introduction to Synchronization Objects |
| | | Section 17.5. Mutex Locks |
| | | Section 17.6. Reader/Writer Locks |
| | | Section 17.7. Turnstiles and Priority Inheritance |
| | | Section 17.8. Kernel Semaphores |
| | | Section 17.9. DTrace Lockstat Provider |
| | Part Seven: Networking |
| | | Chapter 18. The Solaris Network Stack |
| | | Section 18.1. STREAMS and the Network Stack |
| | | Section 18.2. Solaris 10 Stack: Design Goals |
| | | Section 18.3. Solaris 10 Network Stack Framework |
| | | Section 18.4. TCP as an Implementation of the New Framework |
| | | Section 18.5. UDP |
| | | Section 18.6. Synchronous STREAMS |
| | | Section 18.7. IP |
| | | Section 18.8. Solaris Device Driver Framework |
| | | Section 18.9. Interrupt Model and NIC Speeds |
| | | Section 18.10. Summary |
| | | Section 18.11. MDB Reference |
| | Part Eight: Kernel Services |
| | | Chapter 19. Clocks and Timers |
| | | Section 19.1. The System Clock Thread |
| | | Section 19.2. Callouts and Callout Tables |
| | | Section 19.3. System Time Facilities |
| | | Section 19.4. The Cyclic Subsystem |
| | | Chapter 20. Task Queues |
| | | Section 20.1. Overview of Task Queues |
| | | Section 20.2. Dynamic Task Queues |
| | | Section 20.3. Task Queues Kernel Programming Interfaces |
| | | Section 20.4. Device Driver Interface for Task Queues |
| | | Section 20.5. Task Queue Observability |
| | | Section 20.6. Task Queue Implementation Notes |
| | | Chapter 21. kmdb Implementation |
| | | Section 21.1. Introduction |
| | Appendices |
| | | Appendix A. Kernel Virtual Address Maps |
| | | Appendix B. Adding a System Call to Solaris |
| | | Section B.1. Setting Kernel Parameters |
| | | Appendix C. A Sample Procfs Utility |
| | | Section C.1. Microstate Accounting Using /proc |
| | | Section C.2. Source Code for msacct |
| | Bibliography |
| | Index |