[Arm프로세서] 캐시: 캐시 관련 어셈블리 명령어
By Guillermo Austin Kim | 2022년 7월 22일 |
캐시를 설정하거나 원하는 방식으로 캐시를 구동하려면 캐시와 연관된 시스템 레지스터만 설정해야 한다고 생각할 수 있습니다. Arm 아키텍처에서는 캐시를 세세하게 동작시킬 수 있는 어셈블리 명령어를 제공합니다. 이번에는 캐시를 제어하는 어셈블리 명령어를 알아봅시다. 표 17.5 캐시 관련 어셈블리 명령어 시스템을 초기화할 때 캐시를 원하는 방식으로 설정해야 성능을 제대로 낼 수 있습니다. 이를 위해 캐시를 제어하는 명령어의 사용 방법을 잘 익혀 둘 필요가 있습니다. 시스템을 초기화하는 과정에서 캐시를 스팩에 마젝 적절히 설정하면 시스템의 성능을 극대화할 수 있습니다.
[Arm프로세서] XEN 하이퍼바이저 소개
By Guillermo Austin Kim | 2022년 2월 14일 |
그런데 오픈 소스 기반으로 개발되고 있는 하이퍼바이저가 있는데 그 중에서 가장 많이 사용되는 하이퍼바이저는 XEN입니다. XEN은 오픈 소스 프로젝트라서 누구나 XEN 하이퍼바이저의 코드를 내려받아 빌드해 실행할 수 있습니다. XEN에 대한 소개는 다음 홈페이지에서 확인할 수 있습니다. 이번 절에서는 Armv8 아키텍처에서 실행되는 XEN 하이퍼바이저의 익셉션 벡터 핸들러 코드를 분석합니다. 코드 분석을 통해 하이퍼바이저를 지원하기 위해 사용되는 레지스터와 명령어를 분석하고, 게스트 Exit 관점 중심으로 하이퍼바이저의 동작을 설명합니다. [정보]XEN 하이퍼바이저는 오픈 소스 프로젝트라 누구나 소스를 빌드해 실행하고 XEN 프로젝트에 컨트리뷰션(기여)를 할 수 있습니다. 그런데 대부분 상용 소프
[Arm프로세서] Armv8 익셉션 레벨과 privilege level
By Guillermo Austin Kim | 2021년 10월 22일 |
Armv8 아키텍처는 PL0-PL3까지 4개의 privilege levels(접근 권한)을 제공합니다. 여기서 소개하는 privilege levels은 Armv7 아키텍처에서 다룬 내용과 거의 유사합니다. [정보]privilege levels은 Arm 아키텍처에서만 지원할까요? 그렇지는 않습니다. x86을 포함한 대부분 CPU 아키텍처는 privilege levels와 같은 기능을 지원하는데, 주로 운영체제를 설계할 때 결함이 있을 수 있는 유저 애플리케이션으로부터 시스템을 보호하기 위한 용도로 사용됩니다. 리눅스 커널과 같은 운영체제 커널은 privileged level에서 실행이 되는데, privileged level에서만 주요 시스템 설정(시스템 레지스터, 인터럽트, 캐시 접근)을 할 수 있게 제한
[GDB] Arm(Armv7): C 코드와 어셈블리 코드를 동시에 디버깅하기
By Guillermo Austin Kim | 2021년 3월 31일 |
이번 포스트에서는 GDB를 사용해 디버깅을 하는 방법을 소개합니다. 소개된 내용을 참고하면 즐겁게 어셈블리 명령어를 디버깅할 수 있습니다. 환경: 라즈베리 파이4 GDB 실행 아래 명령어를 사용해 GDB를 Text User Interface 모드로 실행합니다. $ gdb -tui armv7_aapcs_proc 다음은 위 명령어로 실행한 화면입니다. 이제 바로 다음 명령어를 입력해 어셈블리 명령어 창을 보이도록 합시다. $ layout split 이번에는 'b main'와 'r' 명령어를 입력해 main() 함수에 브레이크 포인트를 걸고 프로그램을 실행합니다. 위 명령어를 입력하면 다음과 같은 화면이 보입니다. 위 화면과 같이 main() 함수의 첫 번째 라인에 브레