Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

8179
1390
307630


[리눅스커널][인터럽트]인터럽트 벡터에서 스택 푸쉬 확인하기 5. 인터럽트


프로세스가 실행되는 도중 인터럽트가 발생하면 인터럽트 벡터로 프로그램 카운터를 브랜치합니다. 인터럽트 벡터가 가장 먼저 하는 일은 무엇일까요? 바로 실행 중인 프로세스의 레지스터 세트를 스택 공간에 저장(푸시)하는 것입니다. 그렇다면 인터럽트 벡터에서 이런 동작을 수행하는 이유는 무엇일까요? 프로세스의 실행 정보를 백업하기 위해서입니다. 

이번에는 실제 프로세스 스택 공간에 있는 메모리 덤프를 보면서 인터럽트 벡터에서 프로세스 레지스터 세트를 푸시하는 과정을 살펴보겠습니다. 

* 아래 강의 동영상에서 관련 내용을 확인할 수 있습니다.



 


"이 포스팅이 유익하다고 생각되시면 댓글로 응원해주시면 감사하겠습니다.  
"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

Thanks,
Austin Kim(austindh.kim@gmail.com)

# Reference (인터럽트 처리)

인터럽트 소개  
   * 리눅스 커널에서의 인터럽트 처리 흐름    
인터럽트 컨텍스트  
인터럽트 핸들러는 언제 호출될까?  
인터럽트 핸들러는 어떻게 등록할까?  
인터럽트 디스크립터  
인터럽트 디버깅  

핑백

덧글

  • 컴린이 2020/05/20 00:53 # 삭제 답글

    안녕하세요, 인터럽트 처리 과정에 대해 공부하고 싶었는데 이 블로그를 통해 엄청 많이 배우고 갑니다!!
    알기 쉽게, 자세하게 알려주셔서 감사해요!
    그런데 제가 알기론 인터럽트 벡터가 '인터럽트를 처리할 수 있는 서비스 루틴들의 주소를 가지고 있는 배열'로 알고 있는데
    여기선 __irq_svc를 실행하는 것으로 표현하던데 무엇이 맞는건가요?
  • AustinKim 2020/05/20 09:49 #

    리눅스 시스템에서 인터럽트를 처리하는 방식을 다양한 쉽게 표현으로 설명하다 보니 좀 오해가 생길 여지가 있는 것 같습니다.
    인터럽트 벡터가 실행되는 과정은 다음과 같이 정리할 수 있겠네요.

    ■ 인터럽트가 발생하면 어떤 코드가 동작할까?

    ; ARM 프로세서는 __irq_svc 벡터로 프로그램 카운터를 바꿉니다.

    ■ __irq_svc 벡터는 어떤 동작을 할까?

    ; 기존에 실행 중인 코드의 실행 정보가 담긴 레지스터 세트를 프로세스의 스택 공간에 푸시합니다.

    ■ __irq_svc 벡터가 실행된 후 커널 내부에서는 어떤 동작을 할까?

    ; 시스템에서 설정된 인터럽트 컨트롤러 관련 동작을 처리합니다.
    ; 리눅스 커널의 IRQ(인터럽트) 서브시스템 관련 커널 코드가 처리됩니다.
    ; IRQ(인터럽트) 서브시스템 내부의 __handle_irq_event_percpu() 함수에서 인터럽트 핸들러를 호출한다.

    Thanks,
    Austin Kim
  • AustinKim 2020/05/20 09:49 # 답글

    리눅스 시스템에서 인터럽트를 처리하는 방식을 다양한 쉽게 표현으로 설명하다 보니 좀 오해가 생길 여지가 있는 것 같습니다.
    인터럽트 벡터가 실행되는 과정은 다음과 같이 정리할 수 있겠네요.

    ■ 인터럽트가 발생하면 어떤 코드가 동작할까?

    ; ARM 프로세서는 __irq_svc 벡터로 프로그램 카운터를 바꿉니다.

    ■ __irq_svc 벡터는 어떤 동작을 할까?

    ; 기존에 실행 중인 코드의 실행 정보가 담긴 레지스터 세트를 프로세스의 스택 공간에 푸시합니다.

    ■ __irq_svc 벡터가 실행된 후 커널 내부에서는 어떤 동작을 할까?

    ; 시스템에서 설정된 인터럽트 컨트롤러 관련 동작을 처리합니다.
    ; 리눅스 커널의 IRQ(인터럽트) 서브시스템 관련 커널 코드가 처리됩니다.
    ; IRQ(인터럽트) 서브시스템 내부의 __handle_irq_event_percpu() 함수에서 인터럽트 핸들러를 호출한다.

    Thanks,
    Austin Kim
  • 컴린이 2020/05/20 19:20 # 삭제

    아하! 그렇군요
    답변 감사합니다!
    덕분에 많이 배우고 갑니다ㅎㅎ
댓글 입력 영역