본문/내용
일단 JJOS 커널의 디바이스 드라이버는 두 개의 디렉토리에 구분되어 있는데, 다음과 같이 구성되어 있다.
① JJOS/arch/i386/bytecode/jos/platform/driver : 아키텍처에 관계되는 디바이스 드라이버 루틴이 포함되어 있다.
② JJOS/common/jos/platform/driver : 아키텍처에 무관한 디바이스 드라이버 루틴이 포함되어 있다.
위 두가지 루틴들을 이해하기 쉬운 예가 바로 키보드 입력 루틴으로, 키보드 하드웨어에 관한 루틴은 첫 번째 디렉토리에 있고, 일반적인 키보드 동작은 두 번째 디렉토리에 있다. 우선 리스트 1을 통해 첫 번째 디렉토리에 포함될 키보드 디바이스 드라이버를 살펴보자.
리스트 1의 키보드 드라이버는 InteruuptLister 클래스를 확장해서 만들었다. 즉 키보드 디바이스 드라이버는 인터럽트 디바이스 드라이버인 셈이다. 리스트 1에 대해서는 다음 중요 부분만을 설명하기로 한다.
① keyboard() 루틴은 인터럽트 리스너에 키보드를 9번을 할당하고, 인터럽트 서비스 루틴을 첨가하는 부분이다.
② handleInterrupt() 루틴은 앞에서 할당된 인터럽트 서비스 루틴이 9번인지를 체크하고, 키보드의 스캔 코드를 받아들인다.
③ addScancodeListener() 루틴은 보조적인 루틴으로 스캔코드 리스너를 첨가하는 루틴이고, removeScancodeListener() 루틴은 스캔코드 리스너를 제거하는 루틴이다.
리스트 2는 두 번째 디렉토리에 있는 일반적인 키보드 동작을 기술한 키보드 드라이버이다.