Nachos에서 typedef 를 사용하는 부분에 있어서 궁금한점

safe1981의 이미지

수업시간에 Nachos운영체제를 분석하다 보니 코드 부분에서 다소 이해가 안가는 점이 있어서 질문드립니다.

typedef void (*VoidFunctionPtr)(int arg); //이렇게 정의되어있는부분이 있고,

  87 void 
  88 Thread::Fork(VoidFunctionPtr func, int arg)
     /* [<][>][^][v][top][bottom][index][help] */
  89 {
  90     DEBUG('t', "Forking thread \"%s\" with func = 0x%x, arg = %d\n",
  91           name, (int) func, arg);
  92     
  93     StackAllocate(func, arg);
  94 
  95     IntStatus oldLevel = interrupt->SetLevel(IntOff);
  96     scheduler->ReadyToRun(this);        // ReadyToRun assumes that interrupts 
  97                                         // are disabled!
  98     (void) interrupt->SetLevel(oldLevel);
  99 }   
이런식으로 사용이 되는데 그렇다면 Fork멤버함수 호출시 안에 들어오는 인자는 어떤식으로 활용이되는건가요?

결국엔 func라는 함수를 인자로 arg를 보낸다는 의미인가요?

그렇다면 이코드는 병렬적으로 함수를 호출하면서 다른함수를 호출하는 의미로 받아들여도 되는건지요?

berise의 이미지

>이런식으로 사용이 되는데 그렇다면 Fork멤버함수 호출시 안에 들어오는 인자는 어떤식으로 활용이되는건가요?

함수 포인터 func을 이용한다는 의미이고 외부 함수를 호출 하는 효과죠.

> 결국엔 func라는 함수를 인자로 arg를 보낸다는 의미인가요?
네.

> 그렇다면 이코드는 병렬적으로 함수를 호출하면서 다른함수를 호출하는 의미로 받아들여도 되는건지요?

아니요.. 병렬은 아닙니다. 다른 함수를 순차적으로 호출하는 겁니다.

safe1981의 이미지

그렇다면 위의 코드를 보면

StackAllocate(func, arg);

이부분도 있는데 func가 가리키고 잇는 함수가 결국은 위에서 한번 밑에서 한번 실행되는거네요.~~

순차적으로 호출한다고 하셨는데 , 그럼

func부분이 먼저 호출되고 fork가 수행되는게 맞는지요? 빠른 답변 감사드립니다

익명 사용자의 이미지

답은 아니요입니다. 호출되는 것이 아니죠.

위에서는. func의 주소를 찍는 것이고 아래에서는 func를 StackAllocate의 인자로 넘겨주고 있습니다. 아마 stackallocate의 어디에서 사용하거나 또 다른 곳으로 넘겨주겠지요.

댓글 달기

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