[ 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 에 의한 방법을 자주 사용합니다. |