This document presents the current design and implementation of the SMPng
Architecture. First, the basic primitives and tools are introduced. Next, a general
architecture for the FreeBSD kernel's synchronization and execution model is laid out.
Then, locking strategies for specific subsystems are discussed, documenting the
approaches taken to introduce fine-grained synchronization and parallelism for each
subsystem. Finally, detailed implementation notes are provided to motivate design
choices, and make the reader aware of important implications involving the use of
specific primitives.
This document is a work-in-progress, and will be updated to reflect on-going design
and implementation activities associated with the SMPng Project. Many sections currently
exist only in outline form, but will be fleshed out as work proceeds. Updates or
suggestions regarding the document may be directed to the document editors.
The goal of SMPng is to allow concurrency in the kernel. The kernel is basically one
rather large and complex program. To make the kernel multi-threaded we use some of the
same tools used to make other programs multi-threaded. These include mutexes,
shared/exclusive locks, semaphores, and condition variables. For the definitions of these
and other SMP-related terms, please see the Glossary section of this article.