Guillermo Austin Kim

Sources

Posts

998 posts

[IT] 개발자 역량 키우기 - 자기개발 후 피드백 받는 방법

Guillermo Austin Kim|2020년 7월 4일

요즘엔 학창 시절이 잘 생각나지 않는다. 학교를 졸업한 지 15+년이 지나서 그런가? 희미한 기억 속의 학창 시절에는 뭔가 수업을 듣고 학점을 따는 방식으로 공부했던 것 같다. 학점을 잘 따기 위해 공부를 하는 과정에서 지식을 습득할 수 있었다. 물론, 1학기가 지나면 내가 얼마나 그 지식을 잘 알고 있는지 결과를 확인할 수 있었다. 학점이 나오기 때문이다. A~C 까지 학점을 받는 것이다. 정확한 기억은 아니지만, 학창 시절 학점이 별로 좋지 않았다. 낮은 학점을 받고 나면 난 스스로 다음과 같이 말하며 위로했다. * 학점이 높은 사람이 반드시 그 지식을 잘 아는 사람이 아니다. 요즘 드는 생각은 '학점이 높은 사람이 좋은 학생이고 그 지식을 많이 알 가능성이 높다'이지만, 그 시절에 바퀴

[리눅스커널][ARM64] 시스템 콜: 시스템 콜 벡터(el0_sync) 처리 과정

Guillermo Austin Kim|2020년 7월 2일

'디버깅을 통해 배우는 리눅스 커널의 구조와 원리'란 책에서 시스템 콜이 처리되는 과정을,ARM32 기반 시스템 기준으로 설명합니다. 여러 리눅스 개발자분들이 ARM32 대신 ARM64 기반에서 개발하시는 분들이 있어 이번 포스팅에서는 ARM64 아키텍처에서 시스템 콜이 발생하면 리눅스 커널에서 이를 처리되는 과정을 분석합니다. ARM32 기반 리눅스 시스템에서는 유저 공간에서 커널 공간으로 모드를 스위칭하기 위해 슈퍼파이저 콜을 수행합니다.이 때 'svc'명령어를 수행하는데요. ARM64 아키텍처에서도 마찬가지로 같은 명령어를 실행합니다. ARM64 아키텍처 기준으로 EL0(유저 모드)에서 EL1(커널 모드)로 스위칭을 시작하는 분기점입니다. 그러면 커널 공간에서는 어떤 코드가 실행될까요?

[IT] '리눅스 커널의 구조와 원리' 출간 후 스토리: 너무 감사합니다!

Guillermo Austin Kim|2020년 7월 2일

'디버깅을 통해 배우는 리눅스 커널의 구조와 원리'라는 책이 출간된 후 가장 좋은 점은 그 동안 만나뵀지 못했던 교수님들, 리눅스 강사님들, 리눅스 고수 개발자분들과 교류를 할 수 있었다는 점입니다. 많은 분들이 집필에 대해 칭찬과 격려를 해주시고, 적극적으로 홍보해 주시기도 했습니다. 친한 선배님은 집 근처 도서관에 희망 도서를 신청하셨다고 알려주시기도 했습니다. '문c 블로그'의 문영일 선배님께 책 출간 소식을 말씀드렸는데, '문c 블로그'를 통해 제 책을 홍보해주셨습니다. 아래 링크를 참고하세요. 정말 감사드리고, 밥은 제가 사드려야 될 것 같습니다. 이 밖에도 여러 임베디드 리눅스 개발자와 취준생으로 부터 메일을 받거나 블로그의 댓글을 보게 됐습니다. 이 중 아주 특이한 메일을 받았는데요.

[ARM64] GCC: 특정 함수를 최적화하지 않기 - optimize("O0") 옵션

Guillermo Austin Kim|2020년 6월 30일

코드를 작성한 후 실행을 하다보면 가끔 자신이 작성한 함수의 심벌이 사라지거나, 가끔 예상을 벗어나는 동작을 할 때가 있습니다.여러 가지 원인 중 하나가, 컴파일러가 최적화를 하면서 코드를 재배치를 하다가 발생합니다. 이번 포스팅에서는 GCC의 최적화 레벨을 각각의 함수에 지정하는 방법을 소개합니다.결론부터 말씀을 드리면 함수의 선언부에 아래 키워드를 추가하면 됩니다. * __attribute__((optimize("O0"))) 예제 코드와 함께 ARM-GCC 최적화에 대해 알아봅시다. ARM-GCC가 최적화하는 코드 예시 먼저 샘플 코드를 소개합니다.void add_cal_func(void){ unsigned int a, b, c; a = 7; b = 3; c = a + b; prin

[ARM] 최적화: 함수에 전달되는 아규먼트는 가급적 그대로 전달하세요

Guillermo Austin Kim|2020년 6월 29일

이번 시간에는 함수의 인자 값을 전달할 때의 최적화 방법에 대해 이야기를 해보려 해요.먼저, ARM 프로세서의 함수 호출 규약의 핵심을 말씀드리면; 함수에 전달되는 인자는 R0 ~ R3 레지스터에 전달함수가 반환하는 값은 R0 레지스터에 저장 그런데 코드를 작성하다보면 함수에서 전달되는 인자를 그대로 다른 함수에 전달하는 경우가 있습니다.이 때 되도록 이면 인자의 순서를 그대로 유지한채 전달하면 조금 더 적은 명령어로 코드가 실행됩니다. 먼저 예시 코드를 보겠습니다. 01 unsigned int notrace noinline add_function(unsigned int x, unsigned int y, unsigned int z)02 {03 return (x + y + z);04 }0506 voi