* 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을 얻을때 사용한다.
http://kldp.org/node/54671 답글에서 발췌
'develop > linux' 카테고리의 다른 글
PostgreSQL replication, Slony 사용 (1) 초기 설정 (0) | 2012.08.17 |
---|---|
sqlite 동시 접근시 에러?? (0) | 2012.08.11 |
mysql_ping 15분 hang 해결방안 (0) | 2012.06.28 |
ssh 접속시 증명서 변경됐다고 나올 때 (0) | 2012.05.31 |
ubuntu 기본 설정 (0) | 2012.05.30 |