티스토리 뷰

반응형

스핀 잠금은 커널 정의, 커널 모드 전용 동기화 메커니즘으로, 불투명 유형 KSPIN_LOCK으로 내보내집니다. SMP 시스템에서 IRQL> = DISPATCH_LEVEL에서 동시에 실행될 수있는 루틴에 의해 공유 데이터 또는 자원이 동시에 액세스되지 않도록 스핀 잠금을 사용할 수 있습니다.

많은 구성 요소가 드라이버를 포함하여 스핀 잠금을 사용합니다. 모든 종류의 드라이버는 하나 이상의 임원 스핀 잠금 장치를 사용할 수 있습니다 . 예를 들어, 대부분의 파일 시스템은 파일 시스템 드라이버 (FSD) 장치 확장에서 연동 된 작업 큐를 사용하여 파일 시스템의 작업자 스레드 콜백 루틴과 FSD에 의해 처리되는 IRP를 저장합니다. 연동 된 작업 대기열은 Executive spin lock으로 보호됩니다.이 잠금은 대기열에 IRP를 삽입하려는 FSD와 동시에 IRP를 제거하려는 모든 스레드 간의 경합을 해결합니다. 다른 예로, 시스템 플로피 컨트롤러 드라이버는 2 개의 이그제큐티브 스핀 잠금 장치를 사용합니다. 하나의 경영진 스핀 잠금 장치는이 드라이버의 장치 전용 스레드와 공유되는 연동 된 작업 대기열을 보호합니다. 다른 하나는 세 가지 드라이버 루틴이 공유하는 타이머 객체를 보호합니다.

Microsoft Windows XP 및 이후 버전의 Windows 용 드라이버는 KeAcquireInStackQueuedSpinLock  KeReleaseInStackQueuedSpinLock  사용 하여 스핀 잠금을 대기열에 있는 스핀 잠금으로 획득하고 해제 할 수 있습니다 . 큐에 대기 된 스핀 잠금은 다중 프로세서 시스템에서 높은 경합 잠금에 대해 일반 스핀 잠금보다 우수한 성능을 제공합니다. 자세한 내용은 대기 스핀 스핀을 참조하십시오 . Windows 2000 용 드라이버는 KeAcquireSpinLock  KeReleaseSpinLock  사용 하여 일반 스핀 잠금으로 스핀 잠금을 획득하고 해제 할 수 있습니다 .

간단한 데이터 구조에 대한 액세스를 동기화하기 위해 드라이버는 ExInterlocked Xxx 루틴을 사용하여 데이터 구조에 대한 원자 적 액세스를 보장 할 수 있습니다. 이러한 루틴을 사용하는 드라이버는 스핀 잠금을 명시 적으로 얻거나 해제 할 필요가 없습니다.

ISR이있는 모든 드라이버는 인터럽트 스핀 잠금 을 사용하여 ISR과 일반적으로 StartIo  DpcForIsr 루틴 에서 호출되는 SynchCritSection 루틴 간에 공유되는 데이터 또는 하드웨어를 보호 합니다. 인터럽트 스핀 잠금은 ISR 등록에 설명 된대로 드라이버가 IoConnectInterrupt를 호출 할 때 작성된 인터럽트 오브젝트 세트와 연관됩니다 .

드라이버에서 스핀 잠금을 사용하려면 다음 지침을 따르십시오.

  • 스핀 잠금으로 보호되는 데이터 또는 리소스 및 상주 시스템 공간 메모리 ( 가상 메모리 공간 및 물리적 메모리 그림에 표시된 비 페이징 풀)의 해당 스핀 잠금에 대한 스토리지를 제공하십시오 . 드라이버는 사용하는 모든 고급 스핀 잠금 장치를위한 저장소를 제공해야합니다. 그러나 장치 드라이버는 ISR 등록에 설명 된대로 다중 벡터 ISR이 있거나 둘 이상의 ISR이없는 경우 인터럽트 스핀 잠금을위한 저장소를 제공 할 필요가 없습니다.

  • KeInitializeSpinLock  호출 하여 드라이버가 스토리지를 제공하는 각 스핀 잠금을 초기화하여 보호 된 공유 데이터 또는 리소스에 대한 액세스를 동기화합니다.

  • 적절한 IRQL, 일반적으로 이그제큐티브 스핀 잠금의 경우 <= DISPATCH_LEVEL 또는 드라이버의 인터럽트 객체와 관련된 인터럽트 스핀 잠금의 경우 <= DIRQL에서 스핀 잠금을 사용하는 모든 지원 루틴을 호출하십시오.

  • 스핀 잠금을 유지하면서 가능한 한 빨리 실행되도록 루틴을 구현하십시오. 어떤 루틴도 25 마이크로 초 이상 스핀 잠금을 유지해서는 안됩니다.

  • 스핀 잠금을 유지 한 상태에서 다음 중 하나를 수행하는 루틴을 구현하지 마십시오.

    • 하드웨어 예외가 발생하거나 소프트웨어 예외가 발생합니다.

    • 페이징 가능한 메모리에 액세스하려고합니다.

    • 교착 상태를 유발하거나 스핀 잠금이 25 마이크로 초 이상 유지 될 수있는 재귀 호출을 수행하십시오.

    • 교착 상태가 발생할 수있는 경우 다른 스핀 잠금 장치를 얻으려고합니다.

    • 앞의 규칙을 위반하는 외부 루틴을 호출하십시오.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함