인프런 커뮤니티 질문&답변

이진후님의 프로필 이미지

작성한 질문수

리눅스 커널의 구조와 원리: 인터럽트 [저자 직강 1부-5]

5.IRQ 익셉션 핸들러 분석-리눅스 커널에서 인터럽트 유발-Part.2

인터럽트 처리 순서

24.10.03 22:23 작성

·

26

0

Big Picture 사진을 보면 인터럽트 발생시 GIC에서 우선적으로 처리한 후 익셉션 핸들러가 실행되는 걸로 나와있는데,

인터럽트 처리 콜스택을 보면 익셉션 핸들러가 먼저 실행되고 gic 관련 핸들러 함수가 호출되는 것 같습니다. 둘이 순서가 왜 다른지 궁금합니다!

답변 2

1

김동현 (Austin Kim)님의 프로필 이미지
김동현 (Austin Kim)
지식공유자

2024. 10. 27. 21:38

아래 문의 주신 질문에 답변드립니다:

  1. Big picture에서 보이는 GIC는 주변 장치에서 발생한 인터럽트를 수신하여 처리하는 하드웨어 유닛(IP)입니다.

  2. 콜 스택에 나타난 gic 관련 핸들러 함수는 Arm 프로세서가 GIC의 CPU 인터페이스로부터 인터럽트를 성공적으로 수신하여 처리하고 있다는 확인(Acknowledgement) 작업을 수행합니다. 익셉션 핸들러 다음에 GIC가 처리되는 것은 아닙니다.

추가로 궁금하신 점이 있으면 문의주세요.

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 10. 03. 22:25

안녕하세요, 인프런 AI 인턴입니다. 이진후님.

인터럽트 처리 과정에서의 GIC(Generic Interrupt Controller)와 익셉션 핸들러의 순서에 대한 혼란을 이해합니다. 각 단계의 역할을 간단히 설명드리겠습니다.

  1. GIC의 역할: GIC는 시스템 전체에서 발생하는 인터럽트를 관리하고, 각각의 인터럽트를 적절한 CPU 코어로 분배하는 역할을 합니다. 인터럽트가 발생하면 GIC는 이를 감지하고 인터럽트를 처리할 준비가 된 CPU에 신호를 보냅니다.

  2. 익셉션 핸들러의 역할: 인터럽트가 발생했을 때, CPU는 해당 인터럽트를 처리하기 위해 실행 중인 작업을 중단하고 익셉션 핸들러로 분기를 수행합니다. 익셉션 핸들러는 GIC가 전달한 인터럽트를 감지하고, 이를 처리하는 함수 코드를 실행합니다.

질문에서 말씀하신 것처럼, 이론적으로는 GIC가 인터럽트를 감지하고 이를 처리할 준비가 된 후, 익셉션 핸들러가 호출됩니다. 하지만 코드 레벨에서의 구현에서는 익셉션 핸들러가 먼저 실행되어 GIC의 설정 및 관련 처리를 수행하는 것으로 보일 수 있습니다. 이는 코드에서 인터럽트 핸들링 루틴이 GIC 설정 및 초기화를 포함한 기능을 수행하면서 발생하는 흔한 상황입니다.

실제로 GIC와 익셉션 핸들러는 밀접하게 협력하여 인터럽트 처리의 전 과정에서 동작하므로, 코드 분석 시 이러한 순서 혼동이 있을 수 있습니다.

관련 질문 내용은 다음 링크에서 더욱 깊이 있는 설명을 찾으실 수 있습니다:
- ARMv8 아키텍처에서의 인터럽트 처리 흐름

이해를 돕기 위해, 위 링크에서는 ARM 아키텍처의 레벨별로 어떻게 인터럽트가 처리되는지를 다루고 있으며, GIC와 익셉션 핸들러의 연계에 대해서도 논의하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.