IRQ 스레드
인터럽트 실행 중에 I/O 같이 시간이 오래걸리는 서비스를 위한 것인데,
빠르게 처리할 수 있는 서비스만 irq에 남겨두고
나머지 오래걸리는 서비스는 IRQ 스레드를 사용하기도 한다.
IRQ 스레드는 request_threaded_irq을 통해 생성된다.
int request_threaded_irq(unsigned int irq, irq_handler_t handler,
irq_handler_t thread_fn, unsigned long irqflags, const char *devname, void *dev_id)
파라미터가 request_irq와 비슷하다.
특별한게 있다면 thread_fn인데, 이건 IRQ스레드 처리 함수의 주소를 저장하는 포인터다.
스레드의 이름은 "irq/[irq번호]-[이름]"로 생성된다.
IRQ 스레드 실행
irq 스레드는 인터럽트 핸들러의 반환값에 의해 호출될지 말지가 결정된다.
인터럽트 핸들러의 반환값이
IRQ_WAKE_THREAD 이면 IRQ 스레드를 깨우고
IRQ_HANDLE 이면 IRQ 스레드를 깨우지 않는 식이다.
'디버깅을 통해 배우는 리눅스 커널의 구조' 카테고리의 다른 글
스터디 계획(2주차) (0) | 2022.06.18 |
---|---|
리눅스 커널 스터디 결산 (1주차) (0) | 2022.06.17 |
인터럽트 디스크립터와 인터럽트 디버깅 (0) | 2022.06.15 |
bcm2711 라즈베리파이에서 bcm2835 라이브러리 사용 (0) | 2022.06.12 |
스터디 계획(1주차) (0) | 2022.06.11 |