반응형
전반부 처리와 후반부 처리
- 빠른 실행 속도와 대량 작업 실행이라는 인터럽트의 2가지 목표는 서로 충돌하는 점이다.
- 이 목표를 달성하기 위해 인터럽트 처리는 두 부분으로 나눠져 있다.
(전반부 처리 top half 와 후반부 처리 bottom half) - 전반부 처리(top half)는 인터럽트를 받은 즉시 실행되며 인터럽트 수신확인이나 하드웨어 재설정 처리시한이 중요한 작업만 처리
- 나중에 할 수 있는 일들은 후반부 처리(bottom half)로 지연 시킨다.
인터럽트 핸들러 등록
- 인터럽트 핸들러는 하드웨어를 관리하는 드라이버가 담당한다
- 드라이버는 <linux/interrupt.h> 파일에 정의된 request_irq() 함수를 이용하여 인터럽트를 활성화시키고 인터럽트 핸들러를 등록
- 첫번째 irq 인자를 통해 할당할 인터럽트를 저장하다. 기본장치의 경우 번호가 할당되어 있지만 다른 장비들은 탐색 작업이나 프로그램에 따라 동적으로 할당된다.
- 두번째 handler 인자는 인터럽트를 처리할 실제 인터럽트 핸드러를 가르키는 함수 포인트이다
- 세번째 flag 인자는 0또는 <linux/interrupt.h>에 정의된 플래그를 조합한 비트마스크 값을 사용한다.
typedef irqreturn_t (*irq_handler_t)(int, void *); |
- IRQF_DISABLED
- IRQF_SAMPLE_RANDOM
- IRQF_TIMER
- IRQF_SHARED
- 네번째 name 인자는 인터럽트를 사용하는 장비의 ASCII 형식 이름이다
- 다섯번째 dev 인자는 인터럽트를 공유할 때 사용한다. 인터럽트 핸들러를 해제할 때 dev에 고유한 쿠키값을 지정함으로써 해당 인터럽트 라인에서 원하는 인터럽트 핸들러만을 제거 할 수 있다.
- 성공하면 request_irq()는 0을 리턴하고 오류가 발생할 때는 0이 아닌값을 사용한다.
- request_irq()는 휴면상태를 허용하기 때문에 인터럽트 컨텍스트에 있을 때나 코드 실행이 중단되는 상황에서는 호출 불가하다
반응형
'리눅스 커널 프로그래밍' 카테고리의 다른 글
Load Average 정의 (0) | 2018.08.22 |
---|---|
TOP을 통해 프로세스 정보 확인하기 (0) | 2018.08.22 |
리눅스 커널 프로그래밍 - 인터럽트와 인터럽트 핸들러 (1) (0) | 2018.01.11 |
리눅스 커널 프로그래밍 - 커널 자료구조 (2) (0) | 2018.01.10 |
리눅스 커널 프로그래밍 - 커널 자료구조 (1) (0) | 2017.12.25 |