다음을 통해 공유


드라이버 알림 소개

Windows Server 2008부터 운영 체제는 프로세서 또는 메모리 모듈이 하드웨어 파티션에 동적으로 추가되면 디바이스 드라이버에 알릴 수 있습니다. 핫 추가 작업 프로세스의 여러 단계에서 발생하는 여러 가지 알림이 있습니다. 이러한 각 알림은 다른 알림 방법을 사용하여 디바이스 드라이버에 이벤트에 대해 알립니다. 이러한 알림 방법 중 하나 이상을 사용하여 핫 추가 작업이 발생할 때 운영 체제가 드라이버에 알리도록 할 수 있습니다. 그러면 드라이버가 안전하고 최적의 작업에 필요한 대로 응답할 수 있습니다.

다음 표에서는 다양한 알림 방법과 프로세서, 메모리 또는 프로세서와 메모리 모두에 적용되는지 여부를 식별합니다.

알림 방법 프로세서의 경우 메모리의 경우

동기 드라이버 알림

X

비동기 드라이버 알림

X

X

메모리 알림 이벤트

X

리소스 리밸런싱

X

동기 드라이버 알림

동기 드라이버 알림을 사용하면 운영 체제가 디바이스 드라이버에 새 프로세서가 하드웨어 파티션에 추가되었음을 동기적으로 알 수 있습니다. 디바이스 드라이버가 프로세서 수 변경에 대해 수신하는 첫 번째 알림입니다.

새 프로세서가 하드웨어 파티션에 추가되면 운영 체제가 새 프로세서를 시작한 후 운영 체제가 프로세서에서 스레드 예약을 시작하기 전에 이 알림을 디바이스 드라이버에 보냅니다. 디바이스 드라이버가 이 알림을 받으면 프로세서별 데이터 구조를 할당하고 프로세서당 다른 리소스를 새 프로세서에 할당할 수 있습니다. 이렇게 하면 디바이스 드라이버가 디스패치 루틴, ISR(인터럽트 서비스 루틴), DPC(지연 프로시저 호출) 및 새 프로세서의 다른 드라이버 스레드를 실행할 수 있습니다.

디바이스 드라이버는 동기 드라이버 알림을 받으려면 운영 체제에 등록해야 합니다. 자세한 내용은 동기 드라이버 알림 등록을 참조하세요.

이 알림 방법은 프로세서에만 적용됩니다. 메모리에 대한 동기 알림 메커니즘이 없습니다.

비동기 드라이버 알림

비동기 드라이버 알림을 사용하면 운영 체제가 디바이스 드라이버에 새 프로세서 또는 메모리 모듈이 하드웨어 파티션에 추가되었음을 비동기적으로 알 수 있습니다. Windows Server 2008부터 프로세서 및 메모리 모듈은 PnP(플러그 앤 플레이) 디바이스로 간주됩니다. 따라서 운영 체제는 비동기 드라이버 알림에 PnP 알림 메커니즘을 사용합니다.

새 프로세서 또는 메모리 모듈이 하드웨어 파티션에 추가되면 운영 체제는 운영 체제가 새 프로세서 또는 메모리 디바이스를 시작한 후 디바이스 드라이버에 이 알림을 보냅니다. 새 프로세서의 경우 운영 체제는 새 프로세서에서 스레드 예약을 시작할 때까지 디바이스 드라이버에 이 알림을 보내지 않습니다.

참고

모든 PnP 알림은 비동기입니다. 따라서 운영 체제가 프로세서 또는 메모리 모듈을 시작한 후 디바이스 드라이버에서 이러한 알림을 받지 못할 수 있습니다.

디바이스 드라이버가 이 알림을 받으면 다음과 같은 항목의 일부 또는 전부를 적절하게 조정할 수 있습니다.

  • 메모리 버퍼 및 기타 리소스 할당

  • 특정 프로세서에 리소스 할당

  • 특정 프로세서에서 DPC 및 기타 스레드 예약

  • 부하 분산 알고리즘

중요

하드웨어 파티션에 새 프로세서를 추가하면 운영 체제는 새 프로세서가 시작되고 운영 체제가 스레드 예약을 시작할 때까지 PnP 알림을 보내지 않습니다. 운영 체제가 새 프로세서에서 스레드 예약을 시작하기 전에 디바이스 드라이버가 특정 작업을 수행해야 하는 경우(예: 프로세서별 데이터 구조 할당) 드라이버에 대한 동기 알림 방법을 사용해야 합니다.

비동기 드라이버 알림을 받으려면 디바이스 드라이버가 운영 체제에 등록해야 합니다. 자세한 내용은 비동기 드라이버 알림 등록을 참조하세요.

메모리 알림 이벤트

메모리 알림 이벤트 메서드를 사용하면 디바이스 드라이버가 운영 체제가 \KernelObjects\HighMemoryCondition 이벤트 개체를 설정할 때까지 기다리는 스레드를 예약하도록 할 수 있습니다. 운영 체제는 사용 가능한 실제 메모리의 양이 특정 값을 초과할 때 이 이벤트 개체를 설정합니다. 이 이벤트는 이벤트 개체에서 대기 중인 모든 스레드에 현재 시스템에서 상당한 양의 실제 메모리를 사용할 수 있음을 알 수 있습니다. 이 이벤트는 시스템에 새 메모리 모듈을 동적으로 추가했음을 나타낼 수 있습니다. 운영 체제에서 이 이벤트 개체를 설정하면 디바이스 드라이버가 추가 메모리 버퍼를 할당하여 이벤트에 응답할 수 있습니다.

\KernelObjects\HighMemoryCondition 이벤트 개체에 대한 자세한 내용은 표준 이벤트 개체를 참조하세요.

중요

운영 체제에서 \KernelObjects\HighMemoryCondition 이벤트 개체를 설정하는 경우 이벤트는 하드웨어 파티션에 새 메모리 모듈을 동적으로 추가했을 수 있다는 표시만 제공합니다. 운영 체제에서 이 이벤트 개체를 설정할 수 있는 다른 상황이 있습니다. 따라서 Windows Server 2008부터 디바이스 드라이버에서 이 알림 방법을 사용하지 않는 것이 좋습니다. 대신 디바이스 드라이버는 비동기 드라이버 알림 방법을 사용해야 합니다.

이 메서드는 메모리에만 적용됩니다. 프로세서에 대한 해당 알림 메커니즘이 없습니다.

리소스 리밸런스

Windows Server 2008부터 하드웨어 파티션에 새 프로세서를 추가하면 운영 체제에서 시스템 전체 리소스 리밸런스를 시작합니다. 디바이스가 이러한 리소스 리밸런스에 참여할지 여부는 디바이스에 대한 DEVPKEY_Device_DHP_Rebalance_Policy 디바이스 속성의 설정에 따라 결정됩니다. 네트워크 어댑터(클래스 = Net) 디바이스 설정 클래스의 디바이스 에 대한 기본 동작은 새 프로세서가 시스템에 동적으로 추가될 때 리소스 리밸런싱에 참여하지 않는다는 것입니다. 다른 모든 디바이스 설정 클래스의 디바이스에 대한 기본 동작은 새 프로세서가 시스템에 동적으로 추가될 때 리소스 리밸런싱에 참여한다는 것입니다.

디바이스가 PnP(플러그 앤 플레이) 디바이스이고 이러한 리소스 리밸런스에 참여하는 경우 운영 체제는 리소스 리밸런싱 작업 중에 IRP_MN_QUERY_STOP_DEVICE, IRP_MN_STOP_DEVICEIRP_MN_START_DEVICE PnP IRP를 드라이버에 보냅니다. 이러한 PnP 요청은 하드웨어 파티션에서 하드웨어 변경이 발생했음을 드라이버에 알립니다. 디바이스 드라이버는 IRP_MN_QUERY_STOP_DEVICE 올바르게 처리하고 PnP 요청을 IRP_MN_STOP_DEVICE 리소스 리밸런싱을 지원해야 합니다. 디바이스 드라이버는 IRP_MN_QUERY_STOP_DEVICE PnP 요청을 거부해서는 안 됩니다.

이러한 PnP 요청을 사용하면 디바이스 드라이버가 새 프로세서를 추가한 후 하드웨어 파티션에서 새 활성 프로세서 집합을 완전히 사용할 수 있습니다. 특히 리소스 리밸런싱을 지원하는 디바이스 드라이버는 리소스 리밸런스 중에 수신하는 PnP 요청을 사용하여 ISR(인터럽트 서비스 루틴)의 연결을 끊고 업데이트된 프로세서 선호도 값으로 다시 연결합니다. 이렇게 하면 디바이스 드라이버가 새 프로세서를 포함하여 하드웨어 파티션의 현재 활성 프로세서를 모두 사용하여 인터럽트 요청을 처리할 수 있습니다.

디바이스 드라이버는 리소스 리밸런싱 중에 모든 I/O 요청을 큐에 대기해야 합니다.

리소스 리밸런싱에 대한 자세한 내용은 리소스 리 밸런스를 위한 디바이스 중지를 참조하세요.

이 메서드는 프로세서에만 적용됩니다. 하드웨어 파티션에 새 메모리 모듈을 추가할 때 운영 체제는 시스템 차원의 리소스 리밸런스를 시작하지 않습니다.