Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

11105
637
415734


[Arm프로세서] Armv8: 익셉션 레벨은 어떻게 진입할까? Armv8: Exception Level(EL)

다음 표를 보면 익셉션 레벨로 진입하는 방법을 확인할 수 있습니다. 


표 4.3 Armv8 아키텍처에서 익셉션 레벨로 진입하는 방법

먼저 유저 애플리케이션이 실행되는 EL0에서 진입되는 익셉션 레벨을 알아봅시다.

EL0에서 진입되는 익셉션 레벨

EL0에서 EL1으로 진입하는 방법은 크게 3가지입니다.

첫 번째로는 소프트웨어적으로 EL1에 진입하는 방법이 있습니다. EL0에서 'svc' 명령어를 실행하면 EL0 Synchronous 익셉션이 유발되면서 EL1으로 진입합니다. 이를 운영체제에서는 시스템 콜이라고 합니다. EL0은 Unprivileged Level로 시스템에 존재하는 메모리 공간에 접근하는데 제약이 있습니다. 시스템 콜을 통해 메모리 공간에 접근할 수 있는 EL1로 스위칭해 운영체제의 커널을 통해 메모리에 접근합니다. 

두 번째로는 메모리 어보트를 유발하는 명령어를 EL0에서 실행하면, EL0 Synchronous 익셉션이 유발되면서 EL1으로 진입합니다. 대부분의 경우 EL0에서 유저 프로세스가 실행되는데, 유저 애플리케이션에서 메모리 어보트를 유발하는 명령어가 실행되면 EL1에 진입한 다음, 운영체제 커널에서는 해당 프로세스를 종료하는 동작을 수행합니다. 다른 관점으로 보면 EL1로 진입하는 두 번째 방식은 소프트웨어적으로 논리적인 오류가 있는 어셈블리 명령어를 실행하면 접근합니다.

세 번째로는, EL0에서 'IRQ Interrupt' 익셉션이 유발되면 EL1으로 진입합니다. EL0에서 유저 애플리케이션이 실행되다가 인터럽트가 발생하면 EL1으로 진입하는 것입니다. 

EL1에서 진입되는 익셉션 레벨

이어서 EL1에서 EL2로 진입하는 방법을 소개합니다. EL1에서 'hvc'라는 하이퍼바이저 콜 어셈블리 명령어를 실행하면 EL1에서 EL2로 진입합니다. EL1에서는 운영체제 커널이 구동되는데, 여러 게스트 OS를 관리하는 하이퍼바이저에게 어떤 서비스를 요청할 때 EL2으로 진입합니다.

이어서 EL1에서 시큐어 모니터 콜을 유발하는 'smc' 명령어를 실행하면 EL3로 진입해 Secure 모니터 모드로 진입합니다. Secure Monitor 모드는 Non-secure 상태에서 Secure 상태로 이동할 때 게이트키퍼(문지기)와 같은 역할을 수행합니다. 일반적으로 Non-secure 상태의 EL1에서 실행된 레지스터 세트를 EL3의 스택에 저장하고, 시큐어 상태의 EL1으로 진입하는 역할을 수행합니다. 

이번 절에서는 Armv8 아키텍처의 익셉션 레벨을 살펴봤습니다. Armv8 아키텍처를 이루는 대부분의 기능은 익셉션 레벨 기반에서 위에서 동작하므로 익셉션 레벨은 잘 익혀둘 필요가 있습니다. 

#Reference Armv8: 익셉션 레벨(ELx)


Written by <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자
* 2021년 대한민국 학술원 선정 우수도서



---






핑백

덧글

댓글 입력 영역