13.1. 对称多处理

提高硬件性能最简单和最廉价的方法之一是在主板上放置多个 CPU。 这可以通过使不同的 CPU 承担不同的工作(非对称多处理)或使它们全部并行运行,执行相同的工作(对称多处理,又名 SMP)来完成。 有效地进行非对称多处理需要关于计算机应执行的任务的专门知识,这在通用操作系统(如 Linux)中是不可用的。 另一方面,对称多处理相对容易实现。

我所说的相对容易,我的意思正是如此:并不是真的容易。 在对称多处理环境中,CPU 共享相同的内存,因此在一个 CPU 中运行的代码可能会影响另一个 CPU 使用的内存。 您不再能确定您在前一行设置为某个值的变量仍然具有该值; 另一个 CPU 可能在您不注意的时候修改了它。 显然,像这样编程是不可能的。

在进程编程的情况下,这通常不是问题,因为一个进程通常一次只在一个 CPU 上运行[1]。 另一方面,内核可能会被在不同 CPU 上运行的不同进程调用。

在 2.0.x 版本中,这不是问题,因为整个内核都在一个大的自旋锁中。 这意味着如果一个 CPU 在内核中,而另一个 CPU 想要进入,例如由于系统调用,它必须等到第一个 CPU 完成。 这使得 Linux SMP 安全[2],但效率低下。

在 2.2.x 版本中,多个 CPU 可以同时在内核中。 这是模块编写者需要注意的事情。

注释

[1]

异常是线程进程,它可以同时在多个 CPU 上运行。

[2]

意味着可以安全地将其与 SMP 一起使用