Guillermo Austin Kim

Sources

Posts

998 posts

[Arm프로세서] GIC: 인터럽트 콘트롤러가 필요한 이유

Guillermo Austin Kim|2022년 8월 3일

인터럽트 콘트롤러가 필요한 이유는 무엇일까요? 컴퓨터는 다음과 같이 구성돼 있기 때문입니다. ● CPU ● 메모리 ● I/O 장치 마이크로 프로세서는 CPU와 메모리를 깊이 있게 다룹니다. 그런데 실제 고객이 사용하는 제품은 키보드나 마우스와 같은 외부 I/O 장치가 필요합니다. 외부 I/O 장치를 CPU가 다양한 방식으로 제어하는데, 이 중 가장 효율적인 방법이 인터럽트입니다. 예를 들어 휴대폰에서 터치 화면을 만지면 터치 인터럽트가 유발돼 CPU 코어에게 터치가 눌렸다는 사실을 알립니다. 또한 노트북에서 마우스나 키보드를 움직이면 인터럽트를 통해 CPU와 통신합니다. 외부 I/O 장치가 인터럽트를 올려주면 이를 통해(Consolidation)해서 CPU에

[Arm프로세서] 캐시: 캐시 관련 어셈블리 명령어

Guillermo Austin Kim|2022년 7월 22일

캐시를 설정하거나 원하는 방식으로 캐시를 구동하려면 캐시와 연관된 시스템 레지스터만 설정해야 한다고 생각할 수 있습니다. Arm 아키텍처에서는 캐시를 세세하게 동작시킬 수 있는 어셈블리 명령어를 제공합니다. 이번에는 캐시를 제어하는 어셈블리 명령어를 알아봅시다. 표 17.5 캐시 관련 어셈블리 명령어 시스템을 초기화할 때 캐시를 원하는 방식으로 설정해야 성능을 제대로 낼 수 있습니다. 이를 위해 캐시를 제어하는 명령어의 사용 방법을 잘 익혀 둘 필요가 있습니다. 시스템을 초기화하는 과정에서 캐시를 스팩에 마젝 적절히 설정하면 시스템의 성능을 극대화할 수 있습니다.

[Arm프로세서] 캐시: 캐시 관련 용어 알아보기(Arm 아키텍처 관점)

Guillermo Austin Kim|2022년 7월 22일

Arm 아키텍처는 캐시를 제어하는 명령어를 제공하는데, 명령어의 동작 원리를 제대로 파악하려면 Arm 아키텍처에서 정의된 캐시의 동작과 관련된 용어를 알아야 합니다. 먼저 캐시와 관련된 용어를 소개하고 캐시를 제어하는 명령어를 소개합니다. 실전 개발에서 캐시의 동작을 설명할 때 '캐시 플러시(Cache Flush)'란 용어를 많이 씁니다. 일반적으로 캐시의 데이터를 메인 메모리에 내린다는 의미로 사용됩니다. 리눅스 커널이나 RTOS에서 Arm 프로세서의 캐시를 제어하는 함수나 레이블의 이름에 flush가 포함된 경우가 많습니다. 일반적으로 캐시 플러시는 캐시 라인에 있는 데이터를 메인 메모리에 복사해 캐시와 메인 메모리에 있는 데이터의 싱크를 맞추는 동작을 뜻합니다. 그런데 Arm 아키텍처 문서를

(공지) 1판 리눅스 커널 종이 책 절판 + 2판(v6.10 이상 커널 버전)진행 예정

Guillermo Austin Kim|2022년 7월 16일

안녕하세요, '디버깅을 통해 배우는 리눅스 커널의 구조와 원리'의 저자김동현(Austin Kim)입니다. 먼저 제가 쓴 책을 봐주시고 다양한 질문을 주셔서 감사합니다. 프로젝트를 개발할 때많은 도움이 됐으면 좋겠고요. 강의 동영상은 제 유튜브 채널에 있으니 같이 들으면서 책을 보시면 더 효율적으로 공부할 수 있습니다. 블로그에 2가지 공지 사항을 올리려고 하는데요. 참고하셨으면 좋겠습니다. 1. 2판(v6.10 이상 커널 버전, Aarch64) 작업 예정 '디버깅을 통해 배우는 리눅스 커널의 구조와 원리' 책의 리눅스 커널 버전은 v4.19인데요. 이제 최근 리눅스 커널은 v5.15(LTS 기준)이 됐습니다. 시간이 지날수록 제가 쓴 책이 '올드, 레거시"가 같은 이미지로 보여질 것 같단 생각이 듭

[Arm프로세서] 캐시: 캐시와 관련된 시스템 레지스터 - CLIDR_EL1

Guillermo Austin Kim|2022년 7월 16일

CLIDR_EL1는 Cache Level ID Register의 약자로 캐시의 타입과 각각 캐시 레벨에서 구현 방식을 설정할 수 있는 레지스터입니다. CLIDR_EL1 레지스터를 통해 최상위 통합 캐시 레벨과 최상위 캐시 일관성 레벨을 알 수 있습니다. 다음 그림에서 CLIDR_EL1 레지스터의 비트 맵을 확인할 수 있습니다. 그림 17.13 CLIDR_EL1 레지스터의 비트 맵 이어서 CLIDR_EL1 레지스터를 구성하는 비트 맵을 살펴보겠습니다. Ctype1~Ctype7 Arm 스팩 문서에서 [20:0] 비트를 'Ctype, bits [3(n-1)+2:3(n-1)], for n = 1 to 7'으로 표기합니다. n의 범위가 1~7이므로 Ctype1~Ctype7으로 표기할 수