다음을 통해 공유


드라이버란?

드라이버는 운영 체제와 디바이스가 통신할 수 있는 소프트웨어 구성 요소입니다. 예를 들어 앱이 디바이스에서 데이터를 읽어야 하는 경우 운영 체제에서 구현된 함수를 호출합니다. 그런 다음 운영 체제는 드라이버에서 구현한 함수를 호출합니다. 일반적으로 디바이스 제조업체에서 개발한 드라이버는 디바이스 하드웨어와 통신하여 데이터를 가져오는 방법을 알고 있습니다. 드라이버가 데이터를 가져오면 운영 체제에 다시 제공된 다음 앱에 다시 제공합니다.

애플리케이션, 운영 체제 및 드라이버 간의 상호 작용을 보여 주는 다이어그램

정의 확장

설명은 드라이버의 개념을 간소화합니다. 다음은 고려해야 할 몇 가지 추가 사항입니다.

  • 드라이버가 항상 디바이스 제조업체에서 개발할 필요는 없습니다. 디바이스가 게시된 하드웨어 표준을 따르는 경우 Microsoft는 드라이버를 작성할 수 있으므로 디바이스 디자이너가 드라이버를 제공할 필요가 없습니다.

  • 모든 드라이버가 디바이스와 직접 통신하는 것은 아닙니다. 드라이버 스택 에 계층화된 여러 드라이버가 I/O 요청에 참여하는 경우가 많습니다. 스택을 시각화하는 일반적인 방법은 이 다이어그램에 표시된 것처럼 맨 위에 첫 번째 참가자와 맨 아래에 마지막 참가자가 있는 것입니다. 스택의 일부 드라이버는 요청을 한 형식에서 다른 형식으로 변경합니다. 이러한 드라이버는 디바이스와 직접 통신하지 않습니다. 대신 요청을 변경하고 스택에서 더 낮은 드라이버에 전달합니다.

    애플리케이션, 운영 체제, 드라이버 3개 및 디바이스 간의 통신을 보여 주는 다이어그램

    함수 드라이버: 디바이스와 직접 통신하는 드라이버를 함수 드라이버라고 합니다.

    필터 드라이버: 보조 처리를 수행하는 드라이버를 필터 드라이버라고 합니다.

    스택에 대한 자세한 내용은 드라이버 스택을 참조하세요.

  • 일부 필터 드라이버는 I/O 요청에 대한 정보를 관찰하고 기록하지만 적극적으로 참여하지는 않습니다. 예를 들어 일부 필터 드라이버는 스택의 다른 드라이버가 I/O 요청을 올바르게 처리하도록 검증 도구 역할을 합니다.

운영 체제와 디바이스 간의 통신을 관찰하거나 참여하는 모든 소프트웨어 구성 요소로 드라이버에 대한 정의를 구체화할 수 있습니다.

소프트웨어 드라이버

확장된 정의는 합리적으로 정확하지만 일부 드라이버가 하드웨어 디바이스와 전혀 연결되어 있지 않기 때문에 아직 불완전합니다.

예를 들어 핵심 운영 체제 데이터 구조에 액세스하는 도구를 작성해야 하는 경우 도구를 두 구성 요소로 분할할 수 있습니다. 첫 번째 구성 요소는 사용자 모드에서 실행되고 사용자 인터페이스를 제공합니다. 두 번째 구성 요소는 커널 모드에서 실행되고 핵심 운영 체제 데이터에 액세스합니다. 사용자 모드에서 실행되는 구성 요소를 애플리케이션이라고 하며 커널 모드에서 실행되는 구성 요소를 소프트웨어 드라이버라고 합니다. 소프트웨어 드라이버는 하드웨어 디바이스와 연결되지 않습니다.

이 다이어그램에서는 커널 모드 소프트웨어 드라이버와 통신하는 사용자 모드 애플리케이션을 보여 줍니다.

애플리케이션과 소프트웨어 드라이버 간의 관계를 보여 주는 다이어그램

소프트웨어 드라이버는 항상 커널 모드에서 실행됩니다. 주로 커널 모드에서만 사용할 수 있는 보호된 데이터에 액세스하기 위해 작성되었습니다. 그러나 모든 디바이스 드라이버가 커널 모드 데이터 및 리소스에 액세스할 필요가 없으므로 일부 디바이스 드라이버는 사용자 모드에서 실행됩니다.

프로세서 모드에 대한 자세한 내용은 사용자 모드 및 커널 모드를 참조하세요.

버스 드라이버

드라이버의 또 다른 유형은 버스 드라이버입니다. 버스 드라이버를 이해하려면 디바이스 노드와 디바이스 트리를 이해해야 합니다.

디바이스 트리, 디바이스 노드 및 버스 드라이버에 대한 자세한 내용은 디바이스 노드 및 디바이스 스택을 참조하세요.

함수 드라이버에 대한 자세한 정보

지금까지 설명한 내용은 함수 드라이버의 정의를 지나치게 단순화합니다. 디바이스의 함수 드라이버는 디바이스와 직접 통신하는 스택의 하나의 드라이버라고 명시했습니다. 이는 PCI(주변 구성 요소 상호 연결) 버스에 직접 연결하는 디바이스의 경우 마찬가지입니다. PCI 디바이스의 함수 드라이버는 디바이스의 포트 및 메모리 리소스에 매핑된 주소를 가져옵니다. 함수 드라이버는 해당 주소에 기록하여 디바이스와 직접 통신합니다.

그러나 대부분의 경우 디바이스는 PCI 버스에 직접 연결되지 않습니다. 대신 디바이스는 PCI 버스에 연결된 호스트 버스 어댑터에 연결합니다. 예를 들어 USB 토스터는 PCI 버스에 연결된 호스트 버스 어댑터(USB 호스트 컨트롤러라고 함)에 연결합니다. USB 토스터에는 함수 드라이버가 있고 USB 호스트 컨트롤러에는 함수 드라이버도 있습니다. 토스터의 함수 드라이버는 USB 호스트 컨트롤러에 대한 함수 드라이버에 요청을 전송하여 토스터와 간접적으로 통신합니다. USB 호스트 컨트롤러의 함수 드라이버는 토스터와 통신하는 USB 호스트 컨트롤러 하드웨어와 직접 통신합니다.

USB 토스터 드라이버, USB 호스트 컨트롤러 드라이버 및 PCI 버스 간의 상호 작용을 보여 주는 다이어그램