[ARM프로세서] ARMv7: Undefined Instruction 익셉션을 유발할 때의 ARM 코어의 세부 동작
By 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] ARM 프로세서 학습 방법의 문제점
By Guillermo Austin Kim | 2019년 12월 23일 |
이제부터 ARM 프로세서에 대한 이야기를 조금 더 해보려고 합니다.제 개발 인생을 돌이켜 보니 대부분의 시간을 사실 ARM 프로세서와 함께 보냈더군요. 다음과 같은 조합으로 말이죠. * 'ARM + RTOS, ARM + 리눅스' ARM 프로세서를 처음 접할 때의 느낌 그런데 제가 ARM 프로세서를 처음 접할 때의 느낌을 잊을 수가 없습니다. 그 느낌이 어땠나면; * 목욕탕에서 가장 뜨거운 온탕에 점프해 들어갔을 때 음, 잘 공감이 가시나요? 대중 목욕탕에 안 가신다고요? 그럼 다음의 예는 어떤가요? * 그럼 충치가 있어서 치과를 가서 진료실에서 기다릴 때 아직도 공감이 안된다고요? 난 한번도 치과에 가본 적이 없다고요? 그렇다면 어쩔 수 없죠. 더 이상의 예를 들기는 어렵겠군요.
[Arm프로세서] 하이퍼바이저: wfe/wfi 명령어
By Guillermo Austin Kim | 2022년 1월 28일 |
많은 개발자들은 hvc 명령어를 통해서만 EL1에서 EL2로 진입할 수 있다고 알고 있습니다. 사실 그렇지는 않습니다. 게스트 OS에서 하이퍼바이저로 진입하는 다른 방법은 wfe와 wfi 명령어를 실행하는 것입니다. 원래 wfe와 wfi 명령어는 Arm 코어가 저전력 모드(low-power mode)으로 실행될 수 있게 동작합니다. HCR_EL2 레지스터의 TWE 혹은 TWI 비트를 1로 설정하면 EL2 트랩이 유발되어, EL2로 진입합니다. 시스템에 하나의 운영체제가 존재하는 환경에서는 wfe, wfi 명령어는 저전력 모드용으로 실행되나, 하이퍼바이저와 같이 시스템에 2개 이상의 운영체제가 실행되는 환경에서, HCR_EL2 레지스터의 TWE 혹은 TWI 비트를 1로 설정하면 hvc 명령어처럼 EL2로
[Arm프로세서] Armv7: 익셉션 벡터 테이블이란
By Guillermo Austin Kim | 2020년 12월 23일 |
익셉션이 발생하면 ARM 프로세서는 익셉션 별로 지정된 주소로 프로그램 카운터를 브랜치합니다. 익셉션 별로 지정된 주소를 익셉션 벡터라고 하는데, 익셉션 벡터는 8개의 연속된 4바이트 단위의 주소로 구성돼 있습니다. 이 8개의 익셉션 벡터를 익셉션 벡터 테이블이라고 합니다. 먼저 다음 표를 보면서 익셉션 벡터 테이블을 배워 봅시다. 표 8.4 익셉션 벡터 테이블 표의 왼쪽 행은 익셉션 벡터 베이스 주소 기준의 오프셋인데, 오른쪽 행을 보면 오프셋 별에 대응되는 익셉션의 종류가 보입니다. 이로써, 익셉션 벡터의 주소는 익셉션의 종류에 따라 다르다는 점을 확인할 수 있습니다. 가장 왼쪽 행의 윗 부분은 '익셉션 벡터 테이블의 베이스' 주소인데, 먼저 이 내용부터 알아봅시다. ARM 프로세서는 익셉션의