커널 spin lock의 차이점
|
* spin_lock_irqsave()와 spin_lock_irq()
둘다 interrupt를 disable 시킨 이후에 spin lock을 획득하는 것은 동일하지만,
spin_lock_irqsave()는 CPU의 flag레지스터를 보관하다가
spin_unlock_irqrestore()로 복구할 수 있다.
* spin_lock()과 spin_lock_irq()의 차이는
spin_lock은 interrupt를 disable하지 않기 때문에
interrupt handler(top half)에서는 사용할 수 없다.
대신 이때는 spin_lock_irq()나 spin_lock_irqsave()를 사용해야 한다.
* spin_lock_bh()
같은 종류의 softirq는 여러 CPU에서 동시에 실행 될 있기 때문에
[ksoftirqd/CPUn] 커널쓰레드가 softirq의 실행을 담당한다.)
softirq를 disable한 이후에 spin lock을 획득한다.
원래 이 함수의 이름은 spin_lock_softirq() 정도가 되어야 맞겠지만
예전 커널의 흔적이 아직 남아 있다.
* 그리고 spin_lock은
spin lock으로 보호해야 할 데이터가 interrupt handler(top half)에서도,
softirq handler에서도 접근하지 않고 단지 그외의 일반적인 커널 코드에서만 접근한다면
interrupt disable, softirq disable 같은 overhead 없이 spin lock을 얻을때 사용한다.
|
'개발관련' 카테고리의 다른 글
C 언어 자료형과 Print format (0) | 2015.02.11 |
---|---|
ARM Linux Kernel Makefile의 이해와 실행 순서 정리 (0) | 2014.11.23 |
Linux Error 종류 및 코드값 (0) | 2014.11.23 |
블루투스 Service Discovery Protocol(SDP) UUID (0) | 2014.11.23 |
SIGNAL ERROR 정의 및 설명 (0) | 2014.09.03 |