요즘에 PC 를 구입하게 되면 사용자들은 특별한 작업 없이 바로 컴퓨터를 사용할 수 있다. 예전에 필자가 처음 조립식 IBM PC를 구매했던 시절에는 PC 와 주변 기기 ( 모뎀, 사운드 카드, VGA 카드 등등 ) 를 사면 처음에 꼭 해야 할 일이 있었다.
주변 장치 별로 같이 포함되어 오는 플로피 디스크 또는 CD 에 들어있는 프로그램들을 설치하는 작업이다. 그 당시에 나는 이 프로그램들이 뭔지 모르고 설명서에 있는 대로 설치하고, 장치들을 연결해 사용했다. 가끔 PC 를 포맷할 경우에는 이 작업을 다시 해야 하는데, 이 때 플로피디스크 나 CD 를 잃어버려 같은 기종의 주변기기를 사용하는 친구에게 프로그램을 복사해오거나, PC 통신 등을 통해 필요한 프로그램들을 어렵게 구하던 추억이 생각나기도 한다.
그 후에, 필자는 그때 설치한 프로그램이 디바이스 드라이버라는 것을 알게 되었고, 현재는 그것에 재미를 느껴서 디바이스 드라이버 개발자가 되었다.
이번 컬럼 에서는 이렇게 사용자들에게는 존재감이 크게 느껴지는 프로그램은 아니지만, 중요한 역할을 담당하는 디바이스 드라이버에 대해서 알아보려고 한다.
먼저, ‘디바이스 드라이버 (Device Driver)’ 의 의미부터 알아보자. 단어 자체의 의미로만 해석하면, 장치 제어자 ( 운영자 ) 라고 해석이 된다. 그리고, 좀 더 의미를 분석해보면 운영체제로부터의 입출력 명령에 따라 주변기기 사이의 입출력 제어라는 의미를 가진다. 따라서, 애플리케이션에서 주변기기를 제어하기 위해서는 디바이스 드라이버를 통해 제어를 해야 하고, 각각의 디바이스 드라이버는 기기의 종류 및 인터페이스에 맞게 동작을 제어하게 된다. 또한, 실제 장치를 제어할 목적이 아닌 운영체제에서 지원되지 않는 서비스를 확장하기 위한 용도로도 디바이스 드라이버를 만들어 사용하기도 한다. 즉, 기존 API 를 통해서는 커널에 대한 작업이 불가능 하므로, 이런 작업을 위해 별도의 디바이스 드라이버를 만들어서 API 를 새로 만들기도 한다.
운영체제가 윈도우냐, 리눅스냐, MAC OS X 이냐, 유닉스냐에 따라 운영체제의 내부 커널 구조나 동작 방식 등이 달라지게 된다. 이에 따라 디바이스 드라이버도 다른 구조를 가지게 되며, 개발시에도 서로 다른 방법으로 개발을 하게 된다.
윈도우가 설치된 PC 에서 작업을 하는 도중에 갑자기 화면이 파란색이 되면서 PC 가 재부팅 되는 경우가 있다. 이럴 경우, 대부분의 사용자는 이 블루스크린의 원인을 윈도우 운영체제를 만든 마이크로소프트사가 발생시킨다고 생각한다. 하지만, 마이크로소프트사에서 발표한 블루스크린에 대한 분석결과를 보면, 문제발생의 70 ~ 80 % 는 IHV (Independent Hardware Vendor)또는 ISV (Independent Software Vendor)가 만든 디바이스 드라이버의 문제 때문이라고 한다. 그래서, 마이크로소프트사는 이런 디바이스 드라이버 이슈를 사전에 방지하기 위해 Windows Logo 인증이라는 인증 제도를 두고, 디바이스 드라이버 및 하드웨어에 대한 사전 검증 시스템 재공하고 있다.
또한, 아래 윈도우 운영체제의 아키텍처에서 보듯이 디바이스 드라이버와 운영체제는 서로 밀접한 관계를 가지고 있고, 커널모드 환경에서 작동 한다. 즉, 커널모드 환경은 운영체제의 커널 및 드라이버가 동작되는 환경으로 이 환경에서 잘못된 동작을 하게 되면, 전체 시스템에 영향을 주기 때문에 디바이스 드라이버는 신중히 작성 되어져야 한다.
원문 : http://driveronline.org/bbs/view.asp?tb=begin&no=5
작성자 : subsub
'Programming > Windows Driver' 카테고리의 다른 글
[스크랩] 윈도우즈 디바이스 드라이버 개발 방법 (0) | 2016.06.20 |
---|---|
DriverEntry 함수 (0) | 2016.03.30 |