第一篇 Client-Server计算基础 5
第一章 什么是Client-Server计算 5
发挥Client-Server计算的潜力 6
Client-Server计算及用途 7
Client-Server技术是如何发展起来的 7
创建Client-Server应用程序的方法 8
谁算是Client-Server应用程序开发人员? 9
Client-Server开发人员的工具 9
澄清关于Client-Server计算的错误观念 10
Client-Server技术和异质计算(HeterogeneousComputing) 12
跨平台计算(Cross-PlatformComputing) 13
采用合理的应用程序结构 14
多平台Client-Server框架 15
分布式计算(DistributedComputing) 15
向下适化(Downsizing):把大型机应用程序迁移至更小的计算平台 17
提供可靠性、有效性以及可用性 17
需要坚固的安全的操作系统 18
需要全面的开发工具 18
第二章 Client-Server计算和企业 20
Client-Server计算的费用 21
实施一个新系统的开销 22
保留现存投资的办法 24
衡量一个(Client-Server)系统的价值 25
Client-Server计算的利益 25
服务器作为数据处理的焦点(FocalPoint) 26
增加对企业数据的访问 29
更有效地使用服务器的资源 29
优化应用程序的性能和网络的使用方式 30
微处理器的集成与Client-Server计算 35
微处理器是如何影响作为客户机的PCs的 36
高性能服务器的发展市场 37
实现方法和可伸缩性 38
为什么可伸缩性硬件十分重要 38
需要操作系统具备可伸缩性 39
应用程序软件的可伸缩性 40
第二篇 构造和设计Client-Server应用程序 43
第三章 设计Client-Server应用程序 43
Client-Server应用程序设计概论 44
客户机和服务器之间的工作划分 45
过渡到Client-Server编程 46
管理客户机和服务器之间的交互 48
通信技术 49
通信协议 50
Client-Server应用程序交互协议 51
实现Client-Server应用程序的技术 54
准备(Client-Server应用程序 54
优化Client-Server应用程序 59
Client-Server实现的例子 65
使用过程的Client-Server接口 66
请求的接收与调度 75
请求的执行 76
使用消息的Client-Server交互 77
第四章 利用进程和线程实现多任务处理 84
什么是多道程序处理(Multipro-gramming)和多任务处理(Multitasking) 85
进程:使系统更具响应性和效率 86
构造进程 87
使用进程开发代码 87
线程:用于执行并发的应用程序代码构造线程 97
WorkerModel:为开发人员发掘线程的力量 98
使用线程开发代码 100
资源所有权和控制 105
每个线程(PerthreadScoping)的作用域 105
平台的资源所有权 106
第五章 调度 111
调度的实现 112
调度程序的内部机制 113
处理队列 114
选择哪个任务使用CPU 115
上下文转换 121
抢先与非抢先系统 122
根据操作系统之间的细微差别调整应用程序代码 123
临界区:修改和访问共享数据 124
使用一次授权一个任务的方式(One-Task-At-A-Time)解决相互排斥 125
良好调谐(Fine-Turning)和性能 125
第六章 同步 127
理解和使用信号灯 128
NovellNetWare 131
信号灯的实现方式 131
MicrosoftNT 132
IBMOS/2 132
NovellUnixWare 132
使用信号灯解决相互排斥问题 133
NovellNetWare 133
WindowsNT 135
NovellUnixWare 139
IBMOS/2 142
事件同步 144
IBMOS/2 145
WindowsNT 147
处理临界区问题的其他方法 148
NovellNetWare 149
WindowsNT 150
IBMOS/2 151
第七章 存储器 153
存储器管理体系结构 154
存储器模式 155
操作系统和存储器管理 155
虚拟存储器 158
Intel80386存储器管理体系结构 159
操作系统存储器管理体系结构 161
应用程序的存储器保护 162
Intel80386存储器保护 162
操作系统中的保护 163
存储器分配 164
操作系统专门的实现 165
ANSI应允的(ANSI-COMPLIANT)程序设计存储器接口 165
共享存储器 176
使用存储器映象文件共享存储器 176
共享存储器APIs 176
静态配置的存储器共享 177
操作系统专门的实现 177
操作存储器 182
ANSI存储器操作函数 182
其他的存储器操作函数 182
第八章 通信 184
网络通信 185
网络通信的功能特征 186
网络协议 188
地址:物理的和逻辑的 190
程序设计接口(ProgrammaticInterface):阻塞(Blocking)和非阻塞(Noblocking) 191
协议的有效性和标准的支持 192
进程间通信 195
两个合作(partner)进程间的通信管道 195
进程间通信的队列或消息 198
第九章 构造可移植的应用程序代码 205
第三篇 制作可移植的Client-Server应用程序 205
采用面向对象和过程设计方法实现代码的可移植性 206
用C语言进行过程设计 207
用C++进行面向对象的程序设计 210
构造独立于工作平台的源代码 215
独立于操作系统之外的模块 216
独立于通信的模块 217
独立于文件系统的模块 217
使用框架构造Client-Server应用程序的体系结构 218
图形用户接口 219
文件系统服务 220
操作系统服务 220
数据库系统服务 221
网络、连接和定位服务 221
请求/响应框架(Request/Response) 221
第十章 编写可移植的应用程序代码 226
保持功能和保持可移植性 227
操作系统的可移植性 228
去除对操作系统系统调用的依赖性 228
不同平台信号灯的抽象 229
去除对操作系统数据结构的依赖性 229
实现信号灯的例子 234
以语言为基础的可移植性 249
用C语言和C++开发可移植代码 249
把ANSI标准用于C语言编程中 250
使用预处理器指令 250
数据类型的长度 252
字节顺序(Byte-Ordering) 253
数据对齐(DataAlignment) 253