[Arm프로세서] AAPCS: Armv7: AAPCS와 C 코드 최적화
By Guillermo Austin Kim | 2021년 6월 28일 |
이제까지 다룬 Armv7 아키텍처에서 정의된 AAPCS를 배우고 나면 자연스럽게 다음과 같은 의문이 생길 가능성이 높습니다. "AAPCS와 관련된 내용을 실무에 어떻게 활용할 수 있을까?" 이번 장의 앞 부분에서 강조했지만, Armv7 아키텍처를 구성하는 다른 내용보다도 AAPCS는 실무에 활용될 내용이 많습니다. 특히 AAPCS는 최적화를 이야기할 때 항상 논의됩니다. 사실 개발자들이 주어진 스팩이나 시나리오에 맞게 기능을 구현한 후, 어느 정도 시점이 지나면 최적화 작업을 시작하는 경우가 많습니다. 작성된 코드를 최적화해야, 맡은 기능이 제대로 동작하는 경우가 있습니다. 가끔 소리가 끊기거나 화면이 부드럽게 출력되지 않는 상황입니다. 임베디드 시스템 개발자 관점으로는 성능을 최적화하면 전
[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로