[리눅스커널] 워크큐: 워커 스레드 핸들 worker_thread() 함수 분석하기 (2/2)
By Guillermo Austin Kim | 2019년 10월 1일 |
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)
By Guillermo Austin Kim | 2019년 9월 29일 |
커널 스레드를 처음 분석하려고 할 때 다음과 같은 의문이 생길 때가 있습니다. 새로운 커널 스레드 코드 분석을 시작할 때 어느 코드부터 분석해야 할까? 먼저 커널 스레드 핸들 함수를 열어봐야 합니다. 그 이유는 커널 스레드 세부 동작은 커널 스레드 핸들 함수에 구현됐기 때문입니다. 마찬가지로 워커 스레드 세부 동작을 알려면 먼저 스레드 핸들 함수인 worker_thread() 함수를 봐야 합니다. 이번 시간에는 worker_thread() 함수를 분석하면서 세부 동작 원리를 배워보겠습니다. 먼저 worker_thread() 함수의 주요 동작은 다음과 같습니다. 워크 실행필요 시 워커 스레드 생성 요청워커 스레드 종료 위 항목 중 핵심 동작은 워크를 실행하는 것이며 나머지는 워커를
[리눅스커널][스케줄링] ftrace로 컨택스트 스위칭 동작 확인
By Guillermo Austin Kim | 2019년 3월 6일 |
ftrace로 컨택스트 스위칭 동작 확인 이전 절에 봤던 ftrace 로그를 살펴보면서 스케줄링 동작을 살펴봅시다.lxpanel-718 [002] d... 7831.739824: sched_switch: prev_comm=lxpanel prev_pid=718 prev_prio=120 prev_state=D ==> next_comm=Xorg next_pid=552 next_prio=120 먼저 메시지 가장 왼쪽 부분을 보겠습니다. CPU2에서 lxpanel(pid-718) 프로세스가 실행 중입니다. 휴면에 진입할 프로세스는 lxpanel(pid=718) 이고 다음에 실행될 프로세스는 Xorg(pid=552)입니다. - struct task_struct *prev: prev_comm=lxpane
[리눅스커널][가상파일시스템] 파일 객체: fsync() 함수 연산 세부 동작 분석
By Guillermo Austin Kim | 2019년 3월 28일 |
파일 객체: fsync() 함수 연산 세부 동작 분석 유저 공간에서 쓰기 버퍼에 저장된 데이터를 디스크에 저장하고 싶을 때가 있습니다.이 때 fsync() 혹은 fdatasync() 함수를 호출합니다. fsync 명령어를 입력해서 리눅스 메뉴얼을 확인합시다.FSYNC(2) Linux Programmer's Manual NAME fsync, fdatasync - synchronize a file's in-core state with storage device SYNOPSIS #include <unistd.h> int fsync(int fd); int fdatasync(int fd); 내용을 보면 파일의 내용을 스토리지 디바이스에 동기화하는 동작입