마하2007


ARM procressor - 3. ARM 프로세서 명령어와 Exception


ARM Processor - 1. 임베디드 시스템 개요

ARM Processor -2. architecture

ARM Processor -3. 명령어와 Exception

 

RISC 구조 : ARM(Advanced RISC Machine)은 RISC 구조로 되어있음.

1) Load-Store 구조 : 메모리에서 데이터를 읽고 쓰는 명령어와 CPU 내부에서 연산을 수행하는 명령어들을 분리시킴 --> 따라서 명령어들이 연산을 수행하면서 동시에 메모리를 참조하는 것이 가능.

 

2) Fixed Length 32bit 명령어 : 메모리에서 읽고 쓰는 명령어와 32bit 상수를 읽어오는 명령어를 제외하고는 대부분의 명령어가 한 명령어 당 32 bit를 점유한다. CISC의 경우와 대조.

 

3) 3-어드레스 명령어 구조 : 대부분의 명령어는 두개의 소스 주소와 한개의 목적 주소 -> 세개의 주소 보유. (예외 : 레지스터 간의 이동명령의 경우는 2 address)

 

ARM RISC의 특징.

 

1) 16비트 명령어 사용 가능: 하드웨어적으로 16비트 명령어와 데이터를 가지는 경우 thumb 모드를 이용해서..

 

2) 조건부 명령어 구조 : 32비트 arm 모드에서 모든 명령어는 조건부 처리가 가능 -> 조건부 분기 명령을 처리할 때 파이프라인이 깨지는 경우를 줄일 수 있어 성능에 유리. 제한적으로 연산 명령과 조건분기를 한 명령으로 구현할 수 있어 코드의 크기가 줄어듬.

 

3) 배럴 쉬프트 레지스터(Barrel Shift Register) 의 활용

배럴 쉬프트 레지스터를 ALU 입력단에 설치하여 일반 연산과 시프트 연산을 한 명령에서 처리 가능.

간단한 상수를 즉석에서 만들거나 간단한 곱셈이 필요하거나 혹은 시프트 동작이 연산 명령어과 같이 수행괴는 경우 하나의 명령어에서 처리 가능  -> 처리속도 면에서 유리.

 

Exception Handler

l       ARM Operation Mode

  1.      User Mode

  2.      FIQ(Fast Interrupt Request) Mode

  3.      IRQ(Interrupt Request) Mode

  4.      SVC(Supervisor) Mode

  5.      Abort Mode

  6.      Undefined Mode

  7.      System Mode

 

# ARM Register 종류

l       31개의 범용 레지스터

1.      대부분의 연산에 사용됨

2.      동작모드에 따라 사용이 제한

l       1개의 CPSR

1.      Current Processor Status

2.      프로세서가 수행하고 있는 현재의 동작 상태를 나타냄

l       5개의 SPSR

1.      Saved Processor Status

2.      이전 모드의 CPSR 복사본

3.      Exception 발생하면 ARM 하드웨어적으로 이전 모드의 CPSR값을 각각의 모드에 해당하는 SPSR 복사

4.      System Mode 제외한 모든 Privilege Mode 각각 하나씩 존재

 

* Exception : 하드웨어의 입장에서 보면 실행되는 코드의 진행에 대한 예상하지 못한 상황에 대하여 예외처리의 기준을 마련하는 것.

l       ARM Exception 종류

1.      Reset

2.      Undefined Instruciton : 정의되지 않은 명령어와 만났을 때 발생.

3.      Software Interrupt (SWI) : 프로그램에서 임의로 인터럽트를 호출하는 경우

4.      Prefetch Abort

5.      Data Abort : CPU가 메모리로부터 instruction을 호출하거나, 혹은 instruction을 동작시키면서 데이터를 가져오려고 하는 경우 해당 메모리를 억세스할 수 없다면 발생.

6.      IRQ(Interrupt Request) : 일반적으로 I/O 장치로부터 입력이 들어오면 반응. 흔히 말하는 인터럽트 exception. 내부 타이머나 시리얼, 혹은 외부 IRQ 입력

7.      FIQ(Fast Interrupt Request) : 보다 빠른 처리의 IRQ. 외부 IRQ, Battery low interrupt, Media change interrupt

 

각각의 Exception이 발생하면 프로세서는 해당 동작 모드로 전환한다.

 

그림 1. ARM state 의 레지스터 구조

 

ARM에는 37개의 32비트 레지스터가 있다.

ARM 에서는 normal한 상태(user 모드)에서는 R0~R15 레지스터를 가지며 CPSR 이라는 state 레지스터를 하나 가진다. 그러다가 해당 exception 이되면, 그림에서 banked register 라고 하는 것들이 visible하게 된다.

그림 2. SPSR (Saved Process State Register )

 

user 모드에서 SPSR을 가진다고 했는데 그 ‹š 하위 4:0  5개의 bit가 어떤 값이냐 따라 SPSR의 종류가 결정되어진다. 즉, 어떤 state에 있느냐에 따라 SPSR의 이 5개의 bit 값이 setting 된다.

위 그림을 보면 user 모드라면 10000 으로 setting 되어있다. 그런데 FIQ로 빠지게 되면 (Fast Inturrupt mode로 진입하면 이 값들은 10001로 setting 되고 SPSR_fiq가 visible 된다.

 

--> arm state 에 따라서 user mode에서는 R0~R15 와 SPSR을 가지고 있는데 Exception이 발생하면 R0~R15 와 visible 되는 register 가 있게 되고 CPSR(Current Processor Status Register) 도 그 exception에 맞는 register로 바뀐다.

벡터 테이블 : 이런 exception에 대하여 각각에 대응되게 handle code를 시작시킬 code가 있을 주소를 가지고 있는 테이블

 

소프트웨어 인터럽트

 

SWI(SoftWare Interrupt) 명령은 운영체제를 호출하는데 사용되며, 흔히 '슈퍼바이져 콜' 이라고도 한다. SWI 명령은 프로세서를 슈퍼바이져 모드로 전환하고, 0x08 번지부터 코드가 실행되는 소프트웨어 인터럽트 명령이다.

 

프로세서 동작

1) 현재 수행 중이던 프로그램의 주소인 PC(R15)를 R14_svc에 저장한다.

2) 현재 사용 중이던 상태레지스터인 CPSR을 CPSR_svc에 저장한다.

3) 슈퍼바이져 모드에 진입한 후, CPSR[4:0]에 "10011"을, CPSR[7]에 "1"을 저장해서 IRQ을 diable 한다. (FIQ는 disable되지 않는다.)

4) PC를 0x08로 세팅하고, 0x08버지부터 명령어를 실행한다.

 

반드시 0x08번지에 SWI를 처리하기 위한 루틴이 들어있어야 한다. SWI 루틴을 끝내고 다시 돌아오고 싶으면 R14 값을 PC에 옮겨주는 것 이외에도 SPSR_svc 에전에 저장된 이전의 CPSR도 현재의 CPSR로 가지고 와야한다.

 

Exception의 개념

* Exception Handling : 외부의 요청이나 오류에 의해서 정상적으로 진행되는 프로그램의 동작을 잠시 멈추고 프로세서의 동작 모드를 변환하고 미리 정해진 프로그램을 이용하여 외부의 요청이나 오류에 대한 처리를 하도록 하는것.

 


미룸클리닉 딸기 style 아이베제 토이앤기프트 그분이 생각날땐 극심한 이기주의자 기다림 아침안개 데님파티 행복가득우리집
2008/04/25 11:39 2008/04/25 11:39
top

Leave a comment..