Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

11105
637
415734


[Arm프로세서] Armv8 익셉션 레벨: 슈퍼바이저 콜(시스템 콜 발생) Armv8: Exception Level(EL)

EL0에서 EL1으로 진입하기 위해서는 svc 명령어를 실행해 슈퍼바이저 콜을 실행하는데, 이와 같은 방식을 활용해 운영체제에서는 시스템 콜을 구현합니다. 이는 Armv7 아키텍처에서 User 모드에서 svc 명령어를 실행해 슈퍼바이저 모드로 변경하는 방식과 동일합니다.

다음 그림은 svc 명령어를 실행해 EL0에서 EL1으로 진입하는 동작을 나타냅니다.

 

그림 4.6 svc 명령어를 실행해 EL0에서 EL1으로 진입하는 동작

위 그림은 하나의 시스템에 한 개의 운영체제가 실행되는 상황입니다. svc 명령어를 실행하면 Arm 코어 내부에서 다음과 같은 동작을 수행합니다.

   * EL0에서 EL1으로 익셉션 레벨이 변경
   * EL0 Synchronous 익셉션 벡터 주소(VBAR + 0x400)으로 프로그램 카운터 브랜치

EL0에서 EL1으로 익셉션 레벨이 바뀌면서 EL1에 존재하는 익셉션 벡터 주소로 프로그램 카운터가 브랜치됩니다.

이번에는 멀티 운영체제가 실행되는 가상화(하이퍼바이저) 환경에서 svc 명령어가 어떻게 실행되는지 알아봅시다.

 

그림 4.7 가상화 환경에서 svc 명령어를 실행할 때의 흐름

위 그림에서 가상화와 트러스트 존 기능을 활성화한 시스템의 구조를 볼 수 있습니다.

그림의 왼쪽 윗 부분에서 ①로 표시된 부분을 봅시다. 이는 EL0에서 svc 명령어를 실행해 EL1로 진입하는 동작을 나타냅니다. 이 동작은 Guest OS1과 Guest OS2에서 동시다발적으로 실행됩니다.

그런데 위 그림을 Security Extentio(보안 확장 기능)관점으로 분석하면, 왼쪽 부분은 논 시큐어 상태 그리고 오른쪽 부분은 시큐어 상태로 볼 수 있습니다. ①로 표시된 부분은 보안 수준이 높지 않은 논 시큐어 상태에서 svc 명령어를 사용해 시스템 콜이 동작하는 과정입니다.

이어서 그림의 가장 오른쪽 부분을 보면 ④로 표시된 부분이 있습니다. 이는 시큐어 상태에서 실행되는 유저 애플리케이션(EL0)에서 svc 명령어를 실행해 EL1로 진입하는 동작을 나타냅니다.

[정보]
그림의 오른쪽 윗 부분은 보완 수준을 높혀서 실행되는 애플리케이션과 커널을 의미합니다. 보통 트러스트존에서 실행되는 애플리케이션은 Trusted Application 그리고 커널은 Truest Kernel라고 하고, 이를 합쳐서 Secure-OS라고도 명시합니다.


이처럼 운영체제는 슈퍼바이저 콜을 실행하는 svc 명령어를 실행해 시스템 콜을 구현합니다.


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


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



---


핑백

덧글

댓글 입력 영역