ARM 프로세서에는 특이하게 7개의 모드가 존재한다.
동작모드는 프로세서가 어떤 권한을 가지고 무슨 일을 처리하는지 나타내는 프로세서의 동작상태를 일컷는다.
이 7개의 Mode서, 각 모드가 따로 SP(Stack Point)를 갖고 있는다. 
(User와 System은 갖은 Stack 사용, 즉 6개의 Stack이 사용된다.)

 

Mode

Description

CPSR M[4:0]

User

User Task나 Application을 수행할때의 동작모드로 모든 동작모드중유일하게 비특권 모드이다. User Mode는 메모리, I/O장치와 같은 시스템 자원을 사용하는데 제한을 두어 사용자의 실수를 방지한다. 다른 모드(SVC)로 이동하기 위한 방법으로는 소프트웨어 인터럽트를 발생시킨다.

10000b

FIQ

(Fast IRQ)

2개의 인터럽트 소스중 아주 빠르게 인터럽트를 처리할 수 있도록 구성된 모드. 빠른 처리를 위해서 Exception Vector에서도 최하단에 존재하고 별도의 레지스터를 소유한다.

10001b

IRQ

(Interrupt Request)

일반적으로 사용되는 인터럽트로 외부 장치에서 요청되는 하드웨어적인 IRQ의 발생에 의해 ARM 코어는 IRQ모드로 전환하고 인터럽트를 처리한다.

10010b

SVC

(Superviser)

대부분의 시스템 자원을 자유롭게 관리할 수 있는 동작모드로 주로 커널이나 디바이스 드라이버를 처리할 때(System Call) 동작되는 모드이다.
Reset신호가 입력되거나 SWI가 발생하면 SVC모드로 전환된다.

10011b

Abort

메모리에서 명령을 읽거나 데이터를 읽거나 쓸 때 오류가 발생할 때 Abort Mode로 전환하여 오류를 처리한다.

10111b

Undefined

명령어를 읽어 실행하고자 하나 읽어온 명령이 디코더에 정의되어 있지 않은 명령인 경우 발생되는 오류를 처리하는 모드이다.

11011b

System

User 모드와 동일한 Register를 사용하고 동일한 용도로 사용된다. User 모드와의 차이점은 특권을 갖고 있다는 것이다. 
(ex : OS Kernel)

11111b

 

위 표에서 우측의 5bit짜리 정보는 CPSR이라는 상태 Register내에 저장된 정보이다. CPSR은 현재 모드의 상태를 저장하고 있는데, 그중 우측 0~4bit 총 5bit는 각 모드의 정보를 담고 있다. 32bit중 나머지 bit는 N,Z,C,V로 컨디션 코드 및 기타 정보로 사용된다. (Register 부분에서 언급예정)

인터럽트나 에러 또는 프로그래머에 의하여 모드가 변경될 수 있다.
다음에는 Exception에 대해 알아 볼 것인데 Exception에 의해서 모드가 변경되기 때문에 각 모드의 특징에 대해 알고 있어야 한다.

System/User/SVC Mode가 은근히 헷갈리고 명확히 정의내리기 애매했었다.
System과 User는 같은 Stack을 이용하여 거의 비슷하나, User Mode에서는 Device등의 자원을 사용하는데 제한이 주어진다. SVC Mode는 처음 Reset되었을 때 접근하는 Mode로 시스템 자원을 자유롭게 관리가 가능하며 별도의 Stack을 이용한다.
User Mode는 OS상에 올라가는 Application으로 생각하고,
OS는 기본적으로 System Mode,
OS나 Application이 시스템 자원(I/O등)을 사용할때는 SVC모드로 바뀐후 사용한다고 보면 된다.

이때, SVC모드로 바뀌어서 시스템 자원을 사용할 권한을 획득하는 것을 System Call이라고 지칭한다. (추후 자세히)


※ 이러한 모드가 눈에 보이는 것이 아니라, 개념적이고 추상적인 부분이라 정의를 명확히 해야한다. 현재 모드를 확인하려면 CPSR의 5bit를 출력해 봐야 비로소 눈으로 확인이 가능하다 -.,-; (가끔 헷갈려서 필자도 몇번 레지스터를 출력해보았다^_^)


출 처 : http://shinluckyarchive.tistory.com/270


+ Recent posts