디바이스 드라이버와 하드웨어
글쓴이: declspec / 작성시간: 토, 2012/01/28 - 2:39오전
안녕하세요 질문이 있습니다.
리눅스든, 윈도우즈든 디바이스 드라이버를 작성했을때
이것은 응용 프로그램에게 일종의 핸들이나 파일디스크립터의 형태로
자신을 노출시키고, 응용프로그램은 이런 디스크립터를 통해서
ioctl, read, write 등의 시스템 API 를 사용하여
디바이스 드라이버와 통신을 하고 데이터를 주고받죠?
이렇듯 디바이스 드라이버 모듈과 응용 프로그램이 통신을 하고 데이터를
주고받는 메커니즘은 알겠는데
디바이스 드라이버와 하드웨어가 서로 통신을 하고 데이터를 주고받는 것에는
표준함수(write, read, WriteFile, ReadFile) 같은게 없는거같은데
어떤 방식으로 디바이스 드라이버는 하드웨어를 제어하게 되는건가요??
더 하드웨어와 가까운 하위 스택의 디바이스 드라이버의 인터페이스를 이용한다면...
결국은 어쨋든 함수 호출인건데...
가장 마지막에 하드웨어를 컨트롤 하는 디바이스 드라이버는
어떤식으로 하드웨어를 제어하게 되는건지 모르겠네요
특정 메모리 번지에 어떤 값을 읽고 쓰는건가요?
그렇다면 디바이스 드라이버가 취급하는 메모리주소는
어떻게 특정 하드웨어의 어떤 동작과 매핑이 될수 있는건가요??
너무 궁금해요
Forums:
음...
어셈블리어를 공부해보시는게 확실한 답을 얻으실수 있을거 같습니다.
어셈블리어로 프로그램을 작성하는 것은 번거롭고, 지루한 작업이지만, 어셈블리어를 배우는 것은 사실 CPU 를 배우는 것으로서, 기본적인 명령어 셋과 궁굼해하시는 I/O 동작들은 금방 배우실수 있습니다. 그리고 궁금해 하시는 것은 매우 간단한 부분입니다. 휴일 하루 날잡고 관련 문서를 읽어보시는게 좋을거 같네요.
간단하게 나마 설명드리면, 질문하신부분에 대한 답은 CPU 를 어떻게 만드느냐에 따라 달라집니다. 메모리 맵드 I/O 방식은 메모리의 특정 주소와 각 하드웨어를 매핑시켜서 통신합니다. 포트 I/O 방식은 I/O 용 주소를 따로 할당하게 됩니다. 따라서 포트 I/O 용 명령어 셋이 따로 존재합니다.
댓글 달기