EXCEPTION

포스트: 30
Tags

Posts

30 posts

[ARM프로세서] ARMv7: Undefined Instruction 익셉션을 유발할 때의 ARM 코어의 세부 동작

Guillermo Austin Kim|2020년 12월 3일

이어서 Undefined Instruction 익셉션이 발생하는 전체 흐름을 살펴보면서, 세부 동작을 알아봅시다. 그림 8.9 Undefined Instruction 익셉션을 유발할 때 변경되는 레지스터 그림 8.9는 Undefined Instruction 익셉션의 전체 실행 흐름인데, 그림의 가운데 부분을 보면 ARM 코어가 하드웨어적으로 처리되는 부분이 슈도 코드로 표기돼 있습니다. 이 슈도 코드를 분석하겠습니다. 먼저 01번째 줄을 봅시다. 01 R14_und = 0xc000d000 + 0x4 Undefined Instruction 익셉션이 발생했으니 ARM 코어는 Undefined(UND) 모드로 변경할 준비를 합니다. Undefined(UND) 모드에서만 사용되는 R14_und 레지

[ARM프로세서] ARMv7: 데이터 어보트(Data Abort)를 유발할 때 ARM 코어의 세부 동작

Guillermo Austin Kim|2020년 11월 30일

이어서 다음 그림을 보면서 데이터 어보트가 발생할 때 ARM 코어에서 이를 처리하는 세부 과정을 알아봅시다. 그림 8.8 데이터 어보트 익셉션을 유발할 때 변경되는 레지스터 ARM 코어가 데이터 어보트를 감지하면, 하드웨어적으로 레지스터를 어떻게 변경하는지, 그림의 가운데 부분에 보이는 슈도 코드를 분석하면서 알아봅시다. 먼저 01번째 줄을 분석하겠습니다. 01 R14_abt = 0xc000d000 + 0x8 데이터 어보트가 발생했으니 ARM 코어는 어보트 모드로 변경할 준비를 합니다. [정보]프리페치 어보트와 데이터 어보트를 유발할 때 공통으로 어보트 모드로 변경된다는 점을 기억합시다. 먼저 어보트 모드에서만 사용되는 R14_abt 레지스터에 데이터 어보트가 발생한 주소에 0x8를

[ARM프로세서] ARMv7: 프리페치 어보트(Prefetch Abort)가 발생할 때 ARM 코어의 세부 동작

Guillermo Austin Kim|2020년 11월 30일

프리패치 어보트가 발생하는 전체 흐름을 살펴보면서, 세부 동작을 알아봅시다. 그림 8.7 프리페치 어보트 익셉션을 유발할 때 변경되는 레지스터 그림 8.7은 8.2 절에서 봤던 그림과 비슷해 보입니다. 한 가지 차이점은 그림의 가운데 부분과 같이 ARM 프로세서 내부에서 처리되는 동작을 슈도 코드로 표현한 것입니다. 슈도 코드는 하드웨어적으로 처리되는 과정에 대한 이해를 돕기 위해 작성된 것이란 사실을 기억합시다. 이해를 돕기 위해 프리패치 어보트가 발생한 명령어를 실행한 주소가 0xc000d000이라고 가정하겠습니다. 먼저 01번째 줄을 봅시다. 01 R14_abt = 0xc000d000 + 0x4 프리패치 어보트가 발생했으니 ARM 코어는 어보트 모드로 변경할 준비를 하는데, 먼저 어보트

[ARM프로세서] ARMv7: 익셉션(Exception)의 전체 실행 흐름 정리

Guillermo Austin Kim|2020년 11월 24일

이번에는 다음 그림을 보면서 익셉션 타입 별로 익셉션이 처리되는 전체 흐름을 정리해봅시다. 그림 8.6 익셉션의 종류 별 전체 실행 흐름 먼저 그림의 가장 윗 부분은 메모리 어보트 타입의 실행 흐름입니다. ARM 코어가 명령어를 실행하는 과정에서 유발되는 익셉션인데, 소프트웨어적으로 치명적인 오류가 있을 때 유발됩니다. 대부분 운영체제에서 익셉션 벡터 핸들러에서 시스템을 리셋시키거나 익셉션을 유발한 프로세스를 종료시키는 동작을 수행합니다. 이어서 그림의 가운데 부분을 보겠습니다. 외부 하드웨어에서 인터럽트가 발생하면 ARM 코어는 IRQ/FIQ 익셉션을 유발합니다. 운영체제 관점으로는 인터럽트 타입 익셉션은 하나의 기능으로 동작하며, 익셉션 벡터 핸들러에서는 인터럽트 서비스 루틴을 처리하는 코드를 실