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

UNIX系统编程:通信、并发与线程(英文版) pdf epub mobi txt 电子书 下载 2025

[美] Kay A. Robbins(凯罗·宾斯),Steve Robbins(史蒂夫·罗宾斯) 著
图书标签:
  • UNIX
  • 系统编程
  • 通信
  • 并发
  • 线程
  • POSIX
  • 多进程
  • 网络编程
  • 信号处理
  • 进程间通信
  • IPC
想要找书就要到 静思书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 电子工业出版社
ISBN:9787121308536
版次:1
商品编码:12058681
品牌:Broadview
包装:平装
丛书名: 原味精品书系
开本:16开
出版时间:2017-03-01
用纸:胶版纸
页数:904
字数:1175200
正文语种:英文

具体描述

编辑推荐

适读人群 :本书适合作为高等院校计算机专业教材,也可供软件开发人员参考使用。

√ 经典原味,UNIX必备宝典。

√ 基于*新UNIX标准的独立参考书,专业、全面、清晰。

√ 大量实例、练习、可重用的代码和用于网络通信应用程序的简化库。

√ 作者为麻省理工学院博士,现任德州大学圣安东尼奥分校计算机科学系讲师。


内容简介

本书是一本基于*新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

前言/序言

前言

本书是1995年由Prentice Hall出版社出版的Practical UNIX Programming: A Guide to Communication, Concurrency and Multithreading一书的第二版。为了更好地传达本书的内容,我们将书名修改为UNIX Systems Programming: Communication, Concurrency and Threads。与上一版相比,第二版不仅改变了书名,还对很多内容进行了修改。

互联网已经成为计算和社会领域的一个主导方面。私人信息已经联网,软件经常会受到不停的攻击。因此,编写正确的代码显得尤为重要。在这一版中,我们尝试尽量生成能够正确处理错误和特殊情况的代码。我们已经意识到,声称处理了所有的错误、但在给出的代码中却省略错误处理是没有效果的。不幸的是,错误处理会让代码变得更复杂,所以我们努力让代码变得更加清晰。

本书对第一版的另一个重要改进是采用了单一的UNIX规范,我们将其称为POSIX。我们再也不需要决定使用哪个厂商的库函数了——现在有正式的版本了。我们已经尽了最大努力来遵循这个标准。

练习和项目让本书变得与众不同。实际上,本书由美国国家科学基金会(National Science Foundation Grant)项目手册的一部分发展而来。在完成这个项目的初期开发后,我们逐渐认识到:完成这个项目所需要的资料分散在不同的地方——通常可以在提供了大量细节、但几乎没有概念陈述的参考书中找到。因此,本书逐渐成为一本基于最新UNIX标准的完整参考书。

本书分为4个部分,每个部分都包含主题章节和项目章节。主题章节以循序渐进的方式涵盖了指定的内容,并以“试试看”和“看看会发生什么”的形式包含了很多示例和小练习。最后都以一个或者多个练习小节结束。本书还为进程管理、并发和通信的基本概念提供了很多编程练习。这些编程练习与传统科学课程中的实验作用相同,只有通过实践才能真正理解书中的概念。这些练习由易到难,很多练习只需要不到100行代码就能实现。

下表对本书的结构进行了总结——21个章节被分为4个部分。其中的15个主题章节与8个项目章节相互独立。第一次通读本书时可以跳过项目章节。





部分 主题章节 项目章节

第一部分:基础知识 第1章 技术对程序的影响

第2章 程序

第3章UNIX中的进程

第4章UNIX I/O

第5章 文件和目录

第6章 UNIX特殊文件 第7章 令牌环

第二部分:异步事件 第8章 信号

第9章 时间和定时器 第10章 虚拟定时器

第11章 破解命令解释程序

第三部分:并发 第12章POSIX线程

第13章 进程同步

第14章 信号量

第15章 POSIX IPC 第16章 生产者消费者

第17章 虚拟机

第四部分:通信 第18章 面向连接的通信

第20章 无连接通信 第19章 WWW重定向

第21章 互联网广播

第22章 服务器性能

项目章节通过开发一个规模较大的应用程序来整合几个主题章节的资料。这些项目包含两个层面:除了说明编程思想,还引导读者理解与应用程序相关的高级主题。这些项目都是分阶段设计的,大多数完整的实现都只需要几百行代码。由于不需要编写大量代码,因此读者可以将注意力集中在概念的理解,而不是代码调试上。为了简化编程,我们提供了可用于网络通信和输出日志记录的库。对专业的程序员来说,主题章节结尾部分的练习提供了对概念的基本介绍。通常,使用本书的教师可以从中挑选几个练习和一个项目章节让学生在一学期的课程中实现。每个项目都有多种变化,因此这些项目可以在多个学期反复使用。

读者可以用不同的方式阅读本书。第一部分的主题章节是阅读本书其他部分的基础。阅读完第一部分的主题章节后,读者可以以任何顺序阅读第二部分~第四部分的内容。但后继章节结尾部分关于交互的讨论除外(例如,线程如何与信号交互)。

本书读者应该是优秀的C程序员,但不一定是UNIX C的程序员。读者应该熟悉C语言编程和基本的数据结构。对于刚刚接触UNIX的读者来说,附录A中给出了程序开发的必备知识。

本书包含标准函数的概要。概要右下角列出了指定函数的相关标准。

本书的内容是有限的。欢迎读者给我们提出意见和建议,读者可以给我们写电子邮件authors@usp.cs.utsa.edu。虽然我们已经尽最大努力保证本书没有错误。但如果你是第一个向我们指出某个错误的人,我们会在本书的配套网站上对你表示诚挚的感谢。http://usp.cs.utsa.edu/usp上提供了本书的相关信息,从这个Web站点可以下载本书中的所有代码。

致谢

非常感谢Mike Speciner和Bob Lynch通读了本书的全部手稿,并提出了很多有用的建议。我们尤其要对Mary Lou Nohr细心睿智的编辑工作表示感谢。还要感谢Neal Wagner和Radia Perlman给予我们的鼓励和建议。

从1988年至今(2003年),我们为本科生和研究生开设了操作系统课程,本书中的很多材料都曾经作为这些教学课程的一部分内容。学习这些课程的学生们经历了书稿发展的不同阶段,并对不断出现的项目进行了现场测试。他们在编程中的bug、注释、抱怨和建议让本书变得更好,并让我们对如何将这些主题联系起来有了深刻的认识。发现了早期书稿中错误的学生有Joseph Bell、Carlos Cadenas、Igor Grinshpan、Jason Jendrusch和James Manion。我们要感谢美国国家科学基金会通过NSFILI授权的USE-0950497在我们组建实验室时所提供的支持,这样我们才有机会开展最初的课程,而本书正是根据这些课程编写的。NSF(DUE-975093、DUE-9752165和DUE-0088769)还为那些用于探讨和分析操作系统概念的工具提供了支持。

我们还要感谢Prentice Hall出版社的编辑Greg Doench,感谢他在整个过程中为我们提供指导。还要感谢出版编辑William Mara让本书得以出版。感谢LATEX2ε的制作者为我们提供了可以免费使用的排版软件。

我们还要感谢我们的家人,感谢他们给予我们无限的爱和支持,尤其要感谢我们的孩子Nicole和Thomas对这个艰巨的工程所展现出的热情和理解。



深度剖析现代操作系统内核与应用程序的交互艺术 本书旨在为那些渴望深入理解操作系统核心机制,并希望借此构建更强大、更可靠、更高效软件的开发者和系统工程师提供一份详尽的路线图。它不仅仅是一本关于特定命令或API的参考手册,更是一场关于计算机如何协调其内部活动、如何安全有效地分配稀缺资源、以及如何让多个任务协同工作的思想探索之旅。我们将抛开表面的抽象,深入到操作系统的最底层,探寻那些支撑起我们日常所用应用程序的精妙设计与实现。 第一部分:跨越进程界限的沟通桥梁——进程间通信(IPC) 在多任务操作系统中,进程是独立的执行单元,它们拥有各自独立的内存空间,这在保证安全性和稳定性的同时,也带来了信息共享和协同工作的挑战。本书将从最基础的进程间通信(IPC)机制入手,逐一剖析其工作原理、优缺点及适用场景,帮助读者构建起不同进程之间顺畅交流的能力。 管道(Pipes): 作为最古老、最基础的IPC机制之一,管道提供了一种单向的字节流通信方式。我们将详细讲解匿名管道(Unnamed Pipes)和命名管道(Named Pipes,也称为FIFO)的实现细节。匿名管道常用于父子进程间的通信,而命名管道则允许不相关的进程通过文件系统中的一个特殊文件进行通信。读者将学习如何创建、读写管道,理解其缓冲机制,以及在多管道场景下如何处理复杂的读写顺序和同步问题。我们将深入探讨管道的局限性,例如其单向性以及在网络环境下无法直接使用的限制。 消息队列(Message Queues): 消息队列提供了一种比管道更灵活的IPC方式,它允许进程发送和接收结构化的消息,而不是简单的字节流。我们将介绍POSIX消息队列和System V消息队列的差异,重点讲解消息的发送、接收、优先级以及如何管理消息队列的属性(如最大消息数、消息大小)。读者将学习如何处理消息的阻塞和非阻塞操作,以及如何通过消息队列实现进程间的异步通信,从而提高系统的响应速度和吞吐量。 共享内存(Shared Memory): 共享内存是最快的IPC机制之一,因为它允许多个进程直接访问同一块物理内存区域。我们将深入讲解共享内存的创建、映射、访问和解除映射过程。重点在于理解如何通过共享内存实现高效的数据交换,避免了数据在内核态和用户态之间频繁拷贝的开销。同时,我们也将详细阐述在使用共享内存时必须面对的挑战:数据竞争。我们将引出同步机制(如信号量、互斥锁)在保护共享内存区域中的数据一致性方面的重要性,并为后续的并发章节埋下伏笔。 套接字(Sockets): 套接字是实现网络通信和进程间通信的通用接口。本书将详细介绍套接字编程的基础,包括地址结构、套接字类型(TCP/IP的流式套接字、UDP/IP的数据报套接字)、套接字选项以及创建、绑定、监听、连接、读写和关闭套接字的过程。我们将重点区分面向连接(TCP)和无连接(UDP)套接字的特点,以及它们在不同应用场景下的优劣。此外,还会涉及Unix域套接字(Unix Domain Sockets),它允许在同一台主机上的进程间进行高效通信,其性能优于网络套接字,并且避免了网络协议栈的开销。 信号(Signals): 信号是一种异步的软件中断,用于通知进程发生了某个事件。我们将深入探讨不同类型的信号,如终止信号(SIGTERM)、中断信号(SIGINT)、段错误信号(SIGSEGV)等。读者将学习如何捕捉、忽略或使用默认处理方式来响应信号,以及如何通过发送信号来协调进程的行为。信号在进程管理、异常处理以及实现简单的进程间通知方面扮演着关键角色。 第二部分:并发世界的基石——线程模型与同步机制 当今的应用程序越来越依赖于并发执行来提高响应速度和利用多处理器系统的能力。本部分将带领读者深入线程的世界,理解并发的本质,并掌握管理并发执行的关键工具——同步机制。 线程模型: 我们将区分用户级线程(User-Level Threads)和内核级线程(Kernel-Level Threads),并探讨它们的实现方式、性能特点和调度策略。本书将重点关注POSIX线程(pthreads)标准,这是Linux及许多Unix-like系统中广泛使用的线程API。读者将学习如何创建、管理和销毁线程,理解线程的生命周期,以及如何传递参数给线程函数。 线程同步: 随着多线程程序的普及,数据竞争成为最棘手的问题之一。本书将全面而深入地讲解各种同步机制,以确保多线程访问共享数据时的安全性和一致性。 互斥锁(Mutexes): 作为最基本的同步原语,互斥锁用于保护共享资源,确保同一时间只有一个线程能够访问。我们将详细讲解互斥锁的初始化、加锁、解锁操作,以及死锁(Deadlock)的产生原因和避免策略。 条件变量(Condition Variables): 条件变量与互斥锁配合使用,允许线程在特定条件满足之前阻塞等待。我们将深入剖析条件变量的`wait`、`signal`和`broadcast`操作,以及它们在实现生产者-消费者模型、线程间的协调等待等场景下的应用。 读写锁(Read-Write Locks): 读写锁是针对读多写少场景优化的同步机制,它允许多个读线程并发访问,但只允许一个写线程独占访问。我们将讲解读写锁的优势,以及其实现原理。 信号量(Semaphores): 信号量是一种更通用的同步机制,它可以用于控制对有限资源的访问,或者作为进程间同步的工具。我们将介绍二元信号量(Binary Semaphores)和计数信号量(Counting Semaphores),并展示它们在实现更复杂的同步模式中的应用。 原子操作(Atomic Operations): 在某些情况下,简单的原子操作(如原子增减、比较并交换)可以避免使用重量级的锁,从而提高性能。我们将介绍常见的原子操作函数及其使用场景。 线程安全与死锁: 本部分将强调编写线程安全代码的重要性。我们将深入分析死锁的四种必要条件(互斥、占有并等待、非抢占、循环等待),并提供多种避免死锁的策略,例如按序获取锁、设置锁超时、使用死锁检测算法等。 第三部分:进程与线程的生命周期管理与调度 操作系统如何创建、管理和调度进程与线程,直接影响着系统的整体性能和资源利用率。本部分将深入探究这些底层机制。 进程创建与终止: 我们将详细讲解`fork()`、`exec()`族函数和`wait()`族函数在进程创建和管理中的作用。读者将理解进程复制(copy-on-write)机制,以及`exec()`如何替换当前进程的镜像。同时,也将学习如何通过`wait()`和`waitpid()`来获取子进程的终止状态。 线程创建与管理: 回顾第一部分的线程模型,我们将聚焦于POSIX线程API,详细讲解`pthread_create()`、`pthread_join()`、`pthread_exit()`等核心函数。我们将探讨线程属性的设置,如线程优先级、调度策略(SCHED_FIFO, SCHED_RR, SCHED_OTHER)以及线程的detach状态。 调度器的工作原理: 尽管用户程序无法直接控制调度器,但理解其基本原理对于编写高效并发程序至关重要。我们将简要介绍进程和线程在内核中的表示,以及操作系统的调度算法(如分时调度、优先级调度),探讨其如何分配CPU时间片,以及如何处理进程/线程的阻塞和唤醒。 贯穿全书的实践导向 本书不仅仅是理论的堆砌,更注重实践。每一章都将配以清晰的代码示例,引导读者动手实践,将所学知识转化为实际的编程能力。我们将使用C语言和标准库函数,力求代码的清晰、可移植性和高效性。通过大量的实例,读者将能够: 构建高性能的网络服务: 利用套接字和多线程技术,开发能够同时处理大量客户端请求的服务器程序。 实现高效的数据处理管道: 运用管道、共享内存等IPC机制,设计能够快速、高效地处理海量数据的批处理系统。 开发响应迅速的图形用户界面(GUI)应用程序: 通过线程来避免UI线程的阻塞,保持界面的流畅响应。 理解并解决复杂的并发难题: 识别和修复代码中的数据竞争、死锁等常见问题,提升程序的健壮性。 面向的读者 本书适合具备一定C语言编程基础,并对操作系统底层工作原理感兴趣的开发者、系统工程师、以及计算机科学专业的学生。无论你是希望提升现有应用程序性能,还是想深入理解Linux/Unix系统内部运作机制,本书都将为你提供宝贵的知识和实践指导。通过对本书的学习,你将不再满足于表面API的调用,而是能真正掌握操作系统提供的强大工具,驾驭并发与通信的复杂性,设计出真正高效、可靠的软件系统。

用户评价

评分

坦白说,当我拿到《UNIX系统编程:通信、并发与线程》(英文版)时,我并没有抱有多高的期望,因为我过去阅读的类似书籍,往往充斥着枯燥的代码和晦涩的理论。然而,这本书彻底颠覆了我的看法。作者的写作风格非常独特,他能够将那些看似复杂难懂的系统调用和内核概念,用一种极其生动、形象的方式呈现出来。我尤其喜欢他讲解的那些关于网络通信的部分,比如套接字编程(socket programming)。他并没有简单地罗列API,而是通过一个又一个实际的场景,比如客户端-服务器模型,一步步引导读者去理解 TCP/IP 协议栈的工作原理,以及如何在 UNIX 系统中实现高效的网络通信。书中对于阻塞与非阻塞 I/O、多路复用(select、poll、epoll)的讲解,让我对如何构建高性能的网络应用程序有了质的飞跃。我过去对于网络编程的理解,总是停留在“能用”的层面,而这本书则让我看到了“好用”、“高效”的边界。作者对于错误处理的强调,以及如何编写健壮的网络应用程序,也给了我很大的启发。总而言之,这本书不仅仅是一本技术手册,更像是一次充满智慧的旅程,让我对 UNIX 系统下的网络编程充满了敬畏和好奇。

评分

《UNIX系统编程:通信、并发与线程》(英文版)这本书,可以说是为我打开了新世界的大门。我一直对操作系统底层的运作方式充满好奇,但又不知从何下手。这本书恰好满足了我的需求,它将 UNIX 系统中的一些核心概念,如进程管理、信号处理、定时器等,进行了非常细致的讲解。作者的叙述方式非常清晰,他不会一开始就抛出大量复杂的术语,而是循序渐进,从最基础的概念开始,一步步构建起完整的知识体系。我特别欣赏书中对于进程间通信(IPC)各种方法的分析,它不仅解释了每种方法的原理,还深入探讨了它们的适用场景和潜在的性能影响。例如,它在讲解共享内存时,详细阐述了如何通过它实现高效的数据交换,以及需要注意的同步问题。在信号处理方面,作者对于不同信号的含义以及如何编写信号处理函数进行了详尽的阐述,这对于编写能够响应外部事件的程序至关重要。总的来说,这本书让我对 UNIX 系统的“骨架”有了更清晰的认识,让我能够更好地理解和编写那些与系统交互更紧密的应用程序。它是一本适合所有希望深入了解 UNIX 系统编程的读者的必读书籍。

评分

读完《UNIX系统编程:通信、并发与线程》(英文版)之后,我真是对 UNIX 内核的深邃之处有了前所未有的理解。这本书不仅仅是冰冷的代码堆砌,更像是一位经验丰富的工程师在细致地拆解一个庞大而精密的机器。在初次翻阅时,我对那些关于进程间通信(IPC)的各种机制,如管道、消息队列、共享内存和信号量,感到有些抽象,总觉得隔着一层纱。但随着阅读的深入,作者以其独特的叙事方式,将这些抽象的概念一步步具象化。那些看似复杂的系统调用,在作者的笔下变得清晰易懂。尤其是关于信号量的部分,它如何优雅地解决资源竞争问题,避免死锁,让我对并发编程的精妙有了全新的认识。书中的例子代码虽不长,却每一行都饱含深意,细细品味,仿佛能听见内核在低语,讲述着进程之间如何协作,如何共享信息,以及如何在有限的资源下高效运行。作者并没有回避那些令人头疼的细节,而是选择逐一剖析,这对于希望深入理解 UNIX 底层运作机制的读者来说,无疑是宝贵的财富。我特别欣赏书中对不同 IPC 机制优劣势的对比分析,这帮助我更好地在实际项目中做出技术选型,而不是盲目地使用某个“看起来很酷”的工具。整本书的叙述逻辑严谨,从基础概念到高级应用,层层递进,让我感觉每读完一章,都能向“UNIX 编程大师”迈进一大步。

评分

我得说,《UNIX系统编程:通信、并发与线程》(英文版)这本书,绝对是那些热衷于挖掘系统底层细节的程序员的福音。它没有那些花哨的UI或者高级框架,而是直接切入 UNIX 系统的核心。作者对于并发和线程模型的讲解,简直是我的“启蒙读物”。我过去对多线程的理解,总是模模糊糊,总觉得“线程安全”是一个难以捉摸的概念。但是,这本书通过大量的代码示例和深入的原理分析,让我彻底明白了其中的奥秘。尤其是对于互斥锁、条件变量和信号量的使用,作者用一种直观的方式解释了它们如何协同工作,如何防止数据竞争和死锁。我特别喜欢书中对“惊群效应”(thundering herd problem)的讨论,以及如何通过各种机制来规避它。这本书的叙述风格非常严谨,但又充满了工程师的实用主义精神。它不仅仅告诉你“怎么做”,更重要的是告诉你“为什么这么做”。这对于我这种喜欢刨根问底的读者来说,简直是如获至宝。这本书让我对编写高效、可靠的多线程程序充满了信心,也让我对 UNIX 系统有了更深刻的敬畏之情。

评分

我必须承认,《UNIX系统编程:通信、并发与线程》(英文版)这本书带给我的启发远超我的预期。我之前对并发编程的概念有一些零散的理解,但总感觉不够系统,容易陷入混乱。这本书就像一个精心设计的地图,为我指引了在多线程世界的方向。作者对于线程模型、线程同步机制(如互斥锁、条件变量、读写锁)的讲解,简直是教科书级别的。他不仅解释了这些机制是什么,更重要的是,他深入浅出地阐述了它们是如何工作的,以及在实际编程中可能遇到的陷阱。书中的很多案例,特别是关于如何避免竞态条件和死锁的讨论,让我受益匪浅。我之前经常在多线程环境下遇到难以捉摸的 bug,现在我明白,很多问题都源于对同步机制理解不深。通过阅读这本书,我学会了如何更有条理地思考并发问题,如何设计出更健壮的多线程程序。作者对于线程生命周期管理、线程池的运用等方面也有深入的阐述,这对于构建高性能、高并发的应用程序至关重要。最令我印象深刻的是,作者强调了“代码的清晰性和可维护性”在并发编程中的重要性,这让我意识到,技术上的精巧固然重要,但写出易于理解和维护的代码才是长久之计。这本书无疑是我在并发编程领域的一本“枕边书”,我时不时都会翻阅,从中汲取新的灵感。

评分

帮朋友买的好像不错 书纸质 讲解都还不错

评分

研究unix多线程的好书

评分

评分

研究unix多线程的好书

评分

不错不错不错

评分

帮朋友买的好像不错 书纸质 讲解都还不错

评分

内容详实,推荐购买研读

评分

不是书本身的问题,是京东快递包装的问题,包装粗糙,一大纸箱子装三本书,都只有一个塑料膜,这本最重要对厚重最贵重的书是破损最严重的,打开多出破坏磨损,像本旧书,很扫兴,还不如直接去买二手书。

评分

不是书本身的问题,是京东快递包装的问题,包装粗糙,一大纸箱子装三本书,都只有一个塑料膜,这本最重要对厚重最贵重的书是破损最严重的,打开多出破坏磨损,像本旧书,很扫兴,还不如直接去买二手书。

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有