Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

493
557
422263


[리눅스커널] 워크큐: 딜레이 워크 전체 흐름도 소개 7. 워크큐(Workqueue)

딜레이 워크는 지정한 시간만큼 후에 실행하는 워크입니다. 딜레이 워크 처리 과정에서 동적 타이머를 사용하는데 다음 그림을 보면서 '딜레이 워크 처리' 전체 실행 흐름을 확인하겠습니다.   

  
       [그림 7.20] 딜레이 워크 실행 전체 흐름도

각 단계별로 딜레이 워크 실행 흐름을 살펴보겠습니다.

① 단계: 딜레이 워크큐 초기화
딜레이 워크큐를 쓰려면 먼저 딜레이 워크큐를 초기화해야 합니다. 이를 위해 INIT_DELAYED_WORK() 함수를 호출해야 합니다.

② 단계: 딜레이 워크큐 타이머 등록

딜레이 워크를 실행하려면 지연 시간 정보와 함께 schedule_delayed_work() 함수를 호출해야 합니다. schedule_delayed_work() 함수 내부에서 딜레이 워크 전용 동적 타이머 핸들러인 delayed_work_timer_fn() 함수로 동적 타이머를 등록합니다.

③ 단계: 딜레이 워크 큐잉

딜레이 워크로 설정한 동적 타이머 만료 시각이 되면 타이머 핸들러인 delayed_work_timer_fn() 함수를 실행합니다. 이 함수는 다음 동작을 합니다. 

딜레이 워크를 워크큐에 큐잉
워커 스레드를 깨움

이 과정부터 워크와 실행 흐름이 같습니다.

④ 단계: 딜레이 워크 실행
워커 스레드가 깨어나면 worker_thread() 함수에서 process_one_work() 함수를 호출해 딜레이 워크를 실행합니다.

딜레이 워크 실행 전체 흐름도로 우리는 다음 사실을 알 수 있습니다.  

    딜레이 워크는 워크를 일정 시간 후 지연해 실행한다.

딜레이 워크 전체 흐름도를 살펴봤으니 이어서 딜레이 워크 초기화 과정을 소개합니다.

Updated: 04/19/2020



덧글

댓글 입력 영역