상세 컨텐츠

본문 제목

익셉션(Exception)

CS지식 학습

by Tabris4547 2024. 3. 15. 15:24

본문

728x90

익셉션이란?

sw개발을 하시는 분들이라면 '예외처리'라는 말을 많이 들어보셨을 겁니다.

어떤 코드가 실행이 될 때 발생하는 예외를 어떻게 처리해야하는지,

흔히 try-catch문으로 잡는다 이런 이야기도 많이 들어보셨을 겁니다.

CPU아키텍처 관점에서 Exception도 이와 같습니다.

CPU core가 기계어를 해석할 수 없다거나

CPU core가 접근할 수 없는 메모리주소에 접근한다고 한다거나

메모리주소에서 기계어를 불러오지 못한다거나

등등의 정상동작을 못하는 '예외'가 발생할 때에

CPU가 처리하는 동작을 Exception이라고 부릅니다.

각각의 예외에 맞게 익셉션 종류별로 지정된 주소로

프로그램 카운터가 바뀌어 해당 동작을 수행합니다.

https://developer.arm.com/documentation/ddi0406/c/System-Level-Architecture/The-System-Level-Programmers--Model/Exception-handling?lang=en

 

Documentation – Arm Developer

 

developer.arm.com

 

 

Arm 공식 문서상의 익셉션 handling에 대한 부분을 발췌했습니다.

해석하면 '익셉션은 프로세서가 외부에서 발생한 인터럽트 및 정의되지 않는 명령어를 실행하려는 시도'와 같은

이벤트를 처리하기 위해 프로세스의 실행을 멈춘다.

익셉션은 내부 외부 소스로 발생할 수 있다'

https://developer.arm.com/documentation/ddi0406/c/System-Level-Architecture/The-System-Level-Programmers--Model/Exception-handling/Exception-vectors-and-the-exception-base-address?lang=en

 

Documentation – Arm Developer

 

developer.arm.com

 

이번에는 공식문서에서

Exception vector에 대한 정의부분입니다.

해석하면 '익셉션이 발생할때, 프로세스 동작은 강제적으로

해당 종류의 익셉션으로 주소로 실행이 된다. 이 주소를 익셉션 백터라고 한다'

 

익셉션은 CPU와 OS가 어떻게 동작하는지에 대한 흐름을 볼 수 있는

중요한 실행흐름입니다.

Interrupt에서 이어지는 개념으로

low level단에서 SW가 어떻게 동작하는지 더욱 깊이있게 이해할 수 있습니다.

 

익셉션 Level

익셉션은 단계별로 권한을 가지는 정도가 높아집니다.

단계별로 그림을 나타내면 위의 그림과 같습니다.

우리가 흔히 사용하는 app단계는 EL0입니다.

그 아래에 운영체제 단계는 EL1입니다.

그 아래에 HW가상화 단계는 EL2입니다.

맨 아래 보안에 관련된 부분은 EL3입니다.

점점 아랫단으로 갈수록 권한이 높아지게 되어

권한 아래의 동작을 제어할 수 있습니다.

왜 이렇게 Exception level를 나눈 걸까요?

그 이유를 범용운영체제 관점으로 살펴볼 수 있습니다.

요즘에는 컴퓨터 개발 tool이 성능이 좋아져

프로그래밍 언어만 알아도 간단한 프로그램을 만들기 쉬워지고 있습니다.

그런데, 원래 FM대로 sw를 개발한다하면

프로그램 동작시에 운영체제는 어떻게 동작하고

보안은 어떻게 작동하는 지 등등을 다 따져야합니다.

앱 개발자 입장에서는 특정한 서비스에 대한 구상을 한 뒤에

그에 맞는 프로그램을 올리는 것만으로도 벅찬데

여기까지 전부 다 고려한다면 출시하는데에만 한 세월이 걸립니다.

그래서 app 개발자는 kerenl level의 단에서 동작을 모르더라도 개발이 가능하도록

kernel level개발자는 hypervisor단의 동작을 모르더라도 개발이 가능하도록

hypervisor개발자는 secure mode단의 동작을 모르더라도 개발이 가능하도록

만드는 것이 범용 운영체제이며

이 시작이 Exception level로 권한 레벨을 나누는 것입니다.

 

 

익셉션 백터 테이블(Arm v8)

 

익셉션 레벨 익셉션 벡터 베이스 주소 오프셋 익셉션 타입
SP0을 사용하는 EL에서 익셉션 발생 "+0x000" Synchronous
"+0x080" IRQ
"+0x100" FIQ
"+0x0180" SError
실행 중인 EL에서 익셉션 발생 "+0x200" Synchronous
"+0x280" IRQ
"+0x300" FIQ
"+0x380" SError
1단계 낮은 EL(64비트 실행)에서 익셉션 발생 "+0x400" Synchronous
"+0x480" IRQ
"+0x500" FIQ
"+0x580" SError
1단계 낮은 EL(32비트 실행)에서 익셉션 발생 "+0x600" Synchronous
"+0x680" IRQ
"+0x700" FIQ
"+0x780" SError

 

Arm v8을 기준으로 익셉션 백터테이블을 정리한 표입니다.

익셉션이 발생한 익셉션 레벨을 기준으로 주소가 정의돼어있고

+0x080 오프셋 간격을 기준으로 백터들이 위치합니다.

 

*익셉션의 예시들이 워낙 방대하여

각각의 사례들은 추후에 하나씩 글로 정리하겠습니다.

 

참고자료

Arm아키텍처의 구조와 원리

프로그래머스 Dev 코스 리눅스커널 전문가 과정

 

 

 

728x90

'CS지식 학습' 카테고리의 다른 글

스택카나리(Stack canary)  (0) 2024.04.10
시스템 콜의 ftrace 분석을 해보자!  (0) 2024.04.02
인터럽트  (1) 2024.03.13
Memory Mapped IO  (0) 2024.03.12
프로세스는 무엇일까?+Trace32로 ps명령어 제작  (0) 2024.03.11

관련글 더보기

댓글 영역