함수들
- 등록 - request_irq()
- 해제 - free_irq()
- 핸들러 예제 - drivers/char/rtc.c 참고
- 인터럽트 컨텍트스 / 프로세스 컨텍스트
- 인터럽트 핸들러 구현
- interrupt 관련 변수는 volatile 변수 선언에 반드시 필요함
- interrupt 확인방법:
$ cat /proc/interrupts
Exception과 interrupt
- exception:
- 동기적인 event, java exception 처리라고 생각하면 됨. 언제 발생할지 아는 것.
- 예를 들어 Null pointer를 reference 하면 CPU가 abort signal을 보냄. 이 것은 엄밀하게 얘기하면 interrrupt라고 할 수 없음.
- 비동기적인 event, 쉽게 말하면 io와 같은 언제 발생할지 모르는 것.
- interrupt가 끝나고 처리하는 것.. Bottom half. interrupt가 실행할 때 처리하는 것.. Top half
후반부 처리(Bottom half)
- softirq > tasklet > workqueue. softirq가 가장 빠르고 workqueue가 가장 느림.
- softirq는 휴면할 수 없음
- spinlock 할 수 없음
- 동적으로는 사용할 수 없다. 즉 insmod로 사용 할 수 없고 부팅할 때 초기화해야 함. 즉 이미지에 넣어야 함.
- 거의 kernel release 할 때 들어있고 개인적으로 수정할 일은 거의 없다.
- tasklet은 동기화 처리가 개선됨
- softirq 기법을 이용해서 구현됨. softirq의 TASKLET_SOFTIRQ
- spinlock 같은거 못씀.
- insmod는 할 수 있다.
- workqueue는 Thread로돌기때문에 scheduling이되어 휴면이 가능함.
댓글 없음:
댓글 쓰기