[리눅스커널][ARM64] 시스템 콜: 시스템 콜 벡터(el0_sync) 처리 과정

Guillermo Austin Kim|2020년 7월 2일
Posts

[리눅스커널][ARM64] 시스템 콜: 시스템 콜 벡터(el0_sync) 처리 과정

Guillermo Austin Kim|2020년 7월 2일

'디버깅을 통해 배우는 리눅스 커널의 구조와 원리'란 책에서 시스템 콜이 처리되는 과정을,ARM32 기반 시스템 기준으로 설명합니다. 여러 리눅스 개발자분들이 ARM32 대신 ARM64 기반에서 개발하시는 분들이 있어 이번 포스팅에서는 ARM64 아키텍처에서 시스템 콜이 발생하면 리눅스 커널에서 이를 처리되는 과정을 분석합니다. ARM32 기반 리눅스 시스템에서는 유저 공간에서 커널 공간으로 모드를 스위칭하기 위해 슈퍼파이저 콜을 수행합니다.이 때 'svc'명령어를 수행하는데요. ARM64 아키텍처에서도 마찬가지로 같은 명령어를 실행합니다. ARM64 아키텍처 기준으로 EL0(유저 모드)에서 EL1(커널 모드)로 스위칭을 시작하는 분기점입니다. 그러면 커널 공간에서는 어떤 코드가 실행될까요?