블로그는 나의 힘!
[ Programing ]/Interview2021. 12. 10. 09:22

Spin Lock (스핀 락) 
- Ciritical Section은 Multiple CPU에서 사용할 수 없다면, 커널 모드의 Semaphore를 사용하여 대기중 스레드 관리.
 
- Semaphore는 Critical Section을 다른 스레드에서 사용 중이라면 Context Switching을 사용하여 CPU 소유권을 반납.
  다시 자신의 차례가 되면 Ciritical Section을 사용 중 일때 다시 위 동작을 반복하며 대기(Busy Waiting).

 
- 이렇게 빈번한 Context Switch 방지 위해 일정 시간 Critical Section 사용이 끝나기를 기다리는 것이 스핀락.
 
- 보통 동기화 객체들의 경우 다른 스레드에 의해 소유된 상태라면 기다리는 스레드는
   스케줄러에 의해 Sleep 상태로 들어간다.
   만약, 기다리는 동기화 객체를 빠른 시간에 획득한다면 스케줄링 비용 낭비가 크다.
   이때 효율성을 높이기 위해 Spin Lock 개념이 필요하다. 
   Spin Lock 객체를 만들고 Wait 하는 함수가 있다면, 함수 내부에서 Sleep에 들어가지 않고 Loop문 내부에서 
   공유변수가 사용 가능할 때 까지 기다린다.
   즉, 스케줄링 없이 Lock이 풀리자 마자 들어갈 수 있다.

 
- Spin Lock 획득과 해제는 기본적으로, 가능한 매우 짧게 이루어져야 한다.
 
- 주된 사용처는 Multi Processor System 기반 위에 동작하는 어플리케이션이다.
  만일 Uni-process System인 동시에 OS Kernel 선점형이라면 Spin Lock을 쓸 여지가 있을 수 있다.

 
 
 

'[ Programing ] > Interview' 카테고리의 다른 글

Interview Dead Lock 해결 방법.  (0) 2021.12.10
Interview Dead Lock 발생 조건  (0) 2021.12.10
Interview Context Switch  (0) 2021.12.08
Interview Ciritical Section 용어  (0) 2021.12.08
Interview Thread Pool  (0) 2021.12.08
Posted by Mister_Q