[Arm프로세서] GIC 버전과 주요 기능
By Guillermo Austin Kim | 2022년 8월 21일 |
Armv7, Armv8와 같은 아키텍처 버전이 있듯이 GIC에도 버전이 있습니다. GIC 버전은 GICv1 ~ GICv4인데 GIC 버전마다 지원하는 기능이 달라 GIC 버전 별로 사용되는 Arm 프로세서가 어느 정도 정해져 있습니다. 다음 표에서 GIC 버전 별로 사용되는 프로세서 목록을 확인할 수 있습니다. 표 16.1 GIC 버전 별 특징 사실 어느 Arm 프로세서에서 어떤 GIC 버전을 선택할지는 개발자의 선택에 달려 있지만, 표 16.1와 같은 조합으로 사용됩니다. 1세대 GIC 버전인 GICv1은 Cortex-A5, Cortex-A9 프로세서에서 주로 사용됩니다. GICv2는 Cortex-A7, Cortex-A15, Cortex-A17 프로세서에 적용됩니다. 주로 32비트 Arm
[Arm프로세서] 하이퍼바이저: wfe/wfi 명령어
By Guillermo Austin Kim | 2022년 1월 28일 |
많은 개발자들은 hvc 명령어를 통해서만 EL1에서 EL2로 진입할 수 있다고 알고 있습니다. 사실 그렇지는 않습니다. 게스트 OS에서 하이퍼바이저로 진입하는 다른 방법은 wfe와 wfi 명령어를 실행하는 것입니다. 원래 wfe와 wfi 명령어는 Arm 코어가 저전력 모드(low-power mode)으로 실행될 수 있게 동작합니다. HCR_EL2 레지스터의 TWE 혹은 TWI 비트를 1로 설정하면 EL2 트랩이 유발되어, EL2로 진입합니다. 시스템에 하나의 운영체제가 존재하는 환경에서는 wfe, wfi 명령어는 저전력 모드용으로 실행되나, 하이퍼바이저와 같이 시스템에 2개 이상의 운영체제가 실행되는 환경에서, HCR_EL2 레지스터의 TWE 혹은 TWI 비트를 1로 설정하면 hvc 명령어처럼 EL2로
[Arm프로세서] AAPCS: Armv8: 스택과 관련된 명령어 - stp
By Guillermo Austin Kim | 2021년 7월 26일 |
SP 레지스터가 변경될 때 실행되는 명령어는 stp와 ltp입니다. 먼저 명령어의 정의를 소개하고, 예제 코드를 분석하면서 명령어의 동작 원리에 대해 알아봅시다. Armv7 아키텍처에서 SP 레지스터가 변경되면서 프로세스의 스택 공간에 레지스터를 푸시하는 명령어는 'push'입니다. Armv8 아키텍처에서는 push 대신에 stp 명령어를 사용해 push 명령어와 같은 동작을 수행합니다. Arm 스팩 문서에서 stp 명령어 알아보기 먼저 Arm 스팩 문서를 보면서 stp 명령어에 대해 알아봅시다. C6.2.273 STP Store Pair of Registers calculates an address from a base register value and an immediate offset, and
[Arm프로세서] 트러스트존(TrustZone): 시큐어 상태(Secure State)와 SCR_EL3 레지스터란
By Guillermo Austin Kim | 2022년 1월 4일 |
이전 포스트에서 소개했듯이 트러스트존 아키텍처 관점으로 보면 시큐어 상태와 논 시큐어 상태가 존재합니다. 일반적으로 우리가 알고 있는 유저 애플리케이션이나 운영체제 커널은 논 시큐어 상태에서 동작한다고 볼 수 있습니다. 그렇다면 각 익셉션 레벨 별로 현재 시큐어 상태인지 아닌지는 어떻게 알 수 있을까요? 바로 SCR_ELx 레지스터의 값을 통해 알 수 있습니다. [정보]SCR_ELx에서 보이는 ELx는 익셉션 레벨을 뜻하면 EL0--EL3까지를 뜻합니다. SCR_ELx 레지스터는 EL3에서만 변경하거나 접근할 수 있습니다. 다음은 EL3에서만 접근할 수 있는 SCR_EL3 레지스터의 다이어그램입니다. 그림 11.7 SCR_EL3 레지스터의 Bit Assignment SCR 레지스터의 맵을 보면