《FreeBSD操作系统设计与实现》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:(美)Marshall Kirk McKusick,(美)George V. Neville-Neil著;张辉译
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2006
  • ISBN:7115136858
  • 页数:516 页
图书介绍:本书对FreeBSD操作系统的内部结构进行了最全面、最新鲜、最权威的论述。

第一部分 综述 3

第1章 BSD系统的历史和目标 3

1.1 UNIX系统的历史 3

1.1.1 UNIX系统的起源 3

目录 3

1.1.2 Research小组的UNIX系统 4

1.1.3 AT T UNIX System Ⅲ和System Ⅴ 5

1.1.4 伯克利软件发布(BSD) 5

1.1.5 UNIX无处不在 6

1.2 BSD和其他系统 6

1.3 BSD向开放源代码的转变 8

1.3.1 Networking Release 2 8

1.3.2 法律诉讼 10

1.3.4 4.4BSD-Lite Release 2 11

1.3.3 4.4BSD 11

1.4 FreeBSD的开发模式 12

1.5 参考文献 15

第2章 FreeBSD设计概述 19

2.1 FreeBSD的功能和内核 19

2.2 内核结构 20

2.3 内核服务 22

2.4 进程管理 23

2.4.1 信号 24

2.4.2 进程组和会话 25

2.5 内存管理 25

2.5.1 BSD内存管理设计要点 26

2.5.2 内核中的内存管理 27

2.6.1 描述符与I/O 28

2.6 I/O系统 28

2.6.2 描述符管理 29

2.6.3 设备 30

2.6.4 套接口IPC 30

2.6.5 分散/聚集I/O 31

2.6.6 多文件系统支持 31

2.7 设备 32

2.8 文件系统 32

2.9 网络文件系统 35

2.10 终端 36

2.11 进程间通信 37

2.12 网络通信 37

2.15 复习题 38

2.14 系统运行 38

2.13 网络实现 38

2.16 参考文献 39

第3章 内核服务 41

3.1 内核结构 41

3.1.1 系统进程 41

3.1.2 系统入口 42

3.1.3 运行时刻的内核结构 42

3.1.4 内核的入口 43

3.1.5 从内核返回 44

3.2 系统调用 44

3.2.1 调用结果的处理 45

3.2.2 从系统调用返回 45

3.3.1 陷阱 46

3.3.2 I/O设备中断 46

3.3 陷阱和中断 46

3.3.3 软件中断 47

3.4 时钟中断 47

3.4.1 统计和进程调度 48

3.4.2 超时 49

3.5 内存管理服务 50

3.6 时间服务 53

3.6.1 真实时间 53

3.6.2 外部表示 54

3.6.3 调整时间 54

3.6.4 时间间隔 54

3.7 用户、用户组和其他身份标识 55

3.7.2 进程组和会话 57

3.7.1 主机标识符 57

3.8 资源服务 58

3.8.1 进程优先级 58

3.8.2 资源利用 58

3.8.3 资源限制 59

3.8.4 文件系统配额 59

3.9 系统运行服务 59

3.10 复习题 60

3.11 参考文献 61

第二部分 进程 65

第4章 进程管理 65

4.1 进程管理概述 65

4.1.1 多程序机制 66

4.1.2 调度 66

4.2 进程状态 67

4.2.1 进程结构 69

4.2.2 线程结构 71

4.3 上下文切换 72

4.3.1 线程状态 73

4.3.2 底层上下文切换 73

4.3.3 主动上下文切换 73

4.3.4 同步 75

4.3.5 互斥同步 78

4.3.6 锁管理器的锁 79

4.3.7 其他同步 80

4.4 线程调度 80

4.4.1 4.4BSD的调度程序 81

4.4.2 线程调度 81

4.4.3 线程优先级的计算 82

4.4.5 线程运行队列和上下文切换 83

4.4.4 线程优先级例程 83

4.4.6 ULE调度程序 85

4.5 创建进程 87

4.6 终止进程 89

4.7 信号 90

4.7.1 信号的历史 92

4.7.2 发送信号 92

4.7.3 接收信号 94

4.8 进程组和会话 95

4.8.1 会话 96

4.8.2 作业控制 98

4.9 监管环境 99

4.9.1 监管环境的语义 100

4.9.2 监管环境的实现 102

4.9.3 监管环境的限制 103

4.10 进程的调试 104

4.11 复习题 105

4.12 参考文献 107

第5章 存储管理 109

5.1 术语 109

5.1.1 进程与内存 110

5.1.2 调页机制 110

5.1.3 替换算法 111

5.1.4 工作集模型 112

5.1.5 交换机制 112

5.1.6 虚拟内存的优点 112

5.1.7 虚拟内存的硬件要求 113

5.2 FreeBSD虚拟内存系统概述 113

5.3 内核的存储管理 115

5.3.1 内核映射和子映射 116

5.3.2 内核地址空间的分配 117

5.3.3 内核的存储分配程序 117

5.3.4 内核的区域存储分配程序 119

5.4 进程独立拥有的资源 121

5.4.1 FreeBSD的进程虚拟地址空间 121

5.4.2 缺页处理 122

5.4.3 映射到对象 123

5.4.4 对象 124

5.4.5 对象到页面 124

5.5 共享存储 125

5.5.1 mmap模型 126

5.5.2 共享映射 127

5.5.3 私有映射 128

5.5.4 压缩影子链 129

5.5.5 私有快照 130

5.6 创建新进程 131

5.6.1 保留内核资源 131

5.6.2 复制用户地址空间 132

5.6.3 不通过复制创建新进程 133

5.7 执行一个文件 134

5.8 进程地址空间的操作 134

5.8.1 改变进程大小 135

5.8.2 文件映射 135

5.8.3 改变保护权限 136

5.9 终止进程 137

5.10 调页器接口 137

5.10.1 vnode调页器 139

5.10.2 设备调页器 140

5.10.3 物理内存调页器 141

5.10.4 交换调页器 141

5.11 调页机制 144

5.11.1 硬件高速缓存的设计 147

5.11.2 页面填色 148

5.12 页面替换 150

5.12.1 调页参数 151

5.12.2 pageout守护进程 152

5.12.3 交换机制 155

5.12.4 换入进程 156

5.13 可移植性 157

5.13.1 pmap模块的作用 159

5.13.2 初始化和启动 161

5.13.3 分配和释放映射 163

5.13.4 改变映射的访问和固定属性 164

5.13.5 管理页表的使用信息 165

5.13.6 初始化物理页面 166

5.13.7 管理内部数据结构 166

5.14 复习题 167

5.15 参考文献 168

第三部分 I/O系统 173

第6章 I/O系统概述 173

6.1 从用户到设备的I/O映射 173

6.1.1 设备驱动程序 174

6.1.2 I/O队列 175

6.1.3 中断处理 175

6.2 字符设备 175

6.2.1 原始设备和物理I/O 176

6.2.2 面向字符的设备 178

6.2.3 字符设备驱动程序的入口点 178

6.3 磁盘设备 179

6.3.1 块设备驱动程序的入口点 179

6.3.2 磁盘I/O请求的排序 179

6.3.3 磁盘标签 180

6.4 描述符的管理和服务 181

6.4.1 打开文件项 182

6.4.2 管理描述符 183

6.4.3 异步I/O 185

6.4.4 文件描述符的上锁机制 185

6.4.5 描述符上的多路I/O操作 187

6.4.6 select调用的实现 189

6.4.7 数据在内核中的转移 191

6.5 虚拟文件系统的接口 192

6.5.1 vnode的内容 193

6.5.2 对vnode的操作 195

6.5.3 路径名转换 195

6.5.4 文件系统的导出服务 196

6.6 与文件系统无关的服务 197

6.6.1 名字缓存 198

6.6.2 缓冲区管理 199

6.6.3 缓冲区管理的实现 201

6.7 可叠加的文件系统 203

6.7.1 简单的文件系统层 204

6.7.2 联合安装的文件系统 205

6.7.3 其他文件系统 207

6.9 参考文献 208

6.8 复习题 208

第7章 设备 210

7.1 设备概述 210

7.1.1 PC的I/O体系结构 210

7.1.2 FreeBSD海量存储I/O子系统的结构 212

7.1.3 设备的命名和访问 214

7.2 GEOM层 215

7.2.1 术语和拓扑规则 215

7.2.2 改变拓扑 217

7.2.3 运行 218

7.2.4 拓扑的灵活性 219

7.3 CAM层 220

7.3.1 SCSI子系统 220

7.3.2 I/O请求通过CAM子系统的路径 221

7.4 ATA层 222

7.5 配置设备 223

7.5.1 识别设备 226

7.5.2 自动配置数据结构 227

7.5.3 资源管理 231

7.6 复习题 232

7.7 参考文献 233

第8章 本地文件系统 234

8.1 文件系统的分层管理 234

8.2 inode的结构 235

8.2.1 inode格式的变化 237

8.2.2 扩展属性 238

8.2.3 文件系统的新功能 239

8.2.4 文件标志 240

8.2.5 动态的inode 241

8.2.6 管理inode 242

8.3 命名 243

8.3.1 目录 244

8.3.2 在目录中查找名字 245

8.3.3 路径名转换 247

8.3.4 链接 248

8.4 配额 249

8.5 文件上锁 252

8.6 软更新 256

8.6.1 文件系统中的更新依赖 257

8.6.2 依赖关系的数据结构 260

8.6.3 跟踪位映射表的依赖关系 262

8.6.4 跟踪inode的依赖关系 262

8.6.5 跟踪直接块的依赖关系 263

8.6.6 跟踪间接块的依赖关系 264

8.6.7 跟踪新间接块的依赖关系 265

8.6.8 跟踪新目录项的依赖关系 266

8.6.9 跟踪新目录的依赖关系 267

8.6.10 跟踪删除目录项时的依赖关系 269

8.6.11 截短文件 269

8.6.12 回收文件和目录的inode节点 269

8.6.13 跟踪目录项重命名时的依赖关系 270

8.6.14 跟踪删除文件时的依赖关系 270

8.6.15 fsync对软更新的要求 271

8.6.16 删除文件时对软更新的要求 272

8.6.17 fsck对软更新的要求 273

8.6.18 软更新的性能 274

8.7.1 创建文件系统快照 275

8.7 文件系统的快照 275

8.7.2 维护文件系统快照 277

8.7.3 大型文件系统的快照 278

8.7.4 快照性能 279

8.7.5 后台fsck 281

8.7.6 用户可见的快照 281

8.7.7 动态的转储 281

8.8 本地文件库 282

8.8.1 文件库概述 282

8.8.2 用户的文件I/O 283

8.9 伯克利快速文件系统 285

8.9.1 伯克利快速文件系统的组成 286

8.9.2 引导块 287

8.9.3 优化存储空间利用率 288

8.9.4 读写文件 289

8.9.5 布局策略 291

8.9.6 分配机制 292

8.9.7 将块组成簇 295

8.9.8 基于扩展的分配 296

8.10 复习题 297

8.11 参考文献 299

第9章 网络文件系统 303

9.1 历史和概述 303

9.2 NFS的结构和操作 305

9.2.1 NFS协议 308

9.2.2 FreeBSD的NFS实现 310

9.2.3 客户机/服务器的交互操作 313

9.2.4 RPC的传输问题 314

9.2.5 安全问题 315

9.3 提高性能的技术 316

9.3.1 租约 318

9.3.2 崩溃恢复 321

9.4 复习题 322

9.5 参考文献 323

第10章 终端处理 326

10.1 终端处理模式 326

10.2 行规程 327

10.3 用户接口 328

10.4 tty结构 329

10.5 进程组、会话和终端控制 331

10.6 C-list 331

10.7 RS-232和调制解调器控制 332

10.8.1 打开终端 333

10.8 终端操作 333

10.8.2 输出到行规程 334

10.8.3 终端的输出 335

10.8.4 终端的输入 335

10.8.5 ioctl例程 337

10.8.6 调制解调器转换 337

10.8.7 关闭终端设备 338

10.9 其他行规程 338

10.10 复习题 339

10.11 参考文献 339

第四部分 进程间通信 343

第11章 进程间通信 343

11.1 进程间通信的模型 343

11.2 实现的结构和概述 347

11.3 内存管理 348

11.3.1 mbuf 349

11.3.2 存储管理算法 351

11.3.3 mbuf工具例程 352

11.4 数据结构 353

11.4.1 通信域 353

11.4.2 套接口 354

11.4.3 套接口地址 356

11.4.4 锁 357

11.5 建立连接 357

11.6 传送数据 359

11.6.1 发送数据 360

11.6.2 接收数据 361

11.7 关闭套接口 363

11.8 本地进程间通信 364

11.8.1 信号量 365

11.8.2 消息队列 366

11.8.3 共享内存 367

11.9 复习题 368

11.10 参考文献 369

第12章 网络通信 370

12.1 内部结构 370

12.1.1 数据流 371

12.1.2 通信协议 372

12.1.3 网络接口 373

12.2 套接口到协议的接口 377

12.2.1 协议的用户请求例程 378

12.3 协议到协议的接口 380

12.2.2 协议的控制输出例程 380

12.3.1 pr_output 381

12.3.2 pr_input 381

12.3.3 pr_ctlinput 381

12.4 协议和网络的接口 382

12.4.1 发送数据包 383

12.4.2 接收数据包 383

12.5 路由选择 385

12.5.1 内核路由选择表 386

12.5.2 路由选择查找 388

12.5.3 路由选择重定向 390

12.5.4 路由选择表接口 391

12.5.5 用户级的路由选择策略 392

12.5.6 用户级路由选择接口:路由选择套接口 392

12.6.1 协议缓冲策略 393

12.6 缓冲和拥塞控制 393

12.6.2 队列限制 394

12.7 原始套接口 394

12.7.1 控制块 394

12.7.2 输入处理 395

12.7.3 输出处理 395

12.8 网络子系统的其他主题 395

12.8.1 带外数据 395

12.8.2 地址解析协议 396

12.9 复习题 397

12.10 参考文献 398

第13章 网络协议 400

13.1 IPv4网络协议 400

13.1.1 IPv4地址 401

13.1.2 广播地址 402

13.1.3 组播 403

13.1.4 端口与关联 403

13.1.5 协议控制块 403

13.2 UDP协议 404

13.2.1 初始化 405

13.2.2 输出 405

13.2.3 输入 406

13.2.4 控制操作 407

13.3 Internet协议(IP) 407

13.3.1 输出 408

13.3.2 输入 409

13.3.3 转发 410

13.4 TCP协议 410

13.4.1 TCP连接状态 412

13.4.2 序号变量 415

13.5 TCP算法 416

13.5.1 定时器 417

13.5.2 往返时间的估计 418

13.5.3 建立连接 419

13.5.4 SYN缓存 421

13.5.5 关闭连接 421

13.6 TCP输入处理 422

13.7 TCP输出处理 425

13.7.1 发送数据 425

13.7.2 避免糊涂窗口综合症 426

13.7.3 避免小数据包 427

13.7.4 确认延迟和窗口更新 427

13.7.6 慢启动 428

13.7.5 重发状态 428

13.7.7 源拥塞的处理 430

13.7.8 缓冲与窗口大小分配 430

13.7.9 使用慢启动避免拥塞 431

13.7.10 快速重发 432

13.8 ICMP协议 433

13.9 IPv6 434

13.9.1 IPv6地址 435

13.9.2 IPv6数据包格式 437

13.9.3 套接口API的调整 438

13.9.4 自动配置 439

13.10 安全 442

13.10.1 IPSec概述 442

13.10.2 安全协议 444

13.10.3 密钥管理 446

13.10.4 IPSec实现 449

13.10.5 密码子系统 451

13.11 复习题 452

13.12 参考文献 454

第五部分 系统运行 461

第14章 启动和关机 461

14.1 概述 461

14.2 引导 462

14.3 初始化内核 463

14.4 初始化内核模块 464

14.4.1 基本服务 465

14.4.2 初始化内核线程 466

14.4.3 初始化设备模块 467

14.4.4 内核的可加载模块 468

14.4.5 启动进程间通信 469

14.4.6 启动内核线程 470

14.5 用户级初始化 470

14.5.1 /sbin/init 471

14.5.2 系统的启动脚本 471

14.5.3 /usr/libexec/getty 472

14.5.4 /usr/bin/login 472

14.6 系统运行 472

14.6.1 内核的配置 472

14.6.2 系统关机与自动重启 473

14.6.3 系统调试 474

14.6.4 同内核传递信息 474

14.7 复习题 476

14.8 参考文献 476

术语表 477