内容简介
第1部分 概述
第1章 历史和目标
1.1 UNIX系统的历史
起源
研究UNIX
AT&TUNIX SystemⅢ和System Ⅴ
伯克利软件分发
世界上的UNIX
1.2 BSD和其他系统
用户社区的影响
1.3 BSD向开源的过渡
网络发布2
诉讼
4.4BSD
4.4BSD-Lite版本2
1.4 FreeBSD开发模型
参考文献
第2章 FreeBSD设计概述
2.1 FreeBSD组件与内核
内核
2.2 内核组织
2.3 内核服务
2.4 进程管理
信号
进程组和会话
2.5 安全
进程凭证
特权模式
自由访问控制
能力模型
Jail轻型虚拟化
强制访问控制
事件审计
加密和随机数生成器
2.6 存储管理
BSD存储管理设计决策
内核中的存储管理
2.7 I/O系统概述
描述符和I/O
描述符管
设备
套接字IPC
分散-收集I/O
多文件系统支持
2.8 设备
2.9 快速文件系统
文件存储
2.10 泽字节文件系统
2.11 网络文件系统
2.12 进程间通信
2.13 网络层协议
2.14 传输层协议
2.15 系统启动与关闭
练习
参考文献
第3章 内核服务
3.1 内核组织
系统进程
系统入口
运行时管理
内核入口
从内核返回
3.2 系统调用
返回处理机制
从系统调用返回
3.3 陷阱和中断
I/O设备中断
软件中断
3.4 时钟中断
统计和进程调度机制
超时
3.5 存储管理服务
3.6 计时服务
实时
外部表示
时间调整
间隔时间
3.7 资源服务
进程优先级
资源利用
资源限制
文件系统配额
3.8 内核跟踪组件
系统调用跟踪
DTrace
内核跟踪
练习
参考文献
第Ⅱ部分 进程
第4章 进程管理
4.1 进程管理简介
多程序设计
调度机制
4.2 进程状态
进程架构
线程架构
4.3 上下文切换
线程状态
低层上下文切换
自愿上下文切换
同步
互斥同步
互斥接口
锁同步
死锁预防
4.4 线程调度机制
低层调度器
线程运行队列和上下文切换
分时线程调度
多处理器调度
自适应空闲
传统的分时线程调度
4.5 创建进程
4.6 终止进程
4.7 信号
发出信号
传输信号
4.8 进程组和会话
进程组
会话
作业控制
4.9 进程调试
练习
参考文献
第5章 安全
5.1 操作系统安全
5.2 安全模型
进程模型
自由和强制访问控制
受信计算基(TCB)
其他内核安全特性
5.3 进程凭证
凭证架构
凭证存储模型
访问控制校验
5.4 用户和组
Setuid和 Setgid 二进制
5.5 特权模型
隐式特权
显式特权
5.6 进程间访问控制
可见性
信号
调度控制
等待进程终止
调试
5.7 自由访问控制
虚拟文件系统接口和DAC
对象属主和组
UNIX权限
访问控制列表(ACL)
POSIX.1 e访问控制列表
NFSv4访问控制列表
5.8 Capsicum能力模型
Capsicum应用架构
能力系统
能力
能力模型
5.9 Jail
5.10 强制访问控制框架
强制策略
设计原则指导
MAC框架的架构
启动框架
策略注册
框架入口点设计考量
策略入口点考量
内核服务入口点调用
策略组成
给对象打标签
标签生命周期和存储管理
标签同步
从用户空间进行策略无关的标签管理
5.11 安全事件审计
审计事件和记录
BSM审计记录和审计跟踪
内核审计的实施
5.12 加密服务
加密框架
随机数生成器
5.13 GELI全磁盘加密
保密性和完整性保护
密钥管理
启动GELI
加密块保护
I/O模型
限制
练习
参考文献
第6章 存储管理
6.1 术语
进程和存储
分页
替换算法
工作集模型
交换
虚拟存储的优势
虚拟存储的硬件需求
6.2 FreeBSD虚拟存储系统概述
用户地址空间管理
6.3 内核存储管理
内核映射和子映射
内核地址空间分配
Slab分配器
Keg分配器
Zone分配器
Malloc内核
内核Zone分配器
6.4 每进程资源
FreeBSD进程虚拟地址空间
页面故障调度
映射到Vm_objects
Vm_objects
Vm_object到页面
6.5 共享存储
Mmap模型
共享映射
私有映射
阴影链的崩溃
私有快照
6.6 创建一个新的进程
预留内核资源
用户地址空间的重复
不使用复制的方式来创建新的进程
6.7 执行文件
6.8 进程以及地址空间的操作
改变进程的大小
文件映射
改变保护
6.9 终止进程
6.10 分页器接口
Vnode分页器
设备分页器
物理存储分页器
交换分页器
6.11 分页机制
硬件缓存设计
硬件存储管理
超级页面
6.12 页面替换
分页参数
分页守护进程
交换
进程内的交换
6.13 可移植性
pmap模块的角色
初始化和启动
映射分配和释放
更改映射的访问和布线属性
物理页面使用信息的维护
物理页面的初始化
内部数据结构的管理
练习
参考文献
第Ⅲ部分 I/O系统
第7章 I/O系统概述
7.1 描述符管理和服务
开放文件入口
描述符管理
异步I/O
文件描述符锁定
描述符上的多路复用I/O
Select的实现
Kqueues和Kevents
数据在内核中的移动
7.2 本地进程间通信
信号量
消息队列
共享存储
7.3 虚拟文件系统接口
Vnode的内容
Vnode的操作
路径名的转换
导出文件系统服务
7.4 独立于文件系统的服务
名称缓存
缓冲管理
缓冲管理的实现
7.5 可堆叠的文件系统
简单的文件系统层
联合文件系统
其他文件系统
练习
参考文献
第8章 设备
8.1 设备概述
PC I/O架构
FreeBSD海量存储I/O子系统的架构
设备命名和访问
8.2 从用户到设备的I/O映射
设备驱动
I/O队列机制
中断处理
8.3 字符设备
原始设备和物理I/O
面向字符的设备
字符设备驱动的入口点
8.4 磁盘设备
磁盘设备驱动的入口点
磁盘I/O 请求的排序
磁盘卷标
8.5 网络设备
网络驱动的入口点
配置和控制
接收数据包
传输数据包
8.6 终端处理
终端进程模型
用户接口
进程组、会话和终端控制
终端的操作
终端输出(上半部分)
终端输出(下半部分)
终端输入
关闭终端设备
8.7 GEOM层
术语和拓扑规则
更改拓扑
操作
拓扑的灵活性
8.8 CAM层
通过CAM子系统的SSCI I/O请求路径
ATA磁盘
8.9 设备配置
设备识别
自动配置数据结构
资源管理
8.10 设备虚拟化
与Hypervisor进行交互
Virtio
Xen
设备直通
练习
参考文献
第9章 快速文件系统
9.1 分层的文件系统管理
9.2 Inode的架构
更改Inode格式
扩展属性
新的文件系统能力
文件标记
动态Inode
Inode管理
9.3 命名
目录
在目录中查找名字
路径名转换
链接
9.4 配额
9.5 文件锁定
9.6 软更新
在文件系统中更新依赖
依赖的架构
位图依赖跟踪
Inode依赖跟踪
直接块依赖跟踪
间接块依赖跟踪
新间接块的依赖跟踪
新目录入口的依赖跟踪
新的目录依赖跟踪
目录入口移除依赖跟踪
文件截断
文件和目录Inode复垦
目录入口重命名依赖跟踪
软更新的Fsync请求
软更新的文件移除需求
fsck的软更新需求
9.7 文件系统快照
创建一个文件系统快照
维护一个文件系统快照
大型文件系统快照
fsck的背景知识
用户可见的快照
实时转储
9.8 记录软更新
背景和简介
与其他实现的兼容
记录的格式
需要进行记录的修改
与记录相关的额外需求
恢复进程
性能
后续工作
跟踪文件移除依赖
9.9 本地文件存储
文件存储概述
用户对文件的I/O
9.10 伯克利快速文件系统
伯克利快速文件系统的组织
引导块
存储利用的优化
读写文件
布局策略
分配机制
块聚类
基于分区的分配
练习
参考文献
第10章 泽字节文件系统
10.1 简介
10.2 ZFS的组织
ZFS Dnode
ZFS块指针
ZFS objset架构
10.3 ZFS架构
MOS层
对象集层
10.4 ZFS操作
将新的数据写入磁盘
记录日志
RAIDZ
快照
ZFS块分配
释放块
删除重复数据
远程复制
ZFS设计权衡
练习
参考文献
第11章 网络文件系统
11.1 概述
11.2 架构和操作
FreeBSD FNS 的实现
客户端与服务器的交互
安全问题
用于提升性能的技术
11.3 NFS的演进
名称空间
属性
访问控制列表
缓存、委派和回调
锁定
安全
崩溃恢复
练习
参考文献
第Ⅳ部分 进程间通信
第12章 进程间通信
12.1 进程间通信模型
使用套接字
12.2 实现架构和概述
12.3 存储管理
Mbufs
存储管理算法
Mbuf实用例程
12.4 IPC数据结构
套接字地址
锁
12.5 连接建立
12.6 数据传输
传输数据
接收数据
12.7 关闭套接字
12.8 网络通信协议内部架构
数据流
通信协议
12.9 套接字与协议之间的接口
协议用户请求例程
协议控制输出例程
12.10 协议与协议的接口
pr_output
pr_input
pr_ctlinput
12.11 协议与网路的接口
网络接口与链路层协议
数据包传输
数据包接收
12.12 缓冲和流控制
协议缓冲策略
队列限制
12.13 网络虚拟化
练习
参考文献
第13章 网络层协议
13.1 IPv4
IPv4地址
广播地址
Internet多播
链路层地址解析
13.2 Internet控制消息协议(ICMP)
13.3 IPv6
IPv6地址
IPv6数据包格式
更改套接字API
自动配置
13.4 IP代码结构
输出
输入
转发
13.5 路由
内核路由表
路由查找
路由重定向
路由表接口
用户级路由策略
用户级路由接口:路由套接字
13.6 原始套接字
控制块
输入处理
输出处理
13.7 安全
IPSec概述
安全协议
密钥管理
IPSec实施
13.8 数据包处理框架
伯克利数据包过滤器
IP防火墙
IPFW和Dummynet
数据包过滤器(PF)
Netgraph
Netmap
练习
参考文献
第14章 传输层协议
14.1 Internet端口和关联
协议控制块
14.2 用户数据报协议(UDP)
初始化
输出
输入
控制操作
14.3 传输控制协议(TCP)
TCP连接状态
序列变量
14.4 TCP算法
计时器
估算往返时间
连接建立
SYN缓存
SYN Cookie
连接关闭
14.5 TCP输入处理
14.6 TCP输出处理
发送数据
避免笨窗口综合征
避免小数据包
延迟确认和窗口更新
选择性确认
重传状态
慢启动
缓存和窗口大小
带有慢启动的拥塞避免
快速重传
模块化拥塞控制
Vegas算法
Cubic算法
14.7 流控传输协议(SCTP)
大数据块
关联建立
数据传输
关联关闭
多宿主和心跳
练习
参考文献
第Ⅴ部分 系统操作
第15章 系统启动和关闭
15.1 固件和BIOS
15.2 引导加载程序
主引导记录和全局唯一标识分区表
二级引导加载程序:gptboot
末级引导加载程序:/boot/loader
在嵌入式平台上引导加载
15.3 内核引导
启动汇编语言
启动特定于平台的C 语言
模块化内核设计
模块初始化
基本的内核服务
内核线程初始化
设备模块初始化
可加载的内核模块
15.4 用户级初始化
/sbin/init
系统启动脚本
/usr/libexec/getty
/usr/bin/login
15.5 系统操作
内核配置
关闭和自动重启系统
系统调试
信息在内核中的传递
练习
参考文献
术语表