您现在的位置: 首页 / 产品中心/ 华章分社/ FreeBSD操作系统设计与实现 (原书第2版)

FreeBSD操作系统设计与实现 (原书第2版)

ISBN:978-7-111-68997-3

作者:(美)马歇尔·柯克·麦库西克,(美)乔治·V. 内维尔-尼尔,(美)罗伯特·N. M. 沃森著

定价:¥199.00

本站图书均由机械工业出版社旗下电子商务网站提供

图书详情
内容提要
目录
CIP
本书由FreeBSD系统的三位引领者撰写,视角专业,内容全面。相对于上一版,书中约1/3的内容是全新的,约1/3的内容做了大幅修订,涵盖FreeBSD 5和FreeBSD 11之间的所有重大改进。
本书首先简要概述FreeBSD内核的设计和实现,然后从系统调用级别开始讨论FreeBSD内核,从接口到内核再到硬件逐层深入。在讲解关键的设计决策时,详细阐述实现每个重要系统组件——进程管理、安全、虚拟内存、I/O系统、文件系统、套接字IPC和网络等——所使用的概念、数据结构和算法。

本书特色
讨论使用FreeBSD Jail的高度可扩展和轻量级虚拟化。
讨论使用Xen和Virtio设备半虚拟化的虚拟机加速。
介绍新的安全特性,如Capsicum沙箱和GELI加密磁盘保护。
全面涵盖NFSv4和Open Solaris ZFS支持。
引入FreeBSD增强的卷管理和新的日志软更新。
解释DTrace的细粒度过程调试/分析。
介绍在网络、无线和USB支持方面的主要更新。
译者序
前言
作者简介
第一部分 概述
第1章 BSD系统的历史和目标2
1.1 UNIX系统的历史2
1.1.1 UNIX系统的起源2
1.1.2 Research小组的UNIX系统3
1.1.3 AT&T UNIX System Ⅲ和System V4
1.1.4 伯克利软件发布5
1.1.5 UNIX无处不在6
1.2 BSD和其他系统6
1.3 BSD向开放源代码的转变8
1.3.1 Networking Release 28
1.3.2 法律诉讼10
1.3.3 4.4BSD11
1.3.4 4.4BSD-Lite Release 211
1.4 FreeBSD的开发模式12
第2章 FreeBSD设计概述16
2.1 FreeBSD的功能和内核16
2.2 内核结构17
2.3 内核服务20
2.4 进程管理21
2.4.1 信号22
2.4.2 进程组和会话23
2.5 安全23
2.5.1 进程凭证24
2.5.2 特权模型25
2.5.3 自主访问控制25
2.5.4 能力模型25
2.5.5 Jail轻型虚拟化26
2.5.6 强制访问控制27
2.5.7 事件审计27
2.5.8 密码学与随机数生成器28
2.6 内存管理28
2.6.1 BSD内存管理设计要点29
2.6.2 内核中的内存管理30
2.7 I/O系统概述31
2.7.1 描述符与I/O31
2.7.2 描述符管理33
2.7.3 设备34
2.7.4 套接字IPC34
2.7.5 分散-收集I/O35
2.7.6 多文件系统支持35
2.8 设备36
2.9 快速文件系统36
2.10 Zettabyte文件系统40
2.11 网络文件系统41
2.12 进程间通信41
2.13 网络层协议42
2.14 传输层协议43
2.15 系统启动和停止43
习题44
第3章 内核服务45
3.1 内核结构45
3.1.1 系统进程45
3.1.2 系统入口46
3.1.3 运行时的内核结构46
3.1.4 内核的入口48
3.1.5 从内核返回49
3.2 系统调用49
3.2.1 调用结果的处理49
3.2.2 从系统调用返回50
3.3 陷阱和中断51
3.3.1 I/O设备中断51
3.3.2 软件中断51
3.4 时钟中断52
3.4.1 统计和进程调度53
3.4.2 超时54
3.5 内存管理服务55
3.6 时间服务58
3.6.1 真实时间59
3.6.2 外部表示59
3.6.3 调整时间59
3.6.4 时间间隔60
3.7 资源服务60
3.7.1 进程优先级60
3.7.2 资源利用61
3.7.3 资源限制61
3.7.4 文件系统配额62
3.8 内核跟踪工具62
3.8.1 系统调用跟踪62
3.8.2 DTrace63
3.8.3 内核跟踪66
习题68
第二部分 进程
第4章 进程管理70
4.1 进程管理概述70
4.1.1 多道程序设计71
4.1.2 调度72
4.2 进程状态73
4.2.1 进程结构75
4.2.2 线程结构78
4.3 上下文切换79
4.3.1 线程状态79
4.3.2 底层上下文切换80
4.3.3 主动上下文切换80
4.3.4 同步84
4.3.5 互斥锁同步85
4.3.6 互斥锁接口87
4.3.7 锁同步88
4.3.8 死锁预防89
4.4 线程调度91
4.4.1 低级调度器91
4.4.2 线程运行队列和上下文切换92
4.4.3 分时线程调度93
4.4.4 多处理器调度98
4.4.5 自适应空闲100
4.4.6 传统的分时线程调度100
4.5 创建进程101
4.6 终止进程102
4.7 信号103
4.7.1 发送信号106
4.7.2 传输信号108
4.8 进程组和会话110
4.8.1 进程组110
4.8.2 会话111
4.8.3 作业控制112
4.9 进程的调试114
习题116
第5章 安全性118
5.1 操作系统安全119
5.2 安全模型120
5.2.1 进程模型120
5.2.2 自主与强制访问控制120
5.2.3 可信计算基121
5.2.4 其他内核安全特性121
5.3 进程凭证121
5.3.1 凭证结构122
5.3.2 凭证内存模型123
5.3.3 访问控制校验124
5.4 用户和组124
5.5 特权模型126
5.5.1 隐式特权127
5.5.2 显式特权127
5.6 进程间访问控制128
5.6.1 可见性129
5.6.2 信号129
5.6.3 调度控制129
5.6.4 等待进程终止130
5.6.5 调试130
5.7 自主访问控制130
5.7.1 虚拟文件系统接口与DAC131
5.7.2 对象属主与组132
5.7.3 UNIX权限132
5.7.4 访问控制列表134
5.7.5 POSIX.1e访问控制列表136
5.7.6 NFSv4访问控制列表138
5.8 Capsicum能力模型141
5.8.1 Capsicum应用体系结构142
5.8.2 能力系统142
5.8.3 能力143
5.8.4 能力模型145
5.9 Jail146
5.10 强制访问控制框架151
5.10.1 强制策略151
5.10.2 设计的指导原则152
5.10.3 MAC框架的体系结构153
5.10.4 启动框架154
5.10.5 策略注册155
5.10.6 框架入口点设计考量155
5.10.7 策略入口点设计考量156
5.10.8 内核服务入口点调用157
5.10.9 策略组合158
5.10.10 给对象打标签159
5.10.11 标签的生命周期与存储管理159
5.10.12 标签同步162
5.10.13 从用户空间进行策略无关的标签管理163
5.11 安全事件审计163
5.11.1 审计事件与记录164
5.11.2 BSM审计记录与审计跟踪165
5.11.3 内核审计的实现166
5.12 加密服务168
5.12.1 加密框架168
5.12.2 随机数生成器170
5.13 GELI全磁盘加密173
5.13.1 机密性和完整性保护173
5.13.2 密钥管理174
5.13.3 启动GELI174
5.13.4 加密块保护175
5.13.5 I/O模型176
5.13.6 不足176
习题177
第6章 存储管理178
6.1 术语178
6.1.1 进程与内存179
6.1.2 调页机制180
6.1.3 替换算法180
6.1.4 工作集模型181
6.1.5 交换机制181
6.1.6 虚拟内存的优点182
6.1.7 虚拟内存的硬件要求182
6.2 FreeBSD 虚拟内存系统概述183
6.3 内核的存储管理185
6.3.1 内核映射和子映射186
6.3.2 内核地址空间的分配188
6.3.3 slab分配器190
6.3.4 keg分配器191
6.3.5 zone分配器192
6.3.6 内核malloc194
6.3.7 内核zone分配器196
6.4 进程独立拥有的资源197
6.4.1 FreeBSD的进程虚拟地址空间197
6.4.2 缺页处理199
6.4.3 映射到vm_object199
6.4.4 vm_object201
6.4.5 vm_object到页面201
6.5 共享内存202
6.5.1 mmap模型203
6.5.2 共享映射205
6.5.3 私有映射205
6.5.4 压缩影子链207
6.5.5 私有快照208
6.6 创建新进程209
6.6.1 预留内核资源210
6.6.2 复制用户地址空间211
6.6.3 不通过复制创建新进程211
6.7 执行一个文件212
6.8 操作进程地址空间213
6.8.1 改变进程大小213
6.8.2 文件映射214
6.8.3 改变保护权限215
6.9 终止进程215
6.10 调页器接口216
6.10.1 vnode调页器218
6.10.2 设备调页器219
6.10.3 物理内存调页器220
6.10.4 交换调页器221
6.11 调页机制224
6.11.1 硬件高速缓存的设计228
6.11.2 硬件内存管理229
6.11.3 超级页231
6.12 页面替换235
6.12.1 调页参数237
6.12.2 pageout守护进程237
6.12.3 交换机制240
6.12.4 换入进程242
6.13 可移植性243
6.13.1 pmap模块的作用243
6.13.2 初始化和启动245
6.13.3 分配和释放映射248
6.13.4 改变映射的访问和wiring属性249
6.13.5 物理页面使用信息的维护251
6.13.6 初始化物理页面251
6.13.7 管理内部数据结构252
习题252
第三部分 I/O系统
第7章 I/O系统概述256
7.1 描述符管理和服务257
7.1.1 打开文件条目258
7.1.2 描述符管理260
7.1.3 异步I/O261
7.1.4 文件描述符锁261
7.1.5 描述符的多路I/O复用263
7.1.6 select的实现265
7.1.7 kqueue和kevent267
7.1.8 数据在内核中的迁移269
7.2 本地进程间交互270
7.2.1 信号量272
7.2.2 消息队列273
7.2.3 共享内存274
7.3 虚拟文件接口275
7.3.1 vnode的内容275
7.3.2 vnode的操作277
7.3.3 路径名的转换278
7.3.4 导出文件系统服务278
7.4 独立于文件系统的服务279
7.4.1 名字缓存281
7.4.2 缓冲区管理282
7.4.3 缓冲区管理的实现284
7.5 可堆叠的文件系统285
7.5.1 简单的文件系统层287
7.5.2 联合文件系统288
7.5.3 其他文件系统290
习题291
第8章 设备292
8.1 设备概述292
8.1.1 PC I/O体系结构293
8.1.2 FreeBSD大容量存储I/O子系统的结构295
8.1.3 设备命名和访问296
8.2 从用户到设备的I/O映射297
8.2.1 设备驱动程序298
8.2.2 I/O队列299
8.2.3 中断处理299
8.3 字符设备299
8.3.1 原始设备和物理I/O301
8.3.2 面向字符的设备302
8.3.3 字符设备驱动程序入口点302
8.4 磁盘设备303
8.4.1 磁盘设备驱动程序入口点303
8.4.2 磁盘I/O请求排序303
8.4.3 磁盘标签304
8.5 网络设备305
8.5.1 网络设备驱动程序入口点306
8.5.2 配置与控制306
8.5.3 数据包接收307
8.5.4 数据包传输309
8.6 终端处理309
8.6.1 终端处理模式310
8.6.2 用户接口312
8.6.3 进程组、会话和终端控制313
8.6.4 终端操作313
8.6.5 终端输出(上半部分)314
8.6.6 终端输出(下半部分)315
8.6.7 终端输入315
8.6.8 关闭终端设备316
8.7 GEOM层316
8.7.1 术语和拓扑规则317
8.7.2 改变拓扑318
8.7.3 操作320
8.7.4 拓扑灵活性321
8.8 CAM层322
8.8.1 通过CAM子系统的SCSI I/O请求的路径323
8.8.2 ATA磁盘325
8.9 设备配置325
8.9.1 设备标识327
8.9.2 自动配置数据结构329
8.9.3 资源管理333
8.10 设备虚拟化334
8.10.1 与虚拟机监控程序的交互335
8.10.2 Virtio336
8.10.3 Xen339
8.10.4 设备直通346
习题346
第9章 快速文件系统348
9.1 分层文件系统管理348
9.2 inode结构350
9.2.1 inode格式的改变351
9.2.2 扩展属性352
9.2.3 新的文件系统功能354
9.2.4 文件标志355
9.2.5 动态inode356
9.2.6 inode管理357
9.3 命名359
9.3.1 目录359
9.3.2 在目录中查找名称360
9.3.3 路径名转换362
9.3.4 链接363
9.4 配额365
9.5 文件锁定368
9.6 软更新372
9.6.1 在文件系统中的更新依赖373
9.6.2 依赖的结构376
9.6.3 位图依赖跟踪378
9.6.4 inode依赖跟踪378
9.6.5 直接块依赖跟踪379
9.6.6 间接块依赖跟踪380
9.6.7 新间接块的依赖跟踪381
9.6.8 新目录入口的依赖跟踪382
9.6.9 新目录依赖跟踪384
9.6.10 目录入口移除依赖项跟踪385
9.6.11 文件截断385
9.6.12 文件和目录inode回收385
9.6.13 目录入口重命名依赖关系跟踪386
9.6.14 软更新的fsync请求386
9.6.15 软更新的文件删除要求387
9.6.16 fsck的软更新要求389
9.7 文件系统快照389
9.7.1 创建一个文件系统快照389
9.7.2 维护文件系统快照391
9.7.3 大文件系统快照392
9.7.4 后台fsck393
9.7.5 用户可见的快照394
9.7.6 实时转储394
9.8 日志软更新394
9.8.1 背景和简介395
9.8.2 与其他实现的兼容性395
9.8.3 日志格式395
9.8.4 需要日志记录的修改396
9.8.5 日志的额外需求397
9.8.6 恢复进程398
9.8.7 性能399
9.8.8 未来工作400
9.8.9 跟踪文件移除依赖400
9.9 本地文件存储402
9.9.1 文件存储概述402
9.9.2 用户I/O到一个文件的过程404
9.10 伯克利快速文件系统406
9.10.1 伯克利快速文件系统的组织406
9.10.2 启动块408
9.10.3 优化存储利用率408
9.10.4 对文件进行读写409
9.10.5 布局策略411
9.10.6 分配机制413
9.10.7 块聚类416
9.10.8 基于分区的分配418
习题419
第10章 Zettabyte文件系统421
第11章 网络文件系统422
11.1 概述422
11.2 结构和操作424
11.2.1 FreeBSD NFS的实现428
11.2.2 客户端-服务器端交互432
11.2.3 安全问题432
11.2.4 性能提升技巧433
11.3 NFS演进435
11.3.1 命名空间439
11.3.2 属性440
11.3.3 访问控制列表441
11.3.4 缓存、代理和回调441
11.3.5 锁447
11.3.6 安全448
11.3.7 崩溃恢复450
习题451
第四部分 进程间通信
第12章 进程间通信454
12.1 进程间交互模型454
12.2 实现结构和概述458
12.3 内存管理460
12.3.1 mbuf460
12.3.2 存储管理算法463
12.3.3 mbuf实用例程463
12.4 IPC数据结构464
12.4.1 套接字地址468
12.4.2 锁469
12.5 建立连接469
12.6 数据传输471
12.6.1 传输数据471
12.6.2 接收数据473
12.7 关闭套接字475
12.8 网络通信协议的内部结构476
12.8.1 数据流477
12.8.2 通信协议478
12.9 套接字到协议接口480
12.9.1 用户请求协议例程481
12.9.2 控制输出协议例程483
12.10 协议到协议的接口484
12.10.1 pr_output484
12.10.2 pr_input485
12.10.3 pr_ctlinput485
12.11 协议到网络的接口486
12.11.1 网络接口和链路层协议486
12.11.2 数据包传输492
12.11.3 数据包接收492
12.12 缓冲和流控493
12.12.1 缓冲协议策略494
12.12.2 队列限制494
12.13 网络虚拟化494
习题496
第13章 网络层协议498
13.1 IPv4498
13.1.1 IPv4地址500
13.1.2 广播地址501
13.1.3 Internet组播502
13.1.4 链路层地址解析503
13.2 ICMP504
13.3 IPv6506
13.3.1 IPv6地址507
13.3.2 IPv6数据包格式509
13.3.3 切换到套接字API510
13.3.4 自动配置511
13.4 Internet协议代码结构515
13.4.1 输出515
13.4.2 输入517
13.4.3 转发518
13.5 路由519
13.5.1 内核路由表520
13.5.2 路由选择查询522
13.5.3 路由选择重定向525
13.5.4 路由表接口525
13.5.5 用户级路由选择策略526
13.5.6 用户级路由选择接口:路由选择套接字526
13.6 原始套接字527
13.6.1 控制块528
13.6.2 输入处理528
13.6.3 输出处理529
13.7 安全529
13.7.1 IPSec概述530
13.7.2 安全协议531
13.7.3 密钥管理533
13.7.4 IPSec实现537
13.8 数据包处理框架539
13.8.1 伯克利数据包过滤器539
13.8.2 IP防火墙540
13.8.3 IPFW和Dummynet541
13.8.4 数据包过滤器544
13.8.5 netgraph545
13.8.6 netmap549
习题551
第14章 传输层协议553
14.1 Internet端口与关联553
14.2 用户数据报协议554
14.2.1 初始化555
14.2.2 输出555
14.2.3 输入555
14.2.4 控制操作556
14.3 传输控制协议556
14.3.1 TCP连接状态558
14.3.2 序列变量561
14.4 TCP算法562
14.4.1 定时器563
14.4.2 往返时间的估计565
14.4.3 建立连接565
14.4.4 SYN缓存567
14.4.5 SYN cookie568
14.4.6 关闭连接569
14.5 TCP输入处理569
14.6 TCP输出处理572
14.6.1 发送数据573
14.6.2 避免糊涂窗口综合征573
14.6.3 避免小数据包574
14.6.4 延迟确认与窗口更新575
14.6.5 选择性确认575
14.6.6 重传状态577
14.6.7 慢启动578
14.6.8 缓冲区与窗口大小579
14.6.9 使用慢启动进行拥塞避免580
14.6.10 快速重传581
14.6.11 模块化拥塞控制582
14.6.12 Vegas算法584
14.6.13 Cubic算法584
14.7 流控制传输协议585
14.7.1 大数据块585
14.7.2 关联建立586
14.7.3 数据传输587
14.7.4 关联关闭589
14.7.5 多宿主和心跳589
习题591
第五部分 系统运行
*第15章 系统启动与关闭594
*术语表
*参考文献
图书在版编目(CIP)数据
FreeBSD操作系统设计与实现:原书第2版/(美)马歇尔·柯克·麦库西克,(美)乔治·V. 内维尔-尼尔,(美)罗伯特·N. M. 沃森著;陈向群等译. --北京:机械工业出版社,2021.9
书名原文:The Design and Implementation of the FreeBSD Operating System,Second Edition
ISBN 978-7-111-68997-3
I. ①F… II.①马…  ②乔…  ③罗…  ④陈… III. ①UNIX操作系统 IV.①TP316.81
中国版本图书馆CIP数据核字(2021)第172115号
相关图书
浏览此书同时浏览过的图书