Windows , IIS

큐드 스핀락(Queued SpinLock)

SungWookKang 2015. 7. 16. 19:11
반응형

큐드 스핀락(Queued SpinLock)

  • Windows Server 2008

 

스핀락의 확장성을 증대 시키기 위해 대부분의 상황에서 표준 스핀락이 아닌 큐드 스핀락(Queued Spinlock)형식이 사용된다.

 

 

큐드 스핀락은 프로세서가 현재 소유된 큐드 스핀락을 획득하고자 할 때 프로세스는 스핀락 과 연관된 큐에 자신의 식별자를 둔다. 스핀락을 소유중인 프로세서가 스핀락을 해제할 때 프로세서는 큐에 지정도니 첫 번째 프로세서에게 락을 넘겨준다. 이 동안에 비지 스핀락을 대기하는 프로세서는 스핀락 자체의 상태가 아닌 프로세서마다의 플래그 상태를 검사한다.

 

큐드 스핀락은 전역 스핀락이 아닌 프로세서마다의 플래그 검사를 위해 스핀하기 때문에 두 가지 장점이 있다.

  • 멀티프로세서 버스에서 프로세서간의 동기화로 인한 심각한 트래픽이없다.
  • 스핀락 획득을 위한 대기하는 프로세서 그룹에서 임의의 프로세서가 락을 획득하는 대신 큐드 스핀락은 락 획득순거가 FIFO방식으로 강제된다. FIFO 순서는 동일한 락에 접근하는 프로세서 간에 좀 더 일관적인 성능을 유지한다.

 

윈도우는 각 프로세서의 프로세서 영역 제어 블록(PCB)에 포함된 배열에 전역 큐드 스핀락에 대한 포인터를 저장함으로써 다수의 전역 큐드 스핀락을 정의한다. 전역 스핀락의 수는 운영체제 릴리즈 버전마다 다르며 (증가하고 있음) 전역 스핀락에 대한 인덱스 정의표는 WDK헤어파일인Ntddk.h에 있다.

 

디바이스 드라이버는 큐드 스핀락을 획득하는 것이 지원되지 않으며 락 커널 내부 용도로 예약되어 있다.

 

 

[참고자료]

  • Windows Internals
  • Queued Spin Locks :

http://msdn.microsoft.com/ko-kr/library/windows/hardware/ff559970(v=vs.85).aspx

 

 

 

강성욱 / http://sqlmvp.kr

 

 

반응형

'Windows , IIS' 카테고리의 다른 글

익스큐티브 인터락드 동작  (0) 2015.07.16
인스택 큐드 스핀락(InStack Queued SpinLock)  (0) 2015.07.16
스핀락(SpinLock)  (0) 2015.07.16
객체구조 – 객체 유지  (0) 2015.07.16
객체구조 – 객체 보안  (0) 2015.07.16