Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

41107
469
422673


[ARM프로세서] 익셉션(Exception)을 효율적으로 배우는 방법 Arm: Exception Overview

많은 개발자분들이 익셉션이 어렵다고 합니다. 
익셉션을 배우기 어려운 이유는 무엇일까요? 다들 ARM 아키텍처의 익셉션이 어렵기 때문이라고 생각합니다. 익셉션이 어렵기 보다는 익셉션을 효율적으로 공부하지 않기 때문이라고 봅니다.

누차 강조하지만 익셉션은 매우 중요한 기능이라 운영체제를 전반적으로 관리하는 시스템 개발자는 반드시 배워야 하는 필수 지식입니다. 하지만 입문자 입장에서 익셉션은 배우기 어렵습니다. 제가 여러 시행 착오를 통해 깨달은 익셉션을 공부하는 문제점에 대해 말씀드리고 익셉션을 효율적으로 배우는 방법을 소개합니다.

익셉션을 배우기 위해 필요한 기반 지식을 같이 배운다 

익셉션을 배울 때 익셉션 벡터 테이블을 분석하는 경우가 많습니다. 이 익셉션 벡터 테이블의 내용을 읽으면 잘 이해가 가나요? 아마 바로 이해하기는 어려울 겁니다. 특히 ARMv8 의 익셉션 벡터는 더 이해하기 어렵습니다. 그 이유는 무엇일까요? 바로 익셉션 벡터 테이블을 이해하려면 기반 지식을 미리 알고 있어야 하기 때문입니다. ARMv7의 경우 ARM의 동작 모드를 미리 알아야 합니다. 특히 ARMv8의 익셉션 벡터 테이블은 익셉션을 유발하는 익셉션 레벨 기준으로 정의돼 있으니 익셉션 레벨의 개념을 이미 이해하고 있어야 합니다.

익셉션 벡터 테이블의 기본 원리를 먼저 배운다 

많은 개발자들이 ARMv7의 익셉션은 그리 어렵지 않게 이해하는데, ARMv8 익셉션 테이블을 도무지 제대로 이해하기 어렵다고 불만을 토로합니다.

그 이유는 무엇일까요?  익셉션 벡터 테이블 하나가 많은 기반 지식을 내포하기 때문입니다. ARMv8 익셉션 벡터 테이블은 EL1~EL3 까지 공통으로 적용될만한 내용을 한 테이블로 모두 설명합니다. 수 많은 개념을 한 테이블로 정리해 표현합니다.

그런데 처음 익셉션의 원리를 배울 때는 EL1 기준으로 동작하는 익셉션 벡터 테이블의 동작 원리를 파악하는 것으로도 충분합니다. 먼저 이 기준으로 익셉션 벡터 테이블을 제대로 파악해 개념을 정립하는게 중요합니다. 그 다음에 필요하다면, EL2와 EL3의 익셉션 벡터 테이블을 배우면 되는 것입니다.

운영체제 커널에 구현된 익셉션의 코드를 같이 분석한다 

ARM 프로세서에서 익셉션이 발생하면 다음과 같이 처리한다고 배웠습니다.

   ❑ 익셉션의 종류에 따라 지정된 주소로 프로그램 카운터를 변경한다.

익셉션의 동작을 아주 간단히 설명하면 이게 전부입니다. 그런데 소프트웨어 개발자 입장에서는 이 내용만 읽고는 이게 무슨 말인지 이해하기 어렵습니다.

이런 의문이 생기는 이유는 ARM 스팩 문서에서 설명하는 익셉션은 소프트웨어적으로 처리되는 익셉션의 전체 흐름 중의 일부분만을 알려주기 때문입니다. 소프트웨어 개발자들은 익셉션의 동작 방식을 피상적으로만 머릿 속에 기억할 수 밖에 없습니다.

소프트웨어 관점으로 익셉션을 배우면 다음과 같은 의문이 생깁니다.

   ❑ 실제 익셉션 벡터와 익셉션 벡터 핸들러는 어떻게 구현됐을까?
   ❑ 소프트웨어 입장에서 실제 언제 어디서 익셉션이 발생할까?
   ❑ 익셉션이 발생하면 소프트웨어 개발자는 어떤 코드를 입력하거나 분석해야 할까?

위와 같은 의문을 해소하고자 소프트웨어(운영체제) 관점으로 익셉션이 발생할 때 전체적인 실행 흐름을 7.3절에서 설명합니다.

실습을 하면서 익셉션을 배운다 

익셉션을 배우는 지름길은 실습을 해보는 것입니다. 실전 프로젝트에서 익셉션이 발생할 때 하드웨어 디버깅 프로그램으로 익셉션 벡터에 브레이크 포인트를 걸고 콜 스택과 익셉션이 발생한 후의 레지스터를 파악해 보는 것이 중요하죠. 안타까운 현실은 이런 환경으로 개발 환경을 구축하려면 비용이 들고 실습 환경을 구축하기도 어렵다는 사실입니다.

그래서 제가 익셉션을 실습하는 동영상을 유튜브로 제작했습니다. 이 동영상을 보면 익셉션을 이해하는데 큰 도움이 될 것입니다.

---
"이 포스팅이 유익하다고 생각되시면 공감 혹은 댓글로 응원해주시면 감사하겠습니다. 
"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!"

​Thanks,
Guillermo Austin Kim(austindh.kim@gmail.com)
---



Reference: ARM 프로세서 익셉션 소개

익셉션이란? 
익셉션의 주요 개념  
    ❑ 익셉션의 타입 소개
익셉션과 같이 배워야 하는 운영체제 지식

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





핑백

덧글

댓글 입력 영역