WORKQUEUE
Posts
35 posts[리눅스커널] 워크큐(workqueue): Trace32로 워크큐 자료 구조 디버깅하기
이번 시간에는 임베디드 디버깅 프로그램인 Trace32를 써서 워크큐 자료구조를 점검합니다. 리눅스 커널 시스템에서 커널 크래시가 나면 생성되는 vmcore를 올려 확인한 내용입니다. 참고로, vmcore는 라즈베리파이가 아니라 다른 ARM64비트 아키텍처를 적용한 시스템에서 받았습니다. 먼저 시스템 워크큐 전역 변수를 확인합니다.var.view %type %string system_wq1 (static struct workqueue_struct *) system_wq = 0xFFFFFFC632C15080 -> (2 (struct list_head) pwqs = ((struct list_head *) next = 0xFFFFFFC63A3B2870 3 (struct list_head)
[리눅스커널] 워크큐: 딜레이 워크는 누가 언제 호출할까?
이전 소절에서는 schedule_delayed_work() 함수를 호출하면 동적 타이머를 실행해서 지정한 지연 시각 후에 동적 타이머 핸들러인 delayed_work_timer_fn() 함수가 실행되도록 한다고 했습니다. 이번 소절에서는 delayed_work_timer_fn() 함수가 어떻게 호출되는지 살펴봅니다. delayed_work_timer_fn() 함수는 언제 실행할까요? 동적 타이머 만료 시각에 도달하면 Soft IRQ 컨택스트에서 delayed_work_timer_fn() 함수를 호출합니다. Soft IRQ 전체 구조와 흐름은 8장(커널 타이머)에서 상세히 다룹니다. Soft IRQ 개념이 익숙하지 않은 분은 8장을 먼저 읽고 오시면 됩니다. 먼저 delayed_work_ti
[리눅스커널] 워크큐(workqueue): 딜레이 워크 실행는 어디서 실행을 시작할까?
딜레이 워크를 실행하려면 어떤 함수를 호출해야 할까요? schedule_delayed_work() 함수를 실행하면 됩니다. 먼저 딜레이 워크를 실행하는 드라이버 코드를 소개하겠습니다.[https://elixir.bootlin.com/linux/v4.14.43/source/drivers/mmc/host/bcm2835.c]1 static2 bool bcm2835_send_command(struct bcm2835_host *host, struct mmc_command *cmd)3 {...3 if (!cmd->data && cmd->busy_timeout > 9000)4 timeout = DIV_ROUND_UP(cmd->busy_timeout, 1000) * HZ + HZ;5
[리눅스커널][워크큐] 딜레이 워크(delayed_work) 소개
딜레이 워크 소개 워크큐는 대표적인 커널 후반부 처리 기법으로 후반부 처리 코드를 워크 핸들러에서 실행합니다. 동기적으로 처리 할 필요가 없는 코드를 워크 핸들러에 위치시켜 비동기적으로 커널 쓰레드 레벨에서 처리하는 겁니다. 이런 구조로 드라이버를 설계하면 다양한 디바이스 드라이버 시나리오에 맞게 코드를 구성할 수 있습니다. 워크에서 유연성을 추가한 기법이 딜레이 워크입니다. 딜레이 워크란 무엇인가? 구체적으로 딜레이 워크란 무엇일까요? 딜레이 워크는 워크를 일정 시각(HZ 단위) 후에 지연시켜 실행합니다. 여기서 말하는 지연 시각은 디바이스 드라이버 시나리오에 맞게 변경할 수 있습니다. 라즈베리파이에선 진동수인 HZ는 100입니다. 예를 들어 다음 온도를 콘트롤하는 드라이버 시나리오를 생
![[1년 전 오늘] 250608 인천 무의도 덕점방파제 바다루어낚시 - 장대, 광어](https://img.zoomtrend.com/2026/06/10/1781084366-20250608122254.jpg)
![[CV] [Comi] '終末のハーレム ファンタジア' (종말의 하렘 판타지아) 17권. 그동안 SAVAN에 무슨 일이 있었던 거냐](https://img.zoomtrend.com/2026/06/10/1781084386-ECA484EBA6ACEC9790.jpg)

