드라이버란 무엇인가?
Driver라는 용어를 짧게 정의 하는 것은 매우 힘들다. 기본적으로, 드라이버는 OS와 장치가 대화(통신)를 하게하는 소프트웨어의 구성 요소다. 예를 들어, Application이 장치로부터 어떤 데이터를 읽어야 한다고 가정하자면. OS는 Driver에 기술된(구현된) 함수를 호출 할 것이다. 특정 회사에서 제작된 Driver는 OS에 그 데이터를 반환 할 것이고 OS는 다시 Application에게 줄 반환 할 것이다.
확장된 정의
위의 설명은 몇가지방법으로 다시 말해 볼 수 있다.(정말 이건 의역의 극치..아마 틀렸을것이다.)
● 모든 Driver들이 꼭 그 장치들을 생산한 회사에서 작성 되는 것은 아니다.
- 대부분 장치들은 H/W 표준규격에 맞추어 제작된다. 이는 즉 그 Driver는 Macro$oft에서 작성되기도 하고, 장치 개발사(자)는 드라이버를 제공하지 않기도 함을 의미한다.
● 모든 Driver가 직접 장치와 통신하는 것은 아니다.
- 특정 I/O 요청(장치로부터 데이터를 읽어오는 것등)에 대하여 계층구조를 이루며 동작하는 몇몇 Driver들이 있다. 아래 그림에서 볼 수 있듯이 Stack구조를 이루며 해당 요청에 응답을 하기도 한다. Stack구조 상의 어떤 Driver는 한 구조(형식)에서 다른 구조(형식)로의 변환(형 변환이나 좌표계 변환 등의 변환)에 관여하는 것도 있다. 이 Driver들은 장치와 직접 통신하지 않는다. 그것들은 단지 요청을 조작하고 Stack구조상 낮은 위치의 Driver에 요청을 전달한다.
Stack구조상에서 Device와 직접 통신하는 Driver를 function driver라 말하고, 그외에 연산기능을 수행하는 것을 Filter driver라 부른다.
● 어떤 Filter Driver는 직접적으로 해당 I/O요청에 관여하지 않고 I/O 요청에 대한 정보를 관찰하고 기록하기도 한다. 예를 들어 특정 Filter driver들은 Stack구조상에 있는 다른 Driver들이 I/O 요청에 제대로 동작하는지를 감시하는 역할을 하기도 한다.
다시 말해 Driver란, OS와 장치간에 통신에 있어서 참여하고나 혹은 감시하는 Software 구성요소 즘으로 확장해 말할 수 있겠다.
소프트웨어 Driver
우리의 확장된 정의는 일부 Driver가 꼭 장치에 연결되어 있지 않기 때문에 아직 정확하지 않은것 같다. 예를 들어, 당신은 OS 핵심 자료구조의 데이터(이 데이터는 Kernel mode에서 동작 하는 코드만이 접근이 가능하다.)에 접근하는 Tool을 만들어야 한다고 치자. 당신은 이 Tool을 두 부분으로 나움으로서 이를 가능하게 할 수 있다. 한 부분은 User mode에서 동작는 User Interface를 보여주는 부분을 말하며 다른 부분으로 Kernel mode에서 동작 하는 OS 핵심 데이터에 접근하는 부분을 말한다. user mode에서 동작 하는 부분을 Application이라 부르고 Kernel mode에서 동작하는 부분을 software driver라 부른다. software driver는 하드웨어 장치와 관련되지 않는다. 프로세서의 동작 Mode에 대한 더 많은 정보를 보고자 한다면 User mode and Kernel Mode를 참조하길 바란다.
이 다이어 그램은 user-mode application과 kernel-mode software driver간의 통신을 보여준다.
추가~!
Software driver들은 항상 kernel mode에서 동작을 한다. software driver를 작성하는 주된 이유는 보호되는 데이터(Protected data)는 꼭 kernel mode에서만 접근이 가능 하기 때문이다. 하지만, Device Driver는 항상 Kernel-mode 데이터 및 resources 에 접근 하는 건 아니기 때문에 어떤 Device Driver는 user-mode에서 동작을 하기도 한다.
아직 우리가 다루지 않은 드라이버의 종류인 Bus driver가 있다. bus driver를 이애 하려면 Device Node와 Device tree에 대하여 이해할 필요가 있다. Device tree, node, bus driver에 대한 보다 자세한 정보는 Device Nodes and Device Stacks를 참고하길 바란다.
우리는 function dirver의 정의에 대해 간략히 살펴보았다. 장치에게 function driver란장치와 직접적으로 통신을 하는 스택에 있는 driver의 하나라 말할 수 있겠다. 이는 PCI (Peripheral Componet Interface) bus에 직접적으로 연결된 장치에 있어서는 정확한 말이다.
function driver는 PC장치를 위한 장치의 메모리 resource와 port에 메핑된 주소를 가지고 있다. 하지만, 대부분, 장치의 장치들은 PIC bus에 직접적으로 연결되어 있지 않고 PCI bus에 연결된 Host bus adapter에 연결되어 있다. 예를 들자면, USB toaster는 (USB host controller라 불리는)Host bus adapter에 연결되어 있다. USB toaster는 function driver를 가지고 있으며, USB Host controller역시 function driver를 가지고 있다. Toaster의 function driver는 USB host controller의 function driver에 요청을 보냄으로서 Toaster와 간접적으로 통신을 한다. USB shot controller 의 function driver는 Toaster와 통신하는 USB Host controller 하드웨어와 직접 통신합니다.
댓글 없음:
댓글 쓰기