译者序 1
前言 1
第一篇基础知识 1
第1章并发 1
1.1多道程序设计和多重任务处理 1
目录 1
1.2应用层次上的并发 4
1.2.1 中断 4
1.2.2信号 4
1.2.3输入和输出 5
1.2.4线程和资源共享 5
1.2.5分布式计算网络 6
1.3 UNIX标准 6
1.4 UNIX中的编程 7
1.5使函数安全 14
1.7附加读物 16
1.6练习:参数数组 16
第2章程序和进程 18
2.1可执行程序的布局 18
2.2静态对象 21
2.3进程ID 25
2.4进程状态 26
2.5进程创建和UNIX fork 28
2.6 wait系统调用 31
2.7 exec系统调用 35
2.8后台进程和守护进程 39
2.9进程环境 41
2.10 UNIX中的进程终止 44
2.11临界区 45
2.12练习:进程链 46
2.14练习:简单的biff 48
2.13.2测试runsim程序 48
2.13.1 runsim的说明 48
2.13练习:进程扇 48
2.15练习:新闻biff 49
2.15.1 Biffing一个单个文件 50
2.15.2列表对象的创建 50
2.16附加读物 51
第3章文件 52
3.1目录和路径 52
3.1.1读取目录 55
3.1.2搜索路径 57
3.1.3 UNIX文件系统 58
3.2 UNIX的文件表示 58
3.2.1目录表示 61
3.2.2链接 61
3.3文件句柄表示 66
3.3.1文件描述符 66
3.3.2文件指针和缓冲 69
3.3.3文件描述符的继承 70
3.4过滤程序和重定向 73
3.5管道 74
3.6读和写文件 77
3.7非阻塞的I/O 80
3.8 select调用 81
3.9 FIFO 82
3.10特殊文件——音频设备 85
3.11练习:遍历目录 89
3.12练习:proc文件系统 91
3.13练习:音频 93
3.14练习:终端控制 94
3.15附加读物 95
第4章工程:令牌环 96
4.1形成一个环 96
4.2简单通信 103
4.3令牌的互斥 104
4.4通过投票的互斥 105
4.5匿名环上的领袖选举 106
4.6用于通信的令牌环 107
4.7流水线预处理器 109
4.8并行令牌算法 110
4.8.1图像滤波 110
4.8.2矩阵乘法 112
4.9 可伸缩环 113
4.10附加读物 114
第二篇异步事件 115
第5章信号 115
5.1发送信号 115
5.2信号屏蔽和信号集合 119
5.3 sigaction函数 122
5.4 pause函数和sigsuspend函数 125
5.5一个例子——biff 127
5.6系统调用和信号 129
5.7 siglongjmp和sigsetjmp函数 132
5.8实时信号 133
5.9异步I/O 136
5.10练习:统计运行时间 139
5.11练习:文件系统二进程 139
5.12练习:假脱机一个“慢”设备 141
5.13附加读物 141
第6章工程:计时器 142
6.1 UNIX中的计时器 142
6.2 间隔计时器 146
6.2.1 Spec 1170的间隔计时器 146
6.2.2 POSIX的间隔计时器 149
6.3 工程概述 151
6.4简单的计时器 152
6.5设置五个独立计时器中的一个 154
6.5.1 mytimers对象 155
6.5.2 hardware_timer对象 157
6.5.3主程序的实现 158
6.5.4 showall对象 158
6.6多计时器 163
6.6.1设置多计时器 164
6.6.2 对多计时器进行测试 166
6.7多处理器的安全执行 168
6.8 cron工具 169
6.9 POSIX计时器实现 169
6.10附加读物 176
第7章工程:解剖shell 177
7.1一个简单的shell 178
7.2重定向 182
7.3管道线 184
7.4信号 186
7.5进程组、会议和控制终端 190
7.6在ush中处理后台进程 193
7.7作业控制 197
7.8 ush的作业控制 199
7.8.1作业列表对象 199
7.8.2 ush的作业列表 200
7.8.3 ush中的作业控制 201
7.9附加读物 201
第三篇并 发 203
第8章临界区和信号量 203
8.1原子操作 204
8.2信号量 207
8.2.1 用TestAndSet实现信号量 209
8.2.2无须“忙等待”信号量 211
8.2.3 AND同步机制 211
8.3 POSIX信号量 213
8.3.2 POSIX信号量操作 214
8.3.1无名信号量的初始化 214
8.3.3有名信号量 216
8.4系统V中的信号量 217
8.4.1信号量集 218
8.4.2信号量创建 218
8.4.3系统V信号量操作 220
8.4.4信号量控制 225
8.4.5信号量状态 227
8.5信号量和信号 227
8.6练习:POSIX无名信号量 228
8.7练习:POSIX有名信号量 228
8.8练习:许可权管理 229
8.9练习:系统V共享存储器 230
8.9.1系统V共享存储器的综述 230
8.9.2软管道实现的规格说明 231
8.10练习:系统V消息队列 233
8.11附加读物 234
第9章POSIX线程 235
9.1问题的引出:监视文件描述符 236
9.1.1简单轮询 236
9.1.2消除忙等的异步I/O 238
9.1.3使用select来消除忙等 240
9.1.4使用poll来消除忙等 241
9.1.5多线程 242
9.2 POSIX线程 245
9.3基本线程管理 246
9.4用户线程与内核线程 252
9.5线程属性 254
9.6练习:并行文件拷贝 256
9.7附加读物 257
第10章线程同步 258
10.1互斥 259
10.2信号量 263
10.3条件变量 267
10.4信号处理和线程 273
10.5练习:线程化打印服务 280
10.6附加读物 283
第11章工程:简化的并行虚拟机 284
11.1简化的并行虚拟机 285
11.2 NTPVM工程概貌 286
11.2.1 START_TASK包 288
11.2.2 DATA包 289
11.2.3 DONE包 289
11.3分派程序的I/O和测试 290
11.4无输入的单任务 296
11.5顺序任务 297
11.5.1版本A:非线程分派程序的实现 297
11.5.2版本B:线程分派程序的实现 298
11.6.1 版本A:用select和poll来实现 300
11.6并发任务 300
11.6.2版本B:用线程来实现 301
11.7 广播和BARRIER 301
11.8Terminate和Signals 302
11.9附加读物 302
第四篇通信 303
第12章客户机/服务器通信 303
12.1客户机/服务器策略 303
12.2通用Internet通信接口 306
12.2.1 UICI服务器 308
12.2.2 UICI客户机 310
12.2.3 UICI实现 312
12.3网络通信 313
12.4 UICI的套接口实现 314
12.5传输层接口 319
12.6流 324
12.7 UICI的流实现 328
12.8 UICI的线程安全 330
12.9练习:音频传输 333
12.10练习:Ping服务器 334
12.11附加读物 335
第13章工程:Internet广播 336
13.1多路传输概述 336
13.2单向通信 337
13.3双向通信 338
13.4传输缓冲区 339
13.5多路传输缓冲区 341
13.6网络接收器 342
13.7 收听与关闭 343
13.8网络广播者 343
13.10附加读物 344
13.9信号处理 344
第14章远程过程调用 345
14.1基本操作 345
14.2将简单局域调用转换为RPC 349
14.3改进的远程伪随机数服务 357
14.4服务状态与有效请求 361
14.5远程有效文件服务 365
14.6联编与命名服务 368
14.7失败 369
14.8 NFS——网络文件系统 370
14.9线程与远程过程调用 374
14.10练习:无状态文件服务 377
14.11附加读物 378
第15章工程:元组空间 379
15.1 Linda语言 380
15.2 Richard:一种简化的Linda语言 382
15.3.1元组数据结构 384
15.3简单的Richard元组空间 384
15.3.2表示元组空间 385
15.3.3元组空间操作 386
15.3.4转换为远程服务器 387
15.4黑板:一个元组空间应用 390
15.4.1 n皇后问题 390
15.4.2贪婪回溯算法 393
15.4.3黑板与agent 395
15.5 Richard中的活动元组 395
15.5.1简化的设计 395
15.5.2与eval的通信 397
15.6以元组空间作为Richard中的元组 399
15.7 Richard多线程服务器 402
15.8附加读物 403
附录A UNIX基础 405
A.1获得帮助 405
第五篇附录 405
A.1.1系统调用与C库函数 407
A.1.2 UNIX命令与实用程序 408
A.1.3与man相关的命令 410
A.2编译 410
A.3 Makefiles 411
A.4头文件 413
A.5链接与库 414
A.6调试帮助 415
A.7用户环境 417
A.8附加读物 419
附录B UICI实现 420
B.1 UICI原型 420
B.2 Socket实现 420
B.3 TLI实现 428
B.4流实现 433
B.5线程安全UICI实现 438