Posts
556 posts[라즈베리파이] 커널동기화 - 임계영역(Critical Section)이란
리눅스 커널이나 운영체제에서 임계영역(Critical Section)이나 커널 동기화를 설명할 때 화장실을 예를 많이 듭니다. 하나밖에 없는 화장실 문에 있는 자물쇠를 잠그고 용무를 보는 상황입니다. 위 상황을 리눅스 커널 동기화 과정과 빗대서 생각해 봅시다. 첫 번째, 자물쇠는 화장실 문에 있는 잠금장치입니다. 누구나 화장실에 들어갈 때 화장실 문을 잠급니다. 화장실에 들어갈 때 먼저 화장실 문에 있는 자물쇠가 잠겨 있나 확인하는 습관입니다. 화장실 잠금장치는 여러 가지 종류가 있듯 리눅스 커널에도 스핀락, 뮤텍스 기법에 따라 자물쇠 잠금 방법이 다릅니다. 두 번째, 화장실에서 용무는 딱 한 사람만 볼 수 있습니다. 화장실에서 두 사람이 동시에 들어갈 수 없습니다. 유일하게 한 사람이 일을 보는 순
[라즈베리파이]워크큐(Workqueue) - 워크 초기화는 어떻게 하나
워크를 실행하기 위해서 먼저 워크를 초기화해야 합니다. 워크를 초기화하기 위해서 INIT_WORK() 혹은 DECLARE_WORK() 매크로를 써야 합니다. INIT_WORK() 매크로는 함수가 실행할 때 워크를 동적으로 초기화하고 DECLARE_WORK()은 컴파일이 될 때 전역 변수로 워크를 설정합니다. 두 매크로를 쓰면 워크를 어떻게 초기화하는지 드라이버 코드를 확인하겠습니다. 첫 번째로 INIT_WORK() 매크로로 워크를 초기화하는 방법입니다. 다음 4번째 줄 코드를 보겠습니다.1 void tty_buffer_init(struct tty_port *port)2 {3 struct tty_bufhead *buf = &port->buf;..4 INIT_WORK(&buf->wo
[라즈베리파이] 커널 타이머 - 동적 타이머 실습 및 로그 분석(1)
이전 시간에 소스 코드 분석으로 커널 시스템 타이머 동작에 대해 알아봤습니다. 코드를 읽고 이해하는 과정도 중요하지만 배운 내용을 자신의 것으로 만들려면 분석한 코드가 리눅스 시스템에서 실제 어떻게 실행하는지 확인해야 합니다. 한 걸음 나아가 코드를 수정하면서 라즈베리파이에서는 커널 타이머 자료구조 데이터가 어떤 값인지도 확인할 필요도 있습니다. 이번에 소개하는 패치 코드를 입력하고 ftrace 로그를 분석하는 과정을 거치면 배운 내용이 훨씬 더 오랫동안 기억에 남을 것이라 확신합니다. 먼저 전체 패치 코드를 소개합니다.diff --git a/kernel/softirq.c b/kernel/softirq.c--- a/kernel/softirq.c+++ b/kernel/softirq.c@@ -424,10 +
[라즈베리파이] 커널 타이머 -동적 타이머는 누가 언제 호출하나? (3)
커널 시스템 타이머 전체 흐름에서 4단계를 분석할 차례입니다. [그림 ] 커널 타이머 전체 흐름도 4단계마지막 4단계인 커널 시스템 타이머가 동적 타이머를 종료하고 동적 타이머 핸들러 함수를 호출하는 동작을 살펴보겠습니다. 주석문을 지우고 본 run_timer_softirq() 함수 구현부는 다음과 같습니다. 1 static __latent_entropy void run_timer_softirq(struct softirq_action *h)2 {3struct timer_base *base = this_cpu_ptr(&timer_bases[BASE_STD]);4base->must_forward_clk = false;56__run_timers(base);7if (IS_ENABLED(


![[CV] [Comi] 'ダンダダン'(단다단) 24권. 레드 바론](https://img.zoomtrend.com/2026/06/11/1781228393-EB829CED8380.jpg)