[완료] linux 2.6의 pthread는...

freemckang의 이미지

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 의 관계가 성립되는 것이 맞는건지...

답변 부탁드리겠습니다.

오늘도 즐거운 하루 되세요.

rein의 이미지

리눅스 커널에서 말하는 커널 스레드는 커널 지원으로 동작하는 - 즉 스케쥴링 단위가 되는 - 의미가 아닙니다.

커널 스레드는 이전의 swapd 등이 수행해던 "커널의 일부 기능을 수행하는 프로세스"를 커널 영역의 데이터만 갖는(그리고 유저 모드가 없는) 스레드로 빼내어 실행시키는 것입니다. User mode context가 없어서 조금더 스윗칭이 쉽고, 불 필요한 데이터를 안가져서 약간 가볍죠.

그런 의미에서,

1. pthread_create로 생성되는 스레드는 커널 컨텍스트와/유저 컨텍스트를 모두 갖고, 커널이 직접 스케쥴링해주는 스레드입니다.(질문하신 분이 생각하신 커널 스레드의 의미지만 이 경우엔 흔히 kerenl-supported thread라고 부릅니다)

2. Userlevel thread에 대해서 생각한게 맞습니다. 다만 리눅스 커널과 연관시켜서 말할 때는 커널 스레드/커널 지원이 있는 스레드를 구분해서 생각해주세요 :)

ps. OS concept책에는 커널 스레드가 커널-지원된-스레드로 쓰여있고, Understanding the linux kernel 에는 커널 스레드가 제가 앞에서 쓴 의미로 사용되었네요;;

freemckang의 이미지

그렇군요. 미처 생각지 못한 부분까지 짚어주시니 감사할 따름입니다 ^^

즐거운 시간 보내세요 (--)(__)

句日新, 日新 日新 又日新.

句日新, 日新 日新 又日新.

freemckang의 이미지

lxr.linux.no에서 소스를 참조하였습니다

kernel/kthread.c에 kernel thread를 생성할 때 사용되는 함수가 create_kthread ()입니다.

요 함수가 kernel_thread ()를 호출하고요, kernel_thread는 각 아키텍처마다 틀리긴 합니다만 어쨌든 결과물을 위해 do_fork ()를 호출하게 됩니다.

어라... do_fork ()를 호출한다는 것은 task가 된다는 것 아닌지요? task가 된다는 것은 scheduling의 대상이 되는 것은 아닌가 생각이 됩니다.

음... 뭔가 헷갈리네요.

句日新, 日新 日新 又日新.

句日新, 日新 日新 又日新.

rein의 이미지

linux 에서 개개의 스레드는 기본적으로,
* 커널 모드 스택
* 유저 모드 스택
* 스레드를 관리하기 위한 제어 블럭

등을 가지게 됩니다.

pthread는 이걸 모두 가진 커널지원이 되고 유저 모드에서도 작동하는 스레드가 됩니다. (2.4nptl or 2.6)

linux kernel thread는 커널이 수행하는 일부 기능을 수행하는 커널모드 전용(유저 모드 스택이나 유저 ㅁ드 관련된 자료구조가 없는) 스레드입니다. 이것도 제어 블럭도 있고, 스케쥴링 단위이기도 합니다.
다만 유저 모드가 없고, 직접적인 커널 모드 동작만 수행하기 때문에 os 에서 흔히 말하는 커널 스레드(이건 커널이 지원하는 스케쥴링 단위인 스레드)입니다.

말씀하신 것처럼 커널이 linux kernel thread의 스케쥴링도 해주고, pthread_create로 만든 스레드도 스케쥴링합니다.

kalstein의 이미지

딴얘기지만...

혹시 rein`s world 블로그 운영하시는분이신가요?


------------------------------------------
Let`s Smart Move!!
http://kalstein.tistory.com/

freemckang의 이미지

전공시간에 딴짓거리 한게 팍팍 티가 나는군요 헐... 이거야 원 ;;

답변주신 rein님 감사합니다.

항상 즐거운 시간 되세요 :)

句日新, 日新 日新 又日新.

句日新, 日新 日新 又日新.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.