안녕하세요,

 

커널주중 E조 첫 주 스터디 진행 시 tgid 및 pid개념 정리에 2주간 질문이 남아 안목이 있으신 분들의 의견을 들어보고 싶어 질문드립니다.

 

저희 쪽에서는 당연하게도 2가지 접근이 있었는데, 아래 두가지 방향 중 어느 방향이 맞는 해석일까요?

 

-------------

  • - task_struct의 pid 필드는 우리가 알고 있는 PID(Process ID) 개념

PID를 얻기 위해 사용하는 getpid()는 pid를 가져옴. tgid는 실제 PID와는 다르게 개념상 존재하는 필드로 보임.

내지는 pid는 우리가 아는 PID 개념대로 프로세스는 유니크하게, 쓰레드는 부모의 pid와 같이 정해지며, 쓰레드 id구분을 위해 tid라는게 따로 있음. (-> 이 부분은 저도 task_struct구조를 못 봐서 아직은 잘 모르겠습니다.)

뭐 어쨌거나 tgid=PID가 아님! 다른 개념임!

 

  • - task_struct의 pid 필드는 우리가 알고 있는 PID와 다르며, tgid 필드가 PID 개념

PID를 얻기 위해 사용하는 getpid()는 tgid를 가져오는 함수임. pid필드는 우리가 아는 PID 개념에서 특별히 중요한 개념은 아닌 듯.

 

-------------

 

2주차 당시 제가 이해한 바는 아래와 같았습니다.

  1. - 먼저, 기존에 가지고 있던 PID에 대한 지식은 완전 배제 (아직 PID라는 개념은 Process ID가 아니다)
  2. - task_struct 구조체가 생성될때마다 pid(unique한 key)가 생성됨
  3. - POSIX Standard에서 정한 바, 생성된 task가 프로세스일 경우 {tgid}={pid}, 쓰레드일 경우 {tgid}={부모의 pid}로 정의

따라서 pid는 1부터 생성된다는 가정 하에, Process A->Process B->Thread A' (Process A에서 생성) 순서로 task_struct 생성 시

  1. - Process A (pid=1, 프로세스로 생성되었으므로 tgid=pid=1)
  2. - Process B (pid=2, 프로세스로 생성되었으므로 tgid=pid=2)
  3. - Thread A' (pid=3, 쓰레드로 생성되었으므로 tgid=부모 pid=1)

getpid()는 tgid를 리턴하므로, Process A, Thread A'는 1, Process B는 2를 리턴하게 된다고 이해했습니다.

 

이 과정에 따라 tgid는 POSIX Standard에서 정의하는 PID 개념과 equivalent하여 리눅스 시스템의 실제 PID로 차용하게 된 것 같습니다.

기존 pid는 그냥 task_struct 생성 시 나온 unique한 값이라는 의미밖에 없어 보이는 것 같습니다. 굳이 알려고 한다면 gettid라는 함수나 별도의 시스템콜을 이용하여 get하는 것 같습니다. (정확한 인용을 못한건 양해 부탁드립니다.)

 

------------

 

추가 질문으로

 

  • - 한 프로세스를 한 개의 쓰레드로 봐야하는가, 아니면 한 프로세스는 별도로 한 개의 쓰레드를 가지는가?

스터디 중에는 해석하기 나름이라고 생각했으나 끝나고 개인적으로 다시 생각해 봤을 땐 그냥 프로세스나 쓰레드는 별개의 개념인 것 같았습니다. 제 생각에 프로세스나 쓰레드나 리눅스에서는 task_struct로 각각 독립적으로 표현되고 작업단위로서 스케줄링당하므로 프로세스가 별도로 메인 쓰레드 하나를 가지는 건 아닌 것 같습니다.

 

덧붙여 2주밖에 안 됐지만 엉뚱한 질문에도 잘 참고 넘어가 주시는 팀원분들께 감사드립니다.

 

++덧, 게시글에는 서식이 안 먹네요ㅠ

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 프로그래밍 관련 Q&A 게시판 입니다. woos 2016.04.09 22240
478 파일시스템관련 서적추천 부탁드립니다. [7] 김영일 2012.04.25 7330
477 ARM 인터럽트 관련 [5] 무명 2019.04.08 1459
476 인터럽트 중첩 관련 [4] 무명 2019.04.05 813
475 program을 실행 할 때 shell or dameon [2] wizard1483 2019.01.14 324
474 메모리와 관련하여 질문있습니다. [5] 인그니야 2018.10.17 361
473 커널 스터디 관련 질문있습니다. [1] bakery 2018.07.08 543
472 커널스터디 추가로 참석해도 되나요? [3] 빨강이 2018.05.08 951
471 안녕하세요 스터디 관련하여 문의드립니다. [1] kevin 2018.04.18 458
470 linux proc 수정 관련 질문드립니다. [1] AERO 2018.03.02 562
469 임베디드 커널 컴파일에 관련된 질문입니다. [1] 김영일 2018.02.26 474
468 리눅스 커널 네트워킹 책 읽어보신분 [1] 말아 2017.08.31 903
467 안녕하세요 soheemon 2018.02.26 284
466 커널 스터디 관련 궁금합니다. [1] 마스터 2018.01.17 631
465 커널 스터디 참석하고 싶습니다! [1] js뚝섬 2017.09.19 759
464 커널에서 page alloc에 관해서 [1] 미다리로23 2017.02.05 34565
463 SMP관련 질문입니다. [2] 컴퓨터 2017.04.13 16583
462 create_workqueu 와 create_singlethread_workqueue의 차이 ? [1] 박성열2 2017.04.25 1297
461 파일시스템에 관한 질문(Htree [6] 사앙조 2017.05.22 17066
» [커널주중 E조 스터디 이슈] tgid, pid 개념 [2] 김지성 2017.05.28 2835
459 리눅스에서의 우선순위 [2] 사앙조 2017.05.14 1113
XE Login