고급 개발자로 가는 길

Embedded/Arm 아키텍처

[Arm 아키텍처] ARM 레지스터 : 스페셜 레지스터

다크엔지니어 2022. 2. 19. 15:41
반응형

아래는 ARMv8 A 기준 스펙 문서이다.

https://developer.arm.com/documentation/ddi0487/latest

 

Documentation – Arm Developer

 

developer.arm.com

 

ARM Register

아래 표는 ARM 아키텍처에서 사용되는 Register 이다.

실제 예전에 히언님의 쓰신 Embedded Recipe 를 보며 도움이 많이 되었던 내용이기도 하다.

아래 내용을 모르면 ARM 에 모른다고 봐도 무방할 정도이다.

System and User FIQ Supervisor Avort IRQ 등 각 모드별로 사용 되는 Register 들이 조금씩

다르다. 공통으로 사용되는 Register 가 있는 반면, 그 목적에 맞게 다르게 사용되는

Register 도 있다.

 

스페셜 레지스터

이 중 Special Register 라고 하여 주요 깊게 볼 register 들이 있다.

  • 가장 중요한 특징으로 원활한 컨텍스트 스위칭을 위해 설계됨
  • 익셉션 레벨 별로 접근됨

 

 

Stack Pointer Register

  • t thread : 모든 Exception Level 에서 SP_EL0 만을 사용
  • h handler : 각 Exception Level 에서 SP_ELx 를 사용

 

Stack Pointer Select Register (SPSel)

  • 0 : 모든 Exception Level 에서 SP_EL0 사용
    1 : 모든 Exception Level 에서 각자의 SP_ELx 를 사용
  • Reset Default 는 1값

 

Program Counter

컴퓨터와 구조 OS 시간에 많이들 들어봤을 것이다. 현재 실행중인 상태 저장을 위한 Register 이다.

  • ARMv7 에서는 PC 가 일반 레지스터
  • ARMv8 에서는 PC 또한 스페셜 레지스터로 간주
  • 즉, PC 에 직접 접근이 불가

 

Exception Link Register ELR_ELx

  • Exception Return Address 를 저장

 

SPSR Register(Saved Program Status Register)

  • 익셉션이 유발될 시점의 PState 값을 백업 (PSTATE 는 프로세스의 상태를 의미)
  • 익셉션 레벨별로 존재
  • 익셉션을 처리한 다음에 복귀할때 재설정

아래와 같이 모드 별로 존재한다.

 

SPSR 을 자세히 보면 아래의 구조로 되어있다. 간단히 아래 의 역활을 하며, 자세한 내용은 스펙문서를 참고하면 된다.

 

 

익셉션이 일어날때 처리 과정은 아래 그림과 같다.

보통 eret 명령어가 실행되면, SPSR 레지스터의 값이 PSTATE 로 변경된다.

리눅스 커널또한 ARM 아키텍처 기반의 오픈소스 이며,

대부분 펌웨어 임베디드 레벨에서 사용 중이라고 보면 된다.

반응형

'Embedded > Arm 아키텍처' 카테고리의 다른 글

[Arm 아키텍처] AAPCS(Calling Convention)  (0) 2022.02.19