1 INTRODUCTION 1
1.1 Introduction 1
1.1.2 The Beginning 2
1.1.1 A Brief History 2
1.1.3 Proliferation 3
1.1.4 BSD 4
1.1.6 Commercialization 5
1.1.5 System Ⅴ 5
1.1.8 Standards 6
1.1.7 Mach 6
1.1.9 OSF and UI 7
1.2 The Mandate for Change 8
1.1.10 SVR4 and Beyond 8
1.2.2 Networking 9
1.2.1 Functionality 9
1.2.4 Hardware Changes 10
1.2.3 Performance 10
1.2.6 Paradigm Shifts 11
1.2.5 Quality Improvement 11
1.2.8 Smallis Beautiful 12
1.2.7 Other Application Domains 12
1.2.9 Flexibility 13
1.3.1 What was Good about UNIX? 14
1.3 Looking Back,Looking Forward 14
1.3.2 What is Wrong with UNIX? 15
1.4 The Scope of this Book 16
1.5 References 17
2.1 Introduction 19
2 THE PROCESS AND THE KERNEL 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.2 Interrupt Handling 31
2.4.1 The System Call Interface 31
2.5 Synchronization 33
2.5.2 Interrupts 35
2.5.1 Blocking Operations 35
2.6 Process Scheduling 37
2.5.3 Multiprocessors 37
2.7 Signals 38
2.8.1 forkand exec 39
2.8 New Processes and Programs 39
2.8.3 fork Optimization 41
2.8.2 Process Creation 41
2.8.4 Invoking aNew Program 42
2.8.5 Process Termination 43
2.8.6 Awaiting Process Termination 44
2.10 Exercises 45
2.9 Summary 45
2.8.7 Zombie Processes 45
2.11 References 46
3.1 Introduction 48
3 THREADS AND LIGHTWEIGHT PROCESSES 48
3.1.2 Multiple Threads and Processors 49
3.1.1 Motivation 49
3.2 Fundamental Abstractions 52
3.1.3 Concurrency and Parallelism 52
3.2.2 Lightweight Processes 53
3.2.1 Kernel Threads 53
3.2.3 User Threads 55
3.3.1 Semantics offork 58
3.3 Lightweight Process Design—Issues to Consider 58
3.3.2 Other System Calls 59
3.3.3 Signal Delivery and Handling 60
3.3.5 Stack Growth 61
3.3.4 Visibility 61
3.4.2 Implementing Threads Libraries 62
3.4.1 The Programming Interface 62
3.4 User-Level Threads Libraries 62
3.5 Scheduler Activations 64
3.6.1 Kernel Threads 65
3.6 Multithreading in Solaris and SVR4 65
3.6.2 Lightweight Process Implementation 66
3.6.3 User Threads 67
3.6.5 Interrupt Handling 68
3.6.4 User Thread Implementation 68
3.7.1 The Mach Abstractions—Tasks and Threads 70
3.7 Threads in Mach 70
3.6.6 System Call Handling 70
3.7.2 Mach C-threads 71
3.8.1 The UNIX Interface 72
3.8 Digital UNIX 72
3.8.2 System Calls and Signals 74
3.8.3 The pthreads Library 75
3.9.1 Programming Models 76
3.9 Mach 3.0 Continuations 76
3.9.2 Using Continuations 77
3.9.3 Optimizations 78
3.10 Summary 79
3.9.4 Analysis 79
3.12 References 80
3.11 Exercises 80
4.1 Introduction 83
4 SIGNALS AND SESSION MANAGEMENT 83
4.2.1 Signal Handling 84
4.2 Signal Generation and Handling 84
4.2.3 Typical Scenarios 87
4.2.2 Signal Generation 87
4.2.4 Sleep and Signals 88
4.3 Unreliable Signals 89
4.4.1 Primary Features 90
4.4 Reliable Signals 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.7 Exceptions 95
4.6.2 Delivery and Handling 95
4.6.1 Signal Generation 95
4.8 Mach Exception Handling 96
4.8.1 Exception Ports 97
4.8.3 Debugger Interactions 98
4.8.2 Error Handling 98
4.9.1 Common Concepts 99
4.9 Process Groups and Terminal Management 99
4.8.4 Analysis 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.1 Motivation 105
4.10 The SVR4 Sessions Architecture 105
4.10.2 Sessions and Process Groups 106
4.10.4 Controlling Terminals 107
4.10.3 Data Structures 107
4.10.5 The 4.4BSD Sessions Implementation 109
4.12 Exercises 110
4.11 Summary 110
4.13 References 111
5.1 Introduction 112
5 PROCESS SCHEDULING 112
5.2 Clock Interrupt Handling 113
5.2.1 Caliouts 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.1 The Class-Independent Layer 122
5.5 The SVR4 Scheduler 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.6 Analysis 129
5.5.5 The priocntl System Call 129
5.6 Solaris 2.x Scheduling Enhancements 130
5.6.2 Multiprocessor Support 131
5.6.1 Preemptive Kernel 131
5.6.4 Priority Inversion 133
5.6.3 Hidden Scheduling 133
5.6.5 Implementation of Priority Inheritance 135
5.6.6 Limitations of Priority Inheritance 137
5.6.7 Turnstiles 138
5.7 Scheduling in Mach 139
5.6.8 Analysis 139
5.7.1 Multiprocessor Support 140
5.8 The Digital UNIX Real-Time Scheduler 142
5.9 Other Scheduling Implementations 143
5.8.1 Multiprocessor Support 143
5.9.2 Deadline-Driven Scheduling 144
5.9.1 Fair-Share Scheduling 144
5.9.3 A Three-Level Scheduler 145
5.11 Exercises 146
5.10 Summary 146
5.12 References 147
6.1 Introduction 149
6 INTERPROCESS COMMUNICATIONS 149
6.2.1 Signals 150
6.2 Universal IPC Facilities 150
6.2.2 Pipes 151
6.2.3 SVR4Pipes 152
6.2.4 Process Tracing 153
6.3.1 Common Elements 155
6.3 System Ⅴ IPC 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.1 Message Data Structures 167
6.5 Messages 167
6.5.2 Message Passing Interface 169
6.6.2 The Port Data Structure 170
6.6.1 The Port Name Space 170
6.6 Ports 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.8 Port Operations 177
6.7.4 Notifications 177
6.7.3 Control Flow 177
6.8.2 Backup Ports 178
6.8.1 Destroying a Port 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.3 User-Reference Counting of Send Rights 183
6.10.2 Mach 3.0 Notifications 183
6.10.1 Send-Once Rights 183
6.11 Discussion 184
6.13 Exercises 185
6.12 Summary 185
6.14 References 186
7.1 Introduction 187
7 SYNCHRONIZATION AND MULTIPROCESSING 187
7.2 Synchronization in Traditional UNIX Kernels 188
7.2.2 Sleep and Wakeup 189
7.2.1 Interrupt Masking 189
7.2.3 Limitations of Traditional Approach 190
7.3.1 Memory Model 191
7.3 Multiprocessor Systems 191
7.3.2 Synchronization Support 193
7.4 Multiprocessor Synchronization Issues 195
7.3.3 Software Architecture 195
7.4.2 The Thundering Herd Problem 196
7.4.1 The Lost Wakeup Problem 196
7.5 Semaphores 197
7.5.2 Event-Wait Using Semaphores 198
7.5.1 Semaphores to Provide Mutual Exclusion 198
7.5.4 Drawbacks of Semaphores 199
7.5.3 Semaphores to Control Countable Resources 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.3 Blocking Locks 205
7.7.2 Events 205
7.8.1 Design Considerations 206
7.8 Read-Write Locks 206
7.8.2 Implementation 207
7.10.1 Deadlock Avoidance 209
7.10 Other Considerations 209
7.9 Reference Counts 209
7.10.3 To Block or to Spin 211
7.10.2 Recursive Locks 211
7.10.5 Granularity and Duration 212
7.10.4 What to Lock 212
7.11.1 SVR4.2/MP 213
7.11 Case Studies 213
7.11.2 Digitel UNIX 214
7.11.3 Other Implementations 216
7.13 Exercises 217
7.12 Summary 217
7.14 References 218
8.1 Introduction 220
8 FILE SYSTEM INTERFACE AND FRAMEWORK 220
8.2.1 Files and Directories 221
8.2 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.6 File Locking 228
8.2.5 Scatter-GatherI/O 228
8.3 File Systems 229
8.3.1 Logical Disks 230
8.4.1 Symbolic Links 231
8.4 Special Files 231
8.5 File System Framework 233
8.4.2 Pipes and FIFOs 233
8.6.1 Objectives 234
8.6 The Vnode/Vfs Architecture 234
8.6.2 Lessons from DeviceI/O 235
8.6.3 Overview ofthe Vnode/Vfs Interface 238
8.7.2 Vnodes and Open Files 240
8.7.1 Objectives 240
8.7 Implementation Overview 240
8.7.3 The Vnode 241
8.7.4 Vnode Reference Count 242
8.7.5 The Vfs Object 243
8.8.1 The Per-File Private Data 244
8.8 File-System-Dependent Objects 244
8.8.2 The vnodeops Vector 245
8.8.3 File-System-Dependent Parts of the Vfs Layer 246
8.9.1 The Virtual File System Switch 247
8.9 Mounting a File System 247
8.9.2 mount Implementation 248
8.10.1 Pathname Traversal 249
8.10 Operations on Files 249
8.9.3 VFS_MOUNT Processing 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.7 User Credentials 253
8.10.6 File Attributes 253
8.10.5 File I/O 253
8.11 Analysis 254
8.11.1 Drawbacks ofthe SVR4 Implementation 255
8.11.2 The 4.4BSD Model 256
8.12 Summary 257
8.11.3 The OSF/1 Approach 257
8.13 Exercises 258
8.14 References 259
9.1 Introduction 261
9 FILE SYSTEM IMPLEMENTATIONS 261
9.2 The System Ⅴ File System(s5fs) 262
9.2.2 Inodes 263
9.2.1 Directories 263
9.2.3 The Superblock 266
9.3.2 Inode Lookup 267
9.3.1 In-Core Inodes 267
9.3 S5fs Kernel Organization 267
9.3.3 File I/O 268
9.3.4 Allocating and Reclaiming Inodes 270
9.4 Analysis of s5fs 271
9.6 Hard Disk Structure 272
9.5 The Berkeley Fast File System 272
9.7.1 Blocks and Fragments 273
9.7 On-Disk Organization 273
9.7.2 Allocation Policies 274
9.8 FFS Functionality Enhancements 275
9.9 Analysis 276
9.10.1 The Memory File System 278
9.10 Temporary File Systems 278
9.10.2 The tmpfs File System 279
9.11.1 The Specfs File System 280
9.11 Special-Purpose File Systems 280
9.11.2 The/proc File System 281
9.11.4 The Translucent File System 283
9.11.3 The Processor File System 283
9.12 The Old Buffer Cache 284
9.12.1 Basic Operation 285
9.12.3 Advantages 286
9.12.2 Buffer Headers 286
9.12.5 Ensuring File System Consistency 287
9.12.4 Disadvantages 287
9.14 Exercises 288
9.13 Summary 288
9.15 References 289
10.1 Introduction 291
10 DISTRIBUTED FILE SYSTEMS 291
10.2.1 Design Considerations 292
10.2 GeneraI Characteristics of Distributed File Systems 292
10.3 Network File System(NFS) 293
10.3.2 Design Goals 294
10.3.1 User Perspective 294
10.3.3 NFS Components 295
10.3.4 Statelessness 297
10.4.1 Extended Data Representation(XDR) 298
10.4 The Protocol Suite 298
10.4.2 Remote Procedure Calls(RPC) 300
10.5 NFS Implementation 301
10.5.2 File Handles 302
10.5.1 Control Flow 302
10.5.4 Pathname Lookup 303
10.5.3 The Mount Operation 303
10.6.1 Open File Permissions 304
10.6 UNIX Semantics 304
10.6.3 Reads and Writes 305
10.6.2 Deletion of Open Files 305
10.7.2 Client-Side Caching 306
10.7.1 Performance Bottlenecks 306
10.7 NFS Performance 306
10.7.3 Deferral ofWrites 307
10.7.4 The Retransmissions Cache 308
10.8.1 The Auspex Functional Multiprocessor Architecture 309
10.8 Dedicated NFS Servers 309
10.8.2 IBM's HA-NFS Server 310
10.9.1 NFS Access Control 312
10.9 NFS Security 312
10.9.3 Root Remapping 313
10.9.2 UID Remapping 313
10.10 NFS Version 3 314
10.12 RFS Architecture 315
10.11 Remote File Sharing(RFS) 315
10.12.1 Remote Message Protocol 316
10.13.1 Remote Mount 317
10.13 RFS Implementation 317
10.12.2 Stateful Operation 317
10.13.2 RFS Clients and Servers 319
10.13.3 Crash Recovery 320
10.14 Client-Side Caching 321
10.13.4 Other Issues 321
10.14.1 Cache Consistency 322
10.15.1 Scalable Architecture 323
10.15 The Andrew File System 323
10.15.2 Storage and Name Space Organization 324
10.15.3 Session Semantics 325
10.16.1 Caching and Consistency 326
10.16 AFS Implementation 326
10.16.3 Security 327
10.16.2 Pathname Lookup 327
10.17 AFS Shortcomings 328
10.18.1 DFS Architecture 329
10.18 The DCE Distributed File System(DCE DFS) 329
10.18.2 Cache Consistency 330
10.18.4 Other DFS Services 332
10.18.3 The Token Manager 332
10.18.5 Analysis 333
10.20 Exercises 334
10.19 Summary 334
10.21 References 335
11.1 Introduction 338
11 ADVANCED FILE SYSTEMS 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.4 Crash Recovery 342
11.2.3 Metadata Updates 342
11.3 File System Clustering(Sun-FFS) 343
11.4.1 Basic Characteristics 344
11.4 The Journaling Approach 344
11.5 Log-Structured File Systems 345
11.6 The 4.4BSD Log-Structured File System 346
11.6.2 Data Retrieval 347
11.6.1 Writing the Log 347
11.6.3 Crash Recovery 348
11.6.5 Analysis 349
11.6.4 The Cleaner Process 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.4 Other Features 358
11.8.3 Logging 358
11.9 Watchdogs 359
11.9.2 Message Channels 360
11.9.1 Directory Watchdogs 360
11.9.3 Applications 361
11.10 The 4.4BSD Portal File System 362
11.10.1 Using Portals 363
11.11.1 Framework and Interface 364
11.11 Stackable File System Layers 364
11.11.2 The SunSoft Prototype 366
11.12 The 4.4BSD File System Interface 367
11.14 Exercises 368
11.13 Summary 368
11.12.1 The Nullfs and Union Mount File Systems 368
11.15 References 369
12.1 Introduction 372
12 KERNEL MEMORY ALLOCATION 372
12.2.1 Evaluation Criteria 374
12.2 Functional Requirements 374
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.6 The Buddy System 383
12.5.1 Analysis 383
12.6.1 Analysis 385
12.7.1 Lazy Coalescing 386
12.7 The SVR4 Lazy Buddy Algorithm 386
12.7.2 SVR4 Implementation Details 387
12.8.1 Garbage Collection 388
12.8 The Mach-OSF/1 Zone Allocator 388
12.8.2 Analysis 389
12.9 A Hierarchical Allocator for Multiprocessors 390
12.10.1 Object Reuse 392
12.10 The Solaris 2.4 Slab Allocator 392
12.9.1 Analysis 392
12.10.2 Hardware Cache Utilization 393
12.10.4 Design and Interfaces 394
12.10.3 Allocator Footprint 394
12.10.5 Implementation 395
12.10.6 Analysis 396
12.11 Summary 397
12.12 Exercises 398
12.13 References 399
13.1 Introduction 400
13 VIRTUAL MEMORY 400
13.1.1 Memory Management in the Stone Age 401
13.2.1 Functional Requirements 404
13.2 Demand Paging 404
13.2.2 The Virtual Address Space 406
13.2.4 The Swap Area 407
13.2.3 Initial Access to a Page 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.1 Physical Memory 421
13.4 4.3BSD—A Case Study 421
13.4.2 The Address Space 423
13.4.3 Where IsthePage? 424
13.4.4 Swap Space 426
13.5.1 Process Creation 427
13.5 4.3BSD Memory Management Operations 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.1 Motivation 437
14 THE SVR4 VM ARCHITECTURE 437
14.2 Memory-Mapped Files 438
14.3 VM Design Principles 440
14.2.1 mmap and Related System Calls 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.1 seg_vn 448
14.5 Segment Drivers 448
14.5.2 seg_map 449
14.5.5 seg_kp 450
14.5.4 seg_kmem 450
14.5.3 seg_dev 450
14.6 The Swap Layer 451
14.7 VM Operations 452
14.7.2 Anonymous Page Handling 453
14.7.1 Creating a New Mapping 453
14.7.4 Sharing Anonymous Pages 455
14.7.3 Process Creation 455
14.7.5 Page Fault Handling 457
14.7.6 Shared Memory 458
14.7.7 Other Components 459
14.8.1 Vnode Interface Changes 460
14.8 Interaction with the Vnode Subsystem 460
14.8.2 Unifying File Access 461
14.8.3 Miscellaneous Issues 463
14.9.2 Virtual Swap Management 464
14.9.1 Extended Swap Space 464
14.9 Virtual Swap Space in Solaris 464
14.10 Analysis 466
14.9.3 Discussion 466
14.11.1 Causes of High Fault Rates 468
14.11 Performance Improvements 468
14.11.2 SVR4 Enhancements to the SunOS VM Implementation 469
14.12 Summary 470
14.11.3 Results and Discussion 470
14.14 References 471
14.13 Exercises 471
15.2 Mach Memory Management Design 473
15.1 Introduction 473
15 MORE MEMORY MANAGEMENT TOPICS 473
15.2.2 Programming Interface 474
15.2.1 Design Goals 474
15.2.3 Fundamental Abstractions 476
15.3.1 Copy-on-Write Sharing 478
15.3 Memory Sharing Facilities 478
15.3.2 Read-Write Sharing 480
15.4.1 Memory Object Initialization 481
15.4 Memory Objects and Pagers 481
15.4.2 Interface between the Kernel and the Pager 482
15.5 External and Internal Pagers 484
15.4.3 Kernel-Pager Interactions 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.10 TLB Shootdown in Mach 494
15.9.2 Multiprocessor Issues 494
15.10.1 Synchronization and Deadlock Avoidance 495
15.10.2 Discussion 496
15.11.1 SVR4/MP 497
15.11 TLB Consistency in SVR4 and SVR4.2 UNIX 497
15.11.2 SVR4.2/MP 498
15.11.3 Lazy Shootdowns 499
15.11.5 Discussion 500
15.11.4 Immediate Shootdowns 500
15.12 Other TLB Consistency Algorithms 501
15.13 Virtually Addressed Caches 502
15.13.1 Mapping Changes 504
15.13.3 DMA Operations 505
15.13.2 Address Aliases 505
15.13.4 Maintaining Cache Consistency 506
15.14 Exercises 507
15.13.5 Analysis 507
15.15 References 508
16.2 Overview 511
16.1 Introduction 511
16 DEVICE DRIVERS AND I/O 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 select 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.4.5 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.7 Memory Allocation 568
17.7.1 Extended STREAMS Buffers 570
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