본문 바로가기
시스템 반도체/Arm

Arm Interrupt & Exception ( 인터럽트, 예외, 차이점 )

by 전컴반 2022. 5. 31.
반응형

이번에는 Interrupt와 Exception에 대해 알아볼까 한다. 사실 이 두 개는 혼용하여 사용하거나 대동소이하다.

굉장히 중요한 개념이니 천천히 알아보자

 

 

Interrupt

 

먼저 interrupt란 뭔지 알아보자

interrupt간단히 말해서 동작하고 있던 걸 다른 동작으로 바꾸는 것이다. 모든 I/O는 interrupt를 발생시키는데 I/O의 출력이 CPU에 연결돼 있다. 종류로는 hardware interrupt (하드웨어)와 software interrupt(소프트웨어)가 있다. 아래서 더 알아보자

 

interrupt는 Privilege mode에서 돌아간다. Privilege mode란, 일종의 특권을 가진 상태에서 돌아간단 의미다. 막강한 권력을 가졌다고 보면된다. 예를 들면 리눅스에서 관리자가 되는 것과 똑같다. 즉 모든 권한을 가지고 무엇이든 접근하고 수정할 수 있다. 이런 상태에서 interrupt를 실행할 수 있다.

 

Privilege level이 PL0인 user mode에서 PL1( FIQ, IRQ, Ects* )으로 바뀐 뒤에 interrupt를 실행한다.  

 

 

Exception

 

Exception과 interrupt를 혼용하여 사용하기도 하지만 실제로는 다른 의미로 볼 수 있는데 차이를 보자면.

 

Exception는 프로그램 내부에서 발생하는 것이고 interrupt는 I/O 장치에서 발생시키는 것이다. 

 

Exception 의 좋은 예시로 undefined 명령어를 볼 수 있다.

만약 정해져 있는 add 명령어를 shift 시켰다고 하면 ( = 훼손 시켰다 ), CPU는 opcode를 통해 add라는 걸 알 수 있는데 shift 돼 있으니 ( = 훼손 돼 있으니 ) 무슨 명령어인지 알 수 없다. 이게 undefined 명령어를 야기한다. 즉, 알 수 없다는 의미다. 이와 같은 동작을 Exception이라고 볼 수 있다.

 

 

간단히 Exception과 interrupt를 알아봤으니 좀 더 구체적으로 알아보자

 

 

Hardware interrupt & Software interrupt

 

1. Hardware interrupt는 주로 I/O에서 발생하는데 arm에서는 IRQ와 FIQ가 있다. 조금 더 설명하자면 interrupt를 받는 2가지 input이 있는데 IRQ와 FIQ가 있다는 의미다. 하나씩 알아보자

 

- IRQ (Normal Interrupt Request)의 동작 스텝은 PC를 0x18로 변경하고, ( 왜냐면 0x18에 미리 동작을 지정해 놨기 때문이다. 이건 제조사에서 지정해 놓은 것이다. ) 0x18에 있는 명령어를 실행한다. 이 명령어에는 보통 ISA나 branch를 집어넣는다. 그럼 실제 ISA 코드가 존재하는 해당 주소로 이동하여 Arm은 IRQ mode로 들어간다.

 

- FIQ (Fast Interrupt Request)의 동작 스텝은 PC를 0x1C로 변경하고 동작은 IRQ와 유사하다. Arm은 FIQ mode로 들어간다. 빨리 발생해야 하기 때문에 IRQ보다 우선순위가 높다. 

 


 

2. Software interrupt는 발생시키기 위해 명령어 형태로 제공이 되는데, arm에선 SVC (supervisor call)라는 명령어로 제공해준다. 다른 말로는 system call이라고 볼 수 있다. open(), close()와 같은 명령어를 따라가 보면 마지막에 SVC 명령어가 있다.

 

- SVC 명령어를 실행하면 PC는 0x08로 바뀌고 Arm은 Supervisor mode로 바뀐다.

 

 

IRQ, FIQ, SVC를 그림으로 간단히 그려보면 다음과 같다. 이렇게 매핑이 되는 게 마치 vetor 같다고 하여 Interrupt (Exception) Vectors tables라고 부른다.

 

 

undefined가 아닌 다른 상황일 때도 마찬가지로 모든 동작의 순서들이 정해져 있는다.

 

vertor table에 대해서 다음 포스팅으로 좀 더 자세히 알아보자

반응형

댓글