占个坑位。。。
rwsem特性: a) 允许多个reader同时进入临界区; b) 只允许一个writer同时进入临界区; c) 当临界区是reader时,其他reader可以进入临界区,但是writer必须等着; d) 当临界区是writer时,其他任何线程,不管是reader还是writer,都必须等着; 本文分析基于Linux5.10.61 一、数据结构 1.1 rw_semaphore 在设计rw_semaphore数据结构时考虑到了cache的一致性,我们自己在编码时也应该考虑 [……
注意:ARMv6之前的CPU并不支持SMP,之后的ARM架构都是支持SMP的,因此,对于ARM处理器,其原子操作分成了两个阵营,一个是支持SMP的ARMv6之后的CPU,另外一个就是ARMv6之前的,只有单核架构的CPU 另外,ARMv6之前的CPU只支持swp/swpb指令,ARMv6之后的CPU只支持ldrex/strex指令 一、数据结构 1.1 atomic_t - 实际就是一个int型变量 typedef struct { int counter; [……
ARM提供了SWP或LDREX/STREX指令集,这两个指令从RTL层面保证了"在某一时刻,只能有一个CPU成功修改内存中的值"。kernel利用这个特点,实现了atomic和spin等操作,是所有同步操作的基石。 一、术语介绍 1.1 睡眠 睡眠是对线程而言的,是线程的一种特殊状态,此被"睡眠"的对象一定要有一个task_struct结构,也就是说只有线程才能睡眠。 睡眠是当前线程在等待暂时无法获得的资源时,避免当前线程一直占用着CPU,将自己放入一个等待队列中,让出CPU给别 [……