标签:linux内核 抢占式内核 非抢占式内核 自旋锁 spin_lock宏
一、概括
(1)自旋锁适用于SMP系统,UP系统用spinlock是作死。
(2)保护模式下禁止内核抢占的方法:1、执行终端服务例程时2、执行软中断和tasklet时3、设置本地CPU计数器preempt_count
(3)自旋锁的忙等待的实际意义是:尝试获取自旋锁的另一个进程不断尝试获取被占用的自旋锁,中间只pause一下!
(4)在抢占式内核的spin_lock宏中,第一次关抢占,目的是防止死锁(防止一个已经获取自旋锁而未释放的进程被抢占!!)。而后又开抢占,目的是让已经释放自旋锁的进程可以被调度出去,让其他进程可以进入临界区。当然,开启内核抢占后,调度器调度的进程是不是在盲等的进程不可而知!
二、具有内核抢占的spin_lock宏
让我们来详细讨论用于请求自旋锁的spin_lock宏。下面的描述都是针对支持SMP系统的抢占式内核的。该宏获取自旋锁的地址sip作为它的参数,并执行下面的操作:xchgb%al,slp->slock
汇编语言指令xchg原子性地交换8位寄存器%al和slp->slock指示的内存单元的内容。随后,如果存放在自旋锁中的旧值是正数,函数就返回1,否则返回0。跳转回第1步,再次试图获取自旋锁
抢占式内核与非抢占式内核中的自旋锁(spinlock)的区别
标签:linux内核 抢占式内核 非抢占式内核 自旋锁 spin_lock宏
原文地址:http://blog.csdn.net/hustyangju/article/details/41115161