第 8 章 SMPng 设计文档
上一页 | 部分 I. 内核 | 下一页

## 第 8 章 SMPng 设计文档

写作：John Baldwin 和 Robert Watson.
翻译：李 鑫.

版权 © 2002, 2004-2005 John Baldwin, Robert Watson

## 8.1. 绪论

这份文档对目前 SMPng 架构的设计与实现进行了介绍。 它首先介绍了基本的原语和相关工具， 其后是关于 FreeBSD 内核的同步与执行模型， 接下来讨论了具体系统中的锁策略， 并描述了在各个子系统中引入细粒度的同步和实现并行化的步骤， 最后是详细的实现说明， 用以解释最初做出某些设计决策的动机， 并使读者了解使用特定的原语所可能产生的重大影响。

这份文档仍在撰写当中， 并将不断更新以反映与 SMPng 项目有关的最新设计与实现的情况。 其中有许多小节目前还只是提纲， 但我们会逐渐为其充实内容。 关于这份文档的更新和建议， 请发给文档编辑。

SMPng 的目标是使内核能够并发执行。 基本上， 内核是一个很大而复杂的程序。 要让内核能够多线程地执行， 我们需要使用某些其它多线程程序在实现时所用到的工具， 这包括互斥体(mutex)、 共享/排他锁(shared/exclusive lock)、 信号量(semaphores) 和条件变量(condition variable)。 如果希望了解它们以及其它 SMP 术语， 请参阅本文的 术语表 一节。

## 术语表

原子

  当遵循适当的访问协议时， 如果一操作的效果对其它所有 CPU 均可见， 则称其为原子操作。 狭义的原子操作是机器直接提供的。 就更高的抽象层次而言， 如果结构体的多个成员由一个锁保护， 则如果对它们的操作都是在上锁后、 解锁前进行的， 也可以称其为原子操作。

  参见操作.

阻塞

  线程等待锁、 资源或条件时被阻塞。 这一术语也因此被赋予了太多的意涵。

  参见休眠.

临界区

  不允许发生抢占的代码段。 使用 critical_enter(9) API 来表示进入和退出临界区。

MD

  表示与机器/平台有关。

  参见MI.

内存操作

  内存操作包括读或写内存中的指定位置。

MI

  表示与机器/平台无关。

  参见MD.

操作

  见内存操作.

主中断上下文

  主中断上下文表示当发生中断时所执行的那段代码。 这些代码可以直接运行某个中断处理程序， 或调度一异步终端线程， 以便为给定的中断源执行中断处理程序。

实时内核线程

  一种高优先级的内核线程。 目前， 只有中断线程属于实时优先级的内核线程。

  参见线程.

休眠

  当进程由条件变量或通过 `msleep` 或 `tsleep` 阻塞并进入休眠队列时， 称其进入休眠状态。

  参见阻塞.

可休眠锁

  可休眠锁是一种在进程休眠时仍可持有的锁。 锁管理器 (lockmgr) 锁和 sx 锁是目前 FreeBSD 中仅有的可休眠锁。 最终， 某些 sx 锁， 例如 allproc (全部进程) 和 proctree (进程树) 锁将成为不可休眠锁。

  参见休眠.

线程

  由 struct thread 所表达的内核线程。 线程可以持有锁， 并拥有独立的执行上下文。

等待通道

  线程可以在其上休眠的内核虚拟地址。

上一页 | 上一级 | 下一页
7.6. 调整FreeBSD的虚拟内存系统 | 起始页 | 8.2. 基本工具与上锁的基础知识

本文档和其它文档可从这里下载： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.