Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

230224
1178
109352


5.4 인터럽트 핸들러는 어떻게 등록할까? 5. Interrupt Handling

5.4 인터럽트 핸들러는 어떻게 등록할까?
외부 하드웨어 디바이스가 인터럽트를 발생하면 인터럽트 핸들러가 처리합니다. 이를 위해선 먼저 인터럽트 핸들러를 커널이 지원하는 함수를 써서 등록해야 합니다.

이번 절에서는 인터럽트 핸들러를 등록하는 드라이버 코드를 살펴봅니다. 어느 시스템이든 인터럽트 핸들러를 등록하는 코드를 볼 수 있습니다.

인터럽트 핸들러를 등록하는 처리 과정을 배우기 전에 우선 핸들러란 단어의 의미를 알 필요가 있습니다. 보통 핸들러는 동적으로 바뀌는 액션을 처리하기 위한 용도로 호출합니다. 그래서 핸들러는 함수 포인터로 등록해서 처리하는 경우가 많습니다. 

인터럽트 핸들러를 함수 포인터를 써서 호출하는 이유는 무엇일까요?
여러 가지 이유가 있지만 인터럽트 핸들러를 동적으로 호출하기 위해서 입니다. 만약 어떤 시스템에 인터럽트를 36개로 설계했다고 가정합시다. 36개의 if else 문으로 인터럽트 핸들러를 호출하면 어떻게 될까요? 만약 다른 시스템에서 40개면요? 인터럽트 핸들러 함수를 호출하는 커널 코드를 유지 보수하기 어렵습니다. 그래서 인터럽트 핸들러는 함수 포인터로 등록합니다. 인터럽트 핸들러는 해당 인터럽트를 처리하기 위한 함수들이며 보통 인터럽트 종류만큼 인터럽트 핸들러 함수들이 있습니다.

# Reference (인터럽트 처리)
5.7 인터럽트 디버깅
   5.7.3 인터럽트 핸들러 함수 파악하기
   5.7.4 인터럽트 핸들러 실행 시간 점검하기

Reference(프로세스 관리)
4.9 프로세스 컨택스트 정보는 어떻게 저장할까?
 4.9.1 컨택스트 소개
 4.9.2 인터럽트 컨택스트 정보 확인하기
 4.9.3 Soft IRQ 컨택스트 정보 확인하기
 4.9.4 선점 스케줄링 여부 정보 저장
4.10 프로세스 디스크립터 접근 매크로 함수
 4.10.1 current_thread_info()
 4.10.2 current 매크로란
4.11 프로세스 디버깅
 4.11.1 glibc fork 함수 gdb 디버깅
 4.11.2 유저 프로그램 실행 추적 

핑백

덧글

댓글 입력 영역