CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): dokeby ()
날 짜 (Date): 1994년04월22일(금) 08시05분43초 KST
제 목(Title): RE: locking



busy-waiting 을 이용한 mutual exclusion 은 address space 를 공유하는
thread 들 사이나 address space 를 공유하지 않는 process 사이에 파생되는
부작용은 다를 바 없습니다. 단지 busy-waiting 을 구현 할때 locking 에
사용되는 영역을 어떻게 잡느냐 인데, process 사이에는 특별한 경우를
제외하고는 공유하는 space 가 없으므로 busy-waiting 을 구현하기가
어렵고, data 영역을 공유하는 thread 사이에는 구현하기가 쉽다는 점이
다를 뿐입니다.
따라서, process 간에는 file IO 를 위한 file locking 이나, 일반적인
mutual exclusion 을 위한 semaphore 같은 것을 kernel level에서 지원하고
있습니다.
address space 를 공유하지 않는 process 간에도 공유 data 영역인 shared
memory 에 locking 변수를 잡으면 busy-waiting 도 구현할 수 있습니다.

어쨌든, thread 나 process 에 상관없이 공유하는 영역에 lock 변수를 잡아
spin-lock 을 구현할려면 lock 변수의 check 와 locking setting 이 atomic
해야 한다는 것입니다. single processor 에서는 interrupt 에 의한 race
문제와, multiprocessor 에서는 주로 processor 간의 race 문제를 제거하기
위함이죠.

그러나, 되도록 user level 에서의 busy-wating 은 사용 안하는 것이 좋습니다.
scheduling 에 의하여 busy-waiting 을 사용한 program 이 비효율적으로
동작하게 됩니다.

참고로 SMP kernel 에서는 busy-waiting 을 하는 영역에서는 interrupt 를 masking
하거나, kernel preemption 을 불가능하도록 하여, 부작용이 제거 되므로
locking scope 가 작은 곳에서는 busy-wating 에 의한 방법을 자주 사용합니다.

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.