书籍详情

UNIX系统编程:通信、并发与线程(英文版)

UNIX系统编程:通信、并发与线程(英文版)

作者:[美] Kay A. Robbins(凯罗-宾斯),Steve,Robbins(史蒂夫??罗宾斯) 著;[美] Kay,A.,Robbins(凯罗-宾斯) 译

出版社:电子工业出版社

出版时间:2017-03-01

ISBN:9787121308536

定价:¥198.00

购买这本书可以去
内容简介
  本书是一本基于*新UNIX 标准的完备的参考书,对UNIX 编程的要点进行了清晰易懂的介绍,从一些用于说明如何使用系统调用的短小代码段开始,逐渐过渡到能帮助读者扩展自己技能水平的实际项目中。书中对通信、并发和线程问题进行了深入探讨,对复杂的概念,例如信号和并发,进行了全面且清晰的解释。本书还覆盖了与文件、信号、信号量、POSIX 线程和客户机―服务器通信相关的内容。书中不仅提供了大量实例和练习,还专门设计了有针对性的项目并给出了参考答案。
作者简介
  无(影印版无译者……………………………………………………………………………………………………………………) Kay A. Robbins , Steve Robbins (凯罗??宾斯,史蒂夫??罗宾斯)拥有麻省理工学院博士学位,就任于德州大学圣安东尼奥分校计算机学院。
目录
Contents
I Fundamentals 1
1 Technology’s Impact on Programs 3
1.1 TerminologyofChange . . . . . . . . . . . . . . . . . . . . . 4
1.2 Time andSpeed . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Multiprogramming and Time Sharing . . . . . . . . . . . . . . 7
1.4 Concurrency at the Applications Level . . . . . . . . . . . . . 9
1.5 Security and Fault Tolerance . . . . . . . . . . . . . . . . . . 13
1.6 Buffer Overflows for Breaking and Entering . . . . . . . . . . 14
1.7 UNIXStandards . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.8 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 20
2 Programs, Processes and Threads 21
2.1 How a Program Becomes a Process . . . . . . . . . . . . . . . 22
2.2 Threads andThreadofExecution . . . . . . . . . . . . . . . . 23
2.3 Layout of a Program Image . . . . . . . . . . . . . . . . . . . 24
2.4 LibraryFunctionCalls . . . . . . . . . . . . . . . . . . . . . 26
2.5 Function Return Values and Errors . . . . . . . . . . . . . . . 29
2.6 ArgumentArrays . . . . . . . . . . . . . . . . . . . . . . . . 31
2.7 Thread-SafeFunctions . . . . . . . . . . . . . . . . . . . . . 38
2.8 UseofStaticVariables . . . . . . . . . . . . . . . . . . . . . 40
2.9 StructureofStaticObjects . . . . . . . . . . . . . . . . . . . 42
2.10 Process Environment . . . . . . . . . . . . . . . . . . . . . . 48
2.11 Process Termination . . . . . . . . . . . . . . . . . . . . . . . 51
2.12 Exercise: An env Utility . . . . . . . . . . . . . . . . . . . 54
2.13 Exercise: Message Logging . . . . . . . . . . . . . . . . . . . 55
2.14 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 56
3 Processes in UNIX 59
3.1 Process Identification . . . . . . . . . . . . . . . . . . . . . . 60
3.2 ProcessState . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.3 UNIX Process Creation and fork . . . . . . . . . . . . . . . 64
3.4 The wait Function . . . . . . . . . . . . . . . . . . . . . . 71
3.5 The exec Function . . . . . . . . . . . . . . . . . . . . . . 78
3.6 Background Processes and Daemons . . . . . . . . . . . . . . 84
3.7 Critical Sections . . . . . . . . . . . . . . . . . . . . . . . . . 86
3.8 Exercise: Process Chains . . . . . . . . . . . . . . . . . . . . 87
3.9 Exercise: Process Fans . . . . . . . . . . . . . . . . . . . . . 88
3.10 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 89
4 UNIX I/O 91
4.1 DeviceTerminology . . . . . . . . . . . . . . . . . . . . . . . 92
4.2 Reading and Writing . . . . . . . . . . . . . . . . . . . . . . 92
4.3 OpeningandClosingFiles . . . . . . . . . . . . . . . . . . . 102
4.4 The select Function . . . . . . . . . . . . . . . . . . . . . 107
4.5 The pollFunction . . . . . . . . . . . . . . . . . . . . . . . 116
4.6 File Representation . . . . . . . . . . . . . . . . . . . . . . . 119
4.7 Filters and Redirection . . . . . . . . . . . . . . . . . . . . . 128
4.8 FileControl . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
4.9 Exercise: Atomic Logging . . . . . . . . . . . . . . . . . . . 135
4.10 Exercise: A cat Utility . . . . . . . . . . . . . . . . . . . . 141
4.11 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 143
5 Files and Directories 145
5.1 UNIXFileSystemNavigation . . . . . . . . . . . . . . . . . 146
5.2 Directory Access . . . . . . . . . . . . . . . . . . . . . . . . 152
5.3 UNIX File System Implementation . . . . . . . . . . . . . . . 158
5.4 Hard Links and Symbolic Links . . . . . . . . . . . . . . . . 162
5.5 Exercise: The which Command . . . . . . . . . . . . . . . 173
5.6 Exercise: Biffing . . . . . . . . . . . . . . . . . . . . . . . . 174
5.7 Exercise: News biff . . . . . . . . . . . . . . . . . . . . . 177
5.8 Exercise: Traversing Directories . . . . . . . . . . . . . . . . 179
5.9 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 181
6 UNIX Special Files 183
6.1 Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
6.2 Pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
6.3 FIFOs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
6.4 Pipes and the Client-Server Model . . . . . . . . . . . . . . . 196
6.5 TerminalControl . . . . . . . . . . . . . . . . . . . . . . . . 203
6.6 AudioDevice . . . . . . . . . . . . . . . . . . . . . . . . . . 214
6.7 Exercise:Audio . . . . . . . . . . . . . . . . . . . . . . . . . 219
6.8 Exercise: Barriers . . . . . . . . . . . . . . . . . . . . . . . . 221
6.9 Exercise: The stty Command . . . . . . . . . . . . . . . . 223
6.10 Exercise: Client-Server Revisited . . . . . . . . . . . . . . . . 223
6.11 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 223
7 Project: The Token Ring 225
7.1 RingTopology . . . . . . . . . . . . . . . . . . . . . . . . . . 226
7.2 RingFormation . . . . . . . . . . . . . . . . . . . . . . . . . 227
7.3 RingExploration . . . . . . . . . . . . . . . . . . . . . . . . 234
7.4 SimpleCommunication . . . . . . . . . . . . . . . . . . . . . 236
7.5 MutualExclusionwithTokens . . . . . . . . . . . . . . . . . 237
7.6 MutualExclusionbyVoting . . . . . . . . . . . . . . . . . . . 238
7.7 Leader Election on an Anonymous Ring . . . . . . . . . . . . 239
7.8 TokenRingforCommunication . . . . . . . . . . . . . . . . . 241
7.9 Pipelined Preprocessor . . . . . . . . . . . . . . . . . . . . . 243
7.10 Parallel Ring Algorithms . . . . . . . . . . . . . . . . . . . . 246
7.11 FlexibleRing . . . . . . . . . . . . . . . . . . . . . . . . . . 250
7.12 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 251
II Asynchronous Events 253
8 Signals 255
8.1 BasicSignalConcepts . . . . . . . . . . . . . . . . . . . . . . 256
8.2 GeneratingSignals . . . . . . . . . . . . . . . . . . . . . . . 256
8.3 Manipulating Signal Masks and Signal Sets . . . . . . . . . . 261
8.4 Catching and Ignoring Signals―sigaction . . . . . . . . . 267
8.5 Waiting for Signals―pause, sigsuspend and sigwait 273
8.6 Handling Signals: Errors and Async-signal Safety . . . . . . . 283
8.7 Program Control with siglongjmp and sigsetjmp . . . 286
8.8 Programming with Asynchronous I/O . . . . . . . . . . . . . 288
8.9 Exercise:DumpingStatistics . . . . . . . . . . . . . . . . . . 299
8.10 Exercise: Spooling a Slow Device . . . . . . . . . . . . . . . 299
8.11 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 300
9 Times and Timers 301
9.1 POSIXTimes . . . . . . . . . . . . . . . . . . . . . . . . . . 302
9.2 SleepFunctions . . . . . . . . . . . . . . . . . . . . . . . . . 314
9.3 POSIX:XSI IntervalTimers . . . . . . . . . . . . . . . . . . . 315
9.4 Realtime Signals . . . . . . . . . . . . . . . . . . . . . . . . 320
9.5 POSIX:TMRIntervalTimers . . . . . . . . . . . . . . . . . . 324
9.6 Timer Drift, Overruns and Absolute Time . . . . . . . . . . . 329
9.7 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 339
10 Project: Virtual Timers 341
10.1 ProjectOverview . . . . . . . . . . . . . . . . . . . . . . . . 342
10.2 SimpleTimers . . . . . . . . . . . . . . . . . . . . . . . . . . 344
10.3 Setting One of Five Single Timers . . . . . . . . . . . . . . . 347
10.4 Using Multiple Timers . . . . . . . . . . . . . . . . . . . . . 357
10.5 A Robust Implementation of Multiple Timers . . . . . . . . . 363
10.6 POSIX:TMRTimer Implementation . . . . . . . . . . . . . . 367
10.7 mycron, a Small Cron Facility . . . . . . . . . . . . . . . . . 367
10.8 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 368
11 Project: Cracking Shells 369
11.1 BuildingaSimpleShell . . . . . . . . . . . . . . . . . . . . . 370
11.2 Redirection . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
11.3 Pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
11.4 Signal Handling in the Foreground . . . . . . . . . . . . . . . 380
11.5 Process Groups, Sessions and Controlling Terminals . . . . . . 386
11.6 Background Processes in ush . . . . . . . . . . . . . . . . . 391
11.7 JobControl . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
11.8 Job Control for ush . . . . . . . . . . . . . . . . . . . . . . 402
11.9 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 405
III Concurrency 407
12 POSIX Threads 409
12.1 A Motivating Problem: Monitoring File Descriptors . . . . . . 410
12.2 Use of Threads to Monitor Multiple File Descriptors . . . . . . 411
12.3 ThreadManagement . . . . . . . . . . . . . . . . . . . . . . 415
12.4 ThreadSafety . . . . . . . . . . . . . . . . . . . . . . . . . . 431
12.5 User Threads versus Kernel Threads . . . . . . . . . . . . . . 433
12.6 Thread Attributes . . . . . . . . . . . . . . . . . . . . . . . . 436
12.7 Exercise: ParallelFileCopy . . . . . . . . . . . . . . . . . . . 443
12.8 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 444
13 Thread Synchronization 447
13.1 POSIX Synchronization Functions . . . . . . . . . . . . . . . 448
13.2 MutexLocks . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
13.3 At-Most-Once and At-Least-Once-Execution . . . . . . . . . 461
13.4 Condition Variables . . . . . . . . . . . . . . . . . . . . . . . 465
13.5 Signal Handling and Threads . . . . . . . . . . . . . . . . . . 473
13.6 Readers and Writers . . . . . . . . . . . . . . . . . . . . . . . 478
13.7 A strerror_r Implementation . . . . . . . . . . . . . . . 483
13.8 Deadlocks and Other Pesky Problems . . . . . . . . . . . . . 483
13.9 Exercise: Multiple Barriers . . . . . . . . . . . . . . . . . . . 485
13.10 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 486
14 Critical Sections and Semaphores 487
14.1 Dealing with Critical Sections . . . . . . . . . . . . . . . . . 488
14.2 Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
14.3 POSIX:SEM Unnamed Semaphores . . . . . . . . . . . . . . 494
14.4 POSIX:SEM Semaphore Operations . . . . . . . . . . . . . . 496
14.5 POSIX:SEM Named Semaphores . . . . . . . . . . . . . . . . 502
14.6 Exercise: LicenseManager . . . . . . . . . . . . . . . . . . . 507
14.7 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 509
15 POSIX IPC 511
15.1 POSIX:XSI Interprocess Communication . . . . . . . . . . . 512
15.2 POSIX:XSI Semaphore Sets . . . . . . . . . . . . . . . . . . 514
15.3 POSIX:XSISharedMemory . . . . . . . . . . . . . . . . . . 525
15.4 POSIX:XSI Message Queues . . . . . . . . . . . . . . . . . . 535
15.5 Exercise: POSIX Unnamed Semaphores . . . . . . . . . . . . 542
15.6 Exercise: POSIX Named Semaphores . . . . . . . . . . . . . 543
15.7 Exercise: Implementing Pipes with Shared Memory . . . . . . 544
15.8 Exercise: Implementing Pipes with Message Queues . . . . . 547
15.9 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 548
16 Project: Producer Consumer Synchronization 549
16.1 The Producer-Consumer Problem . . . . . . . . . . . . . . . . 550
16.2 Bounded Buffer Protected by Mutex Locks . . . . . . . . . . . 551
16.3 Buffer Implementation with Semaphores . . . . . . . . . . . . 555
16.4 Introduction to a Simple Producer-Consumer Problem . . . . . 560
16.5 Bounded Buffer Implementation Using Condition Variables . . 564
16.6 Buffers with Done Conditions . . . . . . . . . . . . . . . . . 565
16.7 ParallelFileCopy . . . . . . . . . . . . . . . . . . . . . . . . 573
16.8 ThreadedPrintServer . . . . . . . . . . . . . . . . . . . . . . 575
16.9 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 580
17 Project: The Not Too Parallel Virtual Machine 581
17.1 PVM History, Terminology, and Architecture . . . . . . . . . 582
17.2 The Not Too Parallel Virtual Machine . . . . . . . . . . . . . 584
17.3 NTPVMProjectOverview . . . . . . . . . . . . . . . . . . . 585
17.4 I/OandTestingofDispatcher . . . . . . . . . . . . . . . . . . 591
17.5 Single Task with No Input . . . . . . . . . . . . . . . . . . . . 600
17.6 SequentialTasks . . . . . . . . . . . . . . . . . . . . . . . . . 601
17.7 ConcurrentTasks . . . . . . . . . . . . . . . . . . . . . . . . 604
17.8 Packet Communication, Broadcast and Barriers . . . . . . . . 605
17.9 TerminationandSignals . . . . . . . . . . . . . . . . . . . . . 605
17.10 Ordered Message Delivery . . . . . . . . . . . . . . . . . . . 606
17.11 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 606
IV Communication 607
18 Connection-Oriented Communication 609
18.1 TheClient-ServerModel . . . . . . . . . . . . . . . . . . . . 610
18.2 CommunicationChannels . . . . . . . . . . . . . . . . . . . . 610
18.3 Connection-Oriented Server Strategies . . . . . . . . . . . . . 614
18.4 Universal Internet Communication Interface (UICI) . . . . . . 618
18.5 UICI Implementations of Different Server Strategies . . . . . . 621
18.6 UICIClients . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
18.7 Socket ImplementationofUICI . . . . . . . . . . . . . . . . . 629
18.8 Host Names and IP Addresses . . . . . . . . . . . . . . . . . 641
18.9 Thread-SafeUICI . . . . . . . . . . . . . . . . . . . . . . . . 649
18.10 Exercise: PingServer . . . . . . . . . . . . . . . . . . . . . . 652
18.11 Exercise: Transmission of Audio . . . . . . . . . . . . . . . . 653
18.12 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 655
19 Project: WWWRedirection 657
19.1 TheWorldWideWeb . . . . . . . . . . . . . . . . . . . . . . 658
19.2 Uniform Resource Locators (URLs) . . . . . . . . . . . . . . 658
19.3 HTTPPrimer . . . . . . . . . . . . . . . . . . . . . . . . . . 660
19.4 WebCommunicationPatterns . . . . . . . . . . . . . . . . . . 665
19.5 Pass-through Monitoring of Single Connections . . . . . . . . 672
19.6 Tunnel Server Implementation . . . . . . . . . . . . . . . . . 674
19.7 ServerDriver forTesting . . . . . . . . . . . . . . . . . . . . 675
19.8 HTTPHeaderParsing . . . . . . . . . . . . . . . . . . . . . . 676
19.9 SimpleProxyServer . . . . . . . . . . . . . . . . . . . . . . 679
19.10 ProxyMonitor . . . . . . . . . . . . . . . . . . . . . . . . . . 680
19.11 ProxyCache . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
19.12 Gateways asPortals . . . . . . . . . . . . . . . . . . . . . . . 684
19.13 GatewayforLoadBalancing . . . . . . . . . . . . . . . . . . 685
19.14 Postmortem . . . . . . . . . . . . . . . . . . . . . . . . . . . 686
19.15 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 690
20 Connectionless Communication and Multicast 691
20.1 Introduction to Connectionless Communication . . . . . . . . 692
20.2 Simplified Interface for Connectionless Communication . . . . 693
20.3 Simple-RequestProtocols . . . . . . . . . . . . . . . . . . . . 697
20.4 Request-ReplyProtocols . . . . . . . . . . . . . . . . . . . . 702
20.5 Request-Reply with Timeouts and Retries . . . . . . . . . . . 708
20.6 Request-Reply-Acknowledge Protocols . . . . . . . . . . . . 714
20.7 ImplementationofUICIUDP . . . . . . . . . . . . . . . . . . 715
20.8 ComparisonofUDPandTCP . . . . . . . . . . . . . . . . . . 724
20.9 Multicast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
20.10 Exercise:UDPPortServer . . . . . . . . . . . . . . . . . . . 729
20.11 Exercise: StatelessFileServer . . . . . . . . . . . . . . . . . 730
20.12 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 732
21 Project: Internet Radio 733
21.1 ProjectOverview . . . . . . . . . . . . . . . . . . . . . . . . 734
21.2 AudioDeviceSimulation . . . . . . . . . . . . . . . . . . . . 735
21.3 UDP Implementation with One Program and One Receiver . . 735
21.4 UDP Implementation with Multiple Programs and Receivers . 746
21.5 UDP Implementation of Radio Broadcasts . . . . . . . . . . . 747
21.6 Multicast Implementation of Radio Broadcasts . . . . . . . . . 750
21.7 TCPImplementationDifferences . . . . . . . . . . . . . . . . 750
21.8 Receiving Streaming Audio Through a Browser . . . . . . . . 755
21.9 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 759
22 Project: Server Performance 761
22.1 ServerPerformanceCosts . . . . . . . . . . . . . . . . . . . . 762
22.2 ServerArchitectures . . . . . . . . . . . . . . . . . . . . . . . 762
22.3 ProjectOverview . . . . . . . . . . . . . . . . . . . . . . . . 767
22.4 Single-ClientDriver . . . . . . . . . . . . . . . . . . . . . . . 767
22.5 Multiple-Client Driver . . . . . . . . . . . . . . . . . . . . . . 771
22.6 Thread-per-request and Process-per-request Implementations . 774
22.7 Thread-worker-pool Strategy . . . . . . . . . . . . . . . . . . 774
22.8 Thread-worker Pool with Bounded Buffer . . . . . . . . . . . 775
22.9 Process-worker Pool . . . . . . . . . . . . . . . . . . . . . . . 775
22.10 InfluenceofDiskI/O . . . . . . . . . . . . . . . . . . . . . . 776
22.11 PerformanceStudies . . . . . . . . . . . . . . . . . . . . . . 780
22.12 Report Writing . . . . . . . . . . . . . . . . . . . . . . . . . 790
22.13 AdditionalReading . . . . . . . . . . . . . . . . . . . . . . . 792
猜您喜欢

读书导航