벡터 테이블(Vector Table)

유명현·2022년 1월 1일
0

Vector Table은 프로그램 맨 시작점에 있고 부트로더 개발 시 Vector Table을 알아야 한다.(필자는 개발하면서 몸소배움)

Vector Table을 간략히 설명 하자면 프로그램이이 동작중에 문제가 생기거나 인터럽트가 걸리게 되었을 떄 Jump되는 곳이며, 프로그램에 맨 앞에 위치 되어 있다고 생각하며 된다.

<벡터 테이블이 호출되는 경우>

위에 보면 벡터 테이블이 6종류로 호출되는 것을 알 수 있다.
1)RESET - RESET이 걸리는 경우 (하드웨어나 소프트웨어적으로)

2)Prefetch Abort/Data Abort - 실제로 존재하지 않는 주소를 읽거나 쓸때 발생. (Cashe에서 code나 data를 빨리 읽어오거나 Signal을 빨리 처리하기 위해 정상적인 경우에도 호출하는 경우도 있음)

3)undefined Instruction - 이 경우 CPU가 명령어를 해석하지 못하는 경우 (CODE 영역에서 READ ONLY이지만 WRITE를 하는 경우, Device를 떨어뜨려 메모리에 금이 가는경우 발생)

4)SWI(Software Interrupt) - 프로그램에서 의도적으로 Interrupt를 발생해서 처리하려고 할 떄 사용

5)IRQ(Interrupt Requeset) - H/W Interrupt에 의해 호출, Interrupt Controller에서 Interrupt가 발생되며 IRQ를 호출하게 됩니다. 다음 누가 Interrupt를 호출했는지 검사

6)FIQ(Fast Interrupt Request) - Interrupt를 더 빠르게 처리하기 위해 사용, FIQ 처리시 레지스터를 적게 백업하고 FIQ를 호출하면 JUMP를 하지 않고 처리하기 떄문에 인터럽트를 빠르게 처리

*SWI/IRQ/FIQ의 경우 정상적인 동작의 경우이며, Reset/ Prefetch Abort/ Data Abort/ Undefined Instruction의 경우 오류가 발생할 떄 호출되기 떄문에 Exception이라고 부르기도 한다.

profile
기억보다 기록을

0개의 댓글