写点什么

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

2015 年 10 月 28 日

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 开源操作系统介绍在线课程”。

关于作者

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

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

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

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


感谢张龙对本文的审校。

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

2015 年 10 月 28 日 18:552821
用户头像

发布了 30 篇内容, 共 92258 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
  • 安装 VirtualBox 虚拟机

    2019 年 6 月 17 日

  • Hadoop 三国之吴国 MapR

    Hadoop领域曾经有三家发行商互相角逐,这其中不乏各种战术与谋略。MapR实力强大却少争斗,今天是其特立独行的故事。

    2018 年 3 月 7 日

  • 可视化分析鼻祖 Tableau

    Tableau作为可视化分析软件领域的奠基人,算是学术界人士创业成功的典范,今天就来看一看其成长的历程。

    2017 年 10 月 11 日

  • 程序员练级攻略:技术资源集散地

    学习需要自我驱动,要学会自己“找食物”,而不是“等着喂”。《程序员练级攻略》只是一个起点,引发你去走更远的路。

    2018 年 8 月 9 日

  • Linux 28 岁了,我们总结了 28 个不为人知的事实

    自从 Torvalds 发布 Linux 以来的 28 年里,它已经对技术和整个世界产生了巨大的影响。不过,大多人都已经知道了 Linux 的“起源故事”。以下是关于 Linux(内核和更大的生态系统)的 28 个事实,你有可能还不知道。

  • Debian 10 Buster 正式发布 安全性能大幅提升

    据介绍,新版本提供多个桌面应用程序和环境,在安全性能上整体大幅提升,包含大量更新的软件包,并支持10种架构。

  • MINIX 3 承诺比 Windows 或 Linux 更安全

    阿姆斯特丹Vrije大学的计算机科学教授Andrew S. Tanenbaum正领导着一个开发MINIX 3操作系统的项目,MINIX 3的目标是比Windows或Linux更安全。

  • 56 张图入门操作系统——内功心法,适合所有程序员

    利用56张思维导图从OS概述、进程管理、内存管理、文件管理、I/O五部分系统的了解了操作系统

    2020 年 8 月 18 日

  • OpenSolaris 走到尽头了吗?

    Oracle的一份内部非官方备忘录概述了与OpenSolaris操作系统相关的策略。一些人觉得这宣布了OpenSolaris的结束,而还有人指出,这给了Illumos项目不错的机会,Illumos是一个开源组织,它想实现完全开放的OpenSolaris,提供当前闭锁状态的代码,并且不再依赖于Oracle。

  • 阿里 P8 大牛 2020 年总结整理的心血之作:17W 字操作系统、网络协议教程、面试真题(附导图 + 笔记)

    阿里P8大牛2020年总结整理的心血之作:17W字操作系统、网络协议教程、面试真题(附导图+笔记)

    2020 年 10 月 30 日

  • 3 类 6 种,主流容器操作系统全比较

    本文来自RancherLabs微信公众号

  • Linux 之父为过去的言行道歉,宣布离开社区反思

    “我向因我的个人行为受到伤害的人道歉,可能有些人因此彻底退出了内核开发。”

  • .NET Core 支持 FreeBSD

    对于使用.NET Core项目的开发者来说,他们现在能够在FreeBSD平台上使用该项目了。到目前为止,以及能够在4个平台(Mac OS X、Linux、Windows和 FreeBSD)上运行.NET程序集了。

  • 世界需要新的操作系统——Fuchsia 设计解读

    本次分享介绍全新操作系统 Fuchsia。

  • Using webpack to make Apps fast at Microsoft

    演讲嘉宾Sean Larkin 【廖肖恩 】is a Program Manager at Microsoft working on Edge DevTools, expert on Web Performance, and maintainer of webpack. Outside of work, he works with Fortune 500 companies helping them change their culture for Web Performance practices, Open Source, and embracing emerging technologies. In his free time he loves spending time with his family, hiking, woodworking, cooking, gardening, Orchid cultivating, playing video games, hacking on IoT, and Streaming his open source work!Sean Larkin【廖肖恩】是Microsoft的研发经理,负责Edge DevTools;他还是Web性能专家和webpack维护者。在工作之余,他与财富500强公司合作,帮助他们改变他们的文化,以实现Web性能实践、开源和采用新兴技术。在他的空闲时间里,他喜欢和家人共度时光,远足、木工、烹饪、园艺、兰花培养、玩视频游戏、黑客攻击物联网,以及打磨自己的开源作品!内容介绍Did you know that the average website takes over 16 seconds to load on a mobile device? Did you know that on average the amount JavaScript and CSS that goes wasted is over 60%! If JavaScript and CSS are our most expensive resources to load, why are we hurting our load times by shipping stuff we don’t ever use? How do we get rid of this unused code? How can we profile our web applications load times?Join me as I teach you about the performance constrains of the modern Web, and how to write rich applications within these boundaries using household tools like webpack.We’ll learn about how webpack solves these performance problems through a concept called code-splitting. We will walk through examples of code-splitting together, the many ways you can leverage it in your web application, and how webpack enhances this feature using magic comments, service workers, and prefetch and preload!By the end of this talk you know: Where the most costly resources in your we application How to profile and analyze a web application load-times Understand what is “unused code” and how to get rid of it with code-splitting and webpack Learn the many types of code splitting in webpack, and other performance related features like service worker and how to integrate them with webpack Learn how frameworks adopt code-splitting and the route, component, and library level How to implement this in your own codebase 你是否知道,网站在移动设备上的平均加载时间超过16秒? 你是否知道,加载的JavaScript和CSS资源平均浪费超过60%? 如果JavaScript和CSS是我们要加载的最昂贵的资源,那为什么要浪费时间去加载一些根本用不着的东西? 我们如何去掉未使用的代码?我们应该如何剖析Web应用的加载时间?本次演讲将介绍现代Web的性能约束,并讲解如何使用像webpack这样的工具在约束之下编写内容丰富的应用。我们将学习webpack如何通过一个叫代码分离(code-splitting)的概念来解决这些性能问题。我们将通过一些例子来学习,这里演示的方法都可以直接用在自己的Web应用中。我还将分享webpack如何使用魔法注释(magic comment)、service worker、预取(prefetch)和预加载(preload)等特性来增强代码分离。你将学到: 如何定位Web应用中最昂贵的资源 如何分析Web应用的加载时间 理解哪些是未使用代码,以及如何通过代码分离与webpack去掉它们 学习webpack中不同类型的代码分离,了解像service worker等其他性能相关的特性,以及如何将其与webpack集成

    2019 年 7 月 24 日

  • 两周内在 Github 上收获 1800+ 个星:内核层网络栈优化项目 Fastsocket 背后的故事

    2014年10月18日,当时就职于新浪操作系统团队的林晓峰在Github上开源了名为Fastsocket的项目。开源之后的两周之内,该项目迅速收获了1800多个star和200多个fork,可以说成为了开源社区又一新的热点项目。近日,InfoQ编辑对Fastsocket的主要维护人员林晓峰、新浪操作系统团队的负责人李晓栋进行了邮件采访,了解有关Fastsocket项目的更多背景。

  • 三种流行操作系统的内核比较

    本文从三种角度(效率、演变和用户友好性)简要比较了三种流行操作系统(Vista和两位准Unix家族成员)。这三种操作系统(仅比较内核)是:OpenSolaris、Windows Vista和Linux 2.6。

  • 第二届工业大数据创新竞赛:看智造时代下的大数据未来

    在大数据价值堪比石油黄金的今天,如何充分挖掘大数据价值,推动工业制造数字化转型,已然成为新一轮时代命题。

    2019 年 4 月 1 日

发现更多内容

webpack入门(一)

子铭

面向对象是什么

落英亭郎

面向对象

《零基础学Java》 FAQ 之 零-这门课适合我吗?

臧萌

Java 编程语言

用 Electron 打包语雀

封不羁

Java Electron

分布式限流框架 - Sentinel

Java收录阁

dubbo sentinel

一口气带你踩完五个 List 的大坑,真的是处处坑啊!

楼下小黑哥

Java 踩坑 后端 集合

大话区块链和比特币的技术原理

麦叔

比特币 区块链 数字货币 加密货币 加密解密

数据产品经理|关于产品续费率的思考

黄大路

数据挖掘 数据分析 产品经理

Spring Cloud集成Sentinel

Java收录阁

Spring Cloud sentinel

自助设备系列——推广

孙苏勇

产品 行业资讯 智能设备

谈知识付费

兆熊

如果想了解驱动开发,请不要错过这篇。

水滴

最佳实践 开发者 程序设计 测试驱动开发实战营

在实战中学习项目管理

兆熊

项目管理 专栏

从nacos客户端的TIME_WAIT说起

小楼

Java TCP nacos

Java内存模型和volatile、final等关键字

麻瓜镇

Java 多线程

程序员必需清楚的进程和线程

后端学长

线程 操作系统 进程

人人都应该懂的加密算法 - 公钥加密

麦叔

对称加密 加密解密 信息安全 公钥加密

浅析 - CocoaLumberjack 3.6 之 FileLogger

Edmond

ios log4j CocoaLumberjack DDLog 日志轮替

设计模式入门和策略模式

设计模式

《零基础学 Java》 FAQ 之 3-为什么计算机里的浮点数不精确

臧萌

Java 浮点数

《零基础学 Java》 FAQ 之 4-关于补码,多说两句

臧萌

Java 补码

HTTP 升级 HTTPS 全过程记录

猴哥一一 cium

https 证书

Spring Boot自动装配的原理

Java收录阁

Spring Boot

Dubbo和Spring集成的原理

Java收录阁

dubbo

一位狂热崇拜亚里士多德的男士在酒吧试图勾搭一位女士

黄大路

小说 哲学

给在线教学泼点冷水

启润

在线教育 基础教育

《如何阅读一本书》读书心得

兆熊

读书笔记

Sentinel集成Nacos实现动态流控规则

Java收录阁

sentinel

软件产品信息安全 - 数据分类

Interstate5

软件开发 信息安全 数据分类

权威与边界

伯薇

权威 边界 BART 工作方式

产品周刊 | 第 14 期(20200510)

Herbert

产品 产品经理 产品设计

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

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