반응형
익스큐티브 인터락드 동작
- Windows Server 2008
커널은 단일 링크드 리스트나 이중 링크드 리스트에 추가, 삭제 같은 좀 더 향상된 동작을 위해 스핀락을 기반으로 하는 간단한 동기화 함수를 여럿 제공한다. 이러한 모든 함수는 인자로 표준 스핀락을 필요로 하며 커널과 디바이스 드라이버에 의해 사용된다.
이들 함수는 스핀락 인자를 획득하고 해제하기 위해서 표준 API에 의존하지 않고 필요한 코드를 인라인으로 두며 상이한 순서 스킴(ordering scheme)을 사용한다. 반면 Ke 스핀락 API는 먼저 락이 해제 되었는지 보기 위한 비트를 테스트하고 설정한 다음에 실제로 획득을 하기 위한 락드 테스트 앤드 셋 동작을 원자적으로 수행한다.
이들 루틴은 프로세서의 인터럽트를 비활성화시키고 즉시 원자적 테스트 앤드 셋 연산을 수행한다. 초기 시도가 실패한다면 인터럽트는 다시 활성화 되고 테스트 앤드 셋 동작이 0을 반환할 때(이 경우 함수 전체가 다시 재시작 한다)까지 표준 비지 대기 알고리즘이 계속 된다.
미묘한 차이점으로 인해 익스큐티드 인터락드 함수에 사용되는 스핀락은 앞서 설명한 표준 API 커널과 함께 사용될 수 없다. 원래 비인터락드 리스트 연산은 인터락드 연산과 혼용해서는 안된다. 특정 익스큐티브 인터락드 연산은 가능한 경우 표시나지 않게 스핀락을 실제로 무시한다.
[참고자료]
Windows Internals
강성욱 / http://sqlmvp.kr
반응형
'Windows , IIS' 카테고리의 다른 글
Windows Vista / Windows7 / Windows Server 2008(R2) MS DTC 설정 (0) | 2015.07.20 |
---|---|
Raid Level (0) | 2015.07.20 |
인스택 큐드 스핀락(InStack Queued SpinLock) (0) | 2015.07.16 |
큐드 스핀락(Queued SpinLock) (0) | 2015.07.16 |
스핀락(SpinLock) (0) | 2015.07.16 |