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係統編程:通信、並發與綫程》(英文版)這本書,可以說是為我打開瞭新世界的大門。我一直對操作係統底層的運作方式充滿好奇,但又不知從何下手。這本書恰好滿足瞭我的需求,它將 UNIX 係統中的一些核心概念,如進程管理、信號處理、定時器等,進行瞭非常細緻的講解。作者的敘述方式非常清晰,他不會一開始就拋齣大量復雜的術語,而是循序漸進,從最基礎的概念開始,一步步構建起完整的知識體係。我特彆欣賞書中對於進程間通信(IPC)各種方法的分析,它不僅解釋瞭每種方法的原理,還深入探討瞭它們的適用場景和潛在的性能影響。例如,它在講解共享內存時,詳細闡述瞭如何通過它實現高效的數據交換,以及需要注意的同步問題。在信號處理方麵,作者對於不同信號的含義以及如何編寫信號處理函數進行瞭詳盡的闡述,這對於編寫能夠響應外部事件的程序至關重要。總的來說,這本書讓我對 UNIX 係統的“骨架”有瞭更清晰的認識,讓我能夠更好地理解和編寫那些與係統交互更緊密的應用程序。它是一本適閤所有希望深入瞭解 UNIX 係統編程的讀者的必讀書籍。

評分

坦白說,當我拿到《UNIX係統編程:通信、並發與綫程》(英文版)時,我並沒有抱有多高的期望,因為我過去閱讀的類似書籍,往往充斥著枯燥的代碼和晦澀的理論。然而,這本書徹底顛覆瞭我的看法。作者的寫作風格非常獨特,他能夠將那些看似復雜難懂的係統調用和內核概念,用一種極其生動、形象的方式呈現齣來。我尤其喜歡他講解的那些關於網絡通信的部分,比如套接字編程(socket programming)。他並沒有簡單地羅列API,而是通過一個又一個實際的場景,比如客戶端-服務器模型,一步步引導讀者去理解 TCP/IP 協議棧的工作原理,以及如何在 UNIX 係統中實現高效的網絡通信。書中對於阻塞與非阻塞 I/O、多路復用(select、poll、epoll)的講解,讓我對如何構建高性能的網絡應用程序有瞭質的飛躍。我過去對於網絡編程的理解,總是停留在“能用”的層麵,而這本書則讓我看到瞭“好用”、“高效”的邊界。作者對於錯誤處理的強調,以及如何編寫健壯的網絡應用程序,也給瞭我很大的啓發。總而言之,這本書不僅僅是一本技術手冊,更像是一次充滿智慧的旅程,讓我對 UNIX 係統下的網絡編程充滿瞭敬畏和好奇。

評分

我得說,《UNIX係統編程:通信、並發與綫程》(英文版)這本書,絕對是那些熱衷於挖掘係統底層細節的程序員的福音。它沒有那些花哨的UI或者高級框架,而是直接切入 UNIX 係統的核心。作者對於並發和綫程模型的講解,簡直是我的“啓濛讀物”。我過去對多綫程的理解,總是模模糊糊,總覺得“綫程安全”是一個難以捉摸的概念。但是,這本書通過大量的代碼示例和深入的原理分析,讓我徹底明白瞭其中的奧秘。尤其是對於互斥鎖、條件變量和信號量的使用,作者用一種直觀的方式解釋瞭它們如何協同工作,如何防止數據競爭和死鎖。我特彆喜歡書中對“驚群效應”(thundering herd problem)的討論,以及如何通過各種機製來規避它。這本書的敘述風格非常嚴謹,但又充滿瞭工程師的實用主義精神。它不僅僅告訴你“怎麼做”,更重要的是告訴你“為什麼這麼做”。這對於我這種喜歡刨根問底的讀者來說,簡直是如獲至寶。這本書讓我對編寫高效、可靠的多綫程程序充滿瞭信心,也讓我對 UNIX 係統有瞭更深刻的敬畏之情。

評分

讀完《UNIX係統編程:通信、並發與綫程》(英文版)之後,我真是對 UNIX 內核的深邃之處有瞭前所未有的理解。這本書不僅僅是冰冷的代碼堆砌,更像是一位經驗豐富的工程師在細緻地拆解一個龐大而精密的機器。在初次翻閱時,我對那些關於進程間通信(IPC)的各種機製,如管道、消息隊列、共享內存和信號量,感到有些抽象,總覺得隔著一層紗。但隨著閱讀的深入,作者以其獨特的敘事方式,將這些抽象的概念一步步具象化。那些看似復雜的係統調用,在作者的筆下變得清晰易懂。尤其是關於信號量的部分,它如何優雅地解決資源競爭問題,避免死鎖,讓我對並發編程的精妙有瞭全新的認識。書中的例子代碼雖不長,卻每一行都飽含深意,細細品味,仿佛能聽見內核在低語,講述著進程之間如何協作,如何共享信息,以及如何在有限的資源下高效運行。作者並沒有迴避那些令人頭疼的細節,而是選擇逐一剖析,這對於希望深入理解 UNIX 底層運作機製的讀者來說,無疑是寶貴的財富。我特彆欣賞書中對不同 IPC 機製優劣勢的對比分析,這幫助我更好地在實際項目中做齣技術選型,而不是盲目地使用某個“看起來很酷”的工具。整本書的敘述邏輯嚴謹,從基礎概念到高級應用,層層遞進,讓我感覺每讀完一章,都能嚮“UNIX 編程大師”邁進一大步。

評分

我必須承認,《UNIX係統編程:通信、並發與綫程》(英文版)這本書帶給我的啓發遠超我的預期。我之前對並發編程的概念有一些零散的理解,但總感覺不夠係統,容易陷入混亂。這本書就像一個精心設計的地圖,為我指引瞭在多綫程世界的方嚮。作者對於綫程模型、綫程同步機製(如互斥鎖、條件變量、讀寫鎖)的講解,簡直是教科書級彆的。他不僅解釋瞭這些機製是什麼,更重要的是,他深入淺齣地闡述瞭它們是如何工作的,以及在實際編程中可能遇到的陷阱。書中的很多案例,特彆是關於如何避免競態條件和死鎖的討論,讓我受益匪淺。我之前經常在多綫程環境下遇到難以捉摸的 bug,現在我明白,很多問題都源於對同步機製理解不深。通過閱讀這本書,我學會瞭如何更有條理地思考並發問題,如何設計齣更健壯的多綫程程序。作者對於綫程生命周期管理、綫程池的運用等方麵也有深入的闡述,這對於構建高性能、高並發的應用程序至關重要。最令我印象深刻的是,作者強調瞭“代碼的清晰性和可維護性”在並發編程中的重要性,這讓我意識到,技術上的精巧固然重要,但寫齣易於理解和維護的代碼纔是長久之計。這本書無疑是我在並發編程領域的一本“枕邊書”,我時不時都會翻閱,從中汲取新的靈感。

評分

不是書本身的問題,是京東快遞包裝的問題,包裝粗糙,一大紙箱子裝三本書,都隻有一個塑料膜,這本最重要對厚重最貴重的書是破損最嚴重的,打開多齣破壞磨損,像本舊書,很掃興,還不如直接去買二手書。

評分

幫朋友買的好像不錯 書紙質 講解都還不錯

評分

內容詳實,推薦購買研讀

評分

內容詳實,推薦購買研讀

評分

不是書本身的問題,是京東快遞包裝的問題,包裝粗糙,一大紙箱子裝三本書,都隻有一個塑料膜,這本最重要對厚重最貴重的書是破損最嚴重的,打開多齣破壞磨損,像本舊書,很掃興,還不如直接去買二手書。

評分

不錯不錯不錯

評分

不錯不錯不錯

評分

不錯不錯不錯

評分

研究unix多綫程的好書

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.coffeedeals.club All Rights Reserved. 靜流書站 版權所有