Nachos에서 typedef 를 사용하는 부분에 있어서 궁금한점
글쓴이: safe1981 / 작성시간: 화, 2004/11/16 - 11:08오후
수업시간에 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를 보낸다는 의미인가요?
그렇다면 이코드는 병렬적으로 함수를 호출하면서 다른함수를 호출하는 의미로 받아들여도 되는건지요?
Forums:
>이런식으로 사용이 되는데 그렇다면 Fork멤버함수 호출시 안에 들
>이런식으로 사용이 되는데 그렇다면 Fork멤버함수 호출시 안에 들어오는 인자는 어떤식으로 활용이되는건가요?
함수 포인터 func을 이용한다는 의미이고 외부 함수를 호출 하는 효과죠.
> 결국엔 func라는 함수를 인자로 arg를 보낸다는 의미인가요?
네.
> 그렇다면 이코드는 병렬적으로 함수를 호출하면서 다른함수를 호출하는 의미로 받아들여도 되는건지요?
아니요.. 병렬은 아닙니다. 다른 함수를 순차적으로 호출하는 겁니다.
berise@nowhere.comes.out
그렇다면 위의 코드를 보면StackAllocate(func, ar
그렇다면 위의 코드를 보면
StackAllocate(func, arg);
이부분도 있는데 func가 가리키고 잇는 함수가 결국은 위에서 한번 밑에서 한번 실행되는거네요.~~
순차적으로 호출한다고 하셨는데 , 그럼
func부분이 먼저 호출되고 fork가 수행되는게 맞는지요? 빠른 답변 감사드립니다
답은 아니요입니다. 호출되는 것이 아니죠.위에서는. func의
답은 아니요입니다. 호출되는 것이 아니죠.
위에서는. func의 주소를 찍는 것이고 아래에서는 func를 StackAllocate의 인자로 넘겨주고 있습니다. 아마 stackallocate의 어디에서 사용하거나 또 다른 곳으로 넘겨주겠지요.
댓글 달기