Guillermo Austin Kim

Sources

Posts

998 posts

임베디드 프로그래머 현실 - 가짜 아키텍트

Guillermo Austin Kim|2019년 8월 17일

Mike: 이번에는 어떤 이야기를 들려주실 껀가요? Austin: 2년 전에 겪었던 재미있는 스토리를 이야기를 해보려고 해. '가짜 임베디드 리눅스' 아키텍트라고 제목을 정하면 좋을 것 같다. Mike: 가짜 아키텍트라? 기억이 가물 가물한데요? Austin: 언제나 우리에게 도움이 안되는 허접한 개발자나 관리자를 만나면 그 당시 왕짜증이 나지만 시간이 흐르면 바로 잊어먹지.하지만 그 기억이 희미해지기 전에 간단한 기록이라도 남기는 게 좋을 것 같아. 그래야 비슷한 상황을 피할 수 있지. 한 가지 질문을 할께. 아키텍트면 보통 뭘 의미할까? Mike: 아키텍트면 소스 코드 구조를 설계하는 소프트웨어 개발자가 아닌가요? Austin: 맞는 말이지. 아키텍트는 소스 코드의 구조 및 기반을 잡는 개발자

[리눅스커널] 시간관리: 동적 타이머 등록 과정 세부 커널 타이머 함수 분석

Guillermo Austin Kim|2019년 8월 13일

이번 소절에서는 __mod_timer() 함수에서 호출한 커널 타이머 함수를 분석합니다. timer_pending() lock_timer_base() forward_timer_base() enqueue_timer() 처음 리눅스 커널을 접하는 분들에겐 분석하기 어려운 함수들입니다. __mod_timer() 함수 이외 다른 커널 타이머 함수에서 호출하니 사용 용도라도 익혀둡시다. timer_pending() 함수 분석timer_pending() 함수는 동적 타이머가 이미 등록된 상태인지를 알려줍니다. 함수 선언부는 다음과 같습니다.[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/include/linux/timer.h]static inline int

[리눅스커널] 시간관리: 동적 타이머 자료구조 struct list 소개

Guillermo Austin Kim|2019년 8월 13일

동적 타이머 초기화 과정을 살펴보기 전 동적 타이머 자료구조인 struct timer_list 구조체를 소개합니다.[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/include/linux/timer.h]01 struct timer_list {02 struct hlist_node entry;03 unsigned long expires;04 void (*function)(struct timer_list *);05 u32 flags;0607 #ifdef CONFIG_LOCKDEP08 struct lockdep_map lockdep_map;09 #endif10 }; 구조체 각 필드들의 의미를 살펴보겠습니다. struct hlist_node entry;해시

[리눅스커널] 시간관리: 동적 타이머 전체 흐름도 소개

Guillermo Austin Kim|2019년 8월 13일

동적 타이머 초기화를 알아보기 앞서 동적 타이머 전체 동작 흐름에 대해 알아봅시다. [그림 8.2] 동적 타이머 실행 흐름도 위 그림과 같이 동적 타이머 동작은 3단계로 나눌 수 있습니다. 각 단계별 세부 동작을 살펴보겠습니다. 1단계: 동적 타이머 초기화동적 타이머 초기화는 보통 드라이버 레벨에서 수행합니다. 동적 타이머는 struct timer_list 구조체 필드 중에 flags만 바꿉니다. 2 단계: 동적 타이머 등록 단계동적 타이머 실행도 마찬가지로 드라이버 레벨에서 이루어집니다. 각자 드라이버 시나리오에 따라 동적 타이머 만료 시간을 HZ 단위로 지정한 다음 add_timer() 함수를 호출합니다. 3 단계: 동적 타이머 실행동적 타이머가 지정한 만료 시간이 되면 커널 시스템 타이머가

[리눅스커널] 프로세스: struct thread_info - 인터럽트 컨택스트 실행 저장

Guillermo Austin Kim|2019년 8월 9일

struct thread_info 필드 중 preempt_count는 프로세스 컨택스트 정보를 저장합니다. 이번 소절에서는 preempt_count 필드 중심으로 컨택스트 정보가 바뀌는 과정을 살펴보겠습니다. 인터럽트 컨택스트 실행 시작 및 종료 설정 Soft IRQ 컨택스트 실행 시작 및 종료 설정 프로세스 선점 스케줄링 가능 여부 먼저, ‘인터럽트 컨택스트 실행 시작’을 어느 함수에서 설정하는지 살펴보겠습니다. 인터럽트 컨택스트 실행 저장리눅스 시스템에서 인터럽트는 언제든 발생할 수 있습니다. 인터럽트가 발생하면 프로세스 실행을 멈추고 인터럽트에 해당하는 인터럽트 핸들러를 실행합니다. 커널에서는 인터럽트가 발생해서 인터럽트 서비스 루틴을 실행하는 동작을 인터럽트 컨택스트라고 부릅니다. st