Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

85235
1036
103655


[리눅스커널] 워크큐: 워크는 누가 언제 호출하나? 8장. 워크큐

이전 절에서 워크를 워크큐에 큐잉하는 과정까지 살펴봤습니다. 이어서 워크를 실행하는 세부 동작을 소스 코드 분석으로 알아 보겠습니다.

다음 워크 전체 흐름도에서 워크를 실행하는 부분을 배워봅시다.

다시 워크를 워크큐에 큐잉하는 과정을 복습하면서 워크 실행 단계를 확인합시다. 

1 단계
워크를 워크큐에 큐잉합니다. 

2 단계
wake_up_worker() 함수를 호출해서 워커 스레드를 깨웁니다. 커널 스케줄러에게 워커 스레드를 깨워달라는 요청을 하면 스케줄러는 우선 순위를 고려해 워커 스레드를 실행합니다.  

3 단계
스케줄링 정책에 따라 워커 스레드가 실행할 순서가 되면 커널 스케줄러는 워커 스레드를 실행합니다. 워커 스레드 핸들 함수는 worker_thread() 입니다. 이 함수에서 process_one_work() 함수를 호출해서 워크 핸들러를 호출하는 것입니다.

이번 절에서 살펴볼 부분은 이 3단계이며 워크를 실행하는 세부 동작입니다.
이번에는 워크를 누가 언제 실행하는지를 Q&A로 정리해보겠습니다.

   "워크는 누가 실행할까?"

워커 스레드입니다. 워크를 워크큐에 큐잉하면 워커 스레드를 깨웁니다. 

   "워커 스레드가 무슨 일을 하는지 확인하려면 어떤 코드를 봐야 할까?"

워커 스레드는 커널 스레드 중 하나입니다. 커널 스레드가 무슨 일을 하는지 보려면 스레드 핸들 함수를 봐야 합니다. 워커 스레드의 스레드 핸들은 worker_thread() 함수이니 이 함수 구현부를 봐야합니다.

이번 소절에서는 다음 함수를 차례로 분석하면서 워크큐에서 워크를 어떻게 실행하는지 알아보겠습니다.
  - worker_thread()
  - process_one_work()


#Reference 워크큐
워크큐 소개
워크큐 종류 알아보기
워크란  
워크를 워크큐에 어떻게 큐잉할까?
   워크를 큐잉할 때 호출하는 워크큐 커널 함수 분석   
워커 쓰레드란
워크큐 실습 및 디버깅
   ftrace로 워크큐 동작 확인   
   인터럽트 후반부로 워크큐 추가 실습 및 로그 분석 
   Trace32로 워크큐 자료 구조 디버깅하기 
딜레이 워크 소개  
   딜레이 워크는 누가 언제 호출할까?
라즈베리파이 딜레이 워크 실습 및 로그 확인  


핑백

덧글

댓글 입력 영역