CPU 아키텍처 마다 인터럽트를 처리하는 방식

  • CPU 아키텍처에서 인터럽트를 처리하는 방식을 활용

Armv8 아키텍처

  • arch/arm64/kernel/entry-common.c
  • arch/arm64/kernel/entry.S

Arm 아키텍처에서 인터럽트를 처리하는 방식

  • 인터럽트는 익셉션(Exception)의 한 종류로 처리
  • 외부 하드웨어 입력이나 오류 이벤트가 발생하면 익셉션 모드로
    진입
  • 익셉션이 발생했다고 감지하면 익셉션 종류별로 이미 정해 놓은
    주소로 브랜치

Armv8 익셉션 벡터 테이블

  • 주소 : 오프셋 (익셉션이 유발이 되면 벡터의 베이스주소가 더해진 주소로 분기가 된다.)

  • IRQ : 인터럽트 리퀘스트 (외부 페리페럴 )

  • exception taken from : 익셉션이 유발이된 익셉션 레벨

  • Synchronous : 메모리 오버히트, 시스템콜이 유발될 때

  • FIQ : 시큐어

  • 익셉션 레벨별로 스택포인터 레지스터가 존재

Armv8 기반 아키텍처에서 익셉션 벡터(Exception Vector)

처리 방식

  • Armv8 기반 프로세스는 ‘이미 정해진 주소’로 프로그램 카운터가 브랜치
  • 이미 정해진 주소를 익셉션 벡터(Exception Vector) 주소라 하며, 각 익셉
    션의 종류에 따라 주소의 위치가 다름
  • 익셉션 벡터 주소에는 익셉션을 핸들링하는 코드가 있음

유저 애플리케이션이나 커널이 실행하는 동안에 처리되는 인터럽트 벡터의 처리 방식이 다름

  • 유저 애플리케이션 실행(EL0) 도중 발생: 'VBAR + 0x480‘
  • 커널 드라이버(EL1) 도중 발생: 'VBAR + 0x280‘

0개의 댓글