[완료] linux 2.6의 pthread는...
글쓴이: freemckang / 작성시간: 화, 2008/04/15 - 11:31오전
kernel thread입니까 아니면 user thread입니까?
질문의 시작은 kthreadd 라는 데몬에서부터 시작되었는데요, 이것에 대해 검색해본 결과 kernel thread들을 생성한다고 하더군요.
그렇다면 pthread_create로 생성되는 thread들은 user thread인지...
제가 이전에 공부할때는 linux에서는 thread란 개념이 없다, process를 thread로 보이게끔 하는것 뿐이다 라고 봤는데요.
아직도 이 개념이 통하고 있는건지... 답답하네요.
질문을 요약하자면요,
1. Linux 2.6의 pthread_create로 생성되는 thread는 kernel level의 kernel thread입니까?
2. 제가 알고 있는 kernel level의 kernel thread라는 것이 1:1로 대응되는 관계를 말하고 user level의 user thread라는 것은 1:N 의 관계가 성립되는 것이 맞는건지...
답변 부탁드리겠습니다.
오늘도 즐거운 하루 되세요.
Forums:
kernel thread의 의미
리눅스 커널에서 말하는 커널 스레드는 커널 지원으로 동작하는 - 즉 스케쥴링 단위가 되는 - 의미가 아닙니다.
커널 스레드는 이전의 swapd 등이 수행해던 "커널의 일부 기능을 수행하는 프로세스"를 커널 영역의 데이터만 갖는(그리고 유저 모드가 없는) 스레드로 빼내어 실행시키는 것입니다. User mode context가 없어서 조금더 스윗칭이 쉽고, 불 필요한 데이터를 안가져서 약간 가볍죠.
그런 의미에서,
1. pthread_create로 생성되는 스레드는 커널 컨텍스트와/유저 컨텍스트를 모두 갖고, 커널이 직접 스케쥴링해주는 스레드입니다.(질문하신 분이 생각하신 커널 스레드의 의미지만 이 경우엔 흔히 kerenl-supported thread라고 부릅니다)
2. Userlevel thread에 대해서 생각한게 맞습니다. 다만 리눅스 커널과 연관시켜서 말할 때는 커널 스레드/커널 지원이 있는 스레드를 구분해서 생각해주세요 :)
ps. OS concept책에는 커널 스레드가 커널-지원된-스레드로 쓰여있고, Understanding the linux kernel 에는 커널 스레드가 제가 앞에서 쓴 의미로 사용되었네요;;
답변 감사드립니다.
그렇군요. 미처 생각지 못한 부분까지 짚어주시니 감사할 따름입니다 ^^
즐거운 시간 보내세요 (--)(__)
句日新, 日新 日新 又日新.
句日新, 日新 日新 又日新.
그런데 약간 이상한 것이 있습니다.
lxr.linux.no에서 소스를 참조하였습니다
kernel/kthread.c에 kernel thread를 생성할 때 사용되는 함수가 create_kthread ()입니다.
요 함수가 kernel_thread ()를 호출하고요, kernel_thread는 각 아키텍처마다 틀리긴 합니다만 어쨌든 결과물을 위해 do_fork ()를 호출하게 됩니다.
어라... do_fork ()를 호출한다는 것은 task가 된다는 것 아닌지요? task가 된다는 것은 scheduling의 대상이 되는 것은 아닌가 생각이 됩니다.
음... 뭔가 헷갈리네요.
句日新, 日新 日新 又日新.
句日新, 日新 日新 又日新.
linux 에서 개개의
linux 에서 개개의 스레드는 기본적으로,
* 커널 모드 스택
* 유저 모드 스택
* 스레드를 관리하기 위한 제어 블럭
등을 가지게 됩니다.
pthread는 이걸 모두 가진 커널지원이 되고 유저 모드에서도 작동하는 스레드가 됩니다. (2.4nptl or 2.6)
linux kernel thread는 커널이 수행하는 일부 기능을 수행하는 커널모드 전용(유저 모드 스택이나 유저 ㅁ드 관련된 자료구조가 없는) 스레드입니다. 이것도 제어 블럭도 있고, 스케쥴링 단위이기도 합니다.
다만 유저 모드가 없고, 직접적인 커널 모드 동작만 수행하기 때문에 os 에서 흔히 말하는 커널 스레드(이건 커널이 지원하는 스케쥴링 단위인 스레드)입니다.
말씀하신 것처럼 커널이 linux kernel thread의 스케쥴링도 해주고, pthread_create로 만든 스레드도 스케쥴링합니다.
딴얘기지만... 혹시
딴얘기지만...
혹시 rein`s world 블로그 운영하시는분이신가요?
------------------------------------------
Let`s Smart Move!!
http://kalstein.tistory.com/
용어들이 참...
전공시간에 딴짓거리 한게 팍팍 티가 나는군요 헐... 이거야 원 ;;
답변주신 rein님 감사합니다.
항상 즐거운 시간 되세요 :)
句日新, 日新 日新 又日新.
句日新, 日新 日新 又日新.
댓글 달기