Guillermo Austin Kim
Posts
998 posts[Arm프로세서] Armv8 익셉션(Exception)의 전반적인 특징
그 동안 Arm 아키텍처는 CPU 아키텍처 시장에서 '저전력', '소형 디바이스' 용으로 사용되는 CPU 아키텍처로 분류됐습니다. 최대한 적은 트렌지스터를 사용해 최소의 소모 전력으로 CPU를 설계했기 때문입니다. 물론 Arm 코어의 CPU 아키텍처도 최대한 심플하게 디자인했습니다. 익셉션의 구조 관점으로 보면, Armv7 아키텍처의 익셉션도 다음과 같이 심플하게 설계됐다고 볼 수 있습니다. ❑ 익셉션 벡터가 4바이트 단위로 정렬 ❑ 어떤 Arm 동작 모드에서 익셉션이 발생해도 익셉션 벡터로 브랜치 ❑ 익셉션의 종류도 8개로 정의 내림 그런데, Armv8 아키텍처는 CPU 아키텍처 시장에 "우리는 고성능 컴퓨터나 클라우드 서버에 진출하겠다"라고 출사표
[Arm프로세서] Armv8 아키텍처의 익셉션 소개
많은 분들이 생각하는 익셉션의 개념은 'Armv7 아키텍처의 익셉션'인 경우가 많아, Armv8 아키텍처를 배울 때 Armv7 아키텍처의 익셉션과 비슷할 것이라 예상합니다. 익셉션이 발생하면 지정한 주소로 프로그램 카운터를 브랜치하는 기본 개념은 Armv7/Armv8 아키텍처가 같으나, 익셉션을 처리하고 분류하는 체계와 세세한 처리 방식이 많이 다릅니다. Armv8 아키텍처의 익셉션은 고성능 컴퓨터에서 적용되는 트러스트 존이나 가상화 시스템인 하이퍼바이저를 이해하기 위해 반드시 알아야 할 기반 지식이므로, 반드시 잘 알아야 둬야 합니다. 익셉션(Exception)은 Armv8 아키텍처의 핵심 기능 중 하나입니다. Armv8 아키텍처에서 정의된 익셉션를 활용해 하이퍼바이저와 같은 가상 시스템을 설계할 수
[Arm프로세서] Armv7: 데이터 어보트(Data Abort) 익셉션이 발생하는 사례
데이터 어보트는 명령어를 실행할 수 없은 상황에서 ARM 코어가 유발합니다. 그렇다면, 다음 명령어의 01번째 줄에서 데이터 어보트가 발생할 수 있을까요? 01 0xc000d000: e5925000 ldr r5, [r2]02 0xc000d004: e2855004 add r5, r5, #0x403 0xc000d008: e3550000 cmp r5, #0x0 만약 r2 레지스터가 0x0과 같은 주소를 담고 있으면, 데이터 어보트가 유발될 수 있습니다. 'ldr r5, [r2]' 명령어는 r2 레지스터가 담고 있는 주소에 엑세스해서 해당 주소에 있는 데이터를 r5 레지스터에 로딩하는 동작입니다. 그런데 r2 레지스터가 0x0을 담고 있으면, 유효하지 않는 메모리로 판단하므로 ARM 코어는 데이터
[Arm프로세서] Armv7: 프리페치 어보트 익셉션이 발생하는 사례
프리페치 어보트는 말 그대로 명령어를 페치하지 못할 때 ARM 코어가 유발합니다. 그렇다면, 다음 명령어의 01번째 줄에서 프리페치 어보트가 발생할 수 있을까요? 01 0xc000d000: e5925000 ldr r5, [r2]02 0xc000d004: e2855004 add r5, r5, #0x403 0xc000d008: e3550000 cmp r5, #0x0 'ldr r5, [r2]' 명령어를 페치하는데 큰 문제는 없는 상황입니다. 역시, 01번째 줄도 파이프 라인의 어느 단계에서 익셉션이 발생하는지에 대한 이해를 돕기 위해 예를 든 것입니다. 그래서 이번에는 다른 예시를 들겠습니다. 프로세스의 스택이 오염됐을 때 프리페치 어보트가 발생하는 경우가 많은데, 다음은 프리페치 어보트가 발
[Arm프로세서] Armv7: 익셉션 핸들러란
처음 익셉션 벡터 테이블을 분석하면 다음과 같은 의문이 생기는 경우가 많습니다. "이와 관련된 코드는 어디에 구현돼 있을까?" 이 질문에 답을 하려면 익셉션 벡터와 관련된 코드가 무엇인지 알아야 하는데, 이를 익셉션 벡터 핸들러라고 합니다. 익셉션 벡터 핸들러는 익셉션의 종류 별로 소프트웨어적으로 처리되는 목적의 명령어로 구성돼 있는데 익셉션 벡터 주소에서 브랜치됩니다. 익셉션 핸들러 코드 분석하기 이제부터 오픈 소스 기반의 운영체제인 리눅스 커널에서 확인된 익셉션 벡터와 익셉션 백터 핸들러의 코드를 보면서 배운 내용을 다져봅시다. 다음은 익셉션 벡터와 익셉션 핸들러를 브랜치하는 코드입니다. 01 ffff0000: ea0003ff b 0xffff1004

