PREFACE xxiii 1 INTRODUCTION 1 1.1 WHAT IS AN OPERATING SYSTEM 3 1.1.1 The Operating System as an Extended Machine 4 1.1.2 The Operating System as a Resource Manager 5 1.2 HISTORY OF OPERATING SYSTEMS 6 1.2.1 The First Generation (1945–55): Vacuum Tubes 7 1.2.2 The Second Generation (1955–65): Transistors and Batch Systems 8 1.2.3 The Third Generation (1965–1980): ICs and Multiprogramming 9 1.2.4 The Fourth Generation (1980–Present): Personal Computers 14 1.2.5 The Fifth Generation (1990–Present): Mobile Computers 19 1.3 COMPUTER HARDWARE REVIEW 20 1.3.1 Processors 21 1.3.2 Memory 24 1.3.3 Disks 27 1.3.4 I/O Devices 28 1.3.5 Buses 31 1.3.6 Booting the Computer 34 1.4 THE OPERATING SYSTEM ZOO 35 1.4.1 Mainframe Operating Systems 35 1.4.2 Server Operating Systems 35 1.4.3 Multiprocessor Operating Systems 36 1.4.4 Personal Computer Operating Systems 36 1.4.5 Handheld Computer Operating Systems 36 1.4.6 Embedded Operating Systems 36 1.4.7 Sensor-Node Operating Systems 37 1.4.8 Real-Time Operating Systems 37 1.4.9 Smart Card Operating Systems 38 1.5 OPERATING SYSTEM CONCEPTS 38 1.5.1 Processes 39 1.5.2 Address Spaces 41 1.5.3 Files 41 1.5.4 Input/Output 45 1.5.5 Protection 45 1.5.6 The Shell 45 1.5.7 Ontogeny Recapitulates Phylogeny 46 1.6 SYSTEM CALLS 50 1.6.1 System Calls for Process Management 53 1.6.2 System Calls for File Management 56 1.6.3 System Calls for Directory Management 57 1.6.4 Miscellaneous System Calls 59 1.6.5 The Windows Win32 API 60 1.7 OPERATING SYSTEM STRUCTURE 62 1.7.1 Monolithic Systems 62 1.7.2 Layered Systems 63 1.7.3 Microkernels 65 1.7.4 Client-Server Model 68 1.7.5 Virtual Machines 68 1.7.6 Exokernels 72 1.8 THE WORLD ACCORDING TO C 73 1.8.1 The C Language 73 1.8.2 Header Files 74 1.8.3 Large Programming Projects 75 1.8.4 The Model of Run Time 76 1.9 RESEARCH ON OPERATING SYSTEMS 77 1.10 OUTLINE OF THE REST OF THIS BOOK 78 1.11 METRIC UNITS 79 1.12 SUMMARY 80 2 PROCESSES AND THREADS 85 2.1 PROCESSES 85 2.1.1 The Process Model 86 2.1.2 Process Creation 88 2.1.3 Process Termination 90 2.1.4 Process Hierarchies 91 2.1.5 Process States 92 2.1.6 Implementation of Processes 94 2.1.7 Modeling Multiprogramming 95 2.2 THREADS 97 2.2.1 Thread Usage 97 2.2.2 The Classical Thread Model 102 2.2.3 POSIX Threads 106 2.2.4 Implementing Threads in User Space 108 2.2.5 Implementing Threads in the Kernel 111 2.2.6 Hybrid Implementations 112 2.2.7 Scheduler Activations 113 2.2.8 Pop-Up Threads 114 2.2.9 Making Single-Threaded Code Multithreaded 115 2.3 INTERPROCESS COMMUNICATION 119 2.3.1 Race Conditions 119 2.3.2 Critical Regions 121 2.3.3 Mutual Exclusion with Busy Waiting 121 2.3.4 Sleep and Wakeup 127 2.3.5 Semaphores 130 2.3.6 Mutexes 132 2.3.7 Monitors 137 2.3.8 Message Passing 144 2.3.9 Barriers 146 2.3.10 Avoiding Locks: Read-Copy-Update 148 2.4 SCHEDULING 148 2.4.1 Introduction to Scheduling 149 2.4.2 Scheduling in Batch Systems 156 2.4.3 Scheduling in Interactive Systems 158 2.4.4 Scheduling in Real-Time Systems 164 2.4.5 Policy Versus Mechanism 165 2.4.6 Thread Scheduling 165 2.5 CLASSICAL IPC PROBLEMS 167 2.5.1 The Dining Philosophers Problem 167 2.5.2 The Readers and Writers Problem 169 2.6 RESEARCH ON PROCESSES AND THREADS 172 2.7 SUMMARY 173 3 MEMORY MANAGEMENT 181 3.1 NO MEMORY ABSTRACTION 182 3.2 A MEMORY ABSTRACTION: ADDRESS SPACES 185 3.2.1 The Notion of an Address Space 185 3.2.2 Swapping 187 3.2.3 Managing Free Memory 190 3.3 VIRTUAL MEMORY 194 3.3.1 Paging 195 3.3.2 Page Tables 198 3.3.3 Speeding Up Paging 201 3.3.4 Page Tables for Large Memories 205 3.4 PAGE REPLACEMENT ALGORITHMS 209 3.4.1 The Optimal Page Replacement Algorithm 209 3.4.2 The Not Recently Used Page Replacement Algorithm 210 3.4.3 The First-In, First-Out (FIFO) Page Replacement Algorithm 211 3.4.4 The Second-Chance Page Replacement Algorithm 211 3.4.5 The Clock Page Replacement Algorithm 212 3.4.6 The Least Recently Used (LRU) Page Replacement Algorithm 213 3.4.7 Simulating LRU in Software 214 3.4.8 The Working Set Page Replacement Algorithm 215 3.4.9 The WSClock Page Replacement Algorithm 219 3.4.10 Summary of Page Replacement Algorithms 221 3.5 DESIGN ISSUES FOR PAGING SYSTEMS 222 3.5.1 Local versus Global Allocation Policies 222 3.5.2 Load Control 225 3.5.3 Page Size 225 3.5.4 Separate Instruction and Data Spaces 227 3.5.5 Shared Pages 228 3.5.6 Shared Libraries 229 3.5.7 Mapped Files 231 3.5.8 Cleaning Policy 232 3.5.9 Virtual Memory Interface 232 3.6 IMPLEMENTATION ISSUES 233 3.6.1 Operating System Involvement with Paging 233 3.6.2 Page Fault Handling 234 3.6.3 Instruction Backup 235 3.6.4 Locking Pages in Memory 236 3.6.5 Backing Store 237 3.6.6 Separation of Policy and Mechanism 239 3.7 SEGMENTATION 240 3.7.1 Implementation of Pure Segmentation 243 3.7.2 Segmentation with Paging: MULTICS 243 3.7.3 Segmentation with Paging: The Intel x86 247 3.8 RESEARCH ON MEMORY MANAGEMENT 252 3.9 SUMMARY 253 4 FILE SYSTEMS 263 4.1 FILES 265 4.1.1 File Naming 265 4.1.2 File Structure 267 4.1.3 File Types 268 4.1.4 File Access 269 4.1.5 File Attributes 271 4.1.6 File Operations 271 4.1.7 An Example Program Using File-System Calls 273 4.2 DIRECTORIES 276 4.2.1 Single-Level Directory Systems 276 4.2.2 Hierarchical Directory Systems 2... |