Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

37120
1703
402252


[ARM프로세서] ARMv7: 소프트웨어 인터럽트 익셉션의 실행 흐름 Armv7: 익셉션(Exception)

[ARM프로세서] ARMv7: SW 인터럽트 익셉션의 실행 흐름

‘svc’ 명령어를 실행하면 ARM 코어는 소프트웨어적으로 익셉션을 유발합니다. ARM 코어가 'svc' 명령어를 디코딩하면 이를 익셉션의 한 종류로 감지하는데, ARM 스팩 문서에서는 이를 슈퍼바이저 콜(Supervisor Call)이라고 부릅니다. 'svc' 명령어를 실행하면, 외부 하드웨어에서 발생하는 것이 아닌, 소프트웨어적으로 인터럽트 익셉션이 유발되므로 흔히 소프트웨어 인터럽트라고도 합니다. 

또한, SW 인터럽트는 운영체제의 시스템 콜 기능과 연관이 깊은 기능입니다. 시스템 콜은 SW 인터럽트를 활용해 구현됐기 때문입니다. 다음 그림을 보면서 ‘svc’ 명령어를 실행하면 ARM 코어는 소프트웨어적으로 익셉션을 유발하는 흐름을 살펴봅시다.

 
그림 8.4 시스템 콜의 실행 흐름

그림의 가장 왼쪽 부분은 운영체제 관점의 실행 모드를 나타내는데, 유저 공간은 유저 애플리케이션, 커널 공간은 운영체제의 커널이 실행되는 공간을 의미합니다. 그림의 가운데 부분은 ARM 아키텍처 관점의 ARM 동작 모드를 나타내는데, User 모드에서 유저 애플리케이션, Supervisor 모드에서 운영체제의 커널이 실행됩니다.

그림의 오른쪽 부분은 유저 애플리케이션에서 svc라는 명령어가 실행되는 과정인데, 이를 시스템 콜이 발생했다라고 합니다. 이 때 유저(User 모드) 공간에서 커널(Supervisor 모드) 공간로 실행 공간이 바뀌게 되는데, ARM 아키텍처 관점으로 소프트웨어적으로 익셉션이 유발됩니다. 소프트웨어 인터럽트 타입 익셉션이 유발되면 해당 익셉션 핸들러는 시스템 콜 핸들러를 처리하는 동작을 수행합니다.

다음 그림을 보면서 전체 실행 흐름을 살펴봅시다.

 
그림 8.5 소프트웨어 인터럽트(슈퍼바이저 콜) 익셉션의 전체 실행 흐름 

1단계: svc 명령어 실행 

먼저 ①로 표시된 부분을 눈으로 따라가 봅시다. 유저 프로세스가 ‘svc’ 명령어를 실행하는 동작입니다. 

2단계: ARM 프로세서가 익셉션을 감지 

② 로 표시된 부분은 ARM 프로세서가 익셉션을 감지하는 동작입니다. ‘svc’ 명령어를 ARM 코어가 디코딩을 할 때 슈퍼바이저 콜 익셉션을 유발하는 것입니다. 

3단계: ARM 프로세서가 익셉션에 대한 세부 처리 

③으로 표기된 박스를 보겠습니다. 익셉션을 감지한 ARM 프로세서(ARMv7 기준)는 다음과 같은 동작을 처리합니다.

    ❑ 익셉션이 발생한 모드를 나타내는 spsr_svc 레지스터에 저장한다. 
    ❑ ARM의 동작 모드를 SVC(슈퍼바이저 모드)로 변경한다.
    ❑ 익셉션 벡터 베이스 주소를 먼저 찾은 다음에 0x08 주소를 더한 값을 프로그램 카운터로 브랜치한다. 

ARM 코어는 'svc' 명령어를 만나면 "슈퍼바이저 콜을 통해 소프트웨어 익셉션을 유발해야 겠다"라고 판단하며, 위와 같은 순서로 레지스터를 설정합니다. 이전에 설명한 익셉션과 마찬가지로, 3단계까지의 동작은 "하드웨어적으로" ARM 프로세서가 처리합니다. 

4단계: 익셉션 핸들러 실행  

3단계에서 소프트웨어 익셉션을 유발하면 익셉션 벡터 베이스 주소 기준으로 0x08 주소 오프셋을 적용해 프로그램 카운터를 브랜치합니다. 즉, 익셉션 벡터 주소로 프로그램 카운터를 넣어주게 되는데, 익셉션 벡터 베이스 주소 기준으로 0x08 주소 오프셋에 위치한 명령어가 실행됩니다. 이 부분이 소프트웨어적으로 익셉션 핸들러 코드가 실행되는 부분인데, ④으로 표기된 박스에 해당됩니다.

슈퍼바이저 콜 익셉션 핸들러는 다음과 같은 동작을 수행합니다.

    ❑ 시스템 콜 테이블에 접근
    ❑ 시스템 콜 핸들러를 호출

여기까지 익셉션의 유형별로 전체 실행 흐름을 살펴봤습니다. 

Written by <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자






덧글

댓글 입력 영역