안녕하세요,

 

커널주중 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 22244
518 홈페이지 어떻습니까? [8] 백창우 2006.06.05 9722
517 u-boot 소스 분석에서 궁금한 점이 있습니다. [6] 원민수 2006.06.28 15196
516 알아볼 내용. [6] 원민수 2006.11.12 9892
515 ppc에서 preempt 완벽 지원여부 아시는분? [1] 최종환 2007.02.22 16131
514 i386의 i 와 386은 각각 어떤 의미인가요? [4] 이경호 2007.03.07 13685
513 아키텍쳐 바이블 책 문의입니다. [2] 이경호 2007.03.18 11958
512 다음 커널분석 스터디에 참가하고 싶습니다. [1] 김기태 2007.07.04 8820
511 커널 스터디에 관해서;;. 질문드립니다. [5] 한상은 2007.07.11 8693
510 커널 스터디는 어떻게 참여해야하느건가요? [1] 김태진 2007.08.10 8806
509 s3c2440기반의 리눅스 커널 분석 중 MM관련 질문입니다. 유태경 2007.09.02 21523
508 스터디 참여에 관해서 질문이있습니다. [1] 최대진 2007.09.12 8530
507 모집 공고 보고 참석 메일 보냈는데요. [1] 문경원 2007.10.17 8273
506 Linux kernel source 분석 study에 대하여 질문이 있습니다. [1] 온정상 2007.10.19 8712
505 arm 보드 구매에 대한 조언 부탁 드립니다. [1] 김성준 2007.10.27 8581
504 질문..음.. [2] 박은병 2007.12.14 6453
503 VMM 세미나중 디바이스 가상화 관련 질문^^.. [3] 박은병 2008.01.04 7252
502 PS/2 mouse port control 백창우 2008.01.17 7196
501 디버거 원리.. [6] 박은병 2008.01.31 13440
500 혼자서 커널공부하는데 조언을 부탁드립니다. [2] 김현중 2008.02.09 7800
499 이 문서 가지고 계시는 분 리형중 2008.02.25 6099
XE Login