[learning-kernel] 学习Kernel中的一些小细节

  • From: Li Haifeng <omycle@xxxxxxxxx>
  • To: learning-kernel@xxxxxxxxxxxxx
  • Date: Sat, 27 Aug 2011 20:38:04 +0800

在cu上看到一个帖子,回答的很好。转过来,方便大家学习。Q/A如下:

(1) 对信号量semaphore进行down会导致进程进入不可中断的睡眠,请问这个“不可中断”什么意思?

进程的状态中有个是可中断睡眠,还有个是不可中断睡眠。不可中断睡眠是指该状态不响应信号。可中断睡眠是响应信号的。比如系统调用vfork父进程就被设置成为不可中断的状态,这时向父进程发送信号是得不到响应的。

(2)不可中断是不是意味着不能调度的?

不可中断是一种睡眠状态,只有TASK_RUNNING状态的进程才能被调度进程调度。因此处于TASK_UNINTERRUPTIBLE状态的进程是肯定不会被调度进程调度的。

(3)自旋锁spin_lock在获取不了锁的时候,会“进入忙循环并重复检查这个锁”,请问这时候可以调度吗?可以中断吗?

首先spin
lock是用在多处理器的环境下的。当进程不能获得锁时,是忙等状态直到获得锁或被抢占。这个时候是可以被中断的。但是获得锁后就禁止本地cpu中断了。

(4)LDD3说atomic_inc等操作“在SMP计算机的所有处理器上都确保是原子的”,是不是还说一个CPU在处理atomic_t变量的时候

另外的处理器不能处理这个atomic变量的?

这个应该是的。

Other related posts:

  • » [learning-kernel] 学习Kernel中的一些小细节 - Li Haifeng