ARM Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

197239
1625
172594


[리눅스커널] 프로세스: 태스크란 4. 프로세스(Process) 관리

제가 처음 리눅스 커널 코드를 볼 때 가장 궁금했던 점은 “리눅스 커널 함수의 이름에 ‘task’가 왜 보일까?”라는 것이었습니다. 사실 태스크는 리눅스 외의 다른 운영체제에서 예전부터 많이 쓰던 용어입니다. 운영체제 이론을 다루는 책에서는 태스크라는 단어를 많이 볼 수 있습니다.

태스크는 운영체제에서 어떤 의미일까요? 말 그대로 실행(Execution)이라 말할 수 있습니다.
운영체제 책을 보면 첫 장에서 태스크에 대한 설명을 볼 수 있습니다. 예전에는 특정 코드나 프로그램 실행을 일괄 처리했습니다. 이러한 실행 및 작업 단위를 태스크라고 불렀습니다.

임베디드 개발자는 태스크의 개수와 이름을 지정했고 시스템이 구동되는 동안 태스크는 바뀌지 않았습니다. 예를 들면 화면이 없는 간단한 시나리오로 구동하는 임베디드 시스템에서는 태스크 2개가 서로 시그널을 주고받으며 시스템 전체를 제어했습니다.

시간이 흘러 기존 임베디드 개발자들이 리눅스를 사용하는 임베디드 프로젝트로 유입됐습니다. 기존의 태스크라는 용어에 익숙한 임베디드 개발자들이 리눅스에서도 썼던 '태스크'라는 용어를 사용했습니다. '프로그램을 실행하는 단위'라고 생각했던 태스크의 개념은 프로세스와 겹치는 부분이 많기 때문입니다.

---
예전에 쓰던 용어를 현재 소프트웨어에 그대로 쓰는 경우가 많습니다. 이를 레거시(Legacy)라고 표현하는데, 여기에는 과거의 유물이라는 뜻도 있습니다.
---

그래서 예전에 썼던 태스크라는 용어를 리눅스 커널 소스코드에서 그대로 쓰고 있습니다. 대표적인 예로 프로세스 속성을 표시하는 구조체의 이름을 process_struct 대신 task_struct으로 쓰고 있습니다. 이처럼 프로세스마다 속성을 표현하는 task_struct 구조체를 태스크 디스크립터 혹은 프로세스 디스크립터라고도 합니다.

이처럼 리눅스 커널의 함수 이름이나 변수 중에 task란 단어가 보이면 프로세스 관련 코드라 생각해도 좋습니다. 예를 들어, 다음 함수는 모두 프로세스를 관리 및 제어하는 역할을 수행하며, 함수 이름에 보이는 task는 process로 바꿔도 무방합니다.

dump_task_regs()
get_task_mm()
get_task_pid()
idle_task()
task_tick_stop()

그러면 이번 절에서 배운 내용을 간단히 정리해 봅시다.

리눅스 커널에서 태스크는 프로세스와 같은 개념으로 쓰는 용어다. 
소스코드나 프로세스에 대한 설명을 읽을 때 태스크란 단어를 보면 프로세스와 같은 개념으로 이해하자.

* 유튜브 강의 동영상도 있으니 같이 들으시면 좋습니다. 




#프로세스

프로세스 소개 
프로세스 확인하기  
프로세스는 어떻게 생성할까?  
유저 레벨 프로세스 실행 실습  
커널 스레드  
커널 내부 프로세스의 생성 과정   
프로세스의 종료 과정 분석  
태스크 디스크립터(task_struct 구조체)  
스레드 정보: thread_info 구조체  
프로세스의 태스크 디스크립터에 접근하는 매크로 함수  
프로세스 디버깅  
   * glibc의 fork() 함수를 gdb로 디버깅하기  


"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

Thanks,
Austin Kim(austindh.kim@gmail.com)

# Reference: For more information on 'Linux Kernel';

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2


Thanks,
Austin Kim

핑백

덧글

댓글 입력 영역