《FREEBSD操作系统设计与实现 第2版 英文版》PDF下载

  • 购买积分:22 如何计算积分?
  • 作  者:(美)MARSHALL KIRK MCKUSICK,GEORGE V.NEVILLE-NEIL,ROBERT N.M.WATSON著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2016
  • ISBN:7115413499
  • 页数:846 页
图书介绍:

第1部分 概述 1

第1章 历史和目标 3

1.1 UNIX系统的历史 3

起源 3

研究UNIX 4

AT&TUNIX SystemⅢ和System Ⅴ 5

伯克利软件分发 6

世界上的UNIX 7

1.2 BSD和其他系统 7

用户社区的影响 8

1.3 BSD向开源的过渡 9

网络发布2 10

诉讼 11

4.4BSD 13

4.4BSD-Lite版本2 13

1.4 FreeBSD开发模型 14

参考文献 17

第2章 FreeBSD设计概述 21

2.1 FreeBSD组件与内核 21

内核 22

2.2 内核组织 23

2.3 内核服务 26

2.4 进程管理 26

信号 28

进程组和会话 29

2.5 安全 29

进程凭证 31

特权模式 31

自由访问控制 32

能力模型 32

Jail轻型虚拟化 32

强制访问控制 34

事件审计 35

加密和随机数生成器 35

2.6 存储管理 36

BSD存储管理设计决策 36

内核中的存储管理 38

2.7 I/O系统概述 39

描述符和I/O 39

描述符管 41

设备 42

套接字IPC 42

分散-收集I/O 43

多文件系统支持 43

2.8 设备 44

2.9 快速文件系统 45

文件存储 48

2.10 泽字节文件系统 49

2.11 网络文件系统 50

2.12 进程间通信 50

2.13 网络层协议 51

2.14 传输层协议 52

2.15 系统启动与关闭 52

练习 54

参考文献 54

第3章 内核服务 57

3.1 内核组织 57

系统进程 57

系统入口 58

运行时管理 59

内核入口 60

从内核返回 61

3.2 系统调用 62

返回处理机制 62

从系统调用返回 63

3.3 陷阱和中断 64

I/O设备中断 64

软件中断 65

3.4 时钟中断 65

统计和进程调度机制 66

超时 67

3.5 存储管理服务 69

3.6 计时服务 73

实时 73

外部表示 73

时间调整 74

间隔时间 74

3.7 资源服务 75

进程优先级 75

资源利用 75

资源限制 76

文件系统配额 77

3.8 内核跟踪组件 77

系统调用跟踪 77

DTrace 78

内核跟踪 82

练习 84

参考文献 85

第Ⅱ部分 进程 87

第4章 进程管理 89

4.1 进程管理简介 89

多程序设计 90

调度机制 91

4.2 进程状态 92

进程架构 94

线程架构 98

4.3 上下文切换 99

线程状态 100

低层上下文切换 100

自愿上下文切换 101

同步 106

互斥同步 107

互斥接口 109

锁同步 110

死锁预防 112

4.4 线程调度机制 114

低层调度器 114

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

分时线程调度 117

多处理器调度 122

自适应空闲 125

传统的分时线程调度 125

4.5 创建进程 126

4.6 终止进程 128

4.7 信号 129

发出信号 132

传输信号 135

4.8 进程组和会话 136

进程组 137

会话 138

作业控制 139

4.9 进程调试 142

练习 144

参考文献 146

第5章 安全 147

5.1 操作系统安全 148

5.2 安全模型 149

进程模型 149

自由和强制访问控制 150

受信计算基(TCB) 151

其他内核安全特性 151

5.3 进程凭证 151

凭证架构 152

凭证存储模型 153

访问控制校验 153

5.4 用户和组 154

Setuid和 Setgid 二进制 155

5.5 特权模型 157

隐式特权 157

显式特权 157

5.6 进程间访问控制 159

可见性 160

信号 160

调度控制 160

等待进程终止 161

调试 161

5.7 自由访问控制 161

虚拟文件系统接口和DAC 162

对象属主和组 163

UNIX权限 164

访问控制列表(ACL) 165

POSIX.1 e访问控制列表 168

NFSv4访问控制列表 171

5.8 Capsicum能力模型 174

Capsicum应用架构 175

能力系统 176

能力 177

能力模型 179

5.9 Jail 180

5.10 强制访问控制框架 184

强制策略 186

设计原则指导 187

MAC框架的架构 188

启动框架 189

策略注册 190

框架入口点设计考量 191

策略入口点考量 192

内核服务入口点调用 193

策略组成 194

给对象打标签 195

标签生命周期和存储管理 196

标签同步 199

从用户空间进行策略无关的标签管理 199

5.11 安全事件审计 200

审计事件和记录 201

BSM审计记录和审计跟踪 202

内核审计的实施 203

5.12 加密服务 206

加密框架 206

随机数生成器 208

5.13 GELI全磁盘加密 212

保密性和完整性保护 212

密钥管理 213

启动GELI 214

加密块保护 215

I/O模型 216

限制 216

练习 217

参考文献 217

第6章 存储管理 221

6.1 术语 221

进程和存储 222

分页 223

替换算法 224

工作集模型 225

交换 225

虚拟存储的优势 225

虚拟存储的硬件需求 226

6.2 FreeBSD虚拟存储系统概述 227

用户地址空间管理 228

6.3 内核存储管理 230

内核映射和子映射 231

内核地址空间分配 233

Slab分配器 236

Keg分配器 238

Zone分配器 239

Malloc内核 241

内核Zone分配器 243

6.4 每进程资源 244

FreeBSD进程虚拟地址空间 245

页面故障调度 245

映射到Vm_objects 247

Vm_objects 249

Vm_object到页面 249

6.5 共享存储 250

Mmap模型 251

共享映射 253

私有映射 254

阴影链的崩溃 257

私有快照 258

6.6 创建一个新的进程 258

预留内核资源 259

用户地址空间的重复 260

不使用复制的方式来创建新的进程 261

6.7 执行文件 262

6.8 进程以及地址空间的操作 263

改变进程的大小 263

文件映射 264

改变保护 266

6.9 终止进程 266

6.10 分页器接口 267

Vnode分页器 269

设备分页器 270

物理存储分页器 272

交换分页器 272

6.11 分页机制 276

硬件缓存设计 280

硬件存储管理 282

超级页面 284

6.12 页面替换 289

分页参数 291

分页守护进程 292

交换 295

进程内的交换 296

6.13 可移植性 298

pmap模块的角色 299

初始化和启动 301

映射分配和释放 304

更改映射的访问和布线属性 306

物理页面使用信息的维护 307

物理页面的初始化 308

内部数据结构的管理 308

练习 308

参考文献 310

第Ⅲ部分 I/O系统 313

第7章 I/O系统概述 315

7.1 描述符管理和服务 316

开放文件入口 318

描述符管理 319

异步I/O 321

文件描述符锁定 322

描述符上的多路复用I/O 324

Select的实现 327

Kqueues和Kevents 329

数据在内核中的移动 332

7.2 本地进程间通信 333

信号量 335

消息队列 337

共享存储 338

7.3 虚拟文件系统接口 339

Vnode的内容 339

Vnode的操作 342

路径名的转换 342

导出文件系统服务 343

7.4 独立于文件系统的服务 344

名称缓存 346

缓冲管理 347

缓冲管理的实现 350

7.5 可堆叠的文件系统 352

简单的文件系统层 354

联合文件系统 355

其他文件系统 357

练习 358

参考文献 359

第8章 设备 361

8.1 设备概述 361

PC I/O架构 362

FreeBSD海量存储I/O子系统的架构 364

设备命名和访问 366

8.2 从用户到设备的I/O映射 367

设备驱动 368

I/O队列机制 369

中断处理 370

8.3 字符设备 370

原始设备和物理I/O 372

面向字符的设备 373

字符设备驱动的入口点 373

8.4 磁盘设备 374

磁盘设备驱动的入口点 374

磁盘I/O 请求的排序 375

磁盘卷标 376

8.5 网络设备 378

网络驱动的入口点 378

配置和控制 379

接收数据包 380

传输数据包 381

8.6 终端处理 382

终端进程模型 383

用户接口 385

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

终端的操作 388

终端输出(上半部分) 388

终端输出(下半部分) 389

终端输入 390

关闭终端设备 391

8.7 GEOM层 391

术语和拓扑规则 392

更改拓扑 393

操作 396

拓扑的灵活性 397

8.8 CAM层 399

通过CAM子系统的SSCI I/O请求路径 400

ATA磁盘 402

8.9 设备配置 402

设备识别 405

自动配置数据结构 407

资源管理 412

8.10 设备虚拟化 414

与Hypervisor进行交互 414

Virtio 415

Xen 419

设备直通 427

练习 428

参考文献 429

第9章 快速文件系统 431

9.1 分层的文件系统管理 431

9.2 Inode的架构 433

更改Inode格式 435

扩展属性 436

新的文件系统能力 438

文件标记 439

动态Inode 441

Inode管理 442

9.3 命名 443

目录 444

在目录中查找名字 446

路径名转换 447

链接 449

9.4 配额 451

9.5 文件锁定 454

9.6 软更新 459

在文件系统中更新依赖 460

依赖的架构 464

位图依赖跟踪 466

Inode依赖跟踪 467

直接块依赖跟踪 469

间接块依赖跟踪 470

新间接块的依赖跟踪 471

新目录入口的依赖跟踪 472

新的目录依赖跟踪 474

目录入口移除依赖跟踪 475

文件截断 476

文件和目录Inode复垦 476

目录入口重命名依赖跟踪 476

软更新的Fsync请求 477

软更新的文件移除需求 478

fsck的软更新需求 480

9.7 文件系统快照 480

创建一个文件系统快照 481

维护一个文件系统快照 483

大型文件系统快照 484

fsck的背景知识 486

用户可见的快照 487

实时转储 487

9.8 记录软更新 487

背景和简介 487

与其他实现的兼容 488

记录的格式 488

需要进行记录的修改 489

与记录相关的额外需求 490

恢复进程 492

性能 493

后续工作 494

跟踪文件移除依赖 495

9.9 本地文件存储 496

文件存储概述 497

用户对文件的I/O 499

9.10 伯克利快速文件系统 501

伯克利快速文件系统的组织 502

引导块 503

存储利用的优化 504

读写文件 505

布局策略 507

分配机制 510

块聚类 514

基于分区的分配 516

练习 517

参考文献 519

第10章 泽字节文件系统 523

10.1 简介 523

10.2 ZFS的组织 527

ZFS Dnode 528

ZFS块指针 529

ZFS objset架构 531

10.3 ZFS架构 532

MOS层 533

对象集层 534

10.4 ZFS操作 535

将新的数据写入磁盘 536

记录日志 538

RAIDZ 540

快照 542

ZFS块分配 542

释放块 543

删除重复数据 545

远程复制 546

ZFS设计权衡 547

练习 549

参考文献 549

第11章 网络文件系统 551

11.1 概述 551

11.2 架构和操作 553

FreeBSD FNS 的实现 558

客户端与服务器的交互 562

安全问题 564

用于提升性能的技术 565

11.3 NFS的演进 567

名称空间 572

属性 572

访问控制列表 574

缓存、委派和回调 574

锁定 581

安全 583

崩溃恢复 584

练习 586

参考文献 587

第Ⅳ部分 进程间通信 591

第12章 进程间通信 593

12.1 进程间通信模型 593

使用套接字 596

12.2 实现架构和概述 599

12.3 存储管理 601

Mbufs 601

存储管理算法 605

Mbuf实用例程 606

12.4 IPC数据结构 606

套接字地址 611

锁 612

12.5 连接建立 612

12.6 数据传输 615

传输数据 616

接收数据 617

12.7 关闭套接字 620

12.8 网络通信协议内部架构 621

数据流 623

通信协议 624

12.9 套接字与协议之间的接口 626

协议用户请求例程 627

协议控制输出例程 630

12.10 协议与协议的接口 631

pr_output 632

pr_input 632

pr_ctlinput 633

12.11 协议与网路的接口 634

网络接口与链路层协议 634

数据包传输 641

数据包接收 642

12.12 缓冲和流控制 643

协议缓冲策略 643

队列限制 643

12.13 网络虚拟化 644

练习 646

参考文献 648

第13章 网络层协议 649

13.1 IPv4 650

IPv4地址 652

广播地址 653

Internet多播 654

链路层地址解析 655

13.2 Internet控制消息协议(ICMP) 657

13.3 IPv6 659

IPv6地址 660

IPv6数据包格式 662

更改套接字API 664

自动配置 666

13.4 IP代码结构 670

输出 671

输入 673

转发 674

13.5 路由 675

内核路由表 677

路由查找 680

路由重定向 683

路由表接口 683

用户级路由策略 684

用户级路由接口:路由套接字 685

13.6 原始套接字 686

控制块 686

输入处理 687

输出处理 687

13.7 安全 688

IPSec概述 689

安全协议 690

密钥管理 693

IPSec实施 698

13.8 数据包处理框架 700

伯克利数据包过滤器 700

IP防火墙 701

IPFW和Dummynet 702

数据包过滤器(PF) 706

Netgraph 707

Netmap 712

练习 715

参考文献 717

第14章 传输层协议 721

14.1 Internet端口和关联 721

协议控制块 722

14.2 用户数据报协议(UDP) 723

初始化 723

输出 724

输入 724

控制操作 725

14.3 传输控制协议(TCP) 725

TCP连接状态 727

序列变量 730

14.4 TCP算法 732

计时器 733

估算往返时间 735

连接建立 736

SYN缓存 739

SYN Cookie 739

连接关闭 740

14.5 TCP输入处理 741

14.6 TCP输出处理 745

发送数据 746

避免笨窗口综合征 746

避免小数据包 747

延迟确认和窗口更新 748

选择性确认 749

重传状态 751

慢启动 752

缓存和窗口大小 754

带有慢启动的拥塞避免 755

快速重传 756

模块化拥塞控制 758

Vegas算法 759

Cubic算法 760

14.7 流控传输协议(SCTP) 761

大数据块 762

关联建立 762

数据传输 764

关联关闭 766

多宿主和心跳 767

练习 768

参考文献 770

第Ⅴ部分 系统操作 773

第15章 系统启动和关闭 775

15.1 固件和BIOS 776

15.2 引导加载程序 777

主引导记录和全局唯一标识分区表 778

二级引导加载程序:gptboot 779

末级引导加载程序:/boot/loader 779

在嵌入式平台上引导加载 781

15.3 内核引导 782

启动汇编语言 783

启动特定于平台的C 语言 784

模块化内核设计 785

模块初始化 785

基本的内核服务 787

内核线程初始化 792

设备模块初始化 794

可加载的内核模块 796

15.4 用户级初始化 798

/sbin/init 798

系统启动脚本 798

/usr/libexec/getty 799

/usr/bin/login 799

15.5 系统操作 800

内核配置 800

关闭和自动重启系统 801

系统调试 802

信息在内核中的传递 803

练习 805

参考文献 806

术语表 807