1. SMP机器主要支持三种同步操作:互斥、点到点时间、全局事件
2. 在基于总线的高速缓存一致的对称多处理机系统中,一般采用硬件原语和软件算法相结合来实现同步。
3. 互斥操作
(1) 简单的锁算法
在处理器指令集中支持某种原子执行的读-修改-写指令,如交换指令。
Test&Set指令:内存位置的值被读到指定的寄存器中,并且常数1被存入该内存位置。
Lock: t&s register , location
Bnz lock //寄存器的值是否等于0,如果不是0再试
Ret
Unlock: st location #0
Ret
MIPS下的LL 和 SC指令
(2) 改进的锁算法
Test&Set带来的问题,n个核等待锁,都执行t&s指令,这样会有读操作和写操作,而写操作意味着要产生一个Invalidate事务,在下次读时又产生一个MISS事务,这样就意味着,即使某个处理器已经获得锁,其他处理器在等待该锁时也会产生大量的通信。
一:后退Test&Set锁
其关键就是要降低T&S锁的频率,具体就是在忙等待循环时,插入一个延迟时间。延迟时间随“指数”变化。
二:Test-and-Test&Set锁
我们可以发现写是很多余的,我们可以先load读该变量,然后看看其是否为0,若不为0则继续读,否则才调用T&S。原因在于load时可以在cache中读到,命中率很高,可以有效减少总线事务。
(3) 先进的锁算法
一:票锁,每一个进程一个票号,并且忙等待一个全局的Now-serving号,只有当其与它持有的票号相同时,才能得到锁。采用FIFO方式服务。
二:基于数组的锁,释放方法是将一个表示“锁空闲”的值写入到数组中的下一个位置中,这些location最好不要放在一起,否则以至于在一个cache line,换出时都会换出。
(4) 全硬件实现
4. 点到点事件同步
使用信号量
5. 全局事件同步
一:软件算法
(1) 集中式路障
锁、一个计数器、一个标识。
(2) 具有感觉反转的集中式路障,主要是为了解决集中式路障连续应用带来的问题。