# FreeBSD 2001 年 9 月状态报告

原文链接：[FreeBSD 2001 年 9 月状态报告](https://www.freebsd.org/status/report-2001-09.html)

## 简介

在 9 月，FreeBSD 项目继续投资于长期项目，包括继续进行细粒度 SMP 实现的工作、协助高度高效线程的内核可调度实体（KSE）支持，以及扩展对现代硬件平台的支持，包括英特尔新的 IA64 架构、UltraSparc 和 PowerPC。此外，还重点关注了发布过程，包括发布说明基础设施的工作、DVD 发布的支持以及二进制更新工具的工作。

由于 9 月的报告推迟发布，11 月的状态报告也将包括 10 月。在 11 月期间，我们期待着 BSDCon 欧洲大会，这是首项在美国大陆以外的此类活动。USENIX 会议论文提交截止日期也在 11 月，建议 FreeBSD 用户和开发者向一般和类 Unix 主题提交论文。更多信息请参见 <https://www.usenix.org>。

## [binup](https://www.freebsd.org/status/report-2001-09.html#binup)

**链接**：<http://www.freebsd.org/projects/updater.html>

联系方式：Eric Melville <<eric@FreeBSD.org>>

联系方式：Murray Stokely <<murray@FreeBSD.org>>

该项目有邮件列表：`freebsd-binup@FreeBSD.org`，并且源代码树已移入 FreeBSD CVS 仓库的目录 `projects/`。当前的工作重点是扩展 FreeBSD 的包管理框架，应该会在年底之前重新编写，完成客户端库。

待办：将 `projects/` 目录层次结构做成 cvsup 分发并添加到 cvs-all 中。然后更新 `distrib.self`。

## [压缩 TCP 状态](https://www.freebsd.org/status/report-2001-09.html#Compressed-TCP-state)

联系方式：Jonathan Lemon <<jlemon@FreeBSD.org>>

由于同步缓存代码的提交滞后，该项目的开发进度放缓，因为这部分工作依赖于同步缓存代码。

## [光纤通道支持](https://www.freebsd.org/status/report-2001-09.html#Fibre-Channel-Support)

**链接**：<http://www.feral.com/isp.html>

联系方式：Matthew Jacob <<mjacob@FreeBSD.org>>

2Gb 支持的错误修复和迁移到了 -STABLE 分支。

## [FreeBSD C99/POSIX 合规性项目](https://www.freebsd.org/status/report-2001-09.html#FreeBSD-C99/POSIX-Conformance-Project)

**链接**：<http://people.freebsd.org/~mike/c99/>

联系方式：Mike Barcroft <<mike@FreeBSD.org>>

联系方式：FreeBSD-Standards 邮件列表 <<freebsd-standards@bostonradio.org>>

FreeBSD C99/POSIX 合规性项目旨在实现 C99 标准和最新 1003.1-200x POSIX 草案（目前是草案 7）中的所有要求。在无法遵循标准的某些方面时，将把这些方面记录在手册 c99(7) 或 posix(7) 中。该项目的目标之一是实现回归测试，以确保尽可能的正确性。

已开发并即将提交的补丁实现了头文件 `<stdint.h>` 和 `<inttypes.h>` ，以及对 printf(3) 的修改。这些改动能让我们使用 C99 引入的一些新类型，如 `intmax_t`，以及 printf(3) 格式说明符“%j”。

## [生成 FreeBSD DVD](https://www.freebsd.org/status/report-2001-09.html#FreeBSD-DVD-generation)

联系方式：Brian Somers <<brian@freebsd-services.com>>

两张光盘的版本已经制作完成，送去压制。这次发布有一些惊喜，将在官方公告中给出（将在 BSDConEurope 上发布）详细信息。

## [FreeBSD Java 项目](https://www.freebsd.org/status/report-2001-09.html#FreeBSD-Java-Project)

**链接**：[官方 FreeBSD Java 项目网站](http://www.freebsd.org/java/)

联系方式：Greg Lewis <<glewis@eyesbeyond.com>>

本月，项目在 JDK 1.3.1 开发方面取得了进展，发布了另外两个补丁集。团队对于最新补丁集的稳定性有相当信心，特别是在默认的“绿色”线程子系统下使用核心 JDK 1.3.1 工具和类。主要得益于 Fuyuhiko Maruyama 的辛勤工作，使得代码得以稳定和修复。Bill Huey 也在推进他关于“本地”线程子系统的工作，尽管该子系统尚未达到“绿色”线程的稳定性。最新补丁集的另一个（或许是最重要的）亮点是 Scott Bartram 和 Alistair Crooks（后者因 NetBSD 包而知名）整合了 NetBSD 的支持。希望 OpenBSD 的支持也会随之而来，使其真正成为一个统一的 BSD Java 项目。

## [FreeBSD libh 项目](https://www.freebsd.org/status/report-2001-09.html#FreeBSD-libh-Project)

**链接**：

联系方式：Alexander Langer <<alex@FreeBSD.org>>

联系方式：Nathan Ahlstrom <<nra@FreeBSD.org>>

构建过程现在会创建四个不同版本的库，其中包括对 TVision、Qt 的支持，或两者，或者都不支持。我已经从现有的 Ports 创建了一些初始包，并且仅使用 libh 的工具安装了这些 libh 包，包括在包数据库中注册所有文件，记录它们的校验和等。对磁盘编辑器的补丁已经提交，包括功能以写入 fdisk 部分的更改，并初步支持磁盘标签编辑器。我们很快就会有一位新的提交者。

## [FreeBSD/sparc64 平台](https://www.freebsd.org/status/report-2001-09.html#FreeBSD/sparc64-port)

联系方式：Jake Burkholder <<jake@FreeBSD.org>>

联系方式：Thomas Moestl <<tmm@FreeBSD.org>>

我很高兴地宣布，至 10 月 19 日星期五凌晨 1 点，sparc64 平台已成功启动到单用户模式。从基本系统构建并验证的几个二进制文件已正常工作。许多这方面的工作仍在审查中，但会尽快集成到 CVS 树中。从 NetBSD 移植了 EBus 支持，编写了 ISA 支持。PCI 主桥代码已稳定，busdma 现在也能正常工作。sio 驱动添加了 EBus 支持，修改了 ATA 驱动，使其能够在大端系统上工作——并使用 busdma API。通过这些更改，现在可以从 sparc64 上的 ATA 磁盘成功挂载根文件系统——即使是在 DMA 模式下。从 NetBSD 移植的 gem 驱动程序支持 Sun GEM 和 ERI 以及 Apple GMAC 和 GMAC2 以太网适配器，但尚未经过充分的测试。

## [改进 FreeBSD 启动脚本](https://www.freebsd.org/status/report-2001-09.html#Improving-FreeBSD-startup-scripts)

**链接**：

[改进 FreeBSD 启动脚本](http://groups.yahoo.com/group/FreeBSD-rc/)

[Luke Mewburn 的论文](http://www.cs.rmit.edu.au/~lukem/bibliography.html)

[NetBSD 初始化与服务控制](http://www.netbsd.org/Documentation/rc/)

联系方式：Doug Barton <<DougB@FreeBSD.org>>

联系方式：Gordon Tetlow <<gordont@gnf.org>>

该小组讨论 FreeBSD 的启动脚本，主要是 `/etc/rc*` 下的脚本。主要关注点是改进并引入 NetBSD 在这一领域的卓越工作。

好了，伙计们，我昨晚终于动起来，整理了迁移到新的 `rc.d` 初始化脚本的路线图，这些脚本很久以前就从 NetBSD 导入了，但一直放在源码中。

里程碑 1（包含补丁）

* 设置基础设施
* 使 `rcorder` 可以编译
* 将 `rc.subr` 集成到发行版中（以及 mergemaster）
* 将 `rcorder` 集成到世界中
* 在 `rc.conf` 中添加切换开关，切换 `rc_ng` 和当前的启动脚本

里程碑 2

* 使 FreeBSD 使用新的启动脚本启动
* 重写 `/etc/rc.d` 脚本，以便与 FreeBSD 配合使用

里程碑 3

* 向 `rc.subr` 中添加一些特定于 FreeBSD 的支持

里程碑 4

* 向基础设施中添加真正的依赖关系检查，以便启动 nfsd 时启动 mountd 和 rpcbind
* 向 `rc.subr` 中添加支持
* 在 `rc.d` 脚本中添加依赖关系

希望有几个人能看看这个，然后如果没有太多反对意见，我将提交一个 PR。我预计里程碑 2 会遇到不少问题，但嘿，我已经从清洁工那拿回了我的光亮的石棉衣。

## [Intel Gigabit 驱动](https://www.freebsd.org/status/report-2001-09.html#Intel-Gigabit-driver)

联系方式：Jonathan Lemon <<jlemon@FreeBSD.org>>

终于把 gx 驱动提交到了源码中。该驱动支持 Intel PRO/1000 卡，包括光纤和铜缆两种变体。驱动支持 VLAN 标签和 TCP/IP 校验和卸载。

## [Intel 千兆以太网](https://www.freebsd.org/status/report-2001-09.html#Intel-Gigabit-Ethernet)

联系方式：Matthew Jacob <<mjacob@FreeBSD.org>>

这个驱动进行了大量的清理，修复了错误并进行了一些性能增强。然而，该驱动可能会很快被 Intel 自己的驱动所替换。

## [jpman 项目](https://www.freebsd.org/status/report-2001-09.html#jpman-project)

链接：<http://www.jp.freebsd.org/man-jp/>

联系方式：<<man-jp@jp.FreeBSD.org>>

我们已经完成了手册页 1、2、5、6、7、8 的更新，这些更新基于 4.4-RELEASE，更新工作在 4.4-RELEASE 发布一周后完成。为了完成此次更新，OKAZAKI Tetsurou 已经将 Ex/Rv 宏支持导入到 ja-groff-1.17.2\_1 中。SUZUKI Koichi 负责了大部分日文手册页的 Ex/Rv 更改。他还发现了这些宏在某些原始手册页中的使用问题，并提交了 PR。对于 4.4-RELEASE 之后的版本，我们的目标是 4.5-RELEASE。第 3 部分的更新也在进行中。

## [KSE](https://www.freebsd.org/status/report-2001-09.html#KSE)

链接：

<http://www.freebsd.org/~jasone/kse/>

<http://www.freebsd.org/~julian>

联系方式：<<julian@FreeBSD.org>>

上个月，除了对 8 月份的大规模提交进行整理外，其他进展不大。主要是因为我在工作中的工作量突增，以及需要把时间花在其他地方。然而，设计工作还是在进行中。API 已经逐步稳定下来，几个人正在阅读已经完成的部分，以便能在下一个阶段提供帮助。

里程碑 3 将实现每个进程生成和移除多个线程/KSE 的能力。里程碑 3 不要求这样做是安全的（尤其是在 SMP 系统中），即锁定问题尚未完全解决，所以虽然可以进行一些测试，但在此模式下无法承载任何负载。

这将需要为新结构创建分配器和析构函数，创建系统调用，生成准确的用户态 API 文档，编写 upcall 启动代码，制作一个用户态测试程序（不是完整的线程调度器），并以向后兼容的方式解决一些显而易见的不兼容问题（例如调度器）。 (即，如果系统中没有多线程进程，它的行为应与当前一样，且同样可靠)。

我们确定是否达到里程碑 3 的标准是：在一个未加载的系统上，简单的进程能够可靠地执行一系列阻塞系统调用。例如：打开 2 个套接字，在其中一个上发送数据，读取另一个后，再按相同方式“响应”。

## [支持多控制台](https://www.freebsd.org/status/report-2001-09.html#Multiple-console-support)

联系方式：Jonathan Lemon <<jlemon@FreeBSD.org>>

目前，单个设备可以在任何时间作为控制台，这要求用户在启动时选择控制台设备。随着即将支持网络控制台，期望支持多个行为相同的控制台设备，并且在内核运行时能够切换控制台。

代码已完成，只需做些最后的打磨以清理一些粗糙的部分。控制台输出可以同时发送到 syscons 和 sio（以及网络），在 ddb 中时，可以从任何输入源获取输入。一款小的控制程序能动态地添加和移除控制台。

## [Netgraph ATM](https://www.freebsd.org/status/report-2001-09.html#Netgraph-ATM)

联系方式：Harti Brandt <<brandt@fokus.gmd.de>>

ATM-Forum LAN 仿真版本 2.0（不支持 QoS）已经实现并测试。ILMI 守护进程已被模块化为一项通用的 mini-SNMP 守护进程、ILMI 模块和尚未完成的 IPOA（IP over ATM）模块。

## [网络控制台](https://www.freebsd.org/status/report-2001-09.html#Network-console)

联系方式：Jonathan Lemon <<jlemon@FreeBSD.org>>

该项目的目标是为 FreeBSD 添加底层网络功能。初步目标是为远程调试提供网络控制台，支持 ddb/gdb。次要目标是利用此代码执行网络崩溃转储。设计假设网卡和驱动程序正常工作，但不依赖于内核的其他部分。

初步开发进展相当迅速，并且已经编写了一款最简单的 TCP/IP 堆栈。目前，可以通过 telnet 连接到处于 `ddb>` 提示符下的机器，并与调试器进行交互。

## [网络设备节点](https://www.freebsd.org/status/report-2001-09.html#Network-device-nodes)

联系方式：Jonathan Lemon <<jlemon@FreeBSD.org>>

现在，网络设备支持以 `/dev/netN` 的形式使用别名，其中 `N` 是接口索引。可以通过 `/boot/device.hints` 中的条目将设备绑定到特定的索引号：

```ini
hint.net.<ifindex>.dev="设备名"
hint.net.<ifindex>.ether="以太网地址"
```

此外，更新了 ifconfig，现在能在配置设备时接受别名名称。

## [网络 SMP 锁定](https://www.freebsd.org/status/report-2001-09.html#Network-SMP-locking)

联系方式：Jonathan Lemon <<jlemon@FreeBSD.org>>

本月进展不大，其他项目占用了大部分时间。然而，审查所有代码和数据结构有个意外的好处：为 inet 地址添加了哈希表。这将显著加快在接口别名众多情况下对接口地址的查找速度。

## [新 Mount(2) API](https://www.freebsd.org/status/report-2001-09.html#New-Mount\(2\)-API)

联系方式：Poul-Henning Kamp <<phk@FreeBSD.org>>

联系方式：Maxime Henrion <<mux@qualys.com>>

我们现在已经取得了一些进展，新版的 nmount(2) 系统调用几近完成。仍有一些工作要做，来让 `kernel_mount()` 正常工作，并将所有文件系统转换为使用这个新的 API 来处理它们的 `VFS_MOUNT()` 函数。

## [将 ppp 移植到 hurd & linux](https://www.freebsd.org/status/report-2001-09.html#Porting-ppp-to-hurd-&-linux)

联系方式：Brian Somers <<brian@freebsd-services.com>>

自上月以来，状态没有变化。已经提交了补丁，以在 Hurd，并在大部分 Linux 下运行 ppp。GPL 版权问题仍待解决。预计在提交 ppp IPv6 支持后会出现许多冲突。

## [PowerPC 平台](https://www.freebsd.org/status/report-2001-09.html#PowerPC-Port)

联系方式：Benno Rice <<benno@FreeBSD.org>>

在本月的 PowerPC 移植工作中，取得了一些重要进展。Mark Peek 成功地在 FreeBSD 上交叉编译了 FreeBSD/PowerPC 内核，并使其在 PSIM 模拟器（现在在 `/usr/ports/emulators/psim-freebsd`）下启动。我也成功地使 FreeBSD 引导加载程序能够加载和执行使用 Apple Macintosh 硬件上的 OpenFirmware 启动的内核。Mark 现在正在完成一些启动代码和 pmap 代码，而我则利用模拟器来处理一些中断和设备问题。

## [PPP IPv6 支持](https://www.freebsd.org/status/report-2001-09.html#PPP-IPv6-Support)

联系方式：Brian Somers <<brian@freebsd-services.com>>

该软件已经提交到 -current，并且似乎功能是正常的。待解决的问题一处理 IPV6CP 事件（链接启用和禁用脚本）以及分配站点本地和全局地址（目前，`iface add` 是唯一实际使用链路的方式）。在 -STABLE 中有个 bug（运行尚未 MFC 的 ppp 代码），即路由条目会在一段时间后消失（大约 12 到 24 小时）。目前没有更多详细信息。

## [PRFW](https://www.freebsd.org/status/report-2001-09.html#PRFW)

链接：<http://www.freesoftware.fsf.org/jailuser/>

联系方式：Evan Sarmiento <<evms@csa.bu.edu>>

PRFW 为 FreeBSD 内核提供钩子，允许用户在系统调用和各种内核函数中插入自己的检查。PRFW 即将发布 0.5 版本，其中将包括许多结构性更改，如更快的每进程钩子、内核函数钩子，以及一种新的添加钩子的方法，使用户可以通过字符串引用钩子。

## [RELNOTESng](https://www.freebsd.org/status/report-2001-09.html#RELNOTESng)

链接：<http://people.freebsd.org/~bmah/relnotes/>

联系方式：Bruce A. Mah <<bmah@FreeBSD.org>>

FreeBSD 4.4-RELEASE 是 FreeBSD 发布的第一版新的发布文档格式。我们为这些文档创建了英文和日文版本。现在可以在网站上找到 -CURRENT 和 4 -STABLE 发布文档的定期构建快照，但它们需要一些 HTML 基础设施来使其更易于查看。我打算继续更新我的快照站点，至少暂时是这样。

寻求帮助：需要在 Alpha 架构、USB 设备和 PCCARD 设备领域对硬件兼容性列表进行更新。我正在寻找志愿者来帮助；感兴趣的人员请通过上述电子邮件地址与我联系。DocBook 经验不是必需的，但熟悉上述硬件会非常有帮助。

## [SMPng 状态报告](https://www.freebsd.org/status/report-2001-09.html#SMPng-Status-Report)

链接：<http://www.freebsd.org/~jasone/smp/>

联系方式：John Baldwin <<jhb@FreeBSD.org>>

联系方式：<<smp@FreeBSD.org>>

本月在进程锁定方面取得了一些进展。此外，还定义了一个新的 `LOCK_DEBUG` 宏，来提高某些锁定基础设施的效率。现在，内核仅在需要时包含调用互斥锁（mutex）、信号量锁（sx）或信号量操作（semaphore）所在文件的文件名。如果启用了任何调试选项，互斥锁操作也不再内联。ucred API 也进行了重构，可更好地支持锁定。一个小组还开始调查 tty 子系统，设计并可能实现一个锁定策略。

## [实现 FreeBSD 的 SYN 缓存](https://www.freebsd.org/status/report-2001-09.html#SYN-cache-implementation-for-FreeBSD)

联系方式：Jonathan Lemon <<jlemon@FreeBSD.org>>

目前没有新的状态报告，代码仍在等待提交。很可能将对这段代码进行增补，包含 SYN cookies 作为进一步的回退机制。

## [TIRPC](https://www.freebsd.org/status/report-2001-09.html#TIRPC)

链接：<http://www.attic.ch/tirpc.html>

联系方式：Martin Blapp <<mb@imp.ch>>

如你所知，已于 2001 年 3 月提交 TIRPC 版本 2.3，同时进行了许多用户空间的更改。Alfred Perlstein 和 Ian Dowse 在移植工作中提供了很大帮助，如果我在理解代码时遇到问题，他们也给了我很多支持。

大多数 bug 已经修复，剩余需要修复的一些领域包括安全 RPC（keyserv）和 Unix 域支持。我已经有了这些领域的补丁。Ian Dowse 修复了 rpcbind 二进制文件中的许多未解决的 bug。谢谢你，Ian！

接下来的计划是逐步迁移到 TIRPC 2.8 版本，该版本在服务器端和客户端都支持线程安全。我已在我的网站提供了第一个补丁。TIRPC 2.8 的许可证是“Sun 标准许可证 1.0 版”，我们需要将一些许可证行和许可证本身添加到所有修改过的文件中。

可以在主页上找到示例 `timed_clnt_create.diff`。
