提高硬件性能最简单且最廉价的方法之一是在主板上安装多个 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 一起使用 |