워크큐
Posts
40 posts[리눅스커널] 워크큐: struct worker 구조체 파악하기
워커를 관리하고 저장하는 자료구조는 worker 구조체입니다. 이번 절에서는 worker 구조체의 세부 필드를 분석하겠습니다. worker 구조체 분석 다음은 worker 구조체의 선언부입니다. struct worker {2 union {3 struct list_head entry; 4 struct hlist_node hentry; 5 };6 struct work_struct *current_work; 7 work_func_t current_func; 8 struct pool_workqueue *current_pwq; 9 bool desc_valid;10 struct list_head scheduled; 1112 struct task_struct *task; 13 struct worker_p
[리눅스커널] 딜레이 워크: 패치 코드 내용과 작성 방법 알아보기
이번 절에서는 딜레이 워크를 만들어보는 실습을 진행합니다. 실습할 패치 코드 시나리오는 다음과 같습니다. 인터럽트 핸들러에서 워크를 큐잉 워크 핸들러 실행 워크 핸들러에서 딜레이 워크를 실행 이번 장에서 배운 내용을 총복습하는 실습입니다. 먼저 패치 코드를 작성해 봅시다. 패치 코드의 내용과 작성 방법 먼저 패치 코드를 소개하겠습니다. diff --git a/drivers/mailbox/bcm2835-mailbox.c b/drivers/mailbox/bcm2835-mailbox.c--- a/drivers/mailbox/bcm2835-mailbox.c+++ b/drivers/mailbox/bcm2835-mailbox.c@@ -33,11 +33,23 @@1 #include
[리눅스커널] 워크큐: 워커 스레드 핸들 worker_thread() 함수 분석하기 (2/2)
2단계: “전처리” 단계 워커 스레드의 “전처리” 단계 코드를 분석할 차례입니다. 다음 24번째 줄 코드를 보겠습니다. 24 recheck:25/* no more worker necessary? */26if (!need_more_worker(pool))27goto sleep; need_more_worker() 함수는 다음 동작을 수행합니다.struct worker_pool 구조체 worklist 필드에 접근해 이미 큐잉한 워크가 있는지 체크struct worker_pool 구조체 nr_running 필드에 저장된 실행 중인 워커 스레드 갯수를 점검 워크를 워크큐에 큐잉한 적이 없다면 워커 스레드를 실행할 필요가 없습니다. 따라서 goto sleep; 구문을 실행해 다시 휴면에 진입합니다.
[리눅스커널] 워크큐: 워커 스레드 핸들 worker_thread() 함수 분석하기 (1/2)
커널 스레드를 처음 분석하려고 할 때 다음과 같은 의문이 생길 때가 있습니다. 새로운 커널 스레드 코드 분석을 시작할 때 어느 코드부터 분석해야 할까? 먼저 커널 스레드 핸들 함수를 열어봐야 합니다. 그 이유는 커널 스레드 세부 동작은 커널 스레드 핸들 함수에 구현됐기 때문입니다. 마찬가지로 워커 스레드 세부 동작을 알려면 먼저 스레드 핸들 함수인 worker_thread() 함수를 봐야 합니다. 이번 시간에는 worker_thread() 함수를 분석하면서 세부 동작 원리를 배워보겠습니다. 먼저 worker_thread() 함수의 주요 동작은 다음과 같습니다. 워크 실행필요 시 워커 스레드 생성 요청워커 스레드 종료 위 항목 중 핵심 동작은 워크를 실행하는 것이며 나머지는 워커를
