주변 장치 별로 같이 포함되어 오는 플로피 디스크 또는 CD 에 들어있는 프로그램들을 설치하는 작업이다 . 그 당시는 나는 이 프로그램들이 뭔지 모르고 , 단지 설명서에 있는 대로 설치해서 장치들을 연결하고 사용했었다 . 만약 , 장치를 다시 설치하려는데 그 프로그램이 있는 플로피 디스크나 CD 가 없어지는 날에는 기종이 같은 친구의 집에 가서 복사해오거나 , PC 통신 등을 이용해 구하려고 고생했던 기억이 있다 . 그 후에 , 필자는 컴퓨터를 전공하게 되었고 , 프로그래밍을 배우면서 , 그 때 내가 설치한 프로그램이 디바이스 드라이버라는 것을 알게 되었고 , 지금은 그 프로그램을 개발하는 일까지 하게 되었다 .
이번 컬럼 에서는 이렇게 사용자들에게는 눈에 잘 띄지 않지만 , 중요한 역할을 담당하는 디바이스 드라이버에 대해서 알아보려고 한다 . 총 3 회에 걸쳐서 디바이스 드라이버가 무엇이며 , 이것이 어떤 분야에 쓰이며 , 개발은 어떻게 하는지를 여러분들에게 소개하려고 한다 .우선 , ' 디바이스 드라이버 (Device Driver) ' 단어의 의미부터 알아보면 , 단어 자체의 의미로 해석하면 , 장치 제어자 ( 운영자 ) 라고 해석이 된다 . 좀 더 의미를 분석해보면 운영체제로부터의 입출력 명령에 따라 주변기기 사이의 입출력 제어를 한다 . 그리고 , 애플리케이션에서 주변기기를 제어하기 위해서는 디바이스 드라이버를 통해 제어를 해야 하고 , 각각의 디바이스 드라이버는 기기의 종류 및 인터페이스에 맞게 동작을 제어하게 된다 . 그리고 , 실제 장치를 제어할 목적이 아닌 운영체제에서 지원되지 않는 서비스를 확장하기 위한 용도로도 디바이스 드라이버를 만들어 사용하기도 한다 . 즉 , 기존 API 를 통해서는 커널에 대한 작업이 불가능 하므로 , 이런 작업을 위해 별도의 디바이스 드라이버를 만들어서 API 를 새로 만들기도 한다 .
그리고 , 운영체제가 윈도우냐 , 리눅스냐 , MAC OS X 이냐 , 유닉스냐에 따라 운영체제의 내부 커널 구조나 동작 방식 등이 다라지게 된다 . 이에 따라 디바이스 드라이버도 다른 구조를 가지게 되며 , 개발시에도 서로 다른 방법으로 개발을 하게 된다 .
윈도우가 설치된 PC 에서 작업을 하다가 갑자기 화면이 파란색지면서 PC 가 재부팅 되는 현상을 봤을 것입니다 . 대부분의 사용자는 이 블루스크린의 원인을 윈도우 운영체제를 만든 마이크로소프트가 문제를 발생시킨다고 생각할 것이다 . 하지만 , 문제가 발생되는 내용을 분석한 결과 문제발생의 70 ~ 80 % 는 IHV (Independent Hardware Vendor) 또는 ISV (Independent Software Vendor) 가 만든 디바이스 드라이버의 문제 때문이라고 한다 .
아래 윈도우 운영체제의 아키텍처에서 보듯이 디바이스 드라이버와 운영체제는 서로 밀접한 관계를 가지고 있는 위치에 있으며 , 커널모드 환경에서 작동하고 있다 . 즉 , 커널모드 환경은 운영체제의 커널 및 드라이버가 동작되는 환경으로 이 환경에서 잘못된 동작을 하게 되면 , 전체 시스템에 영향을 주기 때문에 디바이스 드라이버는 신중히 작성 되어져야 한다 . 그리고 , 마이크로소프트에서는 이런 디바이스 드라이버 이슈를 사전에 방지하기 위해 Windows Logo 인증이라는 인증 제도를 두고 , 디바이스 드라이버 및 하드웨어에 대한 사전 검증 시스템을 가지고 있기도 하다 .
![]() |
주 : 커널모드 (Intel CPU 특권모드 , Ring 0) : CPU 가 Ring 0 mode 에서 수행 중인 상태이며 이 상태에서는 실행할 수 있는 명령의 제한이 없으며 , 운영체제와 디바이스 드라이버가 이 모드에서 실행된다 .
유저모드 (Intel CPU 특권모드 , Ring 3 ) : CPU 가 Ring 3 mode 에서 수행 중인 상태이며 이 상태에서는 실행할 수 있는 명령은 제한이 있으며 . 일반적으로 모든 application 은 이 모드에서 실행된다 . ]
디바이스 드라이버의 실체는 파일로 존재 내용을 확인할 수 있는데 , 윈도우 환경 ( 윈도우 NT/2000/2003/VISTA 계열 ) 이라면 windows 설치폴더 \system32\drivers 폴더에서 드라이버 파일을 접할 수 있을 것이다 .
지금까지는 디바이스 드라이버의 개념에 대해서 알아봤다 . 그럼 실제 이 디바이스 드라이버가 어떤 분야들에 쓰이는지 알아보도록 하자 . 디바이스 드라이버는 기반 기술이 되는 분야로 이 기술을 응용해 다양한 분야에 활용 되고 있다 .
1. H/W 제조사
주변기기를 만드는 제조사들에서는 사용자가 기기를 사용할 수 있게 하기
위해서는 해당 장치를 제어하기 위한 디바이스 드라이버를 필수적으로 제작해야 한다 . 그래서 , 하드웨어 제조사들에서는 이런 디바이스 드라이버
개발을 중요하게 다루고 있다 . 그러나 요즘은 디바이스 드라이버 개발을 하지 않아도 되는 장치들도 나오고 있다 . 대표적인 예가 USB 이동식
디스크로 여러분들도 경험했듯이 장치를 PC 에 연결하면 특별한 드라이버 설치 없이 바로 인식해서 장치를 디스크처럼 사용할 수 있게 되는 경험을
했을 것이다 . 이것은 USB 이동식 디스크가 장치 스펙에 맞게 만들어지고 , 해당 USB 이동식 디스크 드라이버 ( USB Mass
storage driver ) 가 운영체제에 포함되어져서 사용자의 특별한 드라이버 설치 없이도 장치사용이 가능하도록 되었다 . 하지만 , 부가
기능들을 위해서는 디바이스 드라이버의 추가적인 개발이 필요한 경우도 있다 .
2. 보안 분야
최근 보안 분야의 이슈인 금융권 사이트에 보이는 키보드 보안이나 회사의 정보
유출 방지를 위한 매체 제어 (CD-RW, USB 이동식 디스크 등 ) 보안 , 그리고 , 게임 보안에 이르기까지 다양한 보안 분야들에서 이미
디바이스 드라이버 기술이 사용되고 있다 .
해킹기술이 점점 응용프로그램 레벨에서 커널모드 레벨로 내려오고 , 장치를 통한 정보유출들이 많아지면서 보안 프로그램도 점점 디바이스 드라이버 기술를 사용해야 할 필요성이 생기게 되었다 . 하지만 , 잘못된 보안 프로그램의 오동작 및 보안 프로그램들간의 드라이버간의 충돌로 인해 문제가 생기기도 한다 . 그래서 이런 보안 관련 디바이스 드라이버 개발시에는 세심한 주의가 필요하다 .
3. 응용 프로그램
일반 응용 프로그램에서도 디바이스 드라이버 기술이 사용된 예는 많다 .
가상 CD-ROM , 가상 프린터 등의 프로그램에서는 겉으로 보기에는 드라이버 기술이 사용되지 않는 것처럼 보이지만 , 실제 내부적으로는
일반적인 응용 프로그램 수준에서 구현되기 어려운 부분에 대해서 디바이스 드라이버 기술을 응용해 구현들을 하고 있다 . 특히 기존에 없는 기능들을
구현할 경우에는 디바이스 드라이버 기술을 이용해 기존 운영체제의 API 서비스를 확장하는 용도로도 사용되기도 한다 .
이처럼 디바이스 드라이버가 사용되는 분야는 다양하고 , 앞으로도 무궁무진하게 다양할 것입니다 . 디바이스 드라이버 분야가 일반 애플리케이션이나 게임처럼 눈에 쉽게 결과가 드러나지 않다 보니 아직까지 일반 사용자들 뿐만 아니라 , 개발자들에게도 어렵게 느껴지는게 사실이며 , 아직까지 개발자 저변도 넓지 않지 않는 상황이다 .
하지만 기반 기술이 되는 디바이스 드라이버 분야는 없어서는 안될 중요한 기술이고 , 앞으로 기술의 가치는 더욱 더 빛날 거라 봅니다 . 그리고 , 개발자들에게는 디바이스 드라이버 기술를 알게 되면 다른 개발분야들에도 많은 도움이 될거라 봅니다 .
그럼 , 이번 컬럼은 여기서 마치고 다음 컬럼 에서는 이런 디바이스 드라이버를 어떻게 개발하는지에 대해 우리가 쉽게 접하는 윈도우 환경에서의 디바이스 드라이버 개발 방법에 대해서 알아보도록 하겠습니다 .
출처: 아이엠데브
㈜데브구루 이상섭 개발팀장