《操作系统教程 第3版》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:陆松年编著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2010
  • ISBN:9787121103353
  • 页数:485 页
图书介绍:本书共分3篇:第1篇介绍操作系统的基本原理及较常用的操作系统实例,如UNIX、Linux、Solaris、Windows 2000/XP/2003/Vista/2008/7等;第2篇介绍在UNIX和嵌入式Linux系统下的系统程序设计、应用开发工具及开发技术;第3篇介绍了UNIX系统管理和系统网络管理技术。

第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