라즈베리파이
Posts
191 posts[라즈베리파이] 워크큐(Workqueue) - ftrace 동작 확인
이번에는 라즈베리파이에서 워크가 실제 어떻게 동작하는지 ftrace로 확인하겠습니다. 이를 위해 다음과 같이 ftrace 로그를 설정할 필요가 있습니다.#!/bin/sh echo 0 > /sys/kernel/debug/tracing/tracing_onsleep 1echo "tracing_off" echo 0 > /sys/kernel/debug/tracing/events/enablesleep 1echo "events disabled" echo secondary_start_kernel > /sys/kernel/debug/tracing/set_ftrace_filtersleep 1echo "set_ftrace_filter init" echo function > /sys/kern
[리눅스] tgid와 pid에 대해서...
예전 커널부터 리눅스는 태스크 마다, tgid 와 pid 멤버가 있었습니다. tgid 는 thread group id 을 나타내고, (posix.1 에서 정의하는 프로세스)pid 는 thread id 를 나타냅니다, 예전에 모든 스레드는, tgid 와 pid 가 같았습니다. 새로운 커널에서는 leader thread 인 경우만, tgid 와 pid 가 같고, child thread 인 경우는 tgid 와 pid 는 다릅니다. getpid 를 호출하면 tgid 를 돌려주므로, 같은 thread group 인 경우 다 같습니다.pid 를 알고 싶으면, sys_gettid() 커널 함수를 호출하면 되고, child thread 에 signal 을 보내고 싶으면, sys_tkill() 커널 함수를 호출하면
[라즈베리파이] 워크큐(Workqueue) - worker_thread() 함수 분석(3)
Contents of tableworker_thread() 함수 분석(1)worker_thread() 함수 분석(2)worker_thread() 함수 분석(3) 이번에는 worker_thread() 함수에서 가장 중요한 37번 줄 코드를 분석할 차례입니다. 위 그림에서 워커 쓰레드의 “실행” 단계입니다. 코드를 봅시다.37do {38struct work_struct *work =39list_first_entry(&pool->worklist,40 struct work_struct, entry);4142pool->watchdog_ts = jiffies;4344if (likely(!(*work_data_bits(work) & WORK_STRUCT_
[라즈베리파이] 프로세스 - 스케줄링(Preemption): 커널 모드 인터럽트 발생
이번에는 커널 모드에서 인터럽트가 발생했을때 스케줄링(Preemption)하는 동작을 살펴봅니다. 커널 모드에서 커널 프로세스가 실행 중 인터럽트가 발생하면 __irq_svc 이란 인터럽트 벡터로 PC를 바꿉니다.__irq_svc 코드를 봅시다.[https://elixir.bootlin.com/linux/v4.14.49/source/arch/arm/kernel/entry-armv.S]1 __irq_svc:2 svc_entry3 irq_handler45 #ifdef CONFIG_PREEMPT6 ldr r8, [tsk, #TI_PREEMPT] @ get preempt count7 ldr r0, [tsk, #TI_FLAGS] @ get flags8 teq r8, #0 @ if preempt count

![[Spoiler] 점프 신작 '공주님 고문 시간입니다' 원작자에 '우공못' 작가 그림. '시간정지용사' 또다른 플레이어? '다음에 오는 만화 대상' 운영 잡지 폐간](https://img.zoomtrend.com/2026/06/07/1780881297-ECA090ED948426-28EC95A0EB8B88EBA980EC8B9CEAB7B8EB8490.jpeg)
