SMP 系统下的锁互斥

 

SMP 系统下的锁互斥

UP系统下的互斥

         在单处理器(unique process)系统上,任何允许多个控制路径(多个线程或者多个进程),都会有竞争条件的发生。

1)  短期互斥:在单处理器中,如果系统不允许在内核态抢占,那么就不会出现互斥的问题,只有允许在内核抢占时,也就是分时间片时,才出现互斥的情况。这主要用于修改一个内核共享的数据结构。

实现的方法:禁止抢占

2)  和中断处理程序的互斥:进程和中断处理程序(也就是相当于出现两个控制路径)同时访问共享资源时会发生互斥。

实现的方法:关闭中断

3)  长期互斥:UP系统中,测试标志位并设置,也是通过禁止抢占来实现的。实际上就是短期互斥策略设置加锁标志+进程的睡眠唤醒。

 

 

SMP系统下的互斥

   对于在SMP情况下,对以1),禁止抢占就不灵了。禁止一个cpu被抢占,并不能禁止其他cpu的抢占。对于2),就出现了关本地中断和关所有cpu中断的情况。

 

Test-And-Set

经典的并行原语是test-and-settest-and-set操作自动地从一个内存位置读取一个值然后写入一个新值,并把旧值返回。

 

test-and-set原语足以实现任何其它并行安全的操作。(实际上,在某些CPUtest-and-set是唯一被提供的此类原语)。 这句话的意思是,SMP系统中只要引入test-and-set操作原语,就可以满足SMP系统下所有的并行操作。下面我们看到SMP的防止竞争的机制spin_locksemaphore都是基于这个操作原语来完成的。

 

         我们现在一下test-and-set操作原语在x86系统下是如何实现的。

x86平台上,lock指令正好能够提供这种帮助。(准确地说,lock是一个前缀而非一个单独的指令)lock指令用于在随后的指令执行期间锁住内存总线——至少是对目的内存地址。因为x86可以在内存里直接减值,而无需明确的先把它读入一个寄存器中,这样对于执行一个减值原子操作来说就是万事俱备了:lock内存总线然后立刻对该内存位置执行decl操作。

 

 

   Spin_lock锁和semaphore都是基于这个基本的原语来实现的。下一次再说。


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeRTOS SMP(Symmetric Multi-Processing,对称多处理)是一个支持多核处理器的操作系统。它是FreeRTOS实时操作系统的一个扩展版本,为多核处理器的并行计算提供了支持。 FreeRTOS SMP具有以下特点和优势: 1. 多核支持:FreeRTOS SMP允许在多核处理器上对任务进行并行处理。每个核心都可以独立地运行一个实例的FreeRTOS内核,而这些内核之间可以进行任务和资源的共享。 2. 调度器:FreeRTOS SMP的调度器可以利用多核处理器的并行能力,实现任务的优先级调度和负载均衡。它可以根据任务的优先级自动分配处理器核心,以提高整个系统的性能和响应能力。 3. 任务同步和通信:FreeRTOS SMP提供了多个任务同步和通信机制,如信号量、互斥、消息队列等。这些机制可以有效地实现多核处理器上任务之间的同步和通信,保证数据的一致性和安全性。 4. 内存管理:FreeRTOS SMP通过提供内核堆管理器和内存保护机制,有效地管理多个核心上的内存资源,防止内存泄漏和冲突。 5. 架构无关性:FreeRTOS SMP的设计和实现是与底层处理器架构无关的,可以方便地移植到不同的多核处理器上。 通过使用FreeRTOS SMP,开发人员可以充分利用多核处理器的计算能力,提高系统的并行处理能力和性能,同时实现任务间的同步和通信。它广泛应用于各种多核平台上,如嵌入式系统、网络设备、工业自动化等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值