新書推薦:
《
中国古代文体形态研究(第四版)(中华当代学术著作辑要)
》
售價:HK$
168.0
《
朋党之争与北宋政治·大学问
》
售價:HK$
99.7
《
甲骨文丛书·波斯的中古时代(1040-1797年)
》
售價:HK$
88.5
《
以爱为名的支配
》
售價:HK$
62.7
《
台风天(大吴作品,每一种生活都有被看见的意义)
》
售價:HK$
53.8
《
打好你手里的牌(斯多葛主义+现代认知疗法,提升当代人的心理韧性!)
》
售價:HK$
66.1
《
新时代硬道理 广东寻路高质量发展
》
售價:HK$
77.3
《
6S精益管理实战(精装版)
》
售價:HK$
100.6
內容簡介:
本书由FreeBSD系统的三位引领者撰写,在上一版基础上做了大幅更新,涵盖FreeBSD 5和FreeBSD 11之间的所有重大改进,如使用FreeBSD Jail的高度可扩展和轻量级虚拟化、使用Xen和Virtio设备半虚拟化的虚拟机加速、Capsicum沙箱和GELI加密磁盘保护以及DTrace内核调试技巧等。全书从接口到内核再到硬件逐层深入,详细阐述实现每个重要系统组件——进程管理、安全、虚拟内存、I/O系统、文件系统、socket IPC和网络等——所使用的概念、数据结构和算法。本书可以作为高等院校操作系统相关课程的教材或参考书,也可以作为系统开发人员和管理人员的学习指南。
關於作者:
马歇尔·柯克·麦库西克(Marshall Kirk McKusick)
UNIX和BSD领域知名作家,长期教授相关课程。在加州大学伯克利分校期间,他实现了4.2BSD快速文件系统,并担任伯克利计算机系统研究小组(CSRG)的计算机科学家。他曾两次担任Usenix协会的董事会主席,目前是FreeBSD基金会的董事会成员。
乔治·V. 内维尔-尼尔(George V. Neville-Neil)
长期从事安全、网络和操作系统领域的写作、教学和咨询工作,致力于开源项目,并且是ACM期刊的专栏作者。他是FreeBSD基金会的董事会成员,并担任了4年的核心团队成员。
罗伯特·N. M. 沃森(Robert N. M. Watson)
剑桥大学教授,任职于计算机实验室安全研究小组,研究兴趣包括计算机系统、安全和体系结构。他是FreeBSD基金会的董事会成员,担任核心团队成员长达10年,成为FreeBSD代码提交者长达15年。
目錄 :
译者序前言作者简介部分 概述第1章 BSD系统的历史和目标21.1 UNIX系统的历史21.1.1 UNIX系统的起源21.1.2 Research小组的UNIX系统31.1.3 AT&T UNIX System Ⅲ和System V41.1.4 伯克利软件发布51.1.5 UNIX无处不在61.2 BSD和其他系统61.3 BSD向开放源代码的转变81.3.1 Networking Release 281.3.2 法律诉讼101.3.3 4.4BSD111.3.4 4.4BSD-Lite Release 2111.4 FreeBSD的开发模式12第2章 FreeBSD设计概述162.1 FreeBSD的功能和内核162.2 内核结构172.3 内核服务202.4 进程管理212.4.1 信号222.4.2 进程组和会话232.5 安全232.5.1 进程凭证242.5.2 特权模型252.5.3 自主访问控制252.5.4 能力模型252.5.5 Jail轻型虚拟化262.5.6 强制访问控制272.5.7 事件审计272.5.8 密码学与随机数生成器282.6 内存管理282.6.1 BSD内存管理设计要点292.6.2 内核中的内存管理302.7 I/O系统概述312.7.1 描述符与I/O312.7.2 描述符管理332.7.3 设备342.7.4 套接字IPC342.7.5 分散-收集I/O352.7.6 多文件系统支持352.8 设备362.9 快速文件系统362.10 Zettabyte文件系统402.11 网络文件系统412.12 进程间通信412.13 网络层协议422.14 传输层协议432.15 系统启动和停止43习题44第3章 内核服务453.1 内核结构453.1.1 系统进程453.1.2 系统入口463.1.3 运行时的内核结构463.1.4 内核的入口483.1.5 从内核返回493.2 系统调用493.2.1 调用结果的处理493.2.2 从系统调用返回503.3 陷阱和中断513.3.1 I/O设备中断513.3.2 软件中断513.4 时钟中断523.4.1 统计和进程调度533.4.2 超时543.5 内存管理服务553.6 时间服务583.6.1 真实时间593.6.2 外部表示593.6.3 调整时间593.6.4 时间间隔603.7 资源服务603.7.1 进程优先级603.7.2 资源利用613.7.3 资源限制613.7.4 文件系统配额623.8 内核跟踪工具623.8.1 系统调用跟踪623.8.2 DTrace633.8.3 内核跟踪66习题68第二部分 进程第4章 进程管理704.1 进程管理概述704.1.1 多道程序设计714.1.2 调度724.2 进程状态734.2.1 进程结构754.2.2 线程结构784.3 上下文切换794.3.1 线程状态794.3.2 底层上下文切换804.3.3 主动上下文切换804.3.4 同步844.3.5 互斥锁同步854.3.6 互斥锁接口874.3.7 锁同步884.3.8 死锁预防894.4 线程调度914.4.1 低级调度器914.4.2 线程运行队列和上下文切换924.4.3 分时线程调度934.4.4 多处理器调度984.4.5 自适应空闲1004.4.6 传统的分时线程调度1004.5 创建进程1014.6 终止进程1024.7 信号1034.7.1 发送信号1064.7.2 传输信号1084.8 进程组和会话1104.8.1 进程组1104.8.2 会话1114.8.3 作业控制1124.9 进程的调试114习题116第5章 安全性1185.1 操作系统安全1195.2 安全模型1205.2.1 进程模型1205.2.2 自主与强制访问控制1205.2.3 可信计算基1215.2.4 其他内核安全特性1215.3 进程凭证1215.3.1 凭证结构1225.3.2 凭证内存模型1235.3.3 访问控制校验1245.4 用户和组1245.5 特权模型1265.5.1 隐式特权1275.5.2 显式特权1275.6 进程间访问控制1285.6.1 可见性1295.6.2 信号1295.6.3 调度控制1295.6.4 等待进程终止1305.6.5 调试1305.7 自主访问控制1305.7.1 虚拟文件系统接口与DAC1315.7.2 对象属主与组1325.7.3 UNIX权限1325.7.4 访问控制列表1345.7.5 POSIX.1e访问控制列表1365.7.6 NFSv4访问控制列表1385.8 Capsicum能力模型1415.8.1 Capsicum应用体系结构1425.8.2 能力系统1425.8.3 能力1435.8.4 能力模型1455.9 Jail1465.10 强制访问控制框架1515.10.1 强制策略1515.10.2 设计的指导原则1525.10.3 MAC框架的体系结构1535.10.4 启动框架1545.10.5 策略注册1555.10.6 框架入口点设计考量1555.10.7 策略入口点设计考量1565.10.8 内核服务入口点调用1575.10.9 策略组合1585.10.10 给对象打标签1595.10.11 标签的生命周期与存储管理1595.10.12 标签同步1625.10.13 从用户空间进行策略无关的标签管理1635.11 安全事件审计1635.11.1 审计事件与记录1645.11.2 BSM审计记录与审计跟踪1655.11.3 内核审计的实现1665.12 加密服务1685.12.1 加密框架1685.12.2 随机数生成器1705.13 GELI全磁盘加密1735.13.1 机密性和完整性保护1735.13.2 密钥管理1745.13.3 启动GELI1745.13.4 加密块保护1755.13.5 I/O模型1765.13.6 不足176习题177第6章 存储管理1786.1 术语1786.1.1 进程与内存1796.1.2 调页机制1806.1.3 替换算法1806.1.4 工作集模型1816.1.5 交换机制1816.1.6 虚拟内存的优点1826.1.7 虚拟内存的硬件要求1826.2 FreeBSD 虚拟内存系统概述1836.3 内核的存储管理1856.3.1 内核映射和子映射1866.3.2 内核地址空间的分配1886.3.3 slab分配器1906.3.4 keg分配器1916.3.5 zone分配器1926.3.6 内核malloc1946.3.7 内核zone分配器1966.4 进程独立拥有的资源1976.4.1 FreeBSD的进程虚拟地址空间1976.4.2 缺页处理1996.4.3 映射到vm_object1996.4.4 vm_object2016.4.5 vm_object到页面2016.5 共享内存2026.5.1 mmap模型2036.5.2 共享映射2056.5.3 私有映射2056.5.4 压缩影子链2076.5.5 私有快照2086.6 创建新进程2096.6.1 预留内核资源2106.6.2 复制用户地址空间2116.6.3 不通过复制创建新进程2116.7 执行一个文件2126.8 操作进程地址空间2136.8.1 改变进程大小2136.8.2 文件映射2146.8.3 改变保护权限2156.9 终止进程2156.10 调页器接口2166.10.1 vnode调页器2186.10.2 设备调页器2196.10.3 物理内存调页器2206.10.4 交换调页器2216.11 调页机制2246.11.1 硬件高速缓存的设计2286.11.2 硬件内存管理2296.11.3 超级页2316.12 页面替换2356.12.1 调页参数2376.12.2 pageout守护进程2376.12.3 交换机制2406.12.4 换入进程2426.13 可移植性2436.13.1 pmap模块的作用2436.13.2 初始化和启动2456.13.3 分配和释放映射2486.13.4 改变映射的访问和wiring属性2496.13.5 物理页面使用信息的维护2516.13.6 初始化物理页面2516.13.7 管理内部数据结构252习题252第三部分 I/O系统第7章 I/O系统概述2567.1 描述符管理和服务2577.1.1 打开文件条目2587.1.2 描述符管理2607.1.3 异步I/O2617.1.4 文件描述符锁2617.1.5 描述符的多路I/O复用2637.1.6 select的实现2657.1.7 kqueue和kevent2677.1.8 数据在内核中的迁移2697.2 本地进程间交互2707.2.1 信号量2727.2.2 消息队列2737.2.3 共享内存2747.3 虚拟文件接口2757.3.1 vnode的内容2757.3.2 vnode的操作2777.3.3 路径名的转换2787.3.4 导出文件系统服务2787.4 独立于文件系统的服务2797.4.1 名字缓存2817.4.2 缓冲区管理2827.4.3 缓冲区管理的实现2847.5 可堆叠的文件系统2857.5.1 简单的文件系统层2877.5.2 联合文件系统2887.5.3 其他文件系统290习题291第8章 设备2928.1 设备概述2928.1.1 PC I/O体系结构2938.1.2 FreeBSD大容量存储I/O子系统的结构2958.1.3 设备命名和访问2968.2 从用户到设备的I/O映射2978.2.1 设备驱动程序2988.2.2 I/O队列2998.2.3 中断处理2998.3 字符设备2998.3.1 原始设备和物理I/O3018.3.2 面向字符的设备3028.3.3 字符设备驱动程序入口点3028.4 磁盘设备3038.4.1 磁盘设备驱动程序入口点3038.4.2 磁盘I/O请求排序3038.4.3 磁盘标签3048.5 网络设备3058.5.1 网络设备驱动程序入口点3068.5.2 配置与控制3068.5.3 数据包接收3078.5.4 数据包传输3098.6 终端处理3098.6.1 终端处理模式3108.6.2 用户接口3128.6.3 进程组、会话和终端控制3138.6.4 终端操作3138.6.5 终端输出(上半部分)3148.6.6 终端输出(下半部分)3158.6.7 终端输入3158.6.8 关闭终端设备3168.7 GEOM层3168.7.1 术语和拓扑规则3178.7.2 改变拓扑3188.7.3 操作3208.7.4 拓扑灵活性3218.8 CAM层3228.8.1 通过CAM子系统的SCSI I/O请求的路径3238.8.2 ATA磁盘3258.9 设备配置3258.9.1 设备标识3278.9.2 自动配置数据结构3298.9.3 资源管理3338.10 设备虚拟化3348.10.1 与虚拟机监控程序的交互3358.10.2 Virt
內容試閱 :
本书遵循早期权威的、完整的关于UNIX系统4.3BSD和4.4BSD版本的设计和实现的描述,这些UNIX系统是由加州大学伯克利分校开发的。自从伯克利在1994年发布终版本以来,几个团队一直在开发BSD。本书详细介绍了FreeBSD,这个系统拥有的开发人员团体且发行为广泛。尽管FreeBSD发行版在其基本系统中包含了近1000个实用程序,在其ports集合中包含了近25 000个可选实用程序,但本书几乎完全集中在内核上。类UNIX系统类UNIX系统包括:传统的供应商系统,如Solaris和HP-UX;基于Linux的发行版,如Red Hat、Debian、Suse和Slackware;基于BSD的发行版,如FreeBSD、NetBSD、OpenBSD和Darwin。它们可以在从智能手机到的超级计算机的各种计算机上运行。它们是大多数多处理器、图形和向量处理系统选择的操作系统,并被广泛用于分时这一初目的。作为Internet上提供网络服务(从FTP到WWW)的常用平台,它们是有史以来开发的可移植性的操作系统。这种可移植性既归功于它们的实现语言C [Kernighan & Ritchie, 1989](它本身就是一种广泛移植的语言),又归功于系统的优雅设计。自1969年创始以来[Ritchie & Thompson, 1978],UNIX系统在几个分分合合的支流中不断发展。初的开发人员继续在AT&T贝尔实验室开发第9版和第10版UNIX,以及UNIX第9版的后继版本。与此同时,AT&T在将UNIX System V与Sun Microsystems的基于BSD的SunOS合并以生产Solaris之前,授权将UNIX System V作为产品。第9版UNIX、System V和Solaris都受到了加州大学伯克利分校计算机系统研究小组(CSRG)推出的伯克利软件发行版的强烈影响。尽管Linux操作系统是独立于其他UNIX变体开发的,但它实现了UNIX接口。因此,在其他基于UNIX的平台上开发的应用程序很容易移植到Linux上运行。伯克利软件发行版(BSD)BSD系统是个基于UNIX系统并引入许多重要功能的发行版。这些重要功能包括:按需分页的虚拟内存支持。硬件、I/O系统的自动配置。快速、可恢复的文件系统。基于套接字的进程间通信(IPC)原语。TCP/IP的相关实现。伯克利发行版进入了许多供应商的UNIX系统,并被许多其他供应商的开发团队在内部使用。TCP/IP网络协议套件在4.2BSD和4.3BSD中的实现以及这些系统的应用,在推动TCP/IP网络协议套件成为世界标准方面发挥了关键作用。甚至像微软这样的非UNIX供应商也在自己的Winsock IPC接口中采用了伯克利套接字设计。BSD的发布对POSIX(IEEE std1003.1)操作系统接口标准和相关标准也有很大的影响。这在一些特性上尤为明显,如可靠信号、作业控制、每个进程的多个访问组以及目录操作的例程,都是从BSD中改编后应用于POSIX的。早期的BSD版本包含UNIX许可证代码,因此要求接收者拥有AT&T源代码许可证才能获得和使用BSD。1988年,伯克利把它的发行版分为AT&T授权的和可自由再发行的代码。可自由再发行的代码是单独授权的,任何人都可以获得、使用和重新分发。1994年伯克利发布的后一个可自由再发行的4.4BSD-Lite2版本包含了几乎整个内核以及所有重要的库和实用程序。NetBSD和FreeBSD两个小组萌芽于1993年,并开始支持和分发由伯克利开发的免费可再发行与构建的系统。NetBSD小组强调可移植性和极简主义的方法,将系统移植到近60个平台上,他们决心保持系统的精简以易于兼容嵌入式应用程序。FreeBSD小组强调限度地支持PC体系结构,推动其系统易于安装,并向尽可能广泛的用户进行推广。1995年,OpenBSD组从NetBSD组中分离出来,开发了一个强调安全性的发行版。2003年,Dragonfly组从FreeBSD组中分离出来,开发了一种轻量级的机制来支持多处理的发行版。多年来,BSD发行版之间处于良性竞争状态,许多想法和大量代码之间经常互通有无。本书内容本书介绍FreeBSD 11内核的内部结构以及实现FreeBSD系统功能所涉及的概念、数据结构和算法,从系统调用层向下(从接口到内核,再到硬件本身)涵盖FreeBSD的内容。该内核包括进程管理、内核安全、虚拟内存、I/O系统、文件系统、套接字IPC机制和网络协议实现等系统模块。除了与终端接口、系统启动有关的内容,系统调用层之上的知识,例如与库、Shell、命令行、编程语言和其他用户接口有关的内容都不在本书范围之内。本书沿袭了Organick在编写Multics操作系统书籍时首次采用的组织结构[Organick, 1975],是对现代操作系统的深入研究。在涉及特定硬件时,本书参考了Intel 32位体系结构和类似的AMD 64位体系结构。由于FreeBSD加强了在这些体系结构上的开发,它们是获得FreeBSD全面支持的体系结构,因此十分便于参考。计算机专业人士阅读指南FreeBSD被广泛应用于全球许多公司的核心基础体系结构。由于构建过程占用空间较小,它在嵌入式程序中的应用场景也越来越多。FreeBSD的授权条款不要求对发生变更或功能增强的系统进行发布,而Linux则要求以源代码形式提供对内核的所有更改和增强。因此,需要控制其知识产权发布的公司会使用FreeBSD构建产品。本书主要针对使用FreeBSD系统工作的专业人员