워크큐
Posts
40 posts[라즈베리파이] 워크큐(Workqueue) - 워크는 누가 언제 호출하나? (2) @process_one_work
From...워크는 누가 언제 호출하나? (1) @process_one_work 다음 24~26번 줄 코드를 분석하겠습니다.24 worker->current_work = work;25 worker->current_func = work->func;26 worker->current_pwq = pwq; 24~25번 줄 코드에서 worker->current_work이란 멤버에 work를 등록하고 worker->current_func 함수 포인터에 워크 핸들러 함수를 지정합니다. 26번 줄 코드를 보면 worker->current_pwq에 워커 풀 주소를 저장합니다. process_one_work() 함수에서 워크 핸들러는 worker->current_func 함
![[라즈베리파이] 워크큐(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] 번호와 같이 동작하면서 워커풀 주소를 가져옵니다.
![[웹툰단행본] 『통제구역관리부』 1권 후기 : 이상한 변칙과 기이한 일들이 일어나는 공간에 대하여](https://img.zoomtrend.com/2026/06/09/1780996474-SE-5eda86fa-0d63-4afd-b8dd-b801879fed52.jpg)


![[CV] [Comi] 'あかね噺'(아카네 이야기) 22권. 아카네의 첫 전력 승부](https://img.zoomtrend.com/2026/06/08/1780982081-EC9D8CEC9585EC9D98EBA6ACEB93ACEC9CBCEBA19C.jpg)