[Arm프로세서] 하이퍼바이저: hvc 명령어(하이퍼바이저 콜)
By Guillermo Austin Kim | 2022년 1월 26일 |
먼저 Arm 스팩 문서에서 HVC 명령어를 설명한 부분을 소개합니다. <출처: DDI0487G_b_armv8_arm.pdf> C6.2.94 HVCHypervisor Call causes an exception to EL2. Software executing at EL1 can use this instruction to call the hypervisor to request a service. 스팩 문서의 내용은 다음과 같이 해석할 수 있습니다. 하이퍼바이저 콜은 EL2로의 익셉션을 유발한다. EL1에서 실행되는 소프트웨어는 이 명령어(hvc)를 사용해 하이퍼바이저에게 어떤 서비스를 요청한다. EL1에서 hvc 명령어를 실행해 하이퍼바이저가 구동되는 EL2로 진입하는 동작을 하이퍼바
[Arm프로세서] AAPCS: Armv7: SP(스택 포인터) 레지스터의 세부 동작
By Guillermo Austin Kim | 2021년 6월 15일 |
SP는 스택 포인터(Stack Pointer) 레지스터라고 하며 약어로 R13으로 표기합니다. 일반적으로 여러분이 작성한 코드는 프로세스의 스택 공간에서 동작하므로, 어떤 코드가 실행하던 스택 주소의 위치를 알 수 있습니다. 스택 주소의 위치를 추적하는 레지스터가 SP 혹은 R13입니다. SP 레지스터와 프로세스의 스택과의 관계 그렇다면 SP 레지스터는 어떤 값을 저장할까요? SP(R13) 레지스터는 프로세스 스택 포인터의 주소를 저장합니다. 그러면 여기서 말하는, 프로세스의 스택 포인터 주소는 무엇일까요? 바로 프로세스에게 할당된 스택 주소의 위치를 나타냅니다. 프로세스는 처음 생성될 때 운영체제로부터 스택 공간을 할당받고, 자신에게 할당된 스택 공간 내에서 함수를 호출합니다. 달리 말하면 SP
[Arm프로세서] XEN 하이퍼바이저: 익셉션 핸들러 코드 소개
By Guillermo Austin Kim | 2022년 2월 15일 |
운영체제나 RTOS 커널의 세부 동작을 파악하려면 익셉션이 유발되면 처리되는 익셉션 벡터 핸들러를 잘 알아야 합니다. 익셉션 벡터 핸들러의 코드를 보면 Armv8 아키텍처에서 정의된 스팩에 따라 익셉션 벡터 핸들러가 구현됐다는 사실을 알 수 있습니다. XEN 하이퍼바이저의 익셉션 벡터 핸들러 코드도 예외는 아닙니다. 게스트 OS와 하이퍼바이저와 통신하는 주요 인터페이스가 XEN 하이퍼바이저의 익셉션 벡터 핸들러이니 잘 익혀둘 필요가 있습니다. 익셉션 핸들러 코드 소개 포스트에서 분석할 XEN 하이퍼바이저의 익셉션 벡터 핸들러 전체 어셈블리 코드를 소개합니다. 1 000000000026a800 <hyp_traps_vector>:2 26a800:17fffc00 b269800 <
[ARM프로세서] ARMv7: 소프트웨어 인터럽트 타입 익셉션을 유발할 때 ARM 코어의 세부 동작
By Guillermo Austin Kim | 2020년 12월 9일 |
ARM 코어가 ‘svc’ 명령어를 실행하면 소프트웨어 인터럽트를 유발합니다. 다음 그림을 보면서, 소프트웨어 인터럽트가 발생할 때 ARM 코어의 세부 동작을 알아봅시다. 그림 8.11 소프트웨어 인터럽트를 유발할 때 변경되는 레지스터 그림 8.11은 소프트웨어 인터럽트 익셉션이 실행되는 흐름을 나타내는데, 그림의 가운데 부분을 보면 ARM 코어가 하드웨어적으로 처리되는 부분이 슈도 코드로 표기돼 있습니다. 이 슈도 코드 분석을 통해 ARM 코어의 세부 동작을 알아보겠습니다. 먼저 01번째 줄을 봅시다. 01 R14_svc = 0xc000d000 + 0x4 'svc' 명령어를 ARM 코어가 디코딩을 하면 ARM 의 동작 모드를 슈퍼바이저 모드로 변경할 준비를 합니다. 먼저 슈퍼바이저 모드에서만 사