반응형

전반부 처리와 후반부 처리

  • 빠른 실행 속도와 대량 작업 실행이라는 인터럽트의 2가지 목표는 서로 충돌하는 점이다.
  • 이 목표를 달성하기 위해 인터럽트 처리는 두 부분으로 나눠져 있다.
    (전반부 처리 top half 와 후반부 처리 bottom half)
  • 전반부 처리(top half)는 인터럽트를 받은 즉시 실행되며 인터럽트 수신확인이나 하드웨어 재설정 처리시한이 중요한 작업만 처리
  • 나중에 할 수 있는 일들은 후반부 처리(bottom half)로 지연 시킨다.

인터럽트 핸들러 등록

  • 인터럽트 핸들러는 하드웨어를 관리하는 드라이버가 담당한다
  • 드라이버는 <linux/interrupt.h> 파일에 정의된 request_irq() 함수를 이용하여 인터럽트를 활성화시키고 인터럽트 핸들러를 등록
  • 첫번째 irq 인자를 통해 할당할 인터럽트를 저장하다. 기본장치의 경우 번호가 할당되어 있지만 다른 장비들은 탐색 작업이나 프로그램에 따라 동적으로 할당된다.
  • 두번째 handler 인자는 인터럽트를 처리할 실제 인터럽트 핸드러를 가르키는 함수 포인트이다
  • typedef irqreturn_t (*irq_handler_t)(int, void *); 

  • 세번째 flag 인자는 0또는 <linux/interrupt.h>에 정의된 플래그를 조합한 비트마스크 값을 사용한다.
  1. IRQF_DISABLED
  2. IRQF_SAMPLE_RANDOM
  3. IRQF_TIMER
  4. IRQF_SHARED
  • 네번째 name 인자는 인터럽트를 사용하는 장비의 ASCII 형식 이름이다
  • 다섯번째 dev 인자는 인터럽트를 공유할 때 사용한다. 인터럽트 핸들러를 해제할 때 dev에 고유한 쿠키값을 지정함으로써 해당 인터럽트 라인에서 원하는 인터럽트 핸들러만을 제거 할 수 있다.
  • 성공하면 request_irq()는 0을 리턴하고 오류가 발생할 때는 0이 아닌값을 사용한다.
  • request_irq()는 휴면상태를 허용하기 때문에 인터럽트 컨텍스트에 있을 때나 코드 실행이 중단되는 상황에서는 호출 불가하다

 

반응형

+ Recent posts