[Arm프로세서] 캐시의 검색 방법: 캐시 룩업(Cache Lookup)
By Guillermo Austin Kim | 2022년 5월 18일 |
캐시를 검색하는 방법을 설명하기 전에 재미있는 상상을 해봅시다. 4G 크기의 메인 메모리를 사용하는 32비트 시스템에서 4G를 모두 처리할 수 있는 캐시가 있다고 가정합시다. 메모리 주소 공간은 범위가 0x~0xffff_fff이고 캐시 데이터를 저장하는 캐시 라인의 사이즈가 128이면 캐시 라인의 갯수는 3천만개가 넘을 것입니다. 계산식은 다음과 같습니다. 225 = 232 / 27 = 0xffff_ffff / 128 그런데 캐시는 SDRAM으로 구현되므로 가격이 비쌉니다. 만약 3천만개의 캐시 라인으로 구성된 컴퓨터의 가격은 매우 비쌀 겁니다. 실제 상용 CPU의 L1 캐시의 사이즈는 고작 32KB이고 L2/L3 캐시는 메가 바이트 사이즈입니다. 그래서 메인 메모리에 접근하려는 주소가 있으면 캐
[ARM][ARMv7] 리눅스 커널: ARM 모드를 설정하는 어셈블리 코드 분석
By Guillermo Austin Kim | 2020년 7월 22일 |
ARM 프로세서의 주요 용법을 배우기 위해 리눅스 커널만큼 좋은 리퍼런스 자료가 없는 것 같다.ARM 사의 개발자들이 리눅스 커널에 자신의 코드를 메인라인 시키기 때문이다. 이번에는 리눅스 커널에서 32비트 ARMv7 아키텍처에서 ARM의 모드를 읽어 제어하는 루틴을 살펴보자. 먼저 다음 코드를 보자. arch/arm/include/uapi/asm/ptrace.h #define USR_MODE 0x00000010#define SVC_MODE 0x00000013#define FIQ_MODE 0x00000011#define IRQ_MODE 0x00000012#define MON_MODE 0x00000016#define ABT_MODE 0x00000017#define HYP
[ARM] tst 명령어를 실행하면 ARM CPSR 레지스터가 어떻게 변경될까?
By Guillermo Austin Kim | 2019년 2월 21일 |
tst 명령어는 연산자와 비연산자 사이 AND 비트 연산을 수행합니다. AND 비트 연산 결과에 따라 CPSR 레지스터 Z 비트는 다음과 같이 변경됩니다.Z: 0 ( AND 비트 연산 결과가 1인 경우)Z: 1 ( AND 비트 연산 결과가 0인 경우) tst 명령어가 위와 같이 동작하는지 증명하기 위해 T32 디버거를 실행해 보겠습니다.다음 화면은 tst 명령어를 실행하기 직전입니다. NSR:80107E6C|ret_to_user_from_irq: ldr r2,[r9,#0x8]NSR:80107E70| cmp r2,#0x7F000000 ; r2,#2130706432NSR:80107E74|