핀토스를 처음 봤는데 코드를 하나하나 분석하고 있는데 모르는 것들이 많이 생겼습니다 ㅠㅠ

dklee의 이미지

핀토스 document를 하나하나 읽어가며 코드를 읽어가고 있는데 모르는 점이 생겼습니다
핀토스의 pintos/src/thread에 있는 thread.c파일에 있는 함수입니다

void thread_start (void)
{
  /* Create the idle thread. */
  struct semaphore idle_started;
  sema_init (&idle_started, 0);
  thread_create ("idle", PRI_MIN, idle, &idle_started);
 
  /* Start preemptive thread scheduling. */
  intr_enable ();
 
  /* Wait for the idle thread to initialize idle_thread. */
  sema_down (&idle_started);
}

여기서 제가 이해한 바로는 idle_started라는 semaphore를 하나 만들고
또 idle이라는 thread를 만들었는데 원래 쓰레드가 하나 있었으니 thread_create이후론 쓰레드가 2개 됐고
그 2개의 쓰레드가 intr_enable()과 그 밑에 코드를 차례로 실행하는 것 맞나요?(두개의 쓰레드중 뭐가 먼저 코드를 실행하게 될지는 모르구요)

그 이후 두개의 쓰레드 모두 interrupt가 enable하게 되고

"semaphore가 제가 알기로 semaphore의 value가 0이 아니면 value을 1 감소시키고 계속 진행시키고, value가 0이면 sema_down을 호출한 thread을 block시키고 value가 1 이상이 되길 기다린다. sema_up에선 해당 semaphore을 기다리고 있는 thread가 있다면 그 중 가장 priority가 큰 thread을 unblock시키고, value을 1 증가시킨다"( http://yhoon2.blogspot.com/2013/01/pintos-project-1-threads.html 에서 봤습니다)

그렇다면 원래 thread_create() 하기 전에 쓰레드는 value가 0인가요 1인가요?
그리고 thread_create()로 만들어진 idle_thread는 지금 value가 0인데 어떤 쓰레드가 언제 value를 1로 만들어주나요?

도대체 제가 뭘 알고 뭘 모르는지 조차 모르니까 정말 답답하네요 ㅠㅠ

익명 사용자의 이미지

1. 이런 과제-specific한 내용은 담당 조교님께 질문하는 것이 가장 빠릅니다.

2. document를 다 읽는 것도 좋지만, 시작하기 전에 코드를 실행 흐름대로 쭉 읽는 것도 좋지요. 물론 100% 다 이해할 수는 없습니다. (특히 부팅 직후의 디바이스 초기화 코드)

3. "그 2개의 쓰레드가 intr_enable()과 그 밑에 코드를 차례로 실행하는 것 맞나요?" => 그럴리가요.

그러면 당연히 밑의 sema_down을 통과하지 못합니다. 제가 pintos를 한지 좀 오래 되어서 잘 기억이 안나는데, 아마 idle이 새 스레드가 실행을 시작할 함수일 겁니다. 그 함수를 찾아보세요.

익명 사용자의 이미지

그리고 kldp에는 가끔 CAPTCHA 메시지를 정상적으로 입력하고 저장 버튼을 눌렀는데도, "The answer you entered for the CAPTCHA was not correct." 에러 메시지가 나오면서 글쓰기 페이지로 되돌아가는 버그가 있습니다.

물론 글은 정상적으로 올라갔기 때문에 그 상태에서 노파심에 CAPTCHA를 다시 입력하고 저장을 또 누르면 글이 두 개 올라갑니다. -_-;; 방금 저한테도 그런 일이 일어나서 낚일 뻔했네요.

치명적인 버그라고 할 것까지는 없고 소소한 불편함이긴 한데 해결되었으면 좋겠네요.

김정균의 이미지

KLDP 는 drupal 7 을 이용하고 있고, 이런 버그는 drupal 에 보고를 해 주셔야 해결이 됩니다. 로그인을 하시면 그런 문제는 발생하지 않을 듯 싶습니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.