[임베디드] 소프트웨어의 지배자 - 오픈 소스 프로젝트
By Guillermo Austin Kim | 2019년 12월 26일 |
제가 개발자로 첫 걸음을 내딛으면서 플래시 엔진을 포팅하는 일을 맡았어요. 조금 전문적으로 말하자면 미들 웨어 계층의 코드를 짰다고 해야 할까요? 플레시 엔진을 포팅하는 소스 코드는 물론 회사의 소유였어요. 물론 제가 작성한 소스 코드는 외부에 공개할 생각도 없었고, 만약 공개한다면 처벌을 받을 것 같았어요. 왜냐면 소스 코드는 회사의 소유물이기 때문이죠. 요즘도 회사의 기밀을 누출했다는 개발자의 뉴스를 보면 '소스 코드를 몰래 들고 튀었다.'란 이야기를 듣곤 하죠. 한 4~5년 개발을 하면서 소프트웨어 개발의 세계에서는 독특한 문화가 있다는 사실을 알게 됐어요. * 가장 먼저 희한하다고 느꼈던 것은 커뮤니티였어요. 웹에는 정말 수많은 개발 관련 커뮤니티가 있어요. 누군가 프로그래밍에 대해 질문을
[리눅스커널] 워크큐: 워커 스레드 핸들 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