Armv8 아키텍처는 범용 레지스터 뿐만 아니라 시스템의 세부 속성을 설정할 수 있는 시스템 레지스터를 정의합니다. 이 중에 자주 사용되는 시스템 레지스터는 잘 익혀둘 필요가 있는데요. 이어서 Arm 스팩 문서를 보면서 시스템 레지스터에 대해 알아봅시다.
4.3 System registers
In AArch64, system configuration is controlled through system registers, and accessed using MSR and MRS instructions. This contrasts with ARMv7-A, where such registers were typically accessed through coprocessor 15 (CP15) operations. The name of a register tells you the lowest Exception level that it can be accessed from.
Arm 스팩 문서의 내용을 요약하면 다음과 같습니다.
* Armv8 아키텍처에서 시스템의 세부 속성을 설정하려면 시스템 레지스터를 사용해야 한다.
* 시스템 레지스터에 MSR와 MRS 명령어를 사용해 접근(읽기/쓰기)할 수 있다.
* 시스템 레지스터의 이름으로 시스템 레지스터에 접근할 수 있는 가장 낮은 익셉션 레벨을 알 수 있다.
시스템 레지스터는 Armv8 아키텍처를 이루는 다양한 기능을 설정하기 위해 사용됩니다. 그렇다면 시스템 레지스터를 읽거나 쓰려면 어느 명령어를 실행해야 할까요? 다음 예시 명령어를 보면서 더 자세히 알아봅시다.
01 MRS x0, TTBR0_EL1 // TTBR0_EL1을 x0 레지스터에 읽기
02 MSR TTBR0_EL1, x0 // x0 레지스터의 값을 TTBR0_EL1에 이동
01번째 줄은 TTBR0_EL1 시스템 레지스터를 x0 레지스터로 읽는 명령어입니다. 'MRS' 명령어는 시스템 레지스터의 값을 범용 레지스터에 로딩하는 기능입니다.
02번째 줄은 반대 기능입니다. x0 레지스터의 값을 TTBR0_EL1 시스템 레지스터에 쓰는 코드입니다. 'MSR' 명령어는 x0와 같이 범용 레지스터의 값을 시스템 레지스터에 쓰는 기능입니다.
---
[정보]
MSR 명령어는 'Move to system coprocessor register from ARM register'의 약자로 범용 레지터의 값을 시스템 코프로세서로 이동시키는 명령어입니다. 이어서 MRS 명령어는 'Move to ARM register from system coprocessor register'의 약자로 시스템 코프로세서의 값을 범용 레지스터로 이동하는 명령어입니다.
---
시스템 레지스터의 이름을 보면 익셉션 레벨을 나타내는 접미사가 보입니다. TTBR0_EL1는 TTBR0 다음에 EL1란 접미사가 붙습니다. 시스템 레지스터의 이름으로 알 수 있는 규칙은 다음과 같습니다.
"시스템 레지스터에 접근할 수 있는 최소한의 익셉션 레벨"
예를 들어 TTBR0_EL1 레지스터의 경우 접미사로 EL1이 보입니다. 눈치빠른 독자는 TTBR0_EL1에 접근할 수 있는 최소한의 익셉션 레벨은 EL1이라고 예측하겠죠. 그렇다면 TTBR0_EL1에는 EL1만 접근할 수 있을까요? 그렇지 않습니다. 최소한의 익셉션 레벨이 EL1이므로 EL2, EL3에서도 TTBR0_EL1에 접근할 수 있습니다.
그렇다면 EL0에서 TTBR0_EL1에 접근할 수 있을까요? TTBR0_EL1을 실행할 수 있는 최소 익셉션 레벨이 EL1이므로, EL0은 이 조건을 만족하지 않습니다. EL0에서 TTBR0_EL1에 접근하면 익셉션을 유발해 프로세스를 종료시킵니다.
[중요]
레지스터에 접근이 가능하다는 말은 레지스터의 값을 읽거나 쓸 수 있다는 의미입니다.
이번에는 TTBR0_EL2를 예로 들어 볼까요? 접미사로 EL2가 있으니 TTBR0_EL2에 접근할 수 있는 최소한의 익셉션 레벨은 EL2입니다. 역시 TTBR0_EL2에는 EL2와 EL3에서 접근할 수 있습니다.
EL1에서는 TTBR0_EL2에 접근할 수 있을까요? TTBR0_EL2을 실행할 수 있는 최소 익셉션 레벨이 EL2이라서, EL1에서 TTBR0_EL2에 접근할 수 없습니다. EL1에서 TTBR0_EL2에 접근하면 익셉션이 유발됩니다.
시스템 레지스터에 접근할 수 있는 익셉션 레벨을 알아봤으니, 자주 사용되는 시스템 레지스터를 소개합니다.
다음 표에서 Armv8 아키텍처에서 정의된 주요 시스템 레지스터의 목록을 확인할 수 있습니다.
표 2.7 시스템 레지스터 목록
표 2.7은 실전 개발에서 많이 활용되는 시스템 레지스터 목록입니다. 더 자세한 레지스터의 목록은 부록 3을 참고하세요.
< '시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리' 저자>
* 강의 영상
.
'시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 > 3장: 레지스터' 카테고리의 다른 글
[Arm프로세서] Armv8: 시스템 레지스터에 접근할 수 있는 명령어 (0) | 2023.06.10 |
---|---|
[Arm프로세서] Armv8: SPSR_ELx - SPSR(Saved Program Status Register) 레지스터란 (0) | 2023.06.10 |
[Arm프로세서] Armv8: 스페셜 레지스터 (0) | 2023.06.10 |
[Arm프로세서] Armv8: 범용(General Purpose) 레지스터란 (0) | 2023.06.10 |
[Arm프로세서] Armv7: SPSR(Saved Program Status Register) 레지스터란 (0) | 2023.06.10 |