인터럽트는 주변 장치와 커널이 통신하는 방식 중 하나로써
어떠한 Event가 발생하였을 시에 커널에게 그 Event에 대하여 알리는 것이다.
Event를 알리는 방식은 크게 2가지가 있는데 폴링 방식과 인터럽트 방식이다.
먼저 폴링 방식은 주기적인 시간을 가지고 Event의 발생 유무를 지속적으로 확인하는 방식이고,
인터럽트 방식은 Event가 발생하였을시에 그 신호에 의해 Event를 처리하는 방식이다.
예를 들어 폴링 방식은 편의점의 점원이 손님이 오는가를 지속적으로 1분마다 확인 하는 방식이고,
인터럽트 방식은 문에 방울을 달아 손님이 들어왔을 시에만 소리로 신호를 알린다.
리누그 커널에서는 Event가 발생하면 interrupt handler가 발생한다.
인터럽트의 종류는 외부 인터럽트와 내부 인터럽트로 나눌 수 있는데
외부 인터럽트는 현재 수행 중인 Task와 관계없이 주변 장치에 의하여 비동기적으로 사건이
발생하는 것이며,
내부 인터럽트는 수행중인 Task와 관련하여 발생하는 동기적 사건이다.
인터럽트가 발생하면 프로그램 카운터 레지스터(program counter resister)의 값이 변경되고
해당 인터럽트 핸들러로 이동하게 된다.
해당 인터럽트 핸들러로 이동하는 방식은 IDT(Intrrupt Discriptor Table)이란 곳에 각 핸들러의 시작
주소가 저장 되어 있는데, 이 주소를 확인하여 해당 핸들러로 점프하게 된다.
(외부 인터럽트는 따로 관리)
Task 중간에 인터럽트가 발생하면 처리 전 수행중이던 Task의 작업이 인터럽트가 끝난 다음
작업을 하던 중간 위치를 기억해야 함은 당연한 것이다.
인터럽트가 발생하면
Task Save => Interrupt 수행 => task restore의 과정을 통하여 task의 작업 위치로 복귀한다.
참고 - 리눅스 커널 내부구조 (저 : 백승재 최종무)
'Linux > Kernel Analysis' 카테고리의 다른 글
디바이스 드라이버 (0) | 2012.11.24 |
---|---|
커널 (0) | 2012.11.18 |
[ubuntu 12.04] eclipse 실행 에러 (0) | 2012.11.10 |
tftp 설치 및 설정 (0) | 2012.11.01 |
ubuntu 에서 eclipse 설치 (0) | 2012.10.13 |