[리눅스 커널 구조 원리] #3. 유저 프로세스

문연수·2025년 3월 15일
0

1. 프로세스, 스레드, 그리고 태스크

필자가 예전에 iamroot 에서 활동하면서 정리한 글이다:

https://velog.io/@mythos/커널-스터디iamroot-18기-2주차-내용-정리-1

 엄밀하게 말해서 리눅스 커널은 프로세스라는 개념이 없다. 오직 태스크만이 있다. 그럼 유저 레벨에서는 어떻게 태스크를 쓰레드, 그리고 프로세스로 구분할까? 아주 간단하다. 태스크가 쓰레드가 되고, 태스크 그룹이 프로세스로 구분된다.

 그래서 TID, TGID 라는 두 가지 값이 존재하게 되는데 TID 말 그대로 태스크 고유값, TGIDTask Group ID 로 태스크 그룹 고유값을 나타내며 TGID 가 곧 PID 가 된다.

 유저 레벨에서는 TGIDTID 가 같으면 프로세스, TGIDTID 가 다르면 쓰레드다.

2. 프로세스 생성

 책에서는 _do_fork 라는 이름의 함수를 소개하는데 이건 과거의 함수이고 더 이상 존재하지도, 또 사용되지도 않는다. 현 시점에서는 어떤 계열의 함수던 모두 최종적으로 kernel_clone 을 타고 copy_process 를 실행하게 된다:

 맨 아래만 보면 되는데 __arm64_sys_clone -> __do_sys_clone -> kernel_clone -> copy_process 순으로 실행된다. 어떤 clone 이던 fork 계열이던 결국 copy_process 를 수행한다.

3. 프로세스 종료

__arm64_sys_exit -> do_group_exit -> do_exit 의 순서대로 실행된다.

profile
2000.11.30

0개의 댓글

관련 채용 정보