• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

8강의 exercise 4.17의 풀이가 잘 이해가 되지 않습니다 ㅠㅠ

21.11.17 14:35 작성 조회수 102

1

8강의 exercise 4.17의 풀이가 잘 이해가 되지 않습니다. fork()에 대해서 제 이해가 부족한 것 같은데요, 아래에 제가 이해한 부분을 정리해 보았습니다.

먼저 첫 fork()에서 child process (p1)을 생성합니다. 이때는 프로세스가 p0,p1 이렇게 두개가 있겠지요.

fork()는 부모 프로세스에서는 방금 만든 자식 프로세스의 pid값을 리턴하고, 자식 프로세스에서는 0을 리턴합니다.

그래서 먼저 p0프로세스는 if문을 실행하지 않고 제일 아래 fork()를 통해 또 다른 자식 프로세스 p3을 만들고 종료합니다.

이제 아까 만든 p1 프로세스를 살펴보면, pid값이 0이어서 if문 안으로 들어갑니다. 들어가서 fork()를 하게 되는데요, 이때 새로운 프로세스 p2를 만듭니다. 그리고 p1 프로세스는 thread를 만들고 if문을 나와서 fork()를 하여 새 자식 프로세스 p4를 만든 후 종료합니다.

이제, 제가 헷갈리는 부분인 p2프로세스에 대해서 이야기해 보겠습니다. p1프로세스에 의해서 만들어진 p2 프로세스는 if문 안의 fork()에 의해서 만들어졌습니다. 그리고 바로 아래 코드인 thread_create()를 통해서 쓰레드를 하나 더 만들게 되는데요. 이때의 p2 프로세스의 구체적 상황이 궁금합니다.

1. 자식 프로세스를 fork()를 통해서 만들때, stack heap data text 등의 프로세스를 구성하고 있는 전 영역이 그대로 복사가 되는 것으로 알고 있습니다. 그러면 p2 프로세스는 부모인 p1프로세스가 가진 pid=0이란 변수를 가지고 있는 것인가요?

2. p2 프로세스가 실행될때, 코드 내 어느 부분부터 실행이 되는지 구체적으로 궁금합니다. 저는 막연히 fork() 이후 코드부터 실행이 되겠구나 이해를 하고 있었는데, 그래서 thread_create()를 하는 부분은 이해했습니다. 그런데, 해당 코드는 원래 if문으로 둘러쌓여져 있기에, p2가 if 문을 인지하고 있는 것인지, 그래서 if문을 빠져나와서 (pid값이 0이라서) fork()를 또 할 수 있는 것인지 궁금합니다. 이 부분이 사실 이해가 되지 않습니다... if문이랑은 별개로 p2 내의 코드는 thread_create() 이후에 곧바로 fork()로 이어져 있는 것인지.. 헷갈리네요 ㅠㅠ

답변 0

답변을 작성해보세요.

답변을 기다리고 있는 질문이에요.
첫번째 답변을 남겨보세요!