提高硬件性能最简单且最经济的方法之一是在主板上安装多个 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 环境中使用它是安全的 |