본문 바로가기

무언가 만들기 위한 지식/ARM Processor

ARM Processor의 7가지 Exception


예외처리(Exception)이란 외부의 요청이나 오류에 의해 정상적으로 진행되는 프로그램의 동작을 멈추고 프로세서의 동작모드로 변환하여 미리 정해진 프로그램으로 외부의 요청이나 오류를 처리하는 것이다.

ARM Processor에서는 총 7개의 예외처리가 존재하는데 각 정보는 다음과 같다.
 

예 외 처 리

벡 터 주 소

전 환 모 드

우 선 순 위

Reset

0x0000 0000

SVC

1

Undefined Instruction

0x0000 0004

Undefined

6

SWI(Software Interrupt)

0x0000 0008

SVC

6

Prefetch Abort

0x0000 000c

Abort

5

Data Abort

0x0000 0010

Abort

2

Reserved

0x0000 0014

 .

IRQ

0x0000 0018

IRQ

4

FIQ

0x0000 001c

FIQ

3


예외는 위와 같이 Reserved를 제외한 7개의 Exception이 존재한다.
벡터주소란 이전에 부트로더에서 잠깐 언급했었던, crt0.s 파일의 가장 처음에 있는 부분이다.
이부분이 0x0으로 ROM(또는 RAM, ram-loding일 경우)상에서 가장 처음부분에 위치하게 된다. 이부분은 고정벡터 주소(무조건 처음주소에 할당)로 각 주소에는 4byte(즉 한개의 명령어)가 할당되어 있다.

해당하는 Exception이 발생하면 Exception Vector Table상의 해당 주소로 이동한다.
그 주소로 이동하면 보통 B(branch)명령을 통해 Exception 처리 루틴으로 이동하게 된다.
(각 Vector Table에 4 byte만 할당되어 있기 때문이다. - 단 FIQ는 마지막에 존재하기 때문에 그대로 처리문을 사용해도 된다./FIQ는 고속 인터럽트 처리이므로)

Mode와 연관지어 볼때, SWI라는 새로운 용어가 나왔는데, 이는 SoftWare Interrupt를 말한다.
다른 예외처리는 하드웨어적으로 발생하여, 예외가 발생하면 벡터테이블로 제어가 이동하지만,
SWI의 경우 프로그래머가 코드상에서 발생시키고 싶은 위치에 발생시켜 해당 벡터테이블로 제어가 이동한다.

우선순위도 위의 표와같이 주어져서, 어떤 것에 우선권을 줄 것인지 명확히 나타내어 있다.


그림을 보면 Exception의 발생원인발생되는 Exception, 그리고 전환 Mode에 관한 연관성을 한눈에 파악할 수 있다.
프로그래머에 의하여 진행 코드상 의도적으로 모드를 전환할 수 있는 방법은 두가지가 있는데, 그 중 첫번째는 SWI를 이용한 인터럽트프로그래머에의해 상태레지스터를 수정함으로써 모드를 전환하는 방법이다.

여기서 Mode가 전환되면 첫째로, 사용하는 Stack이 바뀌고/ 둘째로 사용하고 있는 Register Set이 바뀐다.(일부분, 공용되는 부분도 있음.) 그렇기 때문에 문맥전환(Context Switching)이 이루어지면서 이전 상태를 보존한 상태에서 분기(함수호출정도로 이해)를 하여야 한다. 이 과정에서 고려해야할 부분이 꽤나 많다.

필자는 SWI를 이용하여 문맥전환을 하고, 이전의 상태를 보존하는 부분들에 대해 어셈블러를 이용하였다. SWI를 이용하여 SVR모드로 전환한후 권한을 OS로부터 획득하여 컴퓨터 자원을 사용하는게 곧 System Call이다. 이부분도 따로 포스팅이 올라갈 것이다.


위 사진은 Exception이 발생하였을때의 흐름도를 도식화하여 보여준 것이다.
우측에서 보면 박스 내에서는 ARM이 하드웨어적으로 처리하여 준다.
그림에서 약간 잘못나온듯한 것이 있는듯한데,
1. CPSR을 SPSR로 복사
2. CPSR내 bit 정보 수정(모드변경, irq/fiq 활성여부, 명령모드등 Setting) <- 요부분이 사진에서 잘못나온듯
3. LR 레지스터에 복쉬할 주소 저장
4. PC에 Exception Vector주소 저장하여 이동

가 맞다.

그 다음 처리 핸들러를 이동한 후, 각 값을 복원해주는 것은 프로그래머가 할일이다.
(사실 위는 상당히 심플한 예이고, 복원할때 고려해주어야 할 사항들이 존재한다)

복잡한 내용은 기본적인 ARM Processor 내용 포스팅후 이어갈 예정이다^_^; 

'무언가 만들기 위한 지식 > ARM Processor' 카테고리의 다른 글

System Call Interface  (2) 2010.03.19
ARM Processor Register Set  (0) 2010.03.19
ARM Processor의 7개 동작 Mode  (0) 2010.02.24
Boot Loader(Boot Code+CRT Start up Code)  (0) 2010.02.22
JTAG && UART  (1) 2010.02.20