WORKQUEUE
Posts
35 posts![[라즈베리파이] 워크큐(Workqueue) - 워크는 누가 언제 호출하나? (1) @process_one_work](https://img.zoomtrend.com/2018/09/11/c0246238_5b93c0449743b.png)
[라즈베리파이] 워크큐(Workqueue) - 워크는 누가 언제 호출하나? (1) @process_one_work
워크를 워크큐에 큐잉하면 다음 그림과 같이 insert_work() 함수에서 wake_up_worker() 이란 함수를 호출해서 워커 쓰레드를 깨웁니다. 이 동작 흐름은 위 그림과 같이 3단계로 분류할 수 있습니다. 1 단계워크를 워크큐에 큐잉합니다. 2 단계wake_up_worker() 함수를 호출해서 워커 쓰레드를 깨웁니다. 커널 스케줄러에게 워커 쓰레드를 깨워달라는 요청입니다. 3 단계스케줄링 정책에 따라 워커 쓰레드가 실행할 순서가 되면 커널 스케줄러가 워커 쓰레드를 실행합니다. 워커 쓰레드 핸들 함수는 worker_thread() 입니다. 이 함수에서 process_one_work() 함수를 호출해서 워크 핸들러를 호출하는 겁니다. 이번 소절에서는 process_one_work() 함
![[라즈베리파이] 워크큐(Workqueue) - 워크를 워크큐 큐잉시 핵심함수 분석](https://img.zoomtrend.com/2018/09/10/c0246238_5b93bf36f26ff.png)
[라즈베리파이] 워크큐(Workqueue) - 워크를 워크큐 큐잉시 핵심함수 분석
From:워크큐(Workqueue) - 워크를 워크큐에 어떻게 큐잉할까?(1) 워크큐(Workqueue) - 워크를 워크큐에 어떻게 큐잉할까?(2) 이제부터 __queue_work() 함수에서 호출하는 다른 워크큐 주요 함수들을 알아봅니다. 시스템 워크큐 뿐만 아니라 다른 워크큐에서도 이용하는 함수들이니 잘 기억할 필요가 있습니다. get_work_pool() 함수get_work_pool() 함수 분석을 시작하겠습니다.[https://elixir.bootlin.com/linux/v4.14.43/source/kernel/workqueue.c#L709]1 static struct worker_pool *get_work_pool(struct work_struct *work)2 {3unsigned lon
![[라즈베리파이] 워크큐(Workqueue) - 워크를 워크큐에 어떻게 큐잉할까?(2)](https://img.zoomtrend.com/2018/09/09/c0246238_5b933ef12662e.png)
[라즈베리파이] 워크큐(Workqueue) - 워크를 워크큐에 어떻게 큐잉할까?(2)
From: 워크를 워크큐에 어떻게 큐잉할까?(1)에서 계속... 이번에는 28줄 코드를 보겠습니다.28last_pool = get_work_pool(work);struct work_struct 구조체인 work 변수로 get_work_pool() 함수를 호출해서 struct worker_pool 구조체 주소를 last_pool 지역변수로 읽습니다. get_work_pool() 함수는 조금 후 분석할 예정입니다. 이 코드만 보면 이해하기 쉽지 않으니 다음 그림을 같이 보겠습니다. 워크를 실행한 적이 있으면 struct work_struct.data 란 멤버 변수에 풀워크 주소를 저장합니다. get_work_pool() 함수는 위 그림에서 [1],[2] 번호와 같이 동작하면서 워커풀 주소를 가져옵니다.
![[라즈베리파이] 워크큐(Workqueue) - 워크를 워크큐에 어떻게 큐잉할까?(1)](https://img.zoomtrend.com/2018/09/08/c0246238_5b933e53d810f.png)
[라즈베리파이] 워크큐(Workqueue) - 워크를 워크큐에 어떻게 큐잉할까?(1)
워크를 초기화만 하면 워크를 실행할 수는 없습니다. 우선 워크를 워크큐에 큐잉해야 워커 쓰레드는 워크를 실행할 수 있습니다. 이번절에서는 워크를 워크큐에 큐잉하면 워크큐 전체 흐름으로 어떤 동작을 하는지 알아 보겠습니다. 워크 초기화는 struct work_struct 타입 변수를 INIT_WORK() 함수에 전달하거나 DECLEAR_WORK() 함수로 struct work_struct 변수를 선언하면 됩니다. 이 워크를 워크큐를 큐잉하려면 struct work_struct 타입 변수를 schedule_work()이라는 함수에 파라미터로 전달하면 됩니다. 이번에는 워크를 워크큐에 큐잉하는 코드는 다음과 같습니다.[https://elixir.bootlin.com/linux/v4.14.43/source/d



![[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)