You are previewing Operating System Concepts Essentials.
O'Reilly logo
Operating System Concepts Essentials

Book Description

Straightforward coverage of the core concepts of operating systems

Open-source operating systems, virtual machines, and clustered computing are among the leading fields of operating systems and networking that are rapidly changing. This book covers the core concepts of operating systems without any unnecessary jargon or text. The authors put you on your way to mastering the fundamental concepts of operating systems while you also prepare for today's emerging developments.

  • Covers the core concepts of operating systems

  • Bypasses unnecessary and wordy text or jargon

  • Encourages you to take your operating system knowledge to the next level

  • Prepares you for today's emerging developments in the field of operating systems

  • Operating Systems Concepts Essentials is a soup-to-nuts guide for all things involving operating systems!

    Table of Contents

    1. Copyright
    2. Preface
      1. Organization of This Book
      2. Content of This Book
      3. Operating-System Environments
      4. Operating System Essentials
      5. Programming Problems and Projects
      6. Teaching Supplements
      7. Contacting Us
      8. Acknowledgments
    3. 1. Overview
      1. 1. Introduction
        1. 1.1. What Operating Systems Do
          1. 1.1.1. User View
          2. 1.1.2. System View
          3. 1.1.3. Defining Operating Systems
        2. 1.2. Computer-System Organization
          1. 1.2.1. Computer-System Operation
          2. 1.2.2. Storage Structure
          3. 1.2.3. I/O Structure
        3. 1.3. Computer-System Architecture
          1. 1.3.1. Single-Processor Systems
          2. 1.3.2. Multiprocessor Systems
          3. 1.3.3. Clustered Systems
        4. 1.4. Operating-System Structure
        5. 1.5. Operating-System Operations
          1. 1.5.1. Dual-Mode Operation
          2. 1.5.2. Timer
        6. 1.6. Process Management
        7. 1.7. Memory Management
        8. 1.8. Storage Management
          1. 1.8.1. File-System Management
          2. 1.8.2. Mass-Storage Management
          3. 1.8.3. Caching
          4. 1.8.4. I/O Systems
        9. 1.9. Protection and Security
        10. 1.10. Distributed Systems
        11. 1.11. Special-Purpose Systems
          1. 1.11.1. Real-Time Embedded Systems
          2. 1.11.2. Multimedia Systems
          3. 1.11.3. Handheld Systems
        12. 1.12. Computing Environments
          1. 1.12.1. Traditional Computing
          2. 1.12.2. Client-Server Computing
          3. 1.12.3. Peer-to-Peer Computing
          4. 1.12.4. Web-Based Computing
        13. 1.13. Open-Source Operating Systems
          1. 1.13.1. History
          2. 1.13.2. Linux
          3. 1.13.3. BSD UNIX
          4. 1.13.4. Solaris
          5. 1.13.5. Utility
        14. 1.14. Summary
        15. 1.15. Practice Exercises
        16. 1.16. Exercises
        17. 1.17. Bibliographical Notes
      2. 2. Operating-System Structures
        1. 2.1. Operating-System Services
        2. 2.2. User Operating-System Interface
          1. 2.2.1. Command Interpreter
          2. 2.2.2. Graphical User Interfaces
        3. 2.3. System Calls
        4. 2.4. Types of System Calls
          1. 2.4.1. Process Control
          2. 2.4.2. File Management
          3. 2.4.3. Device Management
          4. 2.4.4. Information Maintenance
          5. 2.4.5. Communication
          6. 2.4.6. Protection
        5. 2.5. System Programs
        6. 2.6. Operating-System Design and Implementation
          1. 2.6.1. Design Goals
          2. 2.6.2. Mechanisms and Policies
          3. 2.6.3. Implementation
        7. 2.7. Operating-System Structure
          1. 2.7.1. Simple Structure
          2. 2.7.2. Layered Approach
          3. 2.7.3. Microkernels
          4. 2.7.4. Modules
        8. 2.8. Virtual Machines
          1. 2.8.1. History
          2. 2.8.2. Benefits
          3. 2.8.3. Simulation
          4. 2.8.4. Para-virtualization
          5. 2.8.5. Implementation
          6. 2.8.6. Examples
            1. 2.8.6.1. VMware
            2. 2.8.6.2. The Java Virtual Machine
        9. 2.9. Operating-System Debugging
          1. 2.9.1. Failure Analysis
          2. 2.9.2. Performance Tuning
          3. 2.9.3. DTrace
        10. 2.10. Operating-System Generation
        11. 2.11. System Boot
        12. 2.12. Summary
        13. 2.13. Practice Exercises
        14. 2.14. Exercises
        15. 2.15. Programming Problems
        16. 2.16. Programming Projects
          1. 2.16.1. Adding a system call to the Linux kernel.
          2. 2.16.2. Part 1: Getting Started
          3. 2.16.3. Part 2: Building a New Kernel
          4. 2.16.4. Part 3: Extending the Kernel Source
          5. 2.16.5. Part 4: Adding a System Call to the Kernel
          6. 2.16.6. Part 5: Using the System Call from a User Program
        17. 2.17. Bibliographical Notes
    4. 2. Process Management
      1. 3. Processes
        1. 3.1. Process Concept
          1. 3.1.1. The Process
          2. 3.1.2. Process State
          3. 3.1.3. Process Control Block
          4. 3.1.4. Threads
        2. 3.2. Process Scheduling
          1. 3.2.1. Scheduling Queues
          2. 3.2.2. Schedulers
          3. 3.2.3. Context Switch
        3. 3.3. Operations on Processes
          1. 3.3.1. Process Creation
          2. 3.3.2. Process Termination
        4. 3.4. Interprocess Communication
          1. 3.4.1. Shared-Memory Systems
          2. 3.4.2. Message-Passing Systems
            1. 3.4.2.1. Naming
            2. 3.4.2.2. Synchronization
            3. 3.4.2.3. Buffering
        5. 3.5. Examples of IPC Systems
          1. 3.5.1. An Example: POSIX Shared Memory
          2. 3.5.2. An Example: Mach
          3. 3.5.3. An Example: Windows
        6. 3.6. Communication in Client–Server Systems
          1. 3.6.1. Sockets
          2. 3.6.2. Remote Procedure Calls
        7. 3.7. Summary
        8. 3.8. Practice Exercises
        9. 3.9. Exercises
        10. 3.10. Programming Problems
        11. 3.11. Programming Projects
          1. 3.11.1. POSIX Message Passing
            1. 3.11.1.1. Part 1: Overview
            2. 3.11.1.2. Part 2: The Message-Passing System
            3. 3.11.1.3. Part 3: Creating the Processes
            4. 3.11.1.4. Part 4: Implementation Hints
        12. 3.12. Bibliographical Notes
      2. 4. Threads
        1. 4.1. Overview
          1. 4.1.1. Motivation
          2. 4.1.2. Benefits
          3. 4.1.3. Multicore Programming
        2. 4.2. Multithreading Models
          1. 4.2.1. Many-to-One Model
          2. 4.2.2. One-to-One Model
          3. 4.2.3. Many-to-Many Model
        3. 4.3. Thread Libraries
          1. 4.3.1. Pthreads
          2. 4.3.2. Win32 Threads
          3. 4.3.3. Java Threads
        4. 4.4. Threading Issues
          1. 4.4.1. The fork() and exec() System Calls
          2. 4.4.2. Cancellation
          3. 4.4.3. Signal Handling
          4. 4.4.4. Thread Pools
          5. 4.4.5. Thread-Specific Data
          6. 4.4.6. Scheduler Activations
        5. 4.5. Operating-System Examples
          1. 4.5.1. Windows Threads
          2. 4.5.2. Linux Threads
        6. 4.6. Summary
        7. 4.7. Practice Exercises
        8. 4.8. Exercises
        9. 4.9. Programming Projects
          1. 4.9.1. Project 1: Naming Service Project
            1. 4.9.1.1. The Server
            2. 4.9.1.2. The Client
          2. 4.9.2. Project 2: Matrix Multiplication Project
            1. 4.9.2.1. Passing Parameters to Each Thread
            2. 4.9.2.2. Waiting for Threads to Complete
        10. 4.10. Bibliographical Notes
      3. 5. CPU Scheduling
        1. 5.1. Basic Concepts
          1. 5.1.1. CPU–I/O Burst Cycle
          2. 5.1.2. CPU Scheduler
          3. 5.1.3. Preemptive Scheduling
          4. 5.1.4. Dispatcher
        2. 5.2. Scheduling Criteria
        3. 5.3. Scheduling Algorithms
          1. 5.3.1. First-Come, First-Served Scheduling
          2. 5.3.2. Shortest-Job-First Scheduling
          3. 5.3.3. Priority Scheduling
          4. 5.3.4. Round-Robin Scheduling
          5. 5.3.5. Multilevel Queue Scheduling
          6. 5.3.6. Multilevel Feedback Queue Scheduling
        4. 5.4. Thread Scheduling
          1. 5.4.1. Contention Scope
          2. 5.4.2. Pthread Scheduling
        5. 5.5. Multiple-Processor Scheduling
          1. 5.5.1. Approaches to Multiple-Processor Scheduling
          2. 5.5.2. Processor Affinity
          3. 5.5.3. Load Balancing
          4. 5.5.4. Multicore Processors
          5. 5.5.5. Virtualization and Scheduling
        6. 5.6. Operating System Examples
          1. 5.6.1. Example: Solaris Scheduling
          2. 5.6.2. Example: Windows Scheduling
          3. 5.6.3. Example: Linux Scheduling
        7. 5.7. Algorithm Evaluation
          1. 5.7.1. Deterministic Modeling
          2. 5.7.2. Queueing Models
          3. 5.7.3. Simulations
          4. 5.7.4. Implementation
        8. 5.8. Summary
        9. 5.9. Practice Exercises
        10. 5.10. Exercises
        11. 5.11. Bibliographical Notes
      4. 6. Process Synchronization
        1. 6.1. Background
        2. 6.2. The Critical-Section Problem
        3. 6.3. Peterson's Solution
        4. 6.4. Synchronization Hardware
        5. 6.5. Semaphores
          1. 6.5.1. Usage
          2. 6.5.2. Implementation
          3. 6.5.3. Deadlocks and Starvation
          4. 6.5.4. Priority Inversion
        6. 6.6. Classic Problems of Synchronization
          1. 6.6.1. The Bounded-Buffer Problem
          2. 6.6.2. The Readers–Writers Problem
          3. 6.6.3. The Dining-Philosophers Problem
        7. 6.7. Monitors
          1. 6.7.1. Usage
          2. 6.7.2. Dining-Philosophers Solution Using Monitors
          3. 6.7.3. Implementing a Monitor Using Semaphores
          4. 6.7.4. Resuming Processes Within a Monitor
        8. 6.8. Synchronization Examples
          1. 6.8.1. Synchronization in Solaris
          2. 6.8.2. Synchronization in Windows XP
          3. 6.8.3. Synchronization in Linux
          4. 6.8.4. Synchronization in Pthreads
        9. 6.9. Deadlocks
          1. 6.9.1. System Model
          2. 6.9.2. Deadlock Characterization
          3. 6.9.3. Necessary Conditions
          4. 6.9.4. Resource-Allocation Graph
          5. 6.9.5. Methods for Handling Deadlocks
        10. 6.10. Summary
        11. 6.11. Practice Exercises
        12. 6.12. Exercises
        13. 6.13. Programming Problems
        14. 6.14. Programming Projects
          1. 6.14.1. Producer-Consumer Problem
            1. 6.14.1.1. The Buffer
            2. 6.14.1.2. Producer and Consumer Threads
            3. 6.14.1.3. Pthreads Thread Creation
            4. 6.14.1.4. Pthreads Mutex Locks
            5. 6.14.1.5. Pthreads Semaphores
            6. 6.14.1.6. Win32
            7. 6.14.1.7. Win32 Mutex Locks
            8. 6.14.1.8. Win32 Semaphores
        15. 6.15. Bibliographical Notes
    5. 3. Memory Management
      1. 7. Main Memory
        1. 7.1. Background
          1. 7.1.1. Basic Hardware
          2. 7.1.2. Address Binding
          3. 7.1.3. Logical Versus Physical Address Space
          4. 7.1.4. Dynamic Loading
          5. 7.1.5. Dynamic Linking and Shared Libraries
        2. 7.2. Swapping
        3. 7.3. Contiguous Memory Allocation
          1. 7.3.1. Memory Mapping and Protection
          2. 7.3.2. Memory Allocation
          3. 7.3.3. Fragmentation
        4. 7.4. Paging
          1. 7.4.1. Basic Method
          2. 7.4.2. Hardware Support
          3. 7.4.3. Protection
          4. 7.4.4. Shared Pages
        5. 7.5. Structure of the Page Table
          1. 7.5.1. Hierarchical Paging
          2. 7.5.2. Hashed Page Tables
          3. 7.5.3. Inverted Page Table
        6. 7.6. Segmentation
          1. 7.6.1. Basic Method
          2. 7.6.2. Hardware
        7. 7.7. Example: The Intel Pentium
          1. 7.7.1. Pentium Segmentation
          2. 7.7.2. Pentium Paging
          3. 7.7.3. Linux on Pentium Systems
        8. 7.8. Summary
        9. 7.9. Practice Exercises
        10. 7.10. Exercises
        11. 7.11. Programming Problems
        12. 7.12. Bibliographical Notes
      2. 8. Virtual Memory
        1. 8.1. Background
        2. 8.2. Demand Paging
          1. 8.2.1. Basic Concepts
          2. 8.2.2. Performance of Demand Paging
        3. 8.3. Copy-on-Write
        4. 8.4. Page Replacement
          1. 8.4.1. Basic Page Replacement
          2. 8.4.2. FIFO Page Replacement
          3. 8.4.3. Optimal Page Replacement
          4. 8.4.4. LRU Page Replacement
          5. 8.4.5. LRU-Approximation Page Replacement
            1. 8.4.5.1. Additional-Reference-Bits Algorithm
            2. 8.4.5.2. Second-Chance Algorithm
            3. 8.4.5.3. Enhanced Second-Chance Algorithm
          6. 8.4.6. Counting-Based Page Replacement
          7. 8.4.7. Page-Buffering Algorithms
          8. 8.4.8. Applications and Page Replacement
        5. 8.5. Allocation of Frames
          1. 8.5.1. Minimum Number of Frames
          2. 8.5.2. Allocation Algorithms
          3. 8.5.3. Global Versus Local Allocation
          4. 8.5.4. Non-Uniform Memory Access
        6. 8.6. Thrashing
          1. 8.6.1. Cause of Thrashing
          2. 8.6.2. Working-Set Model
          3. 8.6.3. Page-Fault Frequency
        7. 8.7. Memory-Mapped Files
          1. 8.7.1. Basic Mechanism
          2. 8.7.2. Shared Memory in the Win32 API
          3. 8.7.3. Memory-Mapped I/O
        8. 8.8. Allocating Kernel Memory
          1. 8.8.1. Buddy System
          2. 8.8.2. Slab Allocation
        9. 8.9. Other Considerations
          1. 8.9.1. Prepaging
          2. 8.9.2. Page Size
          3. 8.9.3. TLB Reach
          4. 8.9.4. Inverted Page Tables
          5. 8.9.5. Program Structure
          6. 8.9.6. I/O Interlock
        10. 8.10. Operating-System Examples
          1. 8.10.1. Windows
          2. 8.10.2. Solaris
        11. 8.11. Summary
        12. 8.12. Practice Exercises
        13. 8.13. Exercises
        14. 8.14. Programming Problems
        15. 8.15. Bibliographical Notes
    6. 4. Storage Management
      1. 9. File-System Interface
        1. 9.1. File Concept
          1. 9.1.1. File Attributes
          2. 9.1.2. File Operations
          3. 9.1.3. File Types
          4. 9.1.4. File Structure
          5. 9.1.5. Internal File Structure
        2. 9.2. Access Methods
          1. 9.2.1. Sequential Access
          2. 9.2.2. Direct Access
          3. 9.2.3. Other Access Methods
        3. 9.3. Directory and Disk Structure
          1. 9.3.1. Storage Structure
          2. 9.3.2. Directory Overview
          3. 9.3.3. Single-Level Directory
          4. 9.3.4. Two-Level Directory
          5. 9.3.5. Tree-Structured Directories
          6. 9.3.6. Acyclic-Graph Directories
          7. 9.3.7. General Graph Directory
        4. 9.4. File-System Mounting
        5. 9.5. File Sharing
          1. 9.5.1. Multiple Users
          2. 9.5.2. Remote File Systems
            1. 9.5.2.1. The Client–Server Model
            2. 9.5.2.2. Distributed Information Systems
            3. 9.5.2.3. Failure Modes
          3. 9.5.3. Consistency Semantics
            1. 9.5.3.1. UNIX Semantics
            2. 9.5.3.2. Session Semantics
            3. 9.5.3.3. Immutable-Shared-Files Semantics
        6. 9.6. Protection
          1. 9.6.1. Types of Access
          2. 9.6.2. Access Control
          3. 9.6.3. Other Protection Approaches
        7. 9.7. Summary
        8. 9.8. Practice Exercises
        9. 9.9. Exercises
        10. 9.10. Bibliographical Notes
      2. 10. File-System Implementation
        1. 10.1. File-System Structure
        2. 10.2. File-System Implementation
          1. 10.2.1. Overview
          2. 10.2.2. Partitions and Mounting
          3. 10.2.3. Virtual File Systems
        3. 10.3. Directory Implementation
          1. 10.3.1. Linear List
          2. 10.3.2. Hash Table
        4. 10.4. Allocation Methods
          1. 10.4.1. Contiguous Allocation
          2. 10.4.2. Linked Allocation
          3. 10.4.3. Indexed Allocation
          4. 10.4.4. Performance
        5. 10.5. Free-Space Management
          1. 10.5.1. Bit Vector
          2. 10.5.2. Linked List
          3. 10.5.3. Grouping
          4. 10.5.4. Counting
          5. 10.5.5. Space Maps
        6. 10.6. Efficiency and Performance
          1. 10.6.1. Efficiency
          2. 10.6.2. Performance
        7. 10.7. Recovery
          1. 10.7.1. Consistency Checking
          2. 10.7.2. Log-Structured File Systems
          3. 10.7.3. Other Solutions
          4. 10.7.4. Backup and Restore
        8. 10.8. Summary
        9. 10.9. Practice Exercises
        10. 10.10. Exercises
        11. 10.11. Bibliographical Notes
      3. 11. Mass-Storage Structure
        1. 11.1. Overview of Mass-Storage Structure
          1. 11.1.1. Magnetic Disks
          2. 11.1.2. Magnetic Tapes
        2. 11.2. Disk Structure
        3. 11.3. Disk Attachment
          1. 11.3.1. Host-Attached Storage
          2. 11.3.2. Network-Attached Storage
          3. 11.3.3. Storage-Area Network
        4. 11.4. Disk Scheduling
          1. 11.4.1. FCFS Scheduling
          2. 11.4.2. SSTF Scheduling
          3. 11.4.3. SCAN Scheduling
          4. 11.4.4. C-SCAN Scheduling
          5. 11.4.5. LOOK Scheduling
          6. 11.4.6. Selection of a Disk-Scheduling Algorithm
        5. 11.5. Disk Management
          1. 11.5.1. Disk Formatting
          2. 11.5.2. Boot Block
          3. 11.5.3. Bad Blocks
        6. 11.6. Swap-Space Management
          1. 11.6.1. Swap-Space Use
          2. 11.6.2. Swap-Space Location
          3. 11.6.3. Swap-Space Management: An Example
        7. 11.7. RAID Structure
          1. 11.7.1. Improvement of Reliability via Redundancy
          2. 11.7.2. Improvement in Performance via Parallelism
          3. 11.7.3. RAID Levels
          4. 11.7.4. Problems with RAID
        8. 11.8. Summary
        9. 11.9. Practice Exercises
        10. 11.10. Exercises
        11. 11.11. Bibliographical Notes
      4. 12. I/O Systems
        1. 12.1. Overview
        2. 12.2. I/O Hardware
          1. 12.2.1. Polling
          2. 12.2.2. Interrupts
          3. 12.2.3. Direct Memory Access
          4. 12.2.4. I/O Hardware Summary
        3. 12.3. Application I/O Interface
          1. 12.3.1. Block and Character Devices
          2. 12.3.2. Network Devices
          3. 12.3.3. Clocks and Timers
          4. 12.3.4. Blocking and Nonblocking I/O
        4. 12.4. Kernel I/O Subsystem
          1. 12.4.1. I/O Scheduling
          2. 12.4.2. Buffering
          3. 12.4.3. Caching
          4. 12.4.4. Spooling and Device Reservation
          5. 12.4.5. Error Handling
          6. 12.4.6. I/O Protection
          7. 12.4.7. Kernel Data Structures
          8. 12.4.8. Kernel I/O Subsystem Summary
        5. 12.5. Transforming I/O Requests to Hardware Operations
        6. 12.6. STREAMS
        7. 12.7. Performance
        8. 12.8. Summary
        9. 12.9. Practice Exercises
        10. 12.10. Exercises
        11. 12.11. Bibliographical Notes
    7. 5. Protection and Security
      1. 13. Protection
        1. 13.1. Goals of Protection
        2. 13.2. Principles of Protection
        3. 13.3. Domain of Protection
          1. 13.3.1. Domain Structure
          2. 13.3.2. An Example: UNIX
          3. 13.3.3. An Example: MULTICS
        4. 13.4. Access Matrix
        5. 13.5. Implementation of Access Matrix
          1. 13.5.1. Global Table
          2. 13.5.2. Access Lists for Objects
          3. 13.5.3. Capability Lists for Domains
          4. 13.5.4. A Lock-Key Mechanism
          5. 13.5.5. Comparison
        6. 13.6. Access Control
        7. 13.7. Revocation of Access Rights
        8. 13.8. Capability-Based Systems
          1. 13.8.1. An Example: Hydra
          2. 13.8.2. An Example: Cambridge CAP System
        9. 13.9. Summary
        10. 13.10. Practice Exercises
        11. 13.11. Exercises
        12. 13.12. Bibliographical Notes
      2. 14. Security
        1. 14.1. The Security Problem
        2. 14.2. Program Threats
          1. 14.2.1. Trojan Horse
          2. 14.2.2. Trap Door
          3. 14.2.3. Logic Bomb
          4. 14.2.4. Stack and Buffer Overflow
          5. 14.2.5. Viruses
        3. 14.3. System and Network Threats
          1. 14.3.1. Worms
          2. 14.3.2. Port Scanning
          3. 14.3.3. Denial of Service
        4. 14.4. Cryptography as a Security Tool
          1. 14.4.1. Encryption
            1. 14.4.1.1. Symmetric Encryption
            2. 14.4.1.2. Asymmetric Encryption
            3. 14.4.1.3. Authentication
            4. 14.4.1.4. Key Distribution
          2. 14.4.2. Implementation of Cryptography
          3. 14.4.3. An Example: SSL
        5. 14.5. User Authentication
          1. 14.5.1. Passwords
          2. 14.5.2. Password Vulnerabilities
          3. 14.5.3. Encrypted Passwords
          4. 14.5.4. One-Time Passwords
          5. 14.5.5. Biometrics
        6. 14.6. An Example: Windows
        7. 14.7. Summary
        8. 14.8. Exercises
        9. 14.9. Bibliographical Notes
    8. 6. Case Studies
      1. 15. The Linux System
        1. 15.1. Linux History
          1. 15.1.1. The Linux Kernel
          2. 15.1.2. The Linux System
          3. 15.1.3. Linux Distributions
          4. 15.1.4. Linux Licensing
        2. 15.2. Design Principles
          1. 15.2.1. Components of a Linux System
        3. 15.3. Kernel Modules
          1. 15.3.1. Module Management
          2. 15.3.2. Driver Registration
          3. 15.3.3. Conflict Resolution
        4. 15.4. Process Management
          1. 15.4.1. The fork() and exec() Process Model
            1. 15.4.1.1. Process Identity
            2. 15.4.1.2. Process Environment
            3. 15.4.1.3. Process Context
          2. 15.4.2. Processes and Threads
        5. 15.5. Scheduling
          1. 15.5.1. Process Scheduling
          2. 15.5.2. Kernel Synchronization
          3. 15.5.3. Symmetric Multiprocessing
        6. 15.6. Memory Management
          1. 15.6.1. Management of Physical Memory
          2. 15.6.2. Virtual Memory
            1. 15.6.2.1. Virtual Memory Regions
            2. 15.6.2.2. Lifetime of a Virtual Address Space
            3. 15.6.2.3. Swapping and Paging
            4. 15.6.2.4. Kernel Virtual Memory
          3. 15.6.3. Execution and Loading of User Programs
            1. 15.6.3.1. Mapping of Programs into Memory
            2. 15.6.3.2. Static and Dynamic Linking
        7. 15.7. File Systems
          1. 15.7.1. The Virtual File System
          2. 15.7.2. The Linux ext2fs File System
          3. 15.7.3. Journaling
          4. 15.7.4. The Linux Process File System
        8. 15.8. Input and Output
          1. 15.8.1. Block Devices
          2. 15.8.2. Character Devices
        9. 15.9. Interprocess Communication
          1. 15.9.1. Synchronization and Signals
          2. 15.9.2. Passing of Data Among Processes
        10. 15.10. Network Structure
        11. 15.11. Security
          1. 15.11.1. Authentication
          2. 15.11.2. Access Control
        12. 15.12. Summary
        13. 15.13. Practice Exercises
        14. 15.14. Exercises
        15. 15.15. Bibliographical Notes
      2. 16. Windows 7
        1. 16.1. History
        2. 16.2. Design Principles
          1. 16.2.1. Security
          2. 16.2.2. Reliability
          3. 16.2.3. Windows and POSIX Application Compatibility
          4. 16.2.4. High Performance
          5. 16.2.5. Extensibility
          6. 16.2.6. Portability
          7. 16.2.7. International Support
          8. 16.2.8. Energy Efficiency
          9. 16.2.9. Dynamic Device Support
        3. 16.3. System Components
          1. 16.3.1. Hardware-Abstraction Layer
          2. 16.3.2. Kernel
            1. 16.3.2.1. Kernel Dispatcher
            2. 16.3.2.2. Threads and Scheduling
            3. 16.3.2.3. Implementation of Synchronization Primitives
            4. 16.3.2.4. Software Interrupts: Asynchronous and Deferred Procedure Calls
            5. 16.3.2.5. Exceptions and Interrupts
            6. 16.3.2.6. Switching Between User-Mode and Kernel-Mode Threads
          3. 16.3.3. Executive
            1. 16.3.3.1. Object Manager
            2. 16.3.3.2. Virtual Memory Manager
            3. 16.3.3.3. Process Manager
            4. 16.3.3.4. Facilities for Client–Server Computing
            5. 16.3.3.5. I/O Manager
            6. 16.3.3.6. Cache Manager
            7. 16.3.3.7. Security Reference Monitor
            8. 16.3.3.8. Plug-and-Play Manager
            9. 16.3.3.9. Power Manager
            10. 16.3.3.10. Registry
            11. 16.3.3.11. Booting
        4. 16.4. Terminal Services and Fast User Switching
        5. 16.5. File System
          1. 16.5.1. NTFS Internal Layout
            1. 16.5.1.1. NTFS B+ Tree
            2. 16.5.1.2. NTFS Metadata
          2. 16.5.2. Recovery
          3. 16.5.3. Security
          4. 16.5.4. Volume Management and Fault Tolerance
            1. 16.5.4.1. RAID Sets
            2. 16.5.4.2. Sector Sparing and Cluster Remapping
          5. 16.5.5. Compression
          6. 16.5.6. Mount Points, Symbolic Links, and Hard Links
          7. 16.5.7. Change Journal
          8. 16.5.8. Volume Shadow Copies
        6. 16.6. Networking
          1. 16.6.1. Network Interfaces
          2. 16.6.2. Protocols
            1. 16.6.2.1. Server-Message Block
            2. 16.6.2.2. Transmission Control Protocol/Internet Protocol
            3. 16.6.2.3. Point-to-Point Tunneling Protocol
            4. 16.6.2.4. HTTP Protocol
            5. 16.6.2.5. Web-Distributed Authoring and Versioning Protocol
            6. 16.6.2.6. Named Pipes
            7. 16.6.2.7. Remote Procedure Calls
            8. 16.6.2.8. Component Object Model
          3. 16.6.3. Redirectors and Servers
            1. 16.6.3.1. Distributed File System
            2. 16.6.3.2. Folder Redirection and Client-Side Caching
          4. 16.6.4. Domains
          5. 16.6.5. Active Directory
        7. 16.7. Programmer Interface
          1. 16.7.1. Access to Kernel Objects
          2. 16.7.2. Sharing Objects between Processes
          3. 16.7.3. Process Management
            1. 16.7.3.1. Scheduling Rule
            2. 16.7.3.2. Thread Priorities
            3. 16.7.3.3. Thread Suspend and Resume
            4. 16.7.3.4. Thread Synchronization
            5. 16.7.3.5. Thread Pool
            6. 16.7.3.6. Fibers
            7. 16.7.3.7. User-Mode Scheduling (UMS) and ConcRT
            8. 16.7.3.8. Winsock
          4. 16.7.4. Interprocess Communication Using Windows Messaging
          5. 16.7.5. Memory Management
            1. 16.7.5.1. Virtual Memory
            2. 16.7.5.2. Memory-Mapping Files
            3. 16.7.5.3. Heaps
            4. 16.7.5.4. Thread-Local Storage
        8. 16.8. Summary
        9. 16.9. Practice Exercises
        10. 16.10. Exercises
        11. 16.11. Bibliographical Notes