開啟主選單
求真百科
搜尋
檢視 FreeBSD操作系统设计与实现 的原始碼
←
FreeBSD操作系统设计与实现
由於下列原因,您沒有權限進行 編輯此頁面 的動作:
您請求的操作只有這個群組的使用者能使用:
用戶
您可以檢視並複製此頁面的原始碼。
{| class="wikitable" align="right" |- |<center><img src=https://www0.kfzimg.com/sw/kfz-cos/kfzimg/11455950/0bda9eabfca01cb4_s.jpg width="260"></center> <small>[https://book.kongfz.com/373268/7014023702 来自 孔夫子网 的图片]</small> |} 《'''FreeBSD操作系统设计与实现'''》,[美] 罗伯特·N.M.沃森著;(美)马 著,[美] 罗伯特·N.M.沃森著;(美)马 编,出版社: 机械工业出版社。 机械工业出版社成立于1950年,是建国后国家设立的第一家科技[[出版社]],前身为科学技术出版社,1952年更名为机械工业出版社<ref>[https://www.maigoo.com/maigoo/6296cbs_index.html 中国十大出版社-出版社品牌排行榜],买购网</ref>。机械工业出版社(以下简称机工社)由[[机械工业信息研究院]]作为主办单位,目前隶属于国务院国资委<ref>[http://www.cmpbook.com/about 企业简介],机械工业出版社</ref>。 ==内容简介== 本书由FreeBSD系统的三位引领者撰写,在上一版基础上做了大幅更新,涵盖FreeBSD 5和FreeBSD 11之间的所有重大改进,如使用FreeBSD Jail的高度可扩展和轻量级虚拟化、使用Xen和Virtio设备半虚拟化的虚拟机加速、Capsicum沙箱和GELI加密磁盘保护以及DTrace内核调试技巧等。全书从接口到内核再到硬件逐层深入,详细阐述实现每个重要系统组件——进程管理、安全、虚拟内存、I/O系统、文件系统、socket IPC和网络等——所使用的概念、数据结构和算法。本书可以作为高等院校操作系统相关课程的教材或参考书,也可以作为系统开发人员和管理人员的学习指南。 ==目录== 译者序 [[前言]] 作者简介 第一部分 概述 第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 V 4 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.4BSD 11 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/O 31 2.7.2 描述符管理 33 2.7.3 设备 34 2.7.4 套接字IPC 34 2.7.5 分散-收集I/O 35 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 DTrace 63 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 虚拟文件系统接口与DAC 131 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 Jail 146 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 启动GELI 174 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 内核malloc 194 6.3.7 内核zone分配器 196 6.4 进程独立拥有的资源 197 6.4.1 FreeBSD的进程虚拟地址空间 197 6.4.2 缺页处理 199 6.4.3 映射到vm_object 199 6.4.4 vm_object 201 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/O 261 7.1.4 文件描述符锁 261 7.1.5 描述符的多路I/O复用 263 7.1.6 select的实现 265 7.1.7 kqueue和kevent 267 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/O 301 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 Virtio 336 8.10.3 Xen 339 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 动态inode 356 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 后台fsck 393 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 mbuf 460 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_output 484 12.10.2 pr_input 485 12.10.3 pr_ctlinput 485 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 IPv 4498 13.1.1 IPv4地址 500 13.1.2 广播地址 501 13.1.3 Internet组播 502 13.1.4 链路层地址解析 503 13.2 ICMP 504 13.3 IPv 6506 13.3.1 IPv6地址 507 13.3.2 IPv6数据包格式 509 13.3.3 切换到套接字API 510 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和Dummynet 541 13.8.4 数据包过滤器 544 13.8.5 netgraph 545 13.8.6 netmap 549 习题 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 cookie 568 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 术语表 参考文献 · · · · · · ==参考文献== [[Category:040 類書總論;百科全書總論]]
返回「
FreeBSD操作系统设计与实现
」頁面