ARM Processor 7개의 Mode


  • ARM Processor Modes of Operation


  ARM 프로세서에는 7개의 동작 모드가 있습니다. 동작 모드는 프로세서가 어떠한 권한을 가지고 어떠한 일을 처리하고 있는지 나타내는 Processor의 동작 상태를 말합니다. 각각의 7개의 모드는 따로 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 Core는 IRQ모드로 전환하고 인터럽트를 처리한다.

10010b 

SVC(Superviser)

 대부분의 시스템 자원을 자유롭게 관리할 수 있는 동작모드로 주로 커널이나 디바이스 드라이버를 처리할 때(System Call) 동작되는 모드이다.

Reset 신호 입력 시 및 SWI가 발생하면 SVC Mode로 전환된다.

10011b 

Abort

 메모리에서 명령을 읽거나 데이터를 읽거나 쓸때 오류가 발생할 때 Abort Mode로 전환하여 오류를 처리한다. 커널등의 패닉시 Abort Mode로 전환되어 스택 내용이 전달됨을 알 수 있다.

10111b 

Undefined

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

11011b 

System

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

11111b 



  위 표에 표시된 우측의 5bit 데이터는 CPSR이라는 Status Register 내에 저장된 데이터입니다. CPSR은 현재 Mode의 Status를 저장하고 있는데, 그중 우측 0~4bit인 총 5bit는 각 모드의 정보를 담고 있습니다. 32bit 중 나머지 bit는 N, Z, C, V로 컨디션 코드 및 기타 정보로 사용됩니다.

  인터럽트나 에러 또는 프로그래머에 의하여 모드가 변경될 수 있습니다. Exception에 의하여 모드가 변경되기에, 각 모드의 특징에 대해 알아야만 합니다.

 Abort, FIQ, IRQ 이외의 System, User, SVC Mode가 상호 모드 전환 간의 명확한 정의가 필요합니다.
System과 User는 같은 Stack을 사용하여 거의 Mode간의 차이가 없으나, User Mode에서는 Device등의 자원을 사용하는데 제한이 주어집니다. SVC Mode는 처음 Reset되었을 때 접근하는 Mode로 시스템 자원을 자유롭게 관리가 가능하며 별도의 Stack을 이용합니다.

User Mode는 OS상에 올라가는 Application의 수행 시,
OS는 기본적으로 System Mode이며,
OS나 Application이 시스템 자원(I/O등의 장치)을 사용할때에는 SVC Mode로 전환 후 사용됩니다.

  이때, SVC Mode로 전환되어 시스템 자원을 사용할 권한을 얻는 것을 OS에서는 System Call이라 말합니다. OS에서 Application에 필요한 메모리 공간과 OS의 실행에 따른 메모리 공간을 분리시켜 관리합니다. Application에서 접근 권한이 없는 시스템 자원에 접근하게 허용하기 위해 운영체제는 프로세서가 제공하는 Mode 전환을 System Call Function으로 정의하여 개발자에게 제공합니다.


  ARM Core의 default Mode는 SVC Mode 입니다. SVC에서 출발하여 boot up시에 ARM Core에 대한 모든 권한을 행사할 수 있어야 하기 때문입니다. U-Boot 등의 부트로더 등의서 ARM Core 부팅 및 리셋 시 SVC 모드로 Start.S 등의 어셈블리어 코드가 실행됨을 알 수 있습니다.

 

'System Programming > Arm' 카테고리의 다른 글

라즈베리파이(RPI)4 OpenOCD JTAG 연결 디버깅 방법  (0) 2023.06.18
Rockchip AP 부팅 흐름 정리  (0) 2020.03.11
ARM Processor 개요  (0) 2016.08.29

+ Recent posts