[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() 함수의 첫 번째 라인에 브레
[Arm프로세서] Arm 아키텍처의 레지스터 소개
By Guillermo Austin Kim | 2022년 4월 10일 |
Arm 아키텍처를 구성하는 기능을 이해하려면 먼저 무엇을 알아야 할까요? Arm 코어에 내장된 레지스터입니다. 레지스터를 잘 알려면 무엇을 알아야 할까요? 레지스터들이 어떻게 구성돼 있고 어떤 방식으로 사용되는지 파악하면 레지스터를 잘 안다고 말할 수 있습니다. Arm 아키텍처에서 정의된 기능들은 "레지스터를 어떻게 변경하고 설정할까?"가 그 실체이고 정체입니다. 메모리 아키텍처 관점으로 레지스터는 무엇일까요? Arm 코어가 사용하는 저장 매체 중에 가장 속도가 빠른 게 레지스터입니다. 레지스터 다음으로 속도가 빠른 저장 매체로 캐시와 RAM을 주로 언급합니다. 캐시나 RAM을 사용하는 것보다 되도록 레지스터를 사용해 데이터를 연산하면 성능을 최적화할 수 있습니다. 그럼 레지스터는 어떻게 표기할까요