书籍详情

UNIX系统内幕:英文版

UNIX系统内幕:英文版

作者:( )Uresh Vahalia著

出版社:人民邮电出版社

出版时间:2003-07-01

ISBN:9787115113009

定价:¥58.00

购买这本书可以去
内容简介
  《UNIX 系统内幕(英文版)》提供了最新和最全面的UNIX系统技术内幕资料。全书讨论了UNIX的开发技术和原理,考察了现代UNIX系统的最新发展,比较分析了由最重要的UNIX系统和变体所提供的最新特性。《UNIX 系统内幕(英文版)》涵盖的内容包括体现了20世纪90年代UNIX系统结构特色的多项技术:多线程内核、多处理机和实时系统,以及分布式文件系统。《UNIX 系统内幕(英文版)》还讨论了内核的几个重要组成部分,比较了它们在几种不同UNIX变体中的设计,论述了其间的诸多权衡考虑,并且介绍了已被广泛采用的那些特性。《UNIX 系统内幕(英文版)》可作为大学计算机科学系高年级本科生和研究生的教材或参考书。《UNIX 系统内幕(英文版)》也为专业UNIX程序员、系统管理员提供了极有价值的参考资料。
作者简介
  UreshVahalia曾为几种UNIX变体开发过内核中的子系统。他在许多大学、企业里,以及会议上讲授过UNIX内核技术。目前他正在为EMC公司开发高性能的文件和视频服务器。
目录
1 INTRODUCTION 1 1.1 Introduction 1 1.1.1 A Brief History 2 1.1.2 The Beginning 2 1.1.3 Proliferation 3 1.1.4 BSD 4 1.1.5 System V 5 1.1.6 Commercialization 5 1.1.7 Mach 6 1.1.8 Standards 6 1.1.9 OSF and UI 7 1.1.10 SVR4 and Beyond 8 1.2 The Mandate for Change 8 1.2.1 Functionality 9 1.2.2 Networking 9 1.2.3 Performance 10 1.2.4 Hardware Changes 10 1.2.5 Quality Improvement 11 1.2.6 Paradigm Shifts 11 1.2.7 Other Application Domains 12 1.2.8 Small is Beautiful 12 1.2.9 Flexibility 13 1.3 Looking Back, Looking Forward 14 1.3.1 What was Good about UNIX? 14 1.3.2 What is Wrong with UNIX? 15 1.4 The Scope of this Book 16 1.5 References 17
2 THE PROCESS AND THE KERNEL 19 2.1 Introduction 19 2.2 Mode, Space, and Context 22 2.3 The Process Abstraction 24 2.3.1 Process State 25 2.3.2 Process Context 26 2.3.3 User Credentials 27 2.3.4 The u Area and the proc Structure 28 2.4 Executing in Kernel Mode 30 2.4.1 The System Call Interface 31 2.4.2 Interrupt Handing 31 2.5 Synchronization 33 2.5.1 Blocking Operations 35 2.5.2 Interrupts 35 2.5.3 Multiprocessors 37 2.6 Process Scheduling 37 2.7 Signals 38 2.8 New Processes and Programs 39 2.8.1 fork and exec 39 2.8.2 Process Creation 41 2.8.3 fork Optimization 41 2.8.4 Invoking a New Program 42 2.8.5 Process Termination 43 2.8.6 Awaiting Process Termination 44 2.8.7 Zombie Processes 45 2.9 Summary 45 2.10 Exercises 45 2.11 References 46
3 THREADS AND LIGHTWEIGHT PROCESSES 48 3.1 Introduction 48 3.1.1 Motivation 49 3.1.2 Multiple Threads and Processors 49 3.1.3 Concurrency and Parallelism 52 3.2 Fundamental Abstractions 52 3.2.1 Kemel Threads 53 3.2.2 Lightweight Processes 53 3.2.3 User Threads 55 3.3 Lightweight Process Design-Issues to Consider 58 3.3.1 Semantics of fork 58 3.3.2 Other System Calls 59 3.3.3 Signal Delivery and Handling 60 3.3.4 Visibility 61 3.3.5 Stack Growth 61 3.4 User-Level Threads Libraries 62 3.4.1 The Programming Interface 62 3.4.2 Implementing Threads Libraries 62 3.5 Scheduler Activations 64 3.6 Multithreading in Solaris and SVR4 65 3.6.1 Kernel Threads 65 3.6.2 Lightweight Process Implementation 66 3.6.3 User Threads 67 3.6.4 User Thread Implementation 68 3.6.5 Interrupt Handling 68 3.6.6 System Call Handling 70 3.7 Threads in Mach 70 3.7.1 The Mach Abstractions- Tasks and Threads 70 3.7.2 Mach C- threads 71 3.8 Digital UNIX 72 3.8.1 The UNIX Interface 72 3.8.2 System Calls and Sygnals74 3.8.3 The pthreads Library 75 3.9 Mach 3.0 Continuations 76 3.9.1 Programming Models 76 3.9.2 Using Continuations 77 3.9.3 Optimizations 78 3.9.4 Analysis 79 3.10 Summary 79 3.11 Exercises 80 3.12 References 80
4 SIGNALS AND SESSION MANAGEMENT 83 4.1 Introduction 83 4.2 Signal Generation and Handling 84 4.2.1 Signal Handling 84 4.2.2 Signal Generation 87 4.2.3 Typical Scenarios 87 4.2.4 Sleep and Signals 88 4.3 Unreliable Signals 89 4.4 Reliable Signals 90 4.4.1 Primary Features 90 4.4.2 The SVR3 Implementation 91 4.4.3 BSD Signal Management 92 4.5 Signals in SVR4 93 4.6 Signals Implementation 94 4.6.1 Signal Generation 95 4.6.2 Delivery and Handling 95 4.7 Exceptions 95 4.8 Mach Exception Handling 96 4.8.1 Exception Ports 97 4.8.2 Error Handling 98 4.8.3 Debugger Interactions 98 4.8.4 Analysis 99 4.9 Process Groups and Terminal Management 99 4.9.1 Common Concepts 99 4.9.2 The SVR3 Model 100 4.9.3 Limitations 102 4.9.4 4.3BSD Groups and Terminals 103 4.9.5 Drawbacks 104 4.10 The SVR4 Sessions Architecture 105 4.10.1 Motivation 105 4.10.2 Sessions and Process Groups 106 4.10.3 Data Structures 107 4.10.4 Controlling Terminals 107 4.10.5 The 4.4BSD Sessions Implementation 109 4.11 Summary 110 4.12 Exercises 110 4.13 References 111
5 PROCESS SCHEDULING 112 5.1 Introduction 112 5.2 Clock Interrupt Handling 113 5.2.1 Callouts 114 5.2.2 Alarms 115 5.3 Scheduler Goals 116 5.4 Traditional UNIX Scheduling 117 5.4.1 Process Priorities 118 5.4.2 Scheduler Implementation 119 5.4.3 Run Queue Manipulation 120 5.4.4 Analysis 121 5.5 The SVR4 Scheduler 122 5.5.1 The Class-Independent Layer 122 5.5.2 Interface to the Scheduling Classes 124 5.5.3 The Time-Sharing Class 126 5.5.4 The Real-Time Class 127 5.5.5 The priocntl System Call 129 5.5.6 Analysis 129 5.6 Solaris 2.x Scheduling Enhancements 130 5.6.1 Preemptive Kernel 131 5.6.2 Multiprocessor Support 131 5.6.3 Hidden Scheduling 133 5.6.4 Priority Inversion 133 5.6.5 Implementation of Priority Inheritance 135 5.6.6 Limitations of Priority Inheritance 137 5.6.7 Turnstiles 138 5.6.8 Analysis 139 5.7 Scheduling in Mach 139 5.7.1 Multiprocessor Support 140 5.8 The Digital UNIX Real-Time Scheduler 142 5.8.1 Multiprocessor Support 143 5.9 Other Scheduling Implementations 143 5.9.1 Fair-Share Scheduling 144 5.9.2 Deadline-Driven Scheduling 144 5.9.3 A Three-Level Scheduler 145 5.10 Summary 146 5.11 Exercises 146 5.12 References 147
6 INTERPROCESS COMMUNICATIONS 149 6.1 Introduction 149 6.2 Universal IPC Facilities 150 6.2.1 Signals 150 6.2.2 Pipes 151 6.2.3 SVR4 Pipes 152 6.2.4 Process Tracing 153 6.3 System V IPC 155 6.3.1 Common Elements 155 6.3.2 Semaphores 156 6.3.3 Message Queues 160 6.3.4 Shared Memory 162 6.3.5 Discussion 164 6.4 Mach IPC 165 6.4.1 Basic Concepts 166 6.5 Messages 167 6.5.1 Message Data Structures 167 6.5.2 Message Passing Interface 169 6.6 Ports 170 6.6.1 The Port Name Space 170 6.6.2 The Port Data Structure 170 6.6.3 Port Translations 171 6.7 Message Passing 172 6.7.1 Transferring Port Rights 173 6.7.2 Out-of-Line Memory 175 6.7.3 Control Flow 177 6.7.4 Notifications 177 6.8 Port Operations 177 6.8.1 Destroying a Port 178 6.8.2 Backup Ports 178 6.8.3 Port Sets 179 6.8.4 Port Interpolation 180 6.9 Extensibility 181 6.10 Mach 3.0 Enhancements 182 6.10.1 Send-Once Rights 183 6.10.2 Mach 3.0 Notifications 183 6.10.3 User-Reference Counting of Send Rights 183 6.11 Discussion 184 6.12 Summary 185 6.13 Exercises 185 6.14 References 186
7 SYNCHRONIZATION AND MUL TIPROCESSING 187 7.1 Introduction 187 7.2 Synchronization in Traditional UNIX Kernels 188 7.2.1 Interrupt Masking 189 7.2.2 Sleep and Wakeup 189 7.2.3 Limitations of Traditional Approach 190 7.3 Synchronization in Traditional UNIX Kernels 188 7.3.1 Memory Model 191 7.3.2 Synchronization Support 193 7.3.3 Software Architecture 195 7.4 Multiprocessor Synchronization Issues 195 7.4.1 The Lost Wakeup Problem 196 7.4.2 The Thundering Herd Problem 196 7.5 Semaphores 197 7.5.1 Semaphores to Provide Mutual Exclusion 198 7.5.2 Event-Wait Using Semaphores 198 7.5.3 Semaphores to Control Countable Resources 199 7.5.4 Drawbacks of Semaphores 199 7.5.5 Convoys 200 7.6 Spin Locks 201 7.6.1 Use of Spin Locks 202 7.7 Condition Variables 203 7.7.1 Implementation Issues 204 7.7.2 Events 205 7.7.3 Blocking Locks 205 7.8 Read-Write Locks 206 7.8.1 Design Considerations 206 7.8.2 Implementation 207 7.9 Reference Counts 209 7.10 Other Considerations 209 7.10.1 Deadlock Avoidance 209 7.10.2 Recursive Locks 211 7.10.3 To Block or to Spin 211 7.10.4 What to Lock 212 7.10.5 Granularity and Duration 212 7.11 Case Studies 213 7.11.1 SVR4.2/MP 213 7.11.2 Digital UNIX 214 7.11.3 Other Implementations 216 7.12 Summary 217 7.13 Exercises 217 7.14 References 218
8 FILE SYSTEM INTERFACE AND FRAMEWORK 220 8.1 Introduction 220 8.2.1 The User Interface to Files 221 8.2.2 File Attributes 223 8.2.3 File Descriptors 225 8.2.4 File I/O 227 8.2.5 Scatter-Gather I/O 228 8.2.6 File Locking 228 8.3 File Systems 229 8.3.1 Logical Disks 230 8.4 Special Files 231 8.4.1 Symbolic Links 231 8.4.2 Pipes and FIFOs 233 8.5 File System Framework 233 8.6 The Vnode/Vfs Architecture 234 8.6.1 Objectives 234 8.6.2 Lessons from Device I/O 235 8.6.3 Overview of the Vnode/Vfs Interface 238 8.7 Implementation Overview 240 8.7.1 Objectives 240 8.7.2 Vnodes and Open Files 240 8.7.3 The Vnode 241 8.7.4 Vnode Reference Count 242 8.7.5 The Vfs Object 243 8.8 File-System-Dependent Objects 244 8.8.1 The Per-File Private Data 244 8.8.2 The vnodeops Vector 245 8.8.3 File-System-Dependent Parts of the Vfs Layer 246 8.9 Mounting a File System 247 8.9.1 The Virtual File System Switch 247 8.9.2 mount Implementation 248 8.9.3 VFS_MOUNT Processing 249 8.10 Operations on Files 249 8.10.1 Pathname Traversal 249 8.10.2 Directory Lookup Cache 250 8.10.3 The VOP_LOOKUP Operation 251 8.10.4 Opening a File 252 8.10.5 File I/O 253 8.10.6 File Attributes 253 8.10.7 User Credentials 253 8.11 Analysis 254 8.11.1 Drawbacks of the SVR4 Implementation 255 8.11.2 The 4.4BSD Model 256 8.11.3 The OSF/1 Approach 257 8.12 Summary 257 8.13 Exercises 258 8.14 References 259
9 FILE SYSTEM IMPLEMENTATIONS 261 9.1 Introduction 261 9.2 The System V File System(s5fs) 262 9.2.1 Directories 263 9.2.2 Inodes 263 9.2.3 The Superblock 266 9.3 S5fs Kernel Organization 267 9.3.1 In-Core Inodes 267 9.3.2 Inode Lookup 267 9.3.3 File I/O 268 9.3.4 Allocating and Reclaiming Inodes 270 9.4 Analysis of s5fs 271 9.5 The Berkeley Fast File System 272 9.6 Hard Disk Structure 272 9.7 On-Disk Organization 273 9.7.1 Blocks and Fragments 273 9.7.2 Allocation Policies 274 9.8 FFS Functionality Enhancements 275 9.9 Analysis 276 9.10 Temporary File Systems 278 9.10.1 The Memory File System 278 9.10.2 The tmpfs File System 279 9.11 Special-Purpose File Systems 280 9.11.1 The Specfs File System 280 9.11.2 The/proc File System 281 9.11.3 The Processor File System 283 9.11.4 The Translucent File System 283 9.12 The Old Buffer Cache 284 9.12.1 Basic Operation 285 9.12.2 Buffer Headers 286 9.12.3 Advantages 286 9.12.4 Disadvantages 287 9.12.5 Ensuring File System Consistency 287 9.13 Summary 288 9.14 Exercises 288 9.15 References 289
10 DISTRIBUTED FILE SYSTEMS 291 10.1 Introduction 291 10.2 General Characteristics of Distributed File Systems 292 10.2.1 Design Considerations 292 10.3 Network File System(NFS) 293 10.3.1 User Perspective 294 10.3.2 Design Goals 294 10.3.3 NFS Components 295 10.3.4 Statelessness 297 10.4 The Protocol Suite 298 10.4.1 Extended Data Representation(XDR) 298 10.4.2 Remote Procedure Calls(RPC) 300 10.5 NFS Implementation 301 10.5.1 Control Flow 302 10.5.2 File Handles 302 10.5.3 The Mount Operation 303 10.5.4 Pathname Lookup 303 10.6 UNIX Semantics 304 10.6.1 Open File Permissions 304 10.6.2 Deletion of Open Files 305 10.6.3 Reads and Writes 305 10.7 NFS Performance 306 10.7.1 Performance Bottlenecks 306 10.7.2 Client-Side Caching 306 10.7.3 Deferral of Writes 307 10.7.4 The Retransmissions Cache 308 10.8 Dedicated NFS Servers 309 10.8.1 The Auspex Functional Multiprocessor Architecture 309 10.8.2 IBM\''s HA-NFS Server 310 10.9 NFS Security 312 10.9.1 NFS Access Control 312 10.9.2 UID Remapping 313 10.9.3 Root Remapping 313 10.10 NFS Version 3 314 10.11 Remote File Sharing (RFS) 315 10.12 RFS Architecture 315 10.12.1 Remote Message Protocol 316 10.12.2 Stateful Operation 317 10.13 RFS Implementation 317 10.13.1 Remote Mount 317 10.13.2 RFS Clients and Servers 319 10.13.3 Crash Recovery 320 10.13.4 Other Issues 321 10.14 Client-Side Caching 321 10.14.1 Cache Consistency 322 10.15 The Andrew File System 323 10.15.1 Scalable Architecture 323 10.15.2 Storage and Name Space Organization 324 10.15.3 Session Semantics 325 10.16 AFS Implementation 326 10.16.1 Caching and Consistency 326 10.16.2 Pathname Lookup 327 10.16.3 Security 327 10.17 AFS Shortcomings 328 10.18 The DCE Distributed File System(DCE DFS) 329 10.18.1 DFS Architecture 329 10.18.2 Cache Consistency 330 10.18.3 The Token Manager 332 10.18.4 Other DFS Services 332 10.18.5 Analysis 333 10.19 Summary 334 10.20 Exercises 334 10.21 References 335
11 ADVANCED FILE SYSTEMS 338 11.1 Introduction 338 11.2 Limitations of Traditional File Systems 339 11.2.1 FFS Disk Layout 340 11.2.2 Predominance of Writes 341 11.2.3 Metadata Updates 342 11.2.4 Crash Recovery 342 11.3 File System Clustering(Sun-FFS) 343 11.4 The Journaling Approach 344 11.4.1 Basic Characteristics 344 11.5 Log-Structured File Systems 345 11.6 The 4.4BSD Log-Structured File System 346 11.6.1 Writing the Log 347 11.6.2 Data Retrieval 347 11.6.3 Crash Recovery 348 11.6.4 The Cleaner Process 349 11.6.5 Analysis 349 11.7 Metadata Logging 350 11.7.1 Normal Operation 351 11.7.2 Log Consistency 352 11.7.3 Recovery 353 11.7.4 Analysis 354 11.8 The Episode File System 355 11.8.1 Basic Abstractions 356 11.8.2 Structure 357 11.8.3 Logging 358 11.8.4 Other Features 358 11.9 Watchdogs 359 11.9.1 Directory Watchdogs 360 11.9.2 Message Channels 360 11.9.3 Applications 361 11.10 The 4.4BSD Portal File System 362 11.10.1 Using Portals 363 11.11 Stackable File System Layers 364 11.11.1 Framework and Interface 364 11.11.2 The SunSoft Prototype 366 11.12 The 4.4BSD File System Interface 367 11.12.1 The Nullfs and Union Mount File Systems 368 11.13 Summary 368 11.14 Exercises 368 11.15 References 369
12 KERNEL MEMORY ALLOCATION 372 12.1 Introduction 372 12.2 Functional Requirements 374 12.2.1 Analysis 377 12.3 Resource Map Allocator 376 12.3.1 Analysis 377 12.4 Simple Power-of-Two Free Lists 379 12.4.1 Analysis 380 12.5 The McKusick-Karels Allocator 381 12.5.1 Analysis 383 12.6 The Buddy System 383 12.6.1 Analysis 385 12.7 The SVR4 Lazy Buddy Algorithm 386 12.7.1 Lazy Coalescing 386 12.7.2 SVR4 Implementation Details 387 12.8 The Mach-OSF/1 Zone Allocator 388 12.8.1 Garbage Collection 388 12.8.2 Analysis 389 12.9 A Hierarchical Allocator for Multiprocessors 390 12.9.1 Analysis 392 12.10 The Solaris 2.4 Slab Allocator 392 12.10.1 Object Reuse 392 12.10.2 Hardware Cache Utilization 393 12.10.3 Allocator Footprint 394 12.10.4 Design and Interfaces 394 12.10.5 Implementation 395 12.10.6 Analysis 396 12,11 Summary 397 12.12 Exercises 398 12.13 References 399
13 VIRTUAL MEMORY 400 13.1 Introduction 400 13.1.1 Memory Management in the Stone Age 401 13.2 Demand Paging 404 13.2.1 Functional Requirements 404 13.2.2 The Virtual Address Space 406 13.2.3 Initial Access to a Page 407 13.2.4 The Swap Area 407 13.2.5 Translation Maps 408 13.2.6 Page Replacement Policies 409 13.3 Hardware Requirements 410 13.3.1 MMU Caches 412 13.3.2 The Intel 80x86 413 13.3.3 The IBM RS/6000 416 13.3.4 The MIPS R3000 419 13.4 4.3BSD-A Case Study 421 13.4.1 Physical Memory 421 13.4.2 The Address Space 423 13.4.3 Where Is the Page? 424 13.4.4 Swap Space 426 13.5 4.3BSD Memory Management Operations 427 13.5.1 Process Creation 427 13.5.2 Page Fault Handling 428 13.5.3 The Free Page List 431 13.5.4 Swapping 432 13.6 Analysis 433 13.7 Exercises 435 13.8 References 436
14 THE SVR4 VM ARCHITECTURE 437 14.1 Motivation 437 14.2 Memory-Mapped Files 438 14.2.1 mmap and Related System Calls 440 14.3 VM Design Principles 440 14.4 Fundamental Abstractions 441 14.4.1 Physical Memory 442 14.4.2 The Address Space 443 14.4.3 Address Mappings 444 14.4.4 Anonymous Pages 445 14.4.5 Hardware Address Translation 446 14.5 Segment Drivers 448 14.5.1 seg_vn 448 14.5.2 seg_map 449 14.5.3 seg_dev 450 14.5.4 seg_kmem 450 14.5.5 seg_kp 450 14.6 The Swap Layer 451 14.7 VM Operations 452 14.7.1 Creating a New Mapping 453 14.7.2 Anonymous Page Handling 453 14.7.3 Process Creation 455 14.7.4 Sharing Anonymous Pages 455 14.7.5 Page Fault Handling 457 14.7.6 Shared Memory 458 14.7.7 Other Components 459 14.8 Interaction with the Vnode Subsystem 460 14.8.1 Vnode Interface Changes 460 14.8.2 Unifying File Access 461 14.8.3 Miscellaneous Issues 463 14.9 Virtual Swap Space in Solaris 464 14.9.1 Extended Swap Space 464 14.9.2 Virtual Swap Management 464 14.9.3 Discussion 466 14.10 Analysis 466 14.11 Performance Improvements 468 14.11.1 Causes of High Fault Rates 468 14.11.2 SVR4 Enhancements to the SunOS VM Implementation 469 14.11.3 Results and Discussion 470 14.12 Summary 470 14.13 Exercises 471 14.14 References 471
15 MORE MEMORY MANAGEMENT TOPICS 473 15.1 Introduction 473 15.2 Mach Memory Management Design 473 15.2.1 Design Goals 474 15.2.2 Programming Interface 474 15.2.3 Fundamental Abstractions 476 15.3 Memory Sharing Facilities 478 15.3.1 Copy-on-Write Sharing 478 15.3.2 Read-Write Sharing 480 15.4 Memory Objects and Pagers 481 15.4.1 Memory Object Initialization 481 15.4.2 Interface between the Kernel and the Pager 482 15.4.3 Kernel-Pager Interactions 484 15.5 External and Internal Pagers 484 15.5.1 A Network Shared Memory Server 485 15.6 Page Replacement 487 15.7 Analysis 489 15.8 Memory Management in 4.4BSD 490 15.9 Translation Lookaside Buffer(TLB) Consistency 492 15.9.1 TLB Consistency on a Uniprocessor 493 15.9.2 Multiprocessor Issues 494 15.10 TLB Shootdown in Mach 494 15.10.1 Synchronization and Deadlock Avoidance 495 15.10.2 Discussion 496 15.11 TLB Consistency in SVR4 and SVR4.2 UNIX 497 15.11.1 SVR4/MP 497 15.11.2 SVR4.2/MP 498 15.11.3 Lazy Shootdowns 499 15.11.4 Immediate Shootdowns 500 15.11.5 Discussion 500 15.12 Other TLB Consistency Algorithms 501 15.13 Virtually Addressed Caches 502 15.13.1 Mapping Changes 504 15.13.2 Address Aliases 505 15.13.3 DMA Operations 505 15.13.4 Maintaining Cache Consistency 506 15.13.5 Analysis 507 15.14 Exercises 507 15.15 References 508
16 DEVICE DRIVERS AND I/O 511 16.1 Introduction 511 16.2 Overview 511 16.2.1 Hardware Configuration 513 16.2.2 Device Interrupts 514 16.3 Device Driver Framework 516 16.3.1 Classifying Devices and Drivers 516 16.3.2 Invoking Driver Code 517 16.3.3 The Device Switches 518 16.3.4 Driver Entry Points 519 16.4 The I/O Subsystem 520 16.4.1 Major and Minor Device Numbers 521 16.4.2 Device Files 522 16.4.3 The specfs File System 523 16.4.4 The Common snode 524 16.4.5 Device Cloning 526 16.4.6 I/O to a Character Device 526 16.5 The poll System Call 527 16.5.1 poll Implementation 528 16.5.2 The 4.3BSD slect System Call 529 16.6 Block I/O 530 16.6.1 The buf Structure 531 16.6.2 Interaction with the Vnode 532 16.6.3 Device Access Methods 533 16.6.4 Raw I/O to a Block Device 535 16.7 The DDI/DKI Specification 535 16.7.1 General Recommendations 537 16.7.2 Section 3 Functions 537 16.7.3 Other Sections 538 16.8 Newer SVR4 Releases 539 16.8.1 Multiprocessor-Safe Drivers 540 16.8.2 SVR4.1/ES Changes 540 16.8.3 Dynamic Loading and Unloading 541 16.9 Future Directions 543 16.10 Summary 544 16.11 Exercises 545 16.12 References 545
17 STREAMS 547 17.1 Motivation 547 17.2 Overview 548 17.3 Messages and Queues 551 17.3.1 Messages 551 17.3.2 Virtual Copying 552 17.3.3 Message Types 553 17.3.4 Queues and Modules 554 17.4 Stream I/O 556 17.4.1 The STREAMS Scheduler 557 17.4.2 Priority Bands 558 17.4.3 Flow Control 558 17.4.4 The Driver End 560 17.45 The Stream Head 561 17.5 Configuration and Setup 562 17.5.1 Configuring a Module or Driver 562 17.5.2 Opening a Stream 564 17.5.3 Pushing Modules 565 17.5.4 Clone Devices 566 17.6 STREAMS ioctls 566 17.6.1 I_STR ioctl Processing 567 17.6.2 Transparent ioctls 568 17.8 Multiplexing 571 17.8.1 Upper Multiplexors 571 17.8.2 Lower Multiplexors 572 17.8.3 Linking Streams 572 17.8.4 Data Flow 574 17.8.5 Ordinary and Persistent Links 575 17.9 FIFOs and Pipes 576 17.9.1 STREAMS FIFOs 576 17.9.2 STREAMS Pipes 577 17.10 Networking Interfaces 578 17.10.1 Transport Provider Interface(TPI) 579 17.10.2 Transport Layer Interface(TLI) 579 17.10.3 Sockets 580 17.10.4 SVR4 Sockets Implementation 582 17.11 Summary 583 17.12 Exercises 584 17.13 References 585
Index 587
猜您喜欢

读书导航