> For the complete documentation index, see [llms.txt](https://freebsd-journal-cn.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://freebsd-journal-cn.bsdcn.org/20161112-bian-cheng-yu-yan/teach-bsd.md).

# 教 BSD

**作者：George V. Neville-Neil 与 Benedict Reuschling**

2016 年 8 月第二周，George Neville-Neil 访问了我在德国达姆施塔特应用科学大学计算机科学系。George 与剑桥大学的 Robert Watson 合作多年，开发了一门硕士级课程。

这门课程用 DTrace 分析并探索运行中的 FreeBSD 操作系统。我邀请 George 来我校，在学期假期为一批有兴趣的本科生上本科版本的课程。此举目标众多：我们想了解课程材料（在 teachbsd.org 在线可得）对本科生、尤其是未修过操作系统课程的人效果如何；另一目标是改编课程减少论文写作（在硕士版本中较强调），仍聚焦实践内容；最后，我们想看看德国学生能否理解英语授课的课程，是否愿意提问与参与课堂。

令人欣喜的是，英语对学生并非障碍，他们很快开始提问。

课程分为上午与下午两段，中间午休。上午是典型讲座，George 讲解不同内核子系统如何工作，既给出理解概念所需的理论背景，也概述现代操作系统 FreeBSD 中的实现。午餐后，学生拿到实验题，用 DTrace 在虚拟机上完成。实验覆盖上午讲座的话题。因这些客座讲座安排在学期假期，参与学生不多。小班使我们能在整周给予学生更多个别帮助，这通常在大班里难以做到。

周一是课程内容概览，包括一点计算机史。引言与概览部分向学生介绍操作系统开发的起源、演变，以及部分当前操作系统实现的原因。现代操作系统的许多部分源于软硬件进步的相互作用，一方影响另一方。明显例子是现代 RISC 处理器受 UNIX 与 C 语言的兴起影响；这类张力驱动着我们向学生展示的许多课程。周一实验的目标是让学生搭好虚拟机并熟悉 DTrace 工具，让他们动手做最初的基本追踪。

周二上午以小测验开场，了解学生当前水平并检验周一话题理解程度。随后讲解进程如何工作、什么是虚拟内存、进程与线程如何在操作系统中调度。锁定话题与挑战（包括死锁与锁序倒置）受到重点关注。不理解并发与锁定，学生就无法真正体会现代硬件与软件的许多微妙之处——不论在操作系统中还是多线程用户程序中。实验覆盖追踪进程及其各种状态，让学生解释 UNIX 进程生命周期。第二天课程的反馈转化为更新后的幻灯片。不止一次，课程之夜用于修订或全新创作整套幻灯片，以阐释学生白天难以理解的概念。

讲完进程、虚拟内存与并发基础后，我们转向操作系统中的通信。从基本进程间通信（IPC）开始，讲解信号及其在程序与操作系统间通信中的用法。从基本 IPC 转到套接字与网络通信。网络话题涵盖 DNS、UDP、TCP，重点在操作系统如何实现 TCP——连接建立、数据传输、滑动窗口、连接拆除。由于所有学生都已修过本科网络课程，他们能迅速体会操作系统为正确实现 TCP 软件所需做什么。因这份熟悉，学生提问深入到操作系统内部，比之前几节更深。当天通信实验让学生用本地 nginx 实例提供静态网页，追踪 TCP 连接建立过程。我们也让他们用 graphviz 包将推导出的状态机可视化，这部分是我教学生的。

周四讲座主题是数据存储与文件系统。讲了 namecache、虚拟文件系统层（VFS）以及数据读写等内容。namecache 总是需要大量讲解，因为缓存否定结果的概念多数本科生尚未接触。实验中学生进一步探索 namecache 及其与 nginx 在请求某个网页 URL 时的交互。周四下午课程提前结束，给学生时间准备次日考试。

周五我们给学生完整系统视角，把一周讨论的话题全部串联。这场讲座既是笔试前的复习，也把一切串联起来。具体而言，我们探索 nginx 这类 Web 服务器提供页面时操作系统各层发生什么。学生接触到哪些 worker 进程在运行、做了哪些缓存查找、创建了哪些 TCP 状态等。

期末是 90 分钟考试，覆盖一周所有话题，问题聚焦操作系统实现细节与几道 DTrace 单行脚本。考试期间允许学生使用笔记本，以便在交卷前测试并验证 DTrace 脚本。考试决定课程成绩。评分后我们对结果非常满意，并已在讨论如何基于这首次试运行进一步完善课程。

George 不上课时（他非常享受上课），我带他参观达姆施塔特的校园、城市与不错的餐厅。我也把他介绍给那周未放假的几位教授。George 不仅在系统层面擅长联网，人际层面也很在行。我们就教学到教育中的文化多样性、将从业者工作融入大学课程等话题有过良好讨论。

课程中较有趣的一些时刻与学校所有时钟走时不准有关。要么电池没电，要么走得太慢，要么完全说不通（“现在世界上没有哪个地方是 16:00”）。对 George 这样的计时狂人，这成了贯穿整周的反复笑话。

总体而言，这一周非常富有成效。我们为面向本科生的 teachbsd 课程获得了宝贵反馈，学生也上到了一堂生动的操作系统内核课。我打算把其中部分讲座融入我自己的整学期课程，George 也计划重返达姆施塔特，讲授更新、扩展版的课程。

***

**GEORGE V. NEVILLE-NEIL** 出于兴趣和生计从事网络与操作系统代码工作，也教授与编程相关的各类课程。他的兴趣领域包括代码探秘、操作系统、网络和时间协议。他与 Marshall Kirk McKusick 和 Robert N. M. Watson 合著了《FreeBSD 操作系统设计与实现》。十余年来，他以 Kode Vicious 之名撰写专栏。他在马萨诸塞州波士顿的东北大学获得计算机科学学士学位，是 ACM、USENIX 协会和 IEEE 的会员。他热爱骑行和旅行，现居纽约市。

**BENEDICT REUSCHLING** 于 2009 年加入 FreeBSD 项目。2010 年获得完整文档提交权限后，他积极指导他人成为 FreeBSD 提交者。他是 BSD 认证小组的监考人，并于 2015 年加入 FreeBSD 基金会，现任副总裁。Benedict 拥有计算机科学理学硕士学位，在德国达姆施塔特应用技术大学教授面向软件开发者的 UNIX 课程。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://freebsd-journal-cn.bsdcn.org/20161112-bian-cheng-yu-yan/teach-bsd.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
