主页 详情

《UNIX系统编程 通信、并发与线程》_(美)凯·罗宾斯(Kay Robbins),斯蒂芬·罗宾斯(Steve Robbins)_14430040_97871

【书名】:《UNIX系统编程 通信、并发与线程》
【作者】:(美)凯·罗宾斯(Kay Robbins),斯蒂芬·罗宾斯(Steve Robbins)
【出版社】:北京:电子工业出版社
【时间】:2018
【页数】:876
【ISBN】:9787121340352
【SS码】:14430040

最新查询

内容简介

第一部分 基础知识

第1章 技术对程序的影响

1.1 术语的变化

1.2 时间和速度

1.3 多道程序设计和分时

1.4 应用层的并发

1.4.1 中断

1.4.2 信号

1.4.3 输入和输出

1.4.4 进程、线程和资源共享

1.4.5 具有共享内存的多个处理器

1.4.6 网络作为计算机

1.5 安全和容错

1.6 非法入侵造成的缓冲区溢出

1.6.1 缓冲区溢出的后果

1.6.2 缓冲区溢出和安全

1.7 UNIX标准

1.8 延伸阅读

第2章 程序、线程和进程

2.1 程序是如何成为进程的

2.2 线程和执行线程

2.3 程序映象的布局

2.4 库函数调用

2.5 函数返回值和错误

2.6 参数数组

2.6.1 用makeargv函数创建一个数组

2.6.2 makeargv函数的实现

2.7 线程安全函数

2.8 静态变量的使用

2.9 静态对象的结构

2.10 进程环境

2.11 进程终止

2.12 练习:一个env实用程序

2.13 练习:消息日志

2.14 延伸阅读

第3章 UNIX中的进程

3.1 进程标识符

3.2 进程状态

3.3 UNIX进程创建和fork函数

3.4 wait函数

状态值

3.5 exec函数

3.6 后台进程和守护进程

3.7 临界区

3.8 练习:进程链

3.9 练习:进程扇

3.10 延伸阅读

第4章 UNIX I/O

4.1 设备术语

4.2 读/写

4.3 打开和关闭文件

4.4 select函数

4.5 poll函数

4.6 文件表示

4.6.1 文件描述符

4.6.2 文件指针和缓冲

4.6.3 文件描述符的继承

4.7 过滤器和重定向

4.8 文件控制

4.9 练习:原子日志

原子日志库

4.10 练习:cat实用程序

4.11 延伸阅读

第5章 文件和目录

5.1 UNIX文件系统导航

5.1.1 当前工作目录

5.1.2 搜索路径

5.2 目录访问

5.2.1 访问文件状态信息

5.2.2 确定文件的类型

5.3 UNIX文件系统实现

5.3.1 UNIX文件实现

5.3.2 目录实现

5.4 硬链接和符号链接

5.4.1 创建或删除一个链接

5.4.2 创建和删除符号链接

5.5 练习:which命令

5.6 练习:邮件通知程序

5.7 练习:新闻通知程序

5.8 练习:遍历目录

5.9 延伸阅读

第6章 UNIX特殊文件

6.1 管道

6.2 流水线

6.3 FIFO

6.4 管道与客户机-服务器模型

6.5 终端控制

规范和非规范的输入处理

6.6 音频设备

6.7 练习:音频

6.8 练习:屏障

6.9 练习:stty命令

6.10 练习:重提客户机-服务器

6.11 延伸阅读

第7章 项目:令牌环

7.1 环形拓扑

7.2 环的形成

7.3 环的探讨

7.4 简单通信

7.5 用令牌环实现互斥

7.6 用投票实现互斥

7.7 匿名环中的领导者选举

7.8 用于通信的令牌环

7.9 流水线预处理机

7.10 并行环算法

7.10.1 图像过滤

7.10.2 矩阵乘法

7.11 弹性环

7.12 延伸阅读

第二部分 异步事件

第8章 信号

8.1 信号的基本概念

8.2 信号的产生

8.3 对信号掩码和信号集进行操作

8.4 捕获和忽略信号—sigaction

8.5 等待信号—pause、sigsuspend和sigwait

8.5.1 pause函数

8.5.2 sigsuspend函数

8.5.3 sigwait函数

8.6 处理信号:错误和异步信号安全

8.7 用siglongjmp和sigsetjmp进行程序控制

8.8 使用异步I/O编程

8.9 练习:转储统计

8.10 练习:同时处理慢速设备

8.11 延伸阅读

第9章 时间和定时器

9.1 POSIX时间

9.1.1 用从Epoch开始的秒数表示时间

9.1.2 显示日期和时间

9.1.3 使用struct timeval表示时间

9.1.4 使用实时时钟

9.1.5 耗时和处理器时间的对比

9.2 睡眠函数

9.3 POSIX:XSI间隔定时器

9.4 实时信号

9.5 POSIX:TMR间隔定时器

9.6 定时器漂移、溢出和绝对时间

9.7 延伸阅读

第10章 项目:虚拟定时器

10.1 项目概述

10.2 简单的定时器

10.3 对5个定时器中的一个进行设置

10.3.1 virtualtimers对象

10.3.2 hardwaretimer对象

10.3.3 主程序实现

10.3.4 用show谱写定时器代码

10.4 使用多个定时器

10.4.1 设置多个定时器

10.4.2 用多个定时器进行测试

10.5 多定时器的健壮实现

10.6 POSIX:TMR定时器的实现

10.7 一个小型的cron工具mycron

10.8 延伸阅读

第11章 项目:破解shell

11.1 构建一个简单的shell

11.2 重定向

11.3 流水线

11.4 前台的信号处理

11.5 进程组、会话和控制终端

11.5.1 进程组

11.5.2 会话

11.6 ush中的后台进程

11.7 作业控制

11.8 ush的作业控制

11.8.1 一个作业列表对象

11.8.2 ush中的作业列表

11.8.3 ush中的作业控制

11.8.4 等待流水线时的进程行为

11.9 延伸阅读

第三部分 并发

第12章 POSIX线程

12.1 监视文件描述符的方法

12.2 使用线程监视多个文件描述符

12.3 线程管理

12.3.1 用ID引用线程

12.3.2 创建一个线程

12.3.3 分离和连接

12.3.4 退出和取消

12.3.5 向线程传递参数并返回值

12.4 线程安全

12.5 用户级线程VS内核级线程

12.6 线程属性

12.6.1 线程状态

12.6.2 线程栈

12.6.3 线程调度

12.7 练习:并行文件复制

12.8 延伸阅读

第13章 线程同步

13.1 POSIX同步函数

13.2 互斥锁

13.2.1 创建并初始化一个互斥量

13.2.2 销毁一个互斥量

13.2.3 锁定和解锁互斥量

13.2.4 保护不安全的库函数

13.2.5 同步标志和全局值

13.2.6 让数据结构成为线程安全的

13.3 最多一次和至少一次的执行

13.4 条件变量

13.4.1 条件变量的创建和销毁

13.4.2 等待并通知条件变量

13.5 信号处理和线程

13.5.1 将信号定向到一个特定的线程中

13.5.2 为线程屏蔽信号

13.5.3 信号处理的专用线程

13.6 读者和写者

13.7 strerror_r实现

13.8 死锁和其他讨厌的问题

13.9 练习:多个屏障

13.10 延伸阅读

第14章 临界区和信号量

14.1 临界区的处理

14.2 信号量

14.3 POSIX:SEM匿名信号量

14.4 POSIX:SEM信号量操作

14.5 POSIX:SEM命名信号量

14.5.1 创建并打开命名信号量

14.5.2 关闭信号量并删除其链接

14.6 练习:许可管理器

14.6.1 license对象

14.6.2 runsim主程序

14.6.3 对许可管理器的扩展

14.7 延伸阅读

第15章 POSIX IPC

15.1 POSIX:XSI进程间通信

15.1.1 标识并访问IPC对象

15.1.2 在shell中访问POSIX:XSI IPC资源

15.2 POSIX:XSI信号量集

15.2.1 信号量的创建

15.2.2 信号量的控制

15.2.3 POSIX信号量集操作

15.3 POSIX:XSI共享内存

15.3.1 访问共享内存段

15.3.2 共享内存段的连接和分离

15.3.3 控制共享内存

15.3.4 共享内存示例

15.4 POSIX:XSI消息队列

访问消息队列

15.5 练习:POSIX匿名信号量

15.6 练习:POSIX命名信号量

15.7 练习:用共享内存实现管道

15.8 练习:用消息队列实现管道

15.9 延伸阅读

第16章 项目:生产者-消费者同步

16.1 生产者-消费者问题

16.2 受互斥锁保护的有界缓冲区

16.3 使用信号量的缓冲区实现

16.4 一个简单的生产者-消费者问题简介

16.5 使用条件变量的有界缓冲区

16.6 带有完成条件的缓冲区

16.7 并行文件复制

16.7.1 并行文件复制的生产者

16.7.2 并行文件复制的消费者

16.7.3 并行文件复制的main程序

16.7.4 并行文件复制的增强

16.8 线程化打印服务器

16.8.1 请求缓冲区

16.8.2 生产者线程

16.8.3 消费者线程

16.8.4 打印服务器

16.8.5 其他增强功能

16.9 延伸阅读

第17章 项目:非完全并行虚拟机

17.1 PVM的历史、术语和结构

17.2 非完全并行虚拟机

17.3 NTPVM项目概述

17.3.1 NEWTASK分组

17.3.2 DATA分组

17.3.3 DONE分组

17.4 调度程序的I/O和测试

17.4.1 用多个窗口测试

17.4.2 用远程日志测试

17.5 没有输入的单任务

17.6 顺序任务

17.6.1 输入线程

17.6.2 输出线程

17.7 并发任务

17.8 分组通信、广播和屏障

17.9 终止和信号

17.10 有序的消息传递

17.11 延伸阅读

第四部分 通信

第18章 面向连接的通信

18.1 客户机-服务器模型

18.2 通信信道

18.3 面向连接的服务器策略

18.4 通用因特网通信接口(UICI)

18.4.1 处理错误

18.4.2 读和写

18.5 不同服务器策略的UICI实现

18.6 UICI客户机

18.7 UICI的套接字实现

18.7.1 socket函数

18.7.2 bind函数

18.7.3 listen函数

18.7.4 u_open函数的实现

18.7.5 accept函数

18.7.6 u_accept函数的实现

18.7.7 connect函数

18.7.8 u_connect函数的实现

18.8 主机名和IP地址

18.9 线程安全的UICI

18.10 练习:ping服务器

18.11 练习:音频的传输

18.12 延伸阅读

第19章 项目:WWW重定向

19.1 万维网

19.2 统一资源定位符(URL)

19.3 HTTP入门

19.3.1 客户端请求

19.3.2 服务器响应

19.3.3 HTTP消息交换

19.4 Web通信模式

19.4.1 隧道

19.4.2 代理

19.4.3 高速缓存和透明性

19.4.4 网关

19.5 单连接的通过型监控

19.6 隧道服务器的实现

19.7 用于测试的服务器驱动程序

19.8 HTTP头解析

19.9 简单的代理服务器

19.10 代理监视器

19.11 代理高速缓存

19.12 门户网站的网关

19.13 用于负载平衡的网关

19.14 事后的调查分析

19.14.1 线程和计时错误

19.14.2 未捕获的错误和错误的退出

19.14.3 书写风格和表示

19.14.4 糟糕的测试和结果表示

19.14.5 编程错误和不好的风格

19.15 延伸阅读

第20章 无连接通信和多播

20.1 无连接通信简介

20.2 无连接通信的简化接口

20.2.1 主机名和u_buf_t结构

20.2.2 UICI UDP的返回错误

20.2.3 UDP缓冲区大小和UICI UDP

20.3 简单-请求协议

20.4 请求-应答协议

20.5 有超时和重试的请求-应答

20.6 请求-应答-确认协议

20.7 UICI UDP的实现

20.7.1 u_openudp函数的实现

20.7.2 sendto函数

20.7.3 u_sendto和u_sendtohost函数的实现

20.7.4 recvfrom函数

20.7.5 u_recvfrom和u_recvfromtimed函数的实现

20.7.6 主机名和u_buf_t

20.8 UDP和TCP的比较

20.9 多播

20.9.1 多播寻址

20.9.2 u_join函数的实现

20.9.3 u_leave函数的实现

20.10 练习:UDP端口服务器

20.11 练习:无状态文件服务器

远程文件服务

20.12 延伸阅读

第21章 项目:互联网广播

21.1 项目概述

21.2 音频设备模拟

21.3 具有一个节目和一个接收者的UDP实现

21.3.1 简单实现

21.3.2 接收者的终止

21.3.3 接收者缓冲来处理网络延迟

21.3.4 接收者缓冲来处理乱序传递

21.4 具有多个节目和接收者的UDP实现

21.4.1 多个节目和单个接收者

21.4.2 多个节目和多个接收者

21.5 音频广播的UDP实现

21.6 无线电广播的多播实现

21.7 TCP实现的差异

21.7.1 单个节目和单个接收者的TCP实现

21.7.2 多个节目和单个接收者的TCP实现

21.7.3 无线电广播的TCP实现

21.8 通过浏览器接收流式音频

21.8.1 使用浏览器助手应用程序

21.8.2 在你的Web服务器中设置一种新的mime类型

21.8.3 设置你的浏览器来处理新的mime类型

21.8.4 创建Web页面

21.8.5 使用预定义的mime类型

21.9 延伸阅读

第22章 项目:服务器性能

22.1 服务器性能成本

22.2 服务器架构

22.3 项目概述

22.4 单客户端驱动程序

22.4.1 处理一个连接

22.4.2 对响应进行编程

22.4.3 收集统计信息

22.4.4 测试客户端

22.5 多客户端驱动程序

另一种多客户端设计

22.6 实现每个请求一个线程和每个请求一个进程

22.7 线程工作者池策略

22.8 使用有界缓冲区的多线程工作者池

22.9 进程工作者池

22.10 磁盘I/O的影响

22.11 性能研究

22.11.1 基线测量

22.11.2 波动性的根源

22.11.3 测量错误

22.11.4 同步

22.11.5 普通的错误

22.11.6 要测量什么

22.11.7 数据分析和表示

22.12 报告撰写

22.12.1 引言

22.12.2 设计、实现和测试

22.12.3 实验

22.12.4 结果和分析

22.12.5 结论

22.12.6 参考文献

22.13 延伸阅读

附录A UNIX基础

附录B 重启库

附录C UICI实现

附录D 日志函数

附录E POSIX扩展

参考文献


书查询(www.shuchaxun.com)本网页唯一编码:
c24b2f0f4ea196f17dd2892e89876edc#1818a6b98e58f36d27d5301815994255#129142320#14430040.pdf