FreeBSD操作系统设计与实现,内容回顾与作者采访

Pearson/Addison-Wesley Professional 出版的《FreeBSD操作系统设计与实现》历经人们的期盼而终于完成,它是FreeBSD内核的权威指南。第二版涵盖了从FreeBSD 5 到11之间的所有主要更新,根据发行注记,相比于第一版大范围的修改了三分之一的内容,而且还有三分之一的内容是新增加的。

\\

第二版要明显的比第一版增加了很多内容,光页数都超过900多页,而且覆盖了FreeBSD的诸如虚拟化,沙箱,NFSv4,以及ZFS支持等等很多新的特性。

\\

书的第一章介绍了FreeBSD的发展历史,第二章简要的概括了FreeBSD内核的所有组件,剩下的章节即是根据第二章的结构引导读者进入每个题目的细节。

\\

此书采用的是按照FreeBSD的技术架构由内而外的来讲述的,从内核的服务开始,继而是进程和内容管理,然后是I/O和设备,文件系统,IPC(进程间通信),网络协议,最后是系统的启动与关闭。内容丰富,知识密集,以清晰明了的方式讲述技术话题,书中采用了大量的伪代码,示意图,表格来说明主要的观点,每一章均是以日常见到的主题开始介绍,然后深入扩展到细节。

\\

尽管此书深入到FreeBSD的底层细节,但仍然提供了很多操作系统设计和概念的深刻洞见,这不仅对于FreeBSD的开发者有吸引力,任何对现代操作系统的思考和讨论有兴趣的人都是有益处的。

\\

InfoQ采访了本书的作者之一Marshall Kirk McKusick

\\

InfoQ:FreeBSD操作系统设计与实现描述了FreeBSD内部的运作机理,而且提供了大量翔实的资料,您此书的目标读者是哪些人?人们能够通过阅读此书能够学习到关于FreeBSD的什么内容?

\\
\

Marshall: 我们的书的目标是哪些工作在FreeBSD下的专业人士,应用程序开发者可以学到如何有效的利用接口和系统交互;系统程序员可以学到如何扩展、加强系统;没有FreeBSD内核经验的系统管理员们可以学习到如何维护、调试和配置系统;技术和销售支持的个人参与者可以学习到系统具备哪些能力以及有哪些局限。

\\

我们的书提供了FreeBSD如何实现它的基本服务的广泛的概述。这对哪些需要学习FreeBSD是如何提供服务的人们非常的有帮助。能够从本书中受益的人们包括操作系统实现者,系统程序员,UNIX应用程序开发者,系统管理与,以及对FreeBSD充满好奇的用户。本书针对的是拥有至少一年的使用类Unix系统的人们,懂一些C语言是非常有帮助的,但不是必须的。读者需要了解基本的算法(搜索、排序、哈希)和数据结构(链表、队列、数组)。

\\

本书讲述了FreeBSD内核背后的机理。从介绍内核和服务开始,其中包含了用于并发控制的锁。接下来,就是进程的细节描述,包括诸如调度,信号等进程管理任务。概述了安全的框架和策略,包括Capsicum 沙箱和FreeBSD jail,Jail是一个允许在同一个系统中创建隔离的虚拟主机的程序,以内核和进程的内存管理的描述结束了进程的管理。然后转到内核的I/O,通过介绍I/O的框架,服用I/O的基础设施细节,以及本地和远程文件系统的支持。然后描述了如何配置、操作字符设备和批量数据传输设备,例如磁盘,以及如何管理虚拟设备从而支持Xen和bhyve虚拟化的。也涵盖了三个文件系统的设计和实现,它们分别是:快速文件系统(FFS),Zettabyte文件系统(ZFS),和网络文件系统(NFS)。接下来是进程间通信(IPC/套接字)接口,通过涵盖了网络的分层和实现进行了详细的描述,网络包括了路由,转发以及安全的TCP/IP协议。最后,讲述了内核的启动过程,本书更加的强调代码的组织,数据结构的表示,以及算法本身,而不是过一遍内核的代码。它没有包含机器的某个特定部分,例如设备驱动的实现。

\
\\

InfoQ: 您认为FreeBSD在其它的类Unix操作系统中是一个什么样的地位?

\\
\

Marshall: FreeBSD是三大主要发行版中最为流行的系统(另外两个分别是OpenBSD和NetBSD)。FreeBSD大范围的应用于世界上很多公司的核心基础设施,包括NetFlix,WhataApp,Yahoo!,Juniper网络,EMC/Isilon。另外苹果公司的Darwin使用的也是FreeBSD,也就是Mac OS X的基础操作系统。也由于它可以构建一个非常小的系统,所以能够在嵌入式系统中的应用逐渐增多。开源界主要替代FreeBSD的还是Linux。FreeBSD的许可条款允许修改和改进系统而无需再发行,这样使得FreeBSD的许可更加的友好,无论是企业还是个人用户。Linux的许可条款要求所有的更改和改进内核进行源代码可以以最低的成本再发布。因此,若企业需要控制发行版的知识产权,那么使用FreeBSD来构建他们的产品就是不错的选择。

\
\\

InfoQ: FreeBSD在过去相当长的一段时间里是最为流行的BSD系统,你认为导致项目如此成功的主要因素是什么?

\\
\

Marshall: 从1993年成立伊始,FreeBSD项目的目标就是能够为一些企业和个人提供易用和易安装的发行版。

\\

另外一个让FreeBSD成功的原因是FreeBSD不像其他开源项目那样设有永久的掌控者(例如Linux中Linus Torvolds和他的忠实的副手),FreeBSD的系统治理是自我组织型的,允许受到鼓舞的人们上升到关键角色,且设置了开发者轮流掌控的机制。

\\

在外围,有5000到6000名开发者,他们每个人都为系统的某个部分工作,例如,维护FreeBSD内核,持续开发FreeBSD 1000个核心工具,撰写FreeBSD文档,移植其它开源软件到FreeBSD中等等。开发者可以访问FreeBSD的仓库,但是没有更改的权限。他们若想提交,则必须和级别更高的提交者代为提交,或者是将问题以文件对形式报告给提交者,方可为系统添加代码。

\\

比外围更近一层的是比开发者更高级别的提交者,目前有300到400名提交者,和开发者一样,他们大多数也是为系统的某个部分工作。和开发者不同的是,他们具有更改属于自己的系统部分,并提交到代码仓库。所有的非同寻常的变更都须有一个或多个其他的提交者审核后才能正式到进入到源码仓库。多数的提交者除了自己的本职工作以及审核之外,均会帮助多个开发者提交代码。

\\

由开发者晋升为提交者的建议是由现有的提交者来做的,绝大多数的情况是提名开发者晋升的提交者,他们往往原来就是在一起共事过的,晋升的描述和评估,以过去的工作和当前的工作为准,然后发送给核心团队等待批准。

\\

处于项目中心的是核心团队。核心团队由9人组成,每2年一次选举出来的。核心团队的候选人来自提交者,且由提交者选举。核心团队扮演着源代码最后的守护者的角色,他们会监控已经提交的内容,以及在两个或多个提交者就如何解决特定问题无法达成共识的情况下解决他们的冲突。核心团队还有一项职责是批准开发者晋升为提交者,(在罕见情况下)暂时或永久的将一些人从提交者组中清除。被清除的原因多数是不再活跃(超过一年的时间对系统没有任何的更改)。 ```

\
\\

InfoQ: 是什么让FreeBSD成为独特的,或者说,你个人意愿,为什么选择FreeBSD而不是其它BSD系统?

\\
\

Marshall: 不像其它的BSD系统或者是通常的开源项目,FreeBSD对于每个大版本的维护最少周期为5年,在整个支持期间提供bug修复和安全更新。在这加大的支持期间,哪些基于某个版本开发自己产品的公司就无须为其自己所构建的产品失去支持而担心不已。

\
\\

InfoQ: FreeBSD在过去几年中增加的最为引人注目的特性有哪些?

\\
\

Marshall: FreeBSD最近新增的一个引人注目的特性是:Capsicum 接口,允许来历不明不明的代码在沙箱中运行,Capsicum允许具有安全影响的应用程序有非常紧密的边界,从而确保应用不能访问到,修改或盗取任何未授权到信息。

\\

另外一个引人注目的特性是为FreeBSD添加了非常重要的ZFS文件系统,ZFS文件系统来自Open Solaris。不像Linux因为许可的冲突不允许引入ZFS,FreeBSD将ZFS完全整入内核,并且交付ZFS的全部功能集以及性能。

\
\\

InfoQ: 在2012年对FreeBSD基金会的总监Dru Lavigne的采访中,他说:“FreeBSD一直很幸运的是具有吸引安全研究经费和与学术界在安全领域的合作的能力。”这对FreeBSD过去几年产生了什么样的影响?

\\
\

Marshall: 我们刚才提到的Capsicum项目,就是来自剑桥大学(UK)的研究项目。这完全是研究员们使用FreeBSD作为他们的开发平台的功劳,简直是天作之合,今天由FreeBSD所提供的产品接口,辅助库以及支持的程序均非常的适应他们的研究。真如Dru所指出的,FreeBSD基金会筹集资金来将研究原型转化为产品,这些转换工作离不开这些发掘,掏腰包和管理的人们。

\
\\

InfoQ: 你认为FreeBSD能够为学习关于操作系统提供一个很好的参考吗?如果是的话,作为学习工具它能提供何种优势?

\\
\

Marshall: 三位作者均倡导以FreeBSD作为教学工具。我们开发教学计划,课程笔记,以及实验室试验,用于教授高年级的本科生或者是第一、两年的研究生课程,这些我们开发的课程我们都发布在www.teachbsd.com网站上了,关于此项目我们才刚刚开始做,希望在一、两后有更多丰富的内容。

\\

FreeBSD基金会最近开始了一个项目,将FreeBSD引入高中计算机科学课程。虽然这个项目才刚刚开始,愿景是希望能够提高高中学生对计算机技术的兴趣,尤其是FreeBSD。

\
\\

InfoQ: 哪里是FreeBSD所引导的方向?其未来有何愿景?

\\
\

Marshall: 项目的RoadMap由开发者们来驱动,这一般是在每年至少举办两次的FreeBSD开发者峰会上引入新的想法,开发者峰会分别是BSDCan(在加拿大的渥太华)和EruoBSD(在欧盟国家轮流)研讨会。当然,它也有来自FreeBSD用户社区的反馈,这一般是来自于每年3-4次的FreeBSD供应商峰会。

\\

传统的FreeBSD发行主要是针对服务器和嵌入式系统的。PC-BSD的目标用户则是桌面用户,它基于当前的FreeBSD发行版,从移植集中将一些软件包整合在一起(桌面、浏览器、邮件客户端等),打造为一个简单易用且轻松安装的桌面(笔记本)系统。

\
\\

此采访基于 ‘FreeBSD操作系统设计与实现’, 第二版一书,作者:Marshall Kirk McKusick, George V. Neville-Neil , Robert N.M. Watson, Pearson/Addison-Wesley Professional出版, 2014年9月, ISBN 978–0–321–96897–5. 更多信息请访问出版商网站

\\

在2015年9月,出版商又发行了McKuscik新的视频教程:“FreeBSD开源操作系统介绍在线课程”。

\\

关于作者

\\

1d77f5fce83f82ec7c218960ee5bac62.jpgMarshall Kirk McKusick 长期从事于Unix和BSD相关的写作、咨询和教授学生的工作,在加利福利亚伯克利分校期间完成了4.2BSD的快速文件系统。他还是伯克利计算系统研究小组的一名科学家,负责开发和发布4.3BSD和4.4BSD,他是FreeBSD基金会的董事会成员,FreeBSD的长期贡献者,USENIX协会的两届主席,他还是 ACM, IEEE, 和 AAAS的成员。

\\\\

0a404e55822554b17182b512557122d8.jpgGeorge V. Neville-Neil 安全、网络、操作系统方面的黑客,作家,教师,和咨询师。FreeBSD基金会董事成员,在FreeBSD核心团队工作了4年,2004年起,他为ACM的队列和通信写专栏“Kode Vicious”,他是ACM的从业者委员会副主席,也是Usenix协会,ACM,IEEE和美国科学促进会的成员。

\\\\

bf7f2a0d54b07274dbf1ef2808660f12.jpgRobert N.M. Watson 大学讲师,剑桥大学计算机实验室的安全研究小组中讲授系统,安全以及架构。他负责监督计算机体系结构,编译器,程序分析,操作系统,网络和安全等先进领域的研究。FreeBSD基金会董事成员,在FreeBSD核心团队10年,作为贡献者有15年的历史,他是在Usenix协会和ACM的会员。

\\\\

查看英文原文:The Design and Implementaiton of FreeBSD Operating System, Review and Q\u0026amp;A With Author

\\

感谢张龙对本文的审校。

\\

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群06e1fec4a87eca3142d54d09844c629f.png)。

第一部分 综述 第1章 BSD系统的历史和目标 1.1 UNIX系统的历史 1.1.1 UNIX系统的起源 1.1.2 Research小组的UNIX系统 1.1.3 AT&T UNIX System III和System V 1.1.4 伯克利软件发布(BSD) 1.1.5 UNIX无处不在 1.2 BSD和其他系统 1.3 BSD向开放源代码的转变 1.3.1 Networking Release 2 1.3.2 法律诉讼 1.3.3 4.4BSD 1.3.4 4.4BSD-Lite Release 2 1.4 FreeBSD的开发模式 1.5 参考文献 第2章 FreeBSD设计概述 2.1 FreeBSD的功能和内核 2.2 内核结构 2.3 内核服务 2.4 进程管理 2.4.1 信号 2.4.2 进程组和会话 2.5 内存管理 2.5.1 BSD内存管理设计要点 2.5.2 内核中的内存管理 2.6 I/O系统 2.6.1 描述符与I/O 2.6.2 描述符管理 2.6.3 设备 2.6.4 套接口IPC 2.6.5 分散/聚集I/O 2.6.6 多文件系统支持 2.7 设备 2.8 文件系统 2.9 网络文件系统 2.10 终端 2.11 进程间通信 2.12 网络通信 2.13 网络实现 2.14 系统运行 2.15 复习题 2.16 参考文献 第3章 内核服务 3.1 内核结构 3.1.1 系统进程 3.1.2 系统入口 3.1.3 运行时刻的内核结构 3.1.4 内核的入口 3.1.5 从内核返回 3.2 系统调用 3.2.1 调用结果的处理 3.2.2 从系统调用返回 3.3 陷阱和中断 3.3.1 陷阱 3.3.2 I/O设备中断 3.3.3 软件中断 3.4 时钟中断 3.4.1 统计和进程调度 3.4.2 超时 3.5 内存管理服务 3.6 时间服务 3.6.1 真实时间 3.6.2 外部表示 3.6.3 调整时间 3.6.4 时间间隔 3.7 用户、用户组和其他身份标识 3.7.1 主机标识符 3.7.2 进程组和会话 3.8 资源服务 3.8.1 进程优先级 3.8.2 资源利用 3.8.3 资源限制 3.8.4 文件系统配额 3.9 系统运行服务 3.10 复习题 3.11 参考文献 第二部分 进程 第4章 进程管理 4.1 进程管理概述 4.1.1 多程序机制 4.1.2 调度 4.2 进程状态 4.2.1 进程结构 4.2.2 线程结构 4.3 上下文切换 4.3.1 线程状态 4.3.2 底层上下文切换 4.3.3 主动上下文切换 4.3.4 同步 4.3.5 互斥同步 4.3.6 锁管理器的锁 4.3.7 其他同步 4.4 线程调度 4.4.1 4.4BSD的调度程序 4.4.2 线程调度 4.4.3 线程优先级的计算 4.4.4 线程优先级例程 4.4.5 线程运行队列和上下文切换 4.4.6 ULE调度程序 4.5 创建进程 4.6 终止进程 4.7 信号 4.7.1 信号的历史 4.7.2 发送信号 4.7.3 接收信号 4.8 进程组和会话 4.8.1 会话 4.8.2 作业控制 4.9 监管环境 4.9.1 监管环境的语义 4.9.2 监管环境的实现 4.9.3 监管环境的限制 4.10 进程的调试 4.11 复习题 4.12 参考文献 第5章 存储管理 5.1 术语 5.1.1 进程与内存 5.1.2 调页机制 5.1.3 替换算法 5.1.4 工作集模型 5.1.5 交换机制 5.1.6 虚拟内存的优点 5.1.7 虚拟内存的硬件要求 5.2 FreeBSD虚拟内存系统概述 5.3 内核的存储管理 5.3.1 内核映射和子映射 5.3.2 内核地址空间的分配 5.3.3 内核的存储分配程序 5.3.4 内核的区域存储分配程序 5.4 进程独立拥有的资源 5.4.1 FreeBSD的进程虚拟地址空间 5.4.2 缺页处理 5.4.3 映射到对象 5.4.4 对象 5.4.5 对象到页面 5.5 共享存储 5.5.1 mmap模型 5.5.2 共享映射 5.5.3 私有映射 5.5.4 压缩影子链 5.5.5 私有快照 5.6 创建新进程 5.6.1 保留内核资源 5.6.2 复制用户地址空间 5.6.3 不通过复制创建新进程 5.7 执行一个文件 5.8 进程地址空间的操作 5.8.1 改变进程大小 5.8.2 文件映射 5.8.3 改变保护权限 5.9 终止进程 5.10 调页器接口 5.10.1 vnode调页器 5.10.2 设备调页器 5.10.3 物理内存调页器 5.10.4 交换调页器 5.11 调页机制 5.11.1 硬件高速缓存的设计 5.11.2 页面填色 5.12 页面替换 5.12.1 调页参数 5.12.2 pageout守护进程 5.12.3 交换机制 5.12.4 换入进程 5.13 可移植性 5.13.1 pmap模块的作用 5.13.2 初始化和启动 5.13.3 分配和释放映射 5.13.4 改变映射的访问和固定属性 5.13.5 管理页表的使用信息 5.13.6 初始化物理页面 5.13.7 管理内部数据结构 5.14 复习题 5.15 参考文献 第三部分 I/O系统 第6章 I/O系统概述 6.1 从用户到设备的I/O映射 6.1.1 设备驱动程序 6.1.2 I/O队列 6.1.3 中断处理 6.2 字符设备 6.2.1 原始设备和物理I/O 6.2.2 面向字符的设备 6.2.3 字符设备驱动程序的入口点 6.3 磁盘设备 6.3.1 块设备驱动程序的入口点 6.3.2 磁盘I/O请求的排序 6.3.3 磁盘标签 6.4 描述符的管理和服务 6.4.1 打开文件项 6.4.2 管理描述符 6.4.3 异步I/O 6.4.4 文件描述符的上锁机制 6.4.5 描述符上的多路I/O操作 6.4.6 select调用的实现 6.4.7 数据在内核中的转移 6.5 虚拟文件系统的接口 6.5.1 vnode的内容 6.5.2 对vnode的操作 6.5.3 路径名转换 6.5.4 文件系统的导出服务 6.6 与文件系统无关的服务 6.6.1 名字缓存 6.6.2 缓冲区管理 6.6.3 缓冲区管理的实现 6.7 可叠加的文件系统 6.7.1 简单的文件系统层 6.7.2 联合安装的文件系统 6.7.3 其他文件系统 6.8 复习题 6.9 参考文献 第7章 设备 7.1 设备概述 7.1.1 PC的I/O体系结构 7.1.2 FreeBSD海量存储I/O子系统的结构 7.1.3 设备的命名和访问 7.2 GEOM层 7.2.1 术语和拓扑规则 7.2.2 改变拓扑 7.2.3 运行 7.2.4 拓扑的灵活性 7.3 CAM层 7.3.1 SCSI子系统 7.3.2 I/O请求通过CAM子系统的路径 7.4 ATA层 7.5 配置设备 7.5.1 识别设备 7.5.2 自动配置数据结构 7.5.3 资源管理 7.6 复习题 7.7 参考文献 第8章 本地文件系统 8.1 文件系统的分层管理 8.2 inode的结构 8.2.1 inode格式的变化 8.2.2 扩展属性 8.2.3 文件系统的新功能 8.2.4 文件标志 8.2.5 动态的inode 8.2.6 管理inode 8.3 命名 8.3.1 目录 8.3.2 在目录中查找名字 8.3.3 路径名转换 8.3.4 链接 8.4 配额 8.5 文件上锁 8.6 软更新 8.6.1 文件系统中的更新依赖 8.6.2 依赖关系的数据结构 8.6.3 跟踪位映射表的依赖关系 8.6.4 跟踪inode的依赖关系 8.6.5 跟踪直接块的依赖关系 8.6.6 跟踪间接块的依赖关系 8.6.7 跟踪新间接块的依赖关系 8.6.8 跟踪新目录项的依赖关系 8.6.9 跟踪新目录的依赖关系 8.6.10 跟踪删除目录项时的依赖关系 8.6.11 截短文件 8.6.12 回收文件和目录的inode节点 8.6.13 跟踪目录项重命名时的依赖关系 8.6.14 跟踪删除文件时的依赖关系 8.6.15 fsync对软更新的要求 8.6.16 删除文件时对软更新的要求 8.6.17 fsck对软更新的要求 8.6.18 软更新的性能 8.7 文件系统的快照 8.7.1 创建文件系统快照 8.7.2 维护文件系统快照 8.7.3 大型文件系统的快照 8.7.4 快照性能 8.7.5 后台fsck 8.7.6 用户可见的快照 8.7.7 动态的转储 8.8 本地文件库 8.8.1 文件库概述 8.8.2 用户的文件I/O 8.9 伯克利快速文件系统 8.9.1 伯克利快速文件系统的组成 8.9.2 引导块 8.9.3 优化存储空间利用率 8.9.4 读写文件 8.9.5 布局策略 8.9.6 分配机制 8.9.7 将块组成簇 8.9.8 基于扩展的分配 8.10 复习题 8.11 参考文献 第9章 网络文件系统 9.1 历史和概述 9.2 NFS的结构和操作 9.2.1 NFS协议 9.2.2 FreeBSD的NFS实现 9.2.3 客户机/服务器的交互操作 9.2.4 RPC的传输问题 9.2.5 安全问题 9.3 提高性能的技术 9.3.1 租约 9.3.2 崩溃恢复 9.4 复习题 9.5 参考文献 第10章 终端处理 10.1 终端处理模式 10.2 行规程 10.3 用户接口 10.4 tty结构 10.5 进程组、会话和终端控制 10.6 C-list 10.7 RS-232和调制解调器控制 10.8 终端操作 10.8.1 打开终端 10.8.2 输出到行规程 10.8.3 终端的输出 10.8.4 终端的输入 10.8.5 ioctl例程 10.8.6 调制解调器转换 10.8.7 关闭终端设备 10.9 其他行规程 10.10 复习题 10.11 参考文献 第四部分 进程间通信 第11章 进程间通信 11.1 进程间通信的模型 11.2 实现的结构和概述 11.3 内存管理 11.3.1 mbuf 11.3.2 存储管理算法 11.3.3 mbuf工具例程 11.4 数据结构 11.4.1 通信域 11.4.2 套接口 11.4.3 套接口地址 11.4.4 锁 11.5 建立连接 11.6 传送数据 11.6.1 发送数据 11.6.2 接收数据 11.7 关闭套接口 11.8 本地进程间通信 11.8.1 信号量 11.8.2 消息队列 11.8.3 共享内存 11.9 复习题 11.10 参考文献 第12章 网络通信 12.1 内部结构 12.1.1 数据流 12.1.2 通信协议 12.1.3 网络接口 12.2 套接口到协议的接口 12.2.1 协议的用户请求例程 12.2.2 协议的控制输出例程 12.3 协议到协议的接口 12.3.1 pr_output 12.3.2 pr_input 12.3.3 pr_ctlinput 12.4 协议和网络的接口 12.4.1 发送数据包 12.4.2 接收数据包 12.5 路由选择 12.5.1 内核路由选择表 12.5.2 路由选择查找 12.5.3 路由选择重定向 12.5.4 路由选择表接口 12.5.5 用户级的路由选择策略 12.5.6 用户级路由选择接口:路由选择套接口 12.6 缓冲和拥塞控制 12.6.1 协议缓冲策略 12.6.2 队列限制 12.7 原始套接口 12.7.1 控制块 12.7.2 输入处理 12.7.3 输出处理 12.8 网络子系统的其他主题 12.8.1 带外数据 12.8.2 地址解析协议 12.9 复习题 12.10 参考文献 第13章 网络协议 13.1 IPv4网络协议 13.1.1 IPv4地址 13.1.2 广播地址 13.1.3 组播 13.1.4 端口与关联 13.1.5 协议控制块 13.2 UDP协议 13.2.1 初始化 13.2.2 输出 13.2.3 输入 13.2.4 控制操作 13.3 Internet协议(IP) 13.3.1 输出 13.3.2 输入 13.3.3 转发 13.4 TCP协议 13.4.1 TCP连接状态 13.4.2 序号变量 13.5 TCP算法 13.5.1 定时器 13.5.2 往返时间的估计 13.5.3 建立连接 13.5.4 SYN缓存 13.5.5 关闭连接 13.6 TCP输入处理 13.7 TCP输出处理 13.7.1 发送数据 13.7.2 避免糊涂窗口综合症 13.7.3 避免小数据包 13.7.4 确认延迟和窗口更新 13.7.5 重发状态 13.7.6 慢启动 13.7.7 源拥塞的处理 13.7.8 缓冲与窗口大小分配 13.7.9 使用慢启动避免拥塞 13.7.10 快速重发 13.8 ICMP协议 13.9 IPv6 13.9.1 IPv6地址 13.9.2 IPv6数据包格式 13.9.3 套接口API的调整 13.9.4 自动配置 13.10 安全 13.10.1 IPSec概述 13.10.2 安全协议 13.10.3 密钥管理 13.10.4 IPSec实现 13.10.5 密码子系统 13.11 复习题 13.12 参考文献 第五部分 系统运行 第14章 启动和关机 14.1 概述 14.2 引导 14.3 初始化内核 14.4 初始化内核模块 14.4.1 基本服务 14.4.2 初始化内核线程 14.4.3 初始化设备模块 14.4.4 内核的可加载模块 14.4.5 启动进程间通信 14.4.6 启动内核线程 14.5 用户级初始化 14.5.1 /sbin/init 14.5.2 系统的启动脚本 14.5.3 /usr/libexec/getty 14.5.4 /usr/bin/login 14.6 系统运行 14.6.1 内核的配置 14.6.2 系统关机与自动重启 14.6.3 系统调试 14.6.4 同内核传递信息 14.7 复习题 14.8 参考文献 术语表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值