[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 의 동작 모드를 슈퍼바이저 모드로 변경할 준비를 합니다. 먼저 슈퍼바이저 모드에서만 사
[ARM프로세서] 익셉션이 발생할 때 전체 흐름
By Guillermo Austin Kim | 2020년 10월 18일 |
이번에는 익셉션의 전체 실행 흐름도를 보면서 익셉션의 동작 원리를 알아봅시다. 그림 7.7 익셉션이 발생할 때 전체 흐름 익셉션의 전체 실행 흐름도는 4단계로 분류할 수 있습니다. 1단계: 프로세스가 실행하는 도중에 익셉션을 유발하는 동작 실행 먼저 ①로 표시된 부분을 눈으로 따라가 봅시다. 프로세스가 실행하는 도중에 메모리 어보트를 유발하는 명령어를 실행하거나 소프트웨어 인터럽트를 유발하는 명령어를 실행합니다. 또한 외부 하드웨어에서 인터럽트를 유발합니다. 2단계: ARM 프로세서가 익셉션을 감지 ② 로 표시된 부분은 ARM 프로세서가 익셉션을 감지하는 동작입니다. 1단계에서 익셉션을 유발하는 명령어나 외부 하드웨어 인터럽트가 발생하면, ARM 프로세서가 이를 감
[ARM프로세서] XEN: 익셉션 벡터 테이블(ARMv7)
By Guillermo Austin Kim | 2020년 10월 18일 |
XEN 하이퍼바이저의 익셉션 벡터 테이블을 살펴봅시다. 익셉션 벡터 테이블의 선언부 다음은 XEN 하이퍼바이저의 익셉션 벡터 테이블의 선언부입니다. xen/xen/arch/arm/arm32/entry.S vect_br 0, trap_fiq vect_br 1, trap_irq vect_br 2, trap_guest_sync vect_br 3, trap_data_abort vect_br 4, trap_prefetch_abort vect_br 5, trap_hypervisor_call vect_br 6, trap_undefined_instruction vect_br 7, trap_reset 위 코드가 컴파일