Share via


컨트롤러 개체 소개

이름에서 알 수 있듯이 컨트롤러 개체는 일반적으로 연결된 디바이스가 있는 물리적 디바이스 컨트롤러를 나타냅니다. 물리적 컨트롤러가 조정한 유사한 디바이스 집합에 대한 가장 낮은 수준의 비 WDM 드라이버는 컨트롤러 개체를 만들고 이를 사용하여 연결된 디바이스 간에 I/O 작업을 동기화할 수 있습니다. 드라이버는 ControllerControl 루틴을 구현하고 I/O 관리자의 컨트롤러 개체 지원 루틴을 호출합니다.

참고

컨트롤러 개체의 사용은 WDM 드라이버에서 지원되지 않습니다.

일반적으로 드라이버는 컨트롤러 개체를 사용하여 다음 조건이 유지되는 경우 연결된 디바이스에 작업을 동기화합니다.

  • 컨트롤러는 중단 없이 긴 작업을 수행하지 않으므로 드라이버는 디바이스 전용 스레드를 만들거나 시스템 작업자 스레드를 사용할 필요가 없습니다.

  • 컨트롤러에 연결된 디바이스는 비슷합니다. 즉, 키보드 및 보조 디바이스 컨트롤러에 연결할 수 있는 키보드 및 마우스 장치와 같이 완전히 다른 물리적 속성 또는 작동 기능을 가진 디바이스가 아닙니다.

  • 드라이버는 모놀리식으로 설계되었습니다. 디바이스 컨트롤러 및 연결된 물리적 디바이스와 관련하여 단일 계층화되며, 포트 드라이버 위에 계층화된 하나 이상의 클래스 드라이버(연결된 디바이스용)가 있는 포트 드라이버(컨트롤러용)로 설계되지 않습니다.

I/O 채널과 논리 디바이스 개체 집합이 있는 디바이스의 드라이버도 컨트롤러 개체를 사용하여 해당 디바이스의 채널 간 또는 간에 I/O 작업을 동기화할 수 있습니다.

컨트롤러 개체에는 이름이 없으므로 I/O 요청의 대상이 아닙니다. 디바이스 개체 집합에서 I/O를 직렬화하는 동기화 메커니즘일 뿐입니다. 컨트롤러 개체에는 이름이 없으므로 대상 디바이스 개체를 나타내는 파일 개체에 대한 핸들을 가져오지 않고 디바이스 I/O 요청을 수행할 수 없는 사용자 모드로 보호된 하위 시스템에는 표시되지 않습니다. 컨트롤러 개체는 자체 디바이스 개체를 컨트롤러 개체에 연결할 수 없는 상위 수준 드라이버에도 보이지 않습니다. 즉, I/O 관리자나 상위 수준 드라이버는 컨트롤러 개체가 나타내는 디바이스에서 I/O를 요청하는 IRP를 설정할 수 없습니다. I/O 요청은 항상 디바이스 개체에 발급됩니다. 드라이버만 컨트롤러 개체를 사용할 수 있습니다.

동기화 및 겹치는 I/O

"AT" 디스크 컨트롤러와 같은 기능이 있는 물리적 디바이스의 모놀리식 드라이버는 컨트롤러 개체를 사용하여 디바이스 I/O 작업을 동기화할 필요가 없습니다. 예를 들어 드라이버 작성기는 컨트롤러 개체를 사용하는 대신 다음 동기화 기술과 같은 것을 시도할 수 있습니다.

  • I/O 요청의 대상인 디바이스를 나타내도록 명명된 디바이스 개체를 설정합니다.

  • 현재 I/O 작업의 대상인 디바이스 개체를 나타내는 상태 정보(각 디바이스 확장 또는 단일 디바이스 확장의 디바이스 사용 중 플래그 집합)를 유지 관리합니다.

  • 현재 사용 중인 디바이스 개체에 대한 I/O 작업을 수행하고 현재 IRP가 완료될 때까지 다른 디바이스 개체에 대해 들어오는 IRP를 다시 큐에 추가합니다.

위의 동기화 기술은 드라이버의 모든 대상 디바이스 개체에 대한 IRP 처리를 직렬화합니다. 또한 StartIo 루틴이 다음 IRP 처리를 시작하기 전에 드라이버가 현재 IRP를 완료하도록 강제하여 드라이버 성능을 저하합니다.

특정 디바이스 작업을 겹칠 수 있는 경우 컨트롤러 개체를 사용하면 드라이버의 I/O 처리량이 증가할 수 있습니다. 이 동기화 기술을 사용하면 드라이버가 물리적 디바이스를 설정하기 직전에 작업이 겹칠 수 있는지 여부를 확인할 수 있기 때문입니다. 예를 들어 디스크 컨트롤러를 사용하면 드라이버가 다른 디스크에서 읽기/쓰기 작업을 통해 한 디스크에서 검색을 겹칠 수 있습니다.

또한 컨트롤러 개체를 사용하는 것은 "AT" 디스크 컨트롤러와 같은 단일 물리적 디바이스를 통해 둘 이상의 대상 디바이스 개체에 대한 I/O 작업을 동기화하는 비교적 쉬운 방법입니다. 컨트롤러 개체를 사용하면 모놀리식 드라이버가 하나 이상의 디바이스 확장에서 모든 디바이스 및 디바이스 컨트롤러에 대한 상태를 유지 관리하지 않고도 IRP를 다시 큐에 추가하지 않고도 명명된 디바이스 개체 집합에서 I/O 작업을 동기화할 수 있습니다.

그러나 전체 이중 직렬 컨트롤러 또는 버스 master 어댑터와 같은 I/O 작업을 겹치도록 설계된 일부 디바이스에는 일반적으로 IRP에 대한 내부 큐를 설정하는 드라이버가 있습니다.