Guillermo Austin Kim

Sources

Posts

998 posts

리눅스 커널은 정말 오픈 소스 프로젝트일까(2)?

Guillermo Austin Kim|2018년 7월 30일

경험은 실력을 낳고 실력은 경험으로 이어진다. 임베디드 리눅스 개발 경험은 그 만큼 중요하다. 데이터 시트에 맞게 디바이스 드라이버 구현을 하는 작업은 코드 몽키도 할 수 있다. 초보와 고수 차이는 디바이스 드라이버를 여러 다양한 환경에서 구동할 때 생기는 문제를 해결하는 능력이다. 임베디드 리눅스 개발 도중 여러 문제를 만난다. 그럼 이 문제를 해결하기 위해서 여러 단계를 밟아야 한다. 문제는 이런 문제 해결 분석과 같은 실무 경험이 리눅스 커널 개발자끼리도 공유되고 있지 않다는 것이다. 이 이유가 뭔 지 조금 더 살펴보자. 첫 번째는 실력 있는 임베디드 리눅스 개발자들은 대부분 바쁘다. 문제 하나를 해결하면 다른 문제를 봐야 할 경우가 많다. 내 주위에 밤 낮으로 문제를 해결해야 하는 고수 개발자를

[라즈베리파이] 커널 타이머 - msecs_to_jiffies 함수란

Guillermo Austin Kim|2018년 7월 30일

커널은 타이머를 HZ 단위 상대 시간을 나타내는 jiffies값을 기준으로 관리 합니다. 그리고 커널 타이머 함수는 HZ 단위 시간 정보를 받아 처리합니다. 그래서 커널이 이해할 수 있는 단위로 시간 정보를 변환시켜 줘야 합니다. msecs_to_jiffies() 함수가 이 역할을 수행합니다. 이 함수는 가독성도 높습니다. 함수 이름만 봐도 무슨 뜻인지 알기 쉽습니다. 실제 리눅스 커널에서 msecs_to_jiffies() 함수를 쓰는 코드를 살펴보겠습니다. 다음은 pstore 파일 시스템 코드 일부 조각입니다.[fs/pstore/platform.c]1 pstore_timer.expires = jiffies +2 msecs_to_jiffies(pstore_update_ms);3 add_time

[라즈베리파이] 커널 타이머 - jiffies란 값은 누가 언제 증가하나

Guillermo Austin Kim|2018년 7월 25일

jiffies에 대해 조금 더 깊이 알아보겠습니다. jiffies는 커널 시스템 타이머가 동적 타이머를 처리하는 횟수입니다. 그럼, jiffies란 값은 누가 언제 증가시킬까요? 이 변수는 타이머 인터럽트가 발생하고 난 후 do_timer() 함수에서 jiffies를 업데이트합니다. 소스 코드를 보면 이 내용을 더 쉽게 이해할 수 있으니 바로 코드 분석으로 들어가겠습니다.[kernel/time/timekeeping.c]1 void do_timer(unsigned long ticks)2 {3 jiffies_64 += ticks;4 calc_global_load(ticks);5} 3번 줄 코드를 보면 ticks이란 인자를 jiffies_64이란 jiffies 변수에 증감합니다. 여기서 do_timer()

[라즈베리파이] 커널 타이머 - jiffies와 jiffies_64 변수란

Guillermo Austin Kim|2018년 7월 22일

jiffies에 대해 알아보기 전에 jiffies와 jiffies_64 전역 변수에 대해 짚고 가겠습니다. 리눅스 커널 코드를 보면 두 개 변수를 많이 볼 수 있는데 어떤 변수가 jiffies인지 헷갈릴 때가 많습니다. 예를 하나 들어보기 위해 다음 코드를 봅시다.1 void pm_wakeup_ws_event(struct wakeup_source *ws, unsigned int msec, bool hard)2 {3 unsigned long flags;4 unsigned long expires;....5 expires = jiffies + msecs_to_jiffies(msec); pm_wakeup_ws_events() 함수 5번 줄 코드를 보면 expires이란 지역 변수에 jiffies와 msecs_t

[라즈베리파이] 커널 타이머(Kernel Timer) - jiffies란

Guillermo Austin Kim|2018년 7월 18일

jiffies는 커널 타이머를 실행하는 시간 단위입니다. 공학 용어로 Resolution이라고 합니다. jiffies를 지피스라고도 하는데 리눅스 커널에서 쓰는 jiffies란 용어를 그대로 쓰겠습니다. jiffies 개념을 이해하려면 HZ에 대해 배워야 합니다. 그럼 HZ는 뭘 의미할까요? HZ는 1초당 커널 타이머가 동적 타이머를 처리하는 횟수를 의미합니다. 그래서 커널 타이머의 실행 빈도는 HZ에 의해 정해집니다. 커널 타이머가 로컬 타이머를 처리하는 단위라고 말할 수 있습니다. HZ가 500이면 1초당 jiffies가 500번 +1만큼 증감하고 500번 커널 타이머가 실행합니다. 그럼 HZ가 크면 좋은 시스템일까요? 그렇지는 않습니다. HZ를 너무 큰 값으로 설정하면 시스템 과부하가 걸릴 수 있