[Arm프로세서] 하이퍼바이저란
By Guillermo Austin Kim | 2022년 1월 11일 |
여러분들이 사용하는 데스트 탑 PC에는 어떤 운영체제가 설치돼 있나요? 대부분 윈도우나 리눅스가 깔려 있을 겁니다. 그렇다면 윈도우나 리눅스와 같은 운영체제를 설치하는 이유는 무엇일까요? '운영체제 위에서 실행 중인 프로그램을 사용하기 위해서'라고 답할 것입니다. 운영체제를 설치하는 이유는 운영체제에서 실행되는 워드나 스타크래프트와 같은 프로그램을 사용하기 위해서입니다. 그래서 가끔은 2개의 데스크 탑 PC에 각각 윈도우와 리눅스를 따로 설치해 사용하곤 합니다. 만약 한 대의 데스크탑 PC에서 윈도우와 리눅스를 같이 사용할 수 있다면 어떨까요? 윈도우와 리눅스에서 실행되는 애플리케이션을 1대의 데스크탑 PC에서 사용할 수 있는 상황입니다. 윈도우와 리눅스에서 실행되는 프로그램을 하나의 데스크 탑 PC에서
[Arm프로세서] AAPCS: Armv7: 함수를 호출하기 위한 디자인
By Guillermo Austin Kim | 2021년 5월 24일 |
Armv7 아키텍처 관점으로 AAPCS를 보통 SP 레지스터와 LR 레지스터가 어떻게 바뀌는지 기준으로 설명합니다. 하지만 실제 거의 대부분 임베디드 혹은 시스템 개발자들은 SP와 LR 레지스터를 설정하는 어셈블리 코드를 입력하지 않습니다. 그 이유는 대부분 C 프로그래밍으로 코딩을 하기 때문입니다. SP와 LR 레지스터를 보면 낯설게 느끼기 마련입니다. 이번 절에서는 실제 함수를 호출하는 예시 코드와 함께, 함수를 호출하면 SP와 LR 레지스터가 어떻게 바뀌는지 알아보겠습니다. 함수를 호출될 때의 세부 동작 원리 파악하기 여러분이 다음과 같은 함수를 작성했다고 가정하겠습니다. 01 int add_func(int x, int y)02 {03 int result = x + y;04 prin
[Arm프로세서][Armv7] 트러스트존(TrustZone): 시큐어 월드로 실행 흐름이 변경되는 과정
By Guillermo Austin Kim | 2021년 12월 29일 |
이번에는 Armv7 아키텍처에서 정의된 전체 동작 모드를 보면서 논 시큐어 월드에서 시큐어 월드로 실행 흐름이 바뀌는 과정과 이 때 SCR.NS 비트가 어떻게 바뀌는지 알아봅시다. 그림 11.4 모드, privilege 레벨과 시큐리티 상태들 먼저 그림을 넓은 시야로 봅시다. 그림의 왼쪽 부분은 논 시큐어 상태, 오른쪽 부분은 시큐어 상태를 나타냅니다. 각 박스 내에 PL이 보이는데 이는 Privilege level의 약자이며 권한 수준을 나타냅니다. 권한 수준이 낮은 User 모드는 PL0이고, 시스템 레벨로 권한 수준이 있는 System, IRQ, Undef, Abort, Supervisor 모드는 PL1입니다. 그런데 그림의 오른쪽 부분에도 PL0에 해당되는 User 모드, PL1에 해당되
[Arm프로세서] 레지스터를 배우기 어려운 이유
By Guillermo Austin Kim | 2022년 2월 27일 |
CPU 아키텍처를 배울 때 가장 먼저 레지스터를 접합니다. CPU를 설정하거나 CPU의 속성 정보를 레지스터가 담고 있기 때문입니다. Arm 아키텍처에서 정의된 레지스터를 설명하기 전에 레지스터를 소개합니다. 레지스터를 배우기 어려운 이유 CPU 아키텍처를 처음 배울 때 가장 먼저 무엇을 배울까요? 레지스터를 공부할 가능성이 높습니다. 그런데 Arm 아키텍처나 Arm 프로그래밍을 다루는 대부분의 책은 레지스터의 기능을 상세히 다룹니다. 예를 듭시다. Armv7 아키텍처에서 정의된 레지스터는 범용 레지스터와 CP15 레지스터로 구성된다. R13은 스택 포인터 레지스터, R14는 링크 레지스터이다. 이런 내용을 읽고 대부분 레지스터가 너무 어렵다고 느낍니다. 저도 처음 Arm 어셈블리를 배울 때