다음 이전 차례

5. 어떻게 입력 도구와 인터럽트가 작동하는가?

키보드는 매우 간단한 입력장치이다; 간단하다는 말은 이것이 작은 양의 데이터를 매우 천천히(컴퓨터의 기준으로 볼 때) 발생시킨다는 것을 의마한다. 키보드를 눌렀다가 뗄 때, 이벤트가 키보드 케이블을 통해 전달되면 하드웨어 인터프리터가 발생된다.

이런 인터럽트를 감시하는 것은 운영체계가 해야할 일이다. 모든 가능한 인터럽트에 대해서 인터럽트 핸들러가 있어야 하는데, 이것은 운영체계 중에서 인터럽트가 실행될 수 있을 때까지 그와 관련된 데이타(키보드를 누르고 떼는 것과 같은 값)를 따로 모아두는 부분이라 할 수 있다.

키보드에 대해서 인터럽트 핸들러가 실제 행하는 것은 키값을 코어 밑바닥의 시스템 영역에 전달하는 것이다. 그곳에서는 운영 체계가 제어를 현재 키보드 입력을 읽어드릴 프로그램에 직관적으로 넘기는 것을 가능하게 해준다.

디스크나 네트워크 카드와 같이 좀 더 복잡한 입력 도구 역시 비슷하게 작동한다. 위에서 우리는 디스크 콘트롤러가 디스크의 요청을 수행할 때 버스를 이용한다는 것을 살펴보았다. 실제 일어나는 일은 디스크가 인터럽트를 발생시키고, 디스크 인터럽트 핸들러가 후에 데이터를 요청한 프로그램에서 사용될 데이터를 메모리에 복사하게 된다.

모든 종류의 인터럽트는 우선순위 래벨(priority level)을 갖는다. 낮은 우선순위를 갖는 인터럽트(키보드 이벤트 같은 것)는 높은 우선순위의 인터럽트(시스템 시간의 흐름이나 디스크 이벤트 등)을 기다려야 한다. 유닉스는 자연스러운 동작을 위해 보다 빠르게 수행되어야 하는 이벤트에게 높은 우선순위를 주도록 설계되어 있다.

당신의 OS가 부팅될 때 볼 수 있는 메시지에는 IRQ 넘버라는 것을 볼 수 있을 것이다. 하드웨어의 잘못된 설정 가운데 하나는 정확하게 왜 그런지 모르는 상태에서 서로 다른 장치가 같은 IRQ를 사용하게 하려고 할 때 발생한다.

이 문제에 대한 답이 여기 있다. IRQ는 "인터럽트 요청(INterrupt Request)"의 약자이다. 운영체계는 시작할 때 어떤 인터럽트 넘버가 어떤 하드웨어에서 쓰일 것인지를 알아야 하는데, 그래야만 적당한 핸들러를 각각의 하드웨어에 대해 준비할 수 있기 때문이다. 만약 두개의 서로 다른 하드웨어가 같은 IRQ를 사용하려 한다면 인터럽트는 때때로 잘못된 핸들러에 의해 처리될 것이다. 이런 상황은 적어도 디바이스를 사용 불가능하게 만들고, 때에 따라서는 운영체계를 혼동시켜 시스템 전체를 못쓰게 할 수도 있다.


다음 이전 차례