리눅스

포스트: 556|아이템:리눅스(554)
Tags

Posts

556 posts

[라즈베리파이] 워크큐(Workqueue) - worker_thread() 함수 분석(2)

Guillermo Austin Kim|2018년 9월 13일

먼저 워커 쓰레드 핸들 함수인 worker_thread() 를 분석합니다.1 static int worker_thread(void *__worker)2 {3struct worker *worker = __worker;4struct worker_pool *pool = worker->pool;56worker->task->flags |= PF_WQ_WORKER;7 woke_up:8spin_lock_irq(&pool->lock);910/* am I supposed to die? */11if (unlikely(worker->flags & WORKER_DIE)) {12spin_unlock_irq(&pool->lock);13WARN_ON_ONCE(!l

[bash: sed] 출력 또는 제거할 범위를 문자열 패턴으로 지정하기

반달가면|2018년 9월 12일

sed에서 행번호를 이용해서 범위를 지정하는 방법은 이전 게시물을 참고하자. 기본적인 내용은 대략 아래와 같다. # my_data.txt 파일의 10번째 행 출력(p). -n 옵션으로 전체 출력은 억제(해당 조건에 맞는 행만 출력) sed -n 10p my_data.txt # my_data.txt 파일의 10~20번째 행 출력 sed -n 10,20p my_data.txt # my_data.txt 파일에서 10번째 행을 제거(d)하고 나머지 출력 sed 10d my_data.txt # my_data.txt 파일에서 10~20번째 행을 제거하고 나머지 출력 sed 10,20d my_data.txt 위의 예시에서 행번호 대신 특정 문자열을 기준으로 할 경우에는 "/문자열/" 형

[라즈베리파이] 워크큐(Workqueue) - 워크는 누가 언제 호출하나? (2) @process_one_work

Guillermo Austin Kim|2018년 9월 12일

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

[라즈베리파이] 워크큐(Workqueue) - 워크는 누가 언제 호출하나? (1) @process_one_work

Guillermo Austin Kim|2018년 9월 11일

워크를 워크큐에 큐잉하면 다음 그림과 같이 insert_work() 함수에서 wake_up_worker() 이란 함수를 호출해서 워커 쓰레드를 깨웁니다. 이 동작 흐름은 위 그림과 같이 3단계로 분류할 수 있습니다. 1 단계워크를 워크큐에 큐잉합니다. 2 단계wake_up_worker() 함수를 호출해서 워커 쓰레드를 깨웁니다. 커널 스케줄러에게 워커 쓰레드를 깨워달라는 요청입니다. 3 단계스케줄링 정책에 따라 워커 쓰레드가 실행할 순서가 되면 커널 스케줄러가 워커 쓰레드를 실행합니다. 워커 쓰레드 핸들 함수는 worker_thread() 입니다. 이 함수에서 process_one_work() 함수를 호출해서 워크 핸들러를 호출하는 겁니다. 이번 소절에서는 process_one_work() 함