반응형

 

프로세서 모드와 레지스터

ARM 프로세서는 6개의 Privilege(프리빌리지, 특권) 모드 (System, FIQ, IRQ, Supervisor, Abort, Undefined)와 1개의 일반 모드(User)를 가지고 있다. 프로세서 모드는 현재 프로세서가 어떤 권한을 가지고 동작하는지를 나타내며, 모드에 따라 활성화 되는 레지스터와 레지스터에 접근할 수 있는 권한이 달라진다. ARM 프로세서의 모드는 구체적으로 다음과 같다.

  • User 모드 : 일반 유저 애플리케이션을 수행할 때의 프로세서 동작모드
  • System 모드 : User 모드와 동일한 레지스터를 사용하지만 CPSR (Current Program Status Register)을 완전히 읽고 쓸 수 있는 특수한 모드
  • FIQ(Fast Interrupt Request) 모드 : 빠른 인터럽트 처리를 위한 프로세서 동작 모드
  • IRQ(Interrupt Request) 모드 : 일반적으로 사용되는 인터럽트를 처리하기 위한 프로세서 동작모드
  • SVC(Supervisor) 모드 : 일반적으로 운영체제 커널이 동작하는 모드로 리셋이나 소프트웨어 인터럽트(SWI)가 발생하는 경우의 프로세서 동작모드
  • Abort 모드 : 메모리 접근이 실패한 경우의 프로세서 동작 모드
  • Undefined 모드 : 프로세서가 정의되지 않는 명령을 수행하려고 할 때 수행되는 프로세서 동작 모드

 ARM 프로세서는 정의된 명령어를 사용하여 시스템의 상태를 변화시킨다. 프로세서는 명령어 실행에 사용되는 데이터를 레지스터에 저장하고 레지스터를 기반으로 연산을 수행한다. 특정 모드에서는 전체의 37개의 레지스터 중 한 번에 18개까지 활성화될 수 있으며, 16개의 데이터 레지스터와 2개의 프로그램 상태 레지스터로 구성된다. 데이터 레지스터는 r0에서 r15까지로 표시되는 레지스터로서 레지스터 r13, r14, r15는 다음과 같은 특수한 기능을 수행하기 위해 할당되어 있다.

 

  • 레지스터 r13: 스택 포인터(sp)로 사용되며, 현재 프로세서 모드의 스택 맨 위 주소값을 저장한다.
  • 레지스터 r14: 링크 레지스터(lr)로 사용되며, 서브루틴을 호출할 대의 복귀 주소를 저장한다.
  • 레지스터 r15: 프로그램 카운터(pc)로 프로세서가 읽어들인 명령어의 그 다음 명령어 주소를 저장한다.

 16개의 범용 32비트 레지스터(r0~r15) 외에 2개의 프로그램 상태 레지스터인 Current Program Status Register (CPSR)와 Save Program Status Register (SPSR)를 가지고 있다. 범용 레지스터와 CPSR, SPSR은 아래의 그림과 같이 프로세서 모드에 따라 사용할 수 있는 레지스터가 구분된다. 모드에 따라 숨겨져 있는 레지스터가 각각 활성화되는데, 이를 뱅크 레지스터(banked register)라고 한다.

 

 요약하면, 

 - 2개의 레지스터, CPSR, SPSR 레지스터

 - 16개의 범용 32비트 레지스터, r0~r15

를 가지고 있다. 그리고 banked register를 가지고 있다.

 

Figure 1. ARM 프로세서 모드별 레지스터

반응형