第1部分 原理篇 2
第1章 操作系统概论 2
1.1 什么是操作系统 2
1.2 操作系统的发展历史 3
1.2.1 早期的计算机和人工操作方式 3
1.2.2 脱机输入/输出和批处理系统 4
1.2.3 缓冲、中断和DMA技术 4
1.2.4 SPOOLING 5
1.2.5 多道程序设计 6
1.3 现代操作系统类型 7
1.3.1 分时系统 7
1.3.2 实时操作系统 8
1.3.3 微机操作系统 8
1.3.4 多处理机、分布式和网络操作系统 10
1.3.5 嵌入式操作系统和智能卡操作系统 11
1.4 操作系统的概念、特征和功能 11
1.4.1 作业和进程 11
1.4.2 操作系统的特征 12
1.4.3 操作系统的功能 13
1.5 UNIX操作系统概述 14
1.5.1 UNIX系统历史 14
1.5.2 Solaris操作系统 16
1.5.3 UNIX系统特点 18
1.5.4 UNIX系统基本结构 18
习题1 19
第2章 存储管理 20
2.1 存储管理基础 20
2.1.1 虚拟地址与物理地址 20
2.1.2 地址定位方式 20
2.2 基本存储管理方法 22
2.2.1 单一连续区存储管理 22
2.2.2 固定分区存储管理 23
2.3 可变分区存储管理 24
2.3.1 空闲存储区表 24
2.3.2 首次适应法 25
2.3.3 循环首次适应法 27
2.3.4 最佳适应算法 27
2.3.5 最差适应法 28
2.3.6 多重分区 28
2.4 内存扩充技术 28
2.4.1 覆盖 28
2.4.2 交换技术 29
2.4.3 虚拟存储器 30
2.5 纯分页的存储管理 31
2.5.1 分页存储管理的基本思想 31
2.5.2 地址变换 32
2.5.3 联想存储器和快表 32
2.5.4 空闲内存页的管理 33
2.6 请求分页系统 34
2.6.1 请求分页的基本原理 34
2.6.2 页面淘汰 34
2.7 段式存储管理 37
2.8 段页式存储管理 38
2.9 Linux存储管理 39
2.9.1 Linux存储管理的思想及特点 39
2.9.2 Linux中的页表 40
2.9.3 页面的分配和回收 40
2.9.4 存储映射与请求分页 42
2.9.5 页交换进程与页面的换入换出 43
2.10 Solaris存储管理 44
2.10.1 Solaris存储管理的体系结构 44
2.10.2 Solaris存储管理的新特性 44
2.10.3 Solaris存储管理 45
2.10.4 页面淘汰算法 46
习题2 47
第3章 进程管理 49
3.1 进程概述 49
3.1.1 进程的概念 49
3.1.2 进程的组成 49
3.1.3 进程的状态及其变化 50
3.2 进程控制块 51
3.3 调度 56
3.3.1 调度概述 56
3.3.2 进程调度策略 57
3.3.3 进程调度算法 57
3.4 UNIX系统的进程调度 60
3.4.1 进程的切换调度算法 60
3.4.2 切换调度程序 62
3.4.3 进程的对换调度 63
3.5 进程的控制 64
3.5.1 进程的阻塞 64
3.5.2 UNIX系统中的进程睡眠和唤醒 64
3.5.3 进程的终止和等待终止 67
3.6 进程的创建和图像改换 68
3.6.1 进程的创建 68
3.6.2 进程图像的改换 69
3.7 线程 70
3.7.1 进程和线程 71
3.7.2 多线程 71
3.7.3 线程的状态与功能 72
3.7.4 用户级和核心级线程 73
3.8 Linux进程管理 75
3.8.1 Linux进程结构 75
3.8.2 进程调度 78
3.8.3 进程使用的虚拟内存 79
3.8.4 创建进程 79
3.8.5 Linux的线程 80
3.9 Solaris进程和线程管理 81
3.9.1 Solaris进程和线程 81
3.9.2 Solaris进程和线程模型的演变 81
3.9.3 进程数据结构 82
3.9.4 内核线程数据结构 82
3.9.5 Solaris的线程调度 84
3.9.6 Solaris的线程应用示例 87
习题3 88
第4章 进程通信 90
4.1 进程的同步与互斥 90
4.1.1 同步与互斥的概念 90
4.1.2 临界段问题 90
4.2 进程间互斥控制方法 91
4.2.1 锁的表示和操作 91
4.2.2 锁的安全控制 91
4.2.3 用纯软件实现进程的互斥 93
4.3 信号量和semWait、semSignal操作 95
4.4 信号量的应用 96
4.4.1 利用信号量实现互斥 96
4.4.2 阻塞/唤醒协议 97
4.4.3 两个进程间的同步 98
4.4.4 生产者和消费者问题 99
4.4.5 读者/写者问题 100
4.4.6 管程 101
4.5 进程间的数据通信 101
4.5.1 消息通信 101
4.5.2 共享存储区 102
4.5.3 管道通信 103
4.6 软中断和信号机构 103
4.6.1 信号的产生与类型 103
4.6.2 信号的处理方式及设置 105
4.6.3 信号的传送 106
4.7 死锁 106
4.7.1 产生死锁的原因 107
4.7.2 产生死锁的条件 108
4.7.3 死锁的预防 109
4.7.4 死锁的避免 110
4.7.5 死锁的检测 111
4.7.6 死锁的解除 112
4.8 Linux进程间通信 113
4.8.1 信号 113
4.8.2 管道 115
4.8.3 IPC机制 116
4.9 Solaris的进程通信机制 118
4.9.1 Solaris的进程通信机制概述 118
4.9.2 Solairs信号机制 118
4.9.3 Solairs信号量 119
4.9.4 Solairs门 119
习题4 120
第5章 设备管理 121
5.1 概述 121
5.1.1 设备的概念和分类 121
5.1.2 I/O设备控制与驱动 122
5.1.3 设备管理的设计要求和任务 123
5.2 操作系统与中断处理 123
5.2.1 中断的基本概念 123
5.2.2 中断的类型 124
5.2.3 中断的响应和实现过程 126
5.2.4 中断处理程序和驱动程序 126
5.2.5 中断的返回与恢复 127
5.3 操作系统与时钟系统 128
5.3.1 时钟的概念 128
5.3.2 UNIX系统中的时钟管理 128
5.4 操作系统对I/O操作的控制 129
5.4.1 I/O设备的资源分配 129
5.4.2 I/O通道技术 130
5.4.3 I/O缓冲技术 130
5.4.4 设备的驱动 131
5.5 设备管理的数据结构 131
5.5.1 设备控制表 131
5.5.2 设备开关表 132
5.6 磁盘调度 133
5.6.1 物理特性 133
5.6.2 磁盘调度算法 133
5.6.3 系统设计应考虑的几个问题 135
5.6.4 独立磁盘冗余阵列 135
5.7 UNIX系统V的设备管理 138
5.7.1 块设备管理的主要数据结构 138
5.7.2 缓冲区管理 140
5.7.3 块设备管理 143
5.7.4 字符设备管理 145
5.8 设备分配 147
5.8.1 设备分配方式 147
5.8.2 设备分配的原则 147
5.9 Linux的设备管理 148
5.9.1 概述 148
5.9.2 设备驱动器与内核的接口 150
5.9.3 网络设备的管理 152
5.10 Solaris的I/O子系统 152
5.10.1 I/O子系统与内核的关系 152
5.10.2 设备文件与设备文件系统 153
5.10.3 设备树 153
习题5 154
第6章 文件系统 156
6.1 概述 156
6.1.1 文件的术语 156
6.1.2 文件的操作 157
6.1.3 文件的组织和存取 157
6.1.4 文件系统结构 160
6.2 文件目录 161
6.2.1 目录的内容 161
6.2.2 目录的结构 162
6.2.3 存取权限 163
6.2.4 并发存取控制 163
6.3 文件存储资源分配 164
6.4 文件的系统调用 165
6.4.1 文件的创建、打开、关闭和取消 166
6.4.2 文件的读/写 168
6.4.3 调整文件读/写位置lseek 169
6.4.4 创建任何类型文件mknod 169
6.4.5 其他的文件系统调用 170
6.5 文件的标准子例程 171
6.5.1 标准I/O的概念 171
6.5.2 流文件的打开和关闭 172
6.5.3 流文件的读写 173
6.5.4 调整和获取流文件的读写位置 174
6.5.5 格式输入与输出 174
6.5.6 流的单字符I/O操作 175
6.5.7 行的输入与输出 176
6.5.8 存储区中的格式转化 176
6.5.9 程序的执行 176
6.6 UNIX文件系统的内部结构 177
6.6.1 索引节点 177
6.6.2 文件索引结构 177
6.6.3 目录结构 179
6.6.4 打开文件结构 180
6.6.5 文件系统存储资源管理 182
6.7 管道文件和管道通信 186
6.7.1 管道通信概念 186
6.7.2 管道文件 186
6.7.3 管道的读写和关闭 187
6.7.4 有名管道 188
6.8 Linux文件系统 190
6.8.1 虚拟文件系统 190
6.8.2 Ext2文件系统 194
6.8.3 Ext3文件系统 197
6.9 Solaris文件系统 197
6.9.1 Sun虚拟文件系统模型 197
6.9.2 文件系统可恢复性 198
6.9.3 文件系统安全性 199
6.9.4 Solaris文件系统框架 200
6.9.5 ZFS文件系统的特点 201
习题6 202
第7章 Windows操作系统 204
7.1 Windows操作系统发展历程 204
7.1.1 Windows的开发过程及历史 204
7.1.2 Windows主要版本的特点 204
7.2 Windows 2000/XP 207
7.2.1 系统体系结构 207
7.2.2 存储系统 210
7.2.3 进程、线程及处理器管理 216
7.2.4 I/O系统 220
7.2.5 文件系统 223
7.2.6 网络系统 226
7.3 Windows Server 2008 230
7.3.1 系统概述 230
7.3.2 系统功能更新 230
7.4 下一代操作系统产品Windows 7 232
7.4.1 系统概述 232
7.4.2 系统功能更新 232
7.5 操作系统虚拟化技术 234
7.5.1 虚拟化技术概述 234
7.5.2 Xen虚拟化技术 235
7.5.3 其他虚拟化产品 238
7.6 小结 240
习题7 240
第8章 分布式和网络操作系统 241
8.1 分布式操作系统概述 241
8.2 网络通信机制 244
8.3 网络同步 246
8.4 网络操作系统 247
习题8 248
第9章 操作系统安全 249
9.1 操作系统的安全性 249
9.1.1 操作系统的安全需求 249
9.1.2 系统安全的评估与标准 250
9.1.3 Linux操作系统安全 253
9.1.4 Windows 2000操作系统安全 254
9.2 操作系统安全机制 256
9.2.1 标识与鉴别 256
9.2.2 可信路径 258
9.2.3 最小特权管理 259
9.2.4 访问控制 260
9.2.5 隐蔽通道检测与控制 261
9.2.6 安全审计 263
9.3 安全操作系统设计与实现 265
9.3.1 操作系统安全设计原理 265
9.3.2 安全策略 266
9.3.3 安全模型 267
9.3.4 安全体系结构 269
9.3.5 典型安全操作系统 271
习题9 273
第2部分 应用和开发篇 276
第10章 UNIX使用基础 276
10.1 登录和退出系统 276
10.2 Shell基础 277
10.2.1 Shell的家族 277
10.2.2 简单命令和命令表 277
10.2.3 标准输入和标准输出 278
10.2.4 输入/输出转向 278
10.2.5 后台命令与后台进程 279
10.2.6 管道 280
10.2.7 特殊字符 280
10.3 文件系统基本知识 281
10.3.1 文件的类型 281
10.3.2 目录结构 282
10.3.3 文件存取控制模式 282
10.3.4 目录存取方式 283
10.4 UNIX文件系统结构 283
10.4.1 根文件系统结构 284
10.4.2 /usr文件系统 284
习题10 285
第11章 UNIX实用程序 286
11.1 目录操作命令 286
11.1.1 显示工作目录(pwd命令) 286
11.1.2 改变工作目录(cd命令) 286
11.1.3 列目录内容(Is命令) 286
11.1.4 创建新目录(mkdir命令) 287
11.1.5 删除目录项(rmdir命令) 287
11.2 文件操作命令 287
11.2.1 复制文件(cp命令) 287
11.2.2 移动或重新命名文件(mv命令) 288
11.2.3 删除文件(rm命令) 288
11.2.4 文件的链接(In命令) 288
11.2.5 符号链接(In-s命令) 288
11.2.6 报告两个文件的差别(diff命令) 289
11.2.7 推测文件的类型(file命令) 290
11.2.8 查找文件(find命令) 290
11.2.9 改变文件的属主(chown命令) 291
11.2.10 改变文件的存取权限(chmod命令) 291
11.2.11 设置文件创建方式屏蔽码(umask命令) 292
11.3 显示和打印命令 292
11.3.1 回应命令行上的参数(echo命令) 292
11.3.2 连接并显示文件(cat命令) 293
11.3.3 分页显示(more命令和pg命令) 293
11.3.4 显示文件的头部(head命令)和尾部(tail命令) 293
11.3.5 打印文件(lp命令) 294
11.3.6 查看打印作业状态(lpstat命令) 294
11.3.7 取消一个打印作业(cancel命令) 294
11.3.8 格式化打印文件(pr命令) 295
11.3.9 卸出文件(od命令) 295
11.4 过滤器 296
11.4.1 正则表达式 296
11.4.2 排序或合并文件(sort命令) 298
11.4.3 抽取指定模式的行(grep命令) 298
11.4.4 流编辑程序(sed命令) 299
11.4.5 模式扫描和处理语言(awk) 300
11.4.6 裁剪指定的列(cut命令) 301
11.4.7 组合数据列(paste命令) 302
11.4.8 建立“三通”(tee命令) 302
11.5 设备操作 302
11.5.1 显示或设置日期和时间(date命令) 302
11.5.2 显示磁盘空间(df命令) 303
11.5.3 显示磁盘使用情况(du命令) 303
11.5.4 显示或设置终端参数(stty命令) 303
11.5.5 磁带归档(tar命令) 304
11.6 用户信息与进程控制 305
11.6.1 获取用户信息 305
11.6.2 显示进程状态(ps命令) 305
11.6.3 挂起一段时间(sleep命令) 306
11.6.4 统计一个作业的执行时间(time命令) 306
11.6.5 等待进程完成(wait命令) 306
11.6.6 杀死一个进程(kill命令) 306
11.6.7 忽略挂起和退出方法执行(nohup命令) 306
11.6.8 设置命令的执行环境(env命令) 307
11.7 压缩和解压缩 307
11.7.1 compress 307
11.7.2 zip 307
11.7.3 gzip 308
11.7.4 pack 309
11.8 其他命令 309
11.8.1 联机手册(man命令) 309
11.8.2 检查拼写错误(spell命令) 310
11.8.3 文件加密crypt命令和des命令 310
11.8.4 规范化C程序格式(cb命令) 310
习题11 311
第12章 软件开发工具 312
12.1 文本编辑器vi 312
12.1.1 vi概要 312
12.1.2 屏幕编辑命令 313
12.1.3 底行命令 317
12.1.4 在vi程序中执行Shell命令 319
12.2 C编译系统 320
12.2.1 C编译基本过程 320
12.2.2 预处理程序 321
12.2.3 编译程序 323
12.2.4 汇编程序 323
12.2.5 连接/装入程序 324
12.2.6 一个使用cc的综合例子 325
12.3 库的维护 325
12.3.1 库的概念 325
12.3.2 库的维护 326
12.3.3 动态库 327
12.4 维护程序的程序(Make) 327
12.4.1 Make使用初步 328
12.4.2 Make的内部规则 329
12.4.3 Make中的宏 331
12.4.4 用Make维护库 332
12.4.5 一个综合例子 333
12.4.6 Make命令选项和参数 335
12.5 调试程序 335
12.5.1 调用sdb 336
12.5.2 sdb的调试命令 336
12.5.3 删除调试信息strip 337
12.6 源代码控制系统(SCCS) 337
12.6.1 创建SCCS的初始版本 338
12.6.2 提取一个版本 338
12.6.3 建立一个新版本 339
12.6.4 显示SCCS文件的历史 339
12.6.5 SCCS的版本号结构 339
12.6.6 ID关键字 340
12.6.7 其他的SCCS的命令 341
12.7 其他的软件开发工具 341
12.7.1 C程序检查器Lint 341
12.7.2 词法分析器和语法分析器 341
习题12 342
第13章 UNIX通信与万维网WWW 343
13.1 检查计算机的连接情况 343
13.2 获取远程用户信息 343
13.2.1 显示谁在本地计算机登录(rwho) 343
13.2.2 显示远程用户的信息(finger)& 344
13.3 用户间通话 344
13.3.1 给用户发信息(write) 344
13.3.2 广播式的消息传送工具(Wall) 344
13.3.3 远程用户对话(talk) 345
13.4 远程登录和执行 345
13.4.1 基于UNIX系统的远程登录(RLogin) 345
13.4.2 通用的远程登录(telnet) 346
13.4.3 远程Shell(RSH) 346
13.5 远程文件复制和传输 347
13.5.1 远程文件复制(RCP) 347
13.5.2 文件传输(FTP) 347
13.6 万维网WWW和浏览器 349
13.6.1 超文本和超媒体 349
13.6.2 超文本传输协议HTTP 350
13.6.3 统一资源定位器URL 350
13.6.4 超文本标记语言HTML 350
13.6.5 Form与CGI 351
13.6.6 网站设计语言 351
13.6.7 WWW的浏览程序 353
习题13 354
第14章 UNIX系统和网络程序设计 355
14.1 文件系统程序设计 355
14.1.1 获取文件的状态 355
14.1.2 搜索目录树 356
14.2 用文件的系统调用实现进程通信 358
14.2.1 利用文件的系统调用实现信号量 358
14.2.2 利用管道实现进程间通信 360
14.3 高级进程间通信 362
14.3.1 消息通信 362
14.3.2 共享内存 365
14.3.3 信号量 366
14.4 远程进程间通信Socket 369
14.4.1 Socket通信概述 369
14.4.2 Socket系统调用 370
14.4.3 TCP套接字编程 372
14.5 UDP套接字编程 375
14.5.1 UDP套接字的基本概念& 375
14.5.2 UDP套接字基本函数 375
14.5.3 UDP数据报的编程示例 376
14.6 Solaris门通信 378
14.6.1 Solaris门的应用编程接口& 378
14.6.2 Solaris门的基本通信示例 380
14.7 远程过程调用RPC 382
14.7.1 RPC概述 382
14.7.2 RPC服务地址获取 383
14.7.3 rpcgen编程指南 383
14.7.4 客户端身份验证 388
14.8 一个系统程序综合设计的例子 389
习题14 400
第15章 Shell程序设计 401
15.1 Shell程序和参数 401
15.1.1 Shell程序 401
15.1.2 Shell程序的位置参数 402
15.2 Shell变量 402
15.2.1 用户定义变量 402
15.2.2 系统定义变量 403
15.2.3 Shell定义变量 405
15.2.4 参数替换 405
15.2.5 引号机制 406
15.3 测试和求值 406
15.3.1 测试 406
15.3.2 求值 408
15.4 控制结构 408
15.4.1 顺序控制结构 408
15.4.2 if语句 409
15.4.3 case语句 411
15.4.4 for语句 412
15.4.5 while和until语句 413
15.4.6 break、continue、exit和return语句 414
15.5 递归和Shell函数 414
15.5.1 递归 414
15.5.2 Shell函数 415
15.6 Shell内部命令 415
15.7 Shell环境 417
15.8 Linux的BASH Shell 419
15.8.1 命令编辑和历史 419
15.8.2 别名和特征变量 420
15.8.3 BASH Shell的环境文件 420
习题15 421
第16章 嵌入式Linux操作系统 422
16.1 Linux与嵌入式操作系统 422
16.1.1 嵌入式系统的定义 422
16.1.2 嵌入式操作系统的特点 423
16.1.3 嵌入式Linux发展与应用 424
16.1.4 嵌入式Linux操作系统实现方法 425
16.2 嵌入式Linux操作系统构建 425
16.2.1 Linux系统的软件层次 425
16.2.2 裁剪编译内核 426
16.2.3 准备Root文件系统 427
16.2.4 Root文件系统裁剪 428
16.2.5 制作root文件系统映像 430
16.3 嵌入式Linux操作系统安装 432
16.3.1 嵌入式系统的启动 432
16.3.2 安装嵌入式系统引导程序 433
16.3.3 x86系统上嵌入式Linux映像安装 435
16.4 嵌入式Linux软件开发与调试 437
16.4.1 开发系统与目标系统 437
16.4.2 交叉编译环境 438
16.4.3 嵌入式Linux软件调试方法 440
16.5 嵌入式Linux操作系统实时性 442
16.5.1 嵌入式操作系统的实时性要求 442
16.5.2 Linux内核与实时性 444
16.5.3 嵌入式Linux实时化技术 446
习题16 448
第3部分 系统和网络管理篇 450
第17章 UNIX系统管理 450
17.1 系统的启动和关闭 450
17.1.1 系统自举 450
17.1.2 系统的运行级 450
17.1.3 初始化程序执行的脚本(inittab) 451
17.1.4 系统初始化过程 452
17.1.5 系统的关闭 452
17.2 用户管理 453
17.2.1 用户管理涉及的文件 453
17.2.2 加入新用户的过程 454
17.2.3 添加用户命令(useradd) 455
17.2.4 删除用户的注册(userdel) 455
17.3 誊清(更新)系统缓冲区 456
17.4 检查和修复文件系统 456
17.5 构造、安装和拆卸文件系统 458
17.5.1 建立特别文件(mknod) 458
17.5.2 构造文件系统(mkfs) 458
17.5.3 安装文件系统(mount) 459
17.5.4 拆卸一个文件系统(umount) 459
17.6 定时运行程序 460
17.6.1 在指定时刻运行Shell程序(at) 460
17.6.2 时钟精灵(cron) 460
习题17 461
第18章 UNIX系统网络管理 462
18.1 配置TCP/IP 462
18.1.1 网络软件的安装 462
18.1.2 设置TCP/IP文件 462
18.1.3 设置监听程序 464
18.2 网络服务监控进程 465
18.3 域名服务系统 466
18.3.1 域名服务 466
18.3.2 域名系统 466
18.3.3 域名解析 467
18.3.4 逆向域名解析 467
18.3.5 DNS数据库 468
18.3.6 域名服务器的配置 469
18.4 网络文件系统NFS 470
18.4.1 NFS的概念和原理 470
18.4.2 NFS服务器的设置 470
18.4.3 NFS客户机的设置 471
18.5 电子邮政系统 473
18.5.1 邮件信箱 473
18.5.2 电子邮政设置文件 473
18.5.3 sendmail的设置文件 474
18.5.4 sendmail命令的参数 476
18.6 WWW服务器的配置 476
18.6.1 WWW服务 477
18.6.2 虚拟主机服务 480
18.6.3 代理服务器 481
习题18 481
附录A:参考文献 483