SMP--对称多处理器

SMP的结构中,在CPU运行时都是“对称”的,没有主次之分。所有的CPU通过同一条总线共享同一个内存以及外设。为了减少内存访问的冲突,SMP结构中的各干CPU通常都有自己的高速缓存。

程序的运行:

各个CPU动态的从系统的就绪队列中调度进程加以执行,一个进程在不同的时间可以在不同的CPU上运行,中断请求则动态的分配给其中的一个CPU,由这个CPU提供中断服务。除一般的内存共享外,处理器间的通信手段还有进程间通信和处理器间的中断请求。

SMP中的主要问题:

  • 同步
  • cache一致性
  • 中断

同步

进程间的同步实际是对临界资源的互斥操作

在单处理器结构中,只要能保证在对临界资源的操作中途不发生进程调度,并且不会发生中断,或者即使发生中断也与操作的对象无关,就保证了操作的互斥性。

1
2
spin_lock
atomic

一般而言,只要能保证对临界资源操作的“原子性”,互斥性就保证了,在单处理器结构中,能够在单条指令完成的操作就认为是“原子操作”。在CPU的设计中为保证原子操作,设计一些原子指令,“测试并设置”, “测试并清除”。

在SMP结构中,对指令间的执行顺序的依赖会存在很大的风险。必须使用锁使其在一个CPU上执行完毕,不能中断,否则可能导致指令顺序错乱。

Cache一致性

1
2
3
4
5
6
7
8
9
10
11
12
+----+  +----+   +----+  +----+
|CPU0| |CPU1| |CPU2| |CPU3|
+----+ +----+ +----+ +----+
+-+ +-+ +-+ +-+
| | | |
+---v-----v--+ +--v------v--+
| L1 Cache | | L2 Cache |
+------+-----+ +------+-----+
| |
+------v----------------v-----+
| L2 Cache |
+-----------------------------+

中断

Q&A

Cache line

参考

  1. [Linux内核源代码情景分析]
  2. 基于多核处理器的RTOS多核扩展分析与研究 一