본문 바로가기

Microsoft/Windows Server

드라이버란?

드라이버란?

드라이버를 하나의 정확한 용어로 정의하는 것은 매우 어려운 일입니다. 가장 기본적인 의미에서, 드라이버란 운영 체제와 장치의 상호 통신을 허용하는 소프트웨어 구성 요소입니다. 예를 들어, 응용 프로그램이 장치에서 데이터를 읽어야 할 수 있습니다. 응용 프로그램은 운영 체제에서 구현한 함수를 호출하고, 운영 체제는 드라이버에서 구현한 함수를 호출합니다. 장치를 설계 및 제조한 회사에서 작성한 드라이버는 데이터를 가져오기 위해 장치 하드웨어와 통신하는 방법을 알고 있습니다. 드라이버는 장치에서 데이터를 가져온 후 운영 체제로 반환하고, 운영 체제는 응용 프로그램으로 반환합니다.

응용 프로그램, 운영 체제 및 드라이버를 보여 주는 다이어그램

정의 확장

위의 설명은 여러 가지 면에서 지나치게 단순화된 것입니다.

  • 모든 드라이버가 장치를 설계한 회사에서 작성해야 하는 것은 아닙니다. 장치는 공시된 하드웨어 표준에 따라 설계되는 경우가 많습니다. 즉, Microsoft에서 드라이버를 작성할 수 있으며 드라이버 설계자는 드라이버를 제공할 필요가 없습니다.

  • 모든 드라이버가 장치와 직접 통신하는 것은 아닙니다. 특정 I/O 요청(예: 장치에서 데이터 읽기)의 경우 종종 스택의 계층에 있는 여러 드라이버가 요청에 참여합니다. 스택을 시각화하는 일반적인 방법은 다음 다이어그램과 같이 첫 번째 참가자를 맨 위에 놓고 마지막 참가자를 맨 아래에 두는 것입니다. 스택에 있는 몇몇 드라이버는 요청에 참가할 때 요청의 형식을 다른 것으로 변형합니다. 이러한 드라이버는 장치와 직접 통신하지 않으며, 단지 요청을 조작한 후 스택의 아래쪽에 있는 드라이버로 전달하기만 합니다.

    응용 프로그램, 운영 체제, 3개의 드라이버 및 장치를 보여 주는 다이어그램

    장치와 직접 통신하는 스택의 한 드라이버를 기능 드라이버라고 하고, 보조 프로세싱을 수행하는 드라이버를 필터 드라이버라고 합니다.

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

드라이버란 운영 체제와 장치 간 통신을 관찰하거나 이에 참여하는 소프트웨어 구성 요소라고 말함으로써 드라이버의 정의를 확장할 수 있습니다.

소프트웨어 드라이버

이러한 확장된 정의는 상당히 정확하지만 여전히 불완전한데, 그 이유는 일부 드라이버의 경우 하드웨어 장치와 전혀 연결되지 않기 때문입니다. 예를 들어, 핵심 운영 체제 데이터 구조에 액세스할 수 있는 도구에 데이터를 써야 하는데, 커널 모드에서 실행되는 코드에 의해서만 이 도구에 액세스할 수 있는 경우를 가정해봅니다. 이렇게 하려면 도구를 두 개의 구성 요소로 나눌 수 있습니다. 첫 번째 구성 요소는 사용자 모드에서 실행되며 사용자 인터페이스를 보여 줍니다. 두 번째 구성 요소는 커널 모드에서 실행되며 핵심 운영 체제 데이터에 액세스할 수 있습니다. 사용자 모드에서 실행되는 구성 요소를 응용 프로그램이라고 하며, 커널 모드에서 실행되는 구성 요소를 소프트웨어 드라이버라고 합니다. 소프트웨어 드라이버는 하드웨어 장치와 연결되지 않습니다. 프로세서 모드에 대한 자세한 내용은 사용자 모드 및 커널 모드를 참조하세요.

다음 다이어그램은 커널 모드 소프트웨어 드라이버와 통신하는 사용자 모드 응용 프로그램을 보여 줍니다.

응용 프로그램 및 소프트웨어 드라이버를 보여 주는 다이어그램

추가 참고 사항

소프트웨어 드라이버는 항상 커널 모드에서 실행됩니다. 소프트웨어 드라이버를 작성하는 주요 이유는 커널 모드에서만 사용할 수 있는 보호된 데이터에 액세스하기 위해서입니다. 그러나 장치 드라이버가 항상 커널 모드 데이터 및 리소스에 액세스해야 하는 것은 아닙니다. 따라서 일부 장치 드라이버는 사용자 모드에서 실행됩니다.

아직 언급하지 않은 드라이버 범주인 버스 드라이버가 있습니다. 버스 드라이버를 이해하려면 장치 노드 및 장치 트리를 이해해야 합니다. 장치 트리, 장치 노드 및 버스 드라이버에 대한 자세한 내용은 장치 노드 및 장치 스택을 참조하세요.

지금까지의 설명은 기능 드라이버를 지나치게 단순화했습니다. 장치에 대한 기능 드라이버는 장치와 직접 통신하는 스택의 드라이버입니다. 이는 PCI(Peripheral Component Interconnect) 버스에 직접 연결된 장치에 해당하는 내용입니다. PCI 장치에 대한 기능 드라이버는 장치의 포트와 메모리 리소스에 매핑되는 주소를 가져옵니다. 기능 드라이버는 그러한 주소에 데이터를 기록함으로써 장치와 직접 통신합니다. 그러나 장치가 PCI 버스에 직접 연결되지 않는 경우도 많습니다. 대신 장치는 PCI 버스에 연결된 호스트 버스 어댑터에 연결됩니다. 예를 들면 USB Toaster는 호스트 버스 어댑터(USB 호스트 컨트롤러라고 함)에 연결되며, 이 어댑터는 PCI 버스에 연결됩니다. USB Toaster에는 기능 드라이버가 있고, USB 호스트 컨트롤러에도 기능 드라이버가 있습니다. Toaster에 대한 기능 드라이버는 USB 호스트 컨트롤러에 대한 기능 드라이버에 요청을 보냄으로써 Toaster와 간접적으로 통신합니다. 그러면 USB 호스트 컨트롤러에 대한 기능 드라이버는 USB 호스트 컨트롤러 하드웨어와 직접 통신하고, 이 하드웨어는 Toaster와 통신합니다.

USB Toaster 드라이버 및 USB 호스트 컨트롤러를 보여 주는 다이어그램

출처 - http://msdn.microsoft.com/ko-kr/library/windows/hardware/ff554678(v=vs.85).aspx