[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] 익셉션이 발생하면 프로세스는 어떻게 동작할까 - ARMv8
By Guillermo Austin Kim | 2020년 11월 2일 |
이번에는 64비트 기반 ARMv8 아키텍처 기준으로 proc_func_ptr 함수의 코드를 봅시다. 01 ffffff8008106d7c <proc_func_ptr>:02 ffffff8008106d7c: d10083ff sub sp, sp, #0x2003 ffffff8008106d80: f90007e0 str x0, [sp,#8]04 ffffff8008106d84: b90017ff str wzr, [sp,#20]05 ffffff8008106d88: f94007e0 ldr x0, [sp,#8]06 ffffff8008106d8c: f9000fe0 str x0, [sp,#24]07 ffffff8008106d90: f9400fe0 ldr x0, [sp
[ARM] 익셉션이 발생하면 프로세스는 어떻게 동작할까 - ARMv7
By Guillermo Austin Kim | 2020년 11월 2일 |
많은 학생이나 SW 개발자들은 "ARM의 익셉션 벡터 테이블을 열심히 읽어도 잘 모르겠다", 혹은 "무슨 내용인지 와 닿지 않는다"라는 불만을 토로합니다. 또한 "ARM 익셉션의 개념이 어렵다"라고 말하기도 합니다. 그 이유에 대해 곰곰히 생각해 봤는데, 소프트웨어 관점으로 익셉션이 무엇인지 분석하지 않았기 때문이라는 결론에 이르게 됐습니다. 여기서 말하는 소프트웨어란 용어는 조금 애매하고 추상적인 의미를 내포하는듯 합니다. 그런데 소프트웨어란 용어를 구체적으로 표현하면 "운영체제의 프로세스"라고 말할 수 있습니다. 소프트웨어 개발자가 입력한 코드는 CPU에 가까운 어셈블리 명령어로 실행되는데, 이를 실행하는 주인공은 프로세스이기 때문입니다. 익셉션이 발생하면 프로세스는 어떻게 동작할까요? 어떤 익셉션