포크 시스템 콜 | 운영 체제 - M01 P08

이것은 여러 부분으로 구성된 블로그 기사 시리즈이며 이 시리즈에서는 운영 체제의 개념을 설명할 것입니다. 이 기사 시리즈는 여러 모듈로 나뉘며 12개의 기사로 구성된 첫 번째 모듈입니다.

이 글에서는 "fork"시스템 콜에 대해 설명하겠습니다. 개념을 더 잘 이해하기 위해 포크 시스템 호출 구현의 몇 가지 예를 볼 것입니다.

포크


  • 분기는 시스템 호출입니다.
  • 프로세스 제어 시스템 호출 상태가 됩니다.
  • 자식 프로세스를 만들기 위해 분기 시스템 호출을 사용합니다.
  • C 프로그램이 있다고 가정하고 그 안에 fork()를 쓰면 자식 프로세스가 생성됩니다. 이 자식 프로세스에도 고유 ID가 있습니다.
  • 상위 프로세스가 사용 중이라고 가정하고 상위 프로세스가 완료/실행할 수 없는 작업을 수행하는 복제본이 생성된다고 가정하기 때문에 분기 개념을 사용합니다. (이 문제를 해결하기 위한 또 다른 접근 방식으로 Thread라고 알려져 있으며 fork와는 다소 다릅니다.)
  • 분기 시스템 호출은 일반적으로 0과 +1(+ve)의 두 값을 반환합니다. 0은 자식 프로세스를 나타내고 +ve는 부모 프로세스를 나타냅니다. -1은 예를 들어 운영 체제/커널이 사용 중인 경우와 같이 자식 프로세스를 만들 수 없는 몇 가지 이유로 인해 생성될 수도 있습니다.
  • 분기 시스템 호출을 이해하기 위해 예를 들어 보겠습니다.

  • main() {
    fork();
        printf("Hello");
    }
    



    이 경우 fork 문으로 인해 두 프로세스가 병렬로 실행됩니다.

    여기서 Helloprintf 문이 실행되기 전에 fork 문이 실행되고 자식 프로세스가 생성되기 때문에 두 번 인쇄됩니다.

    하위 프로세스의 ID는 0이고 상위 프로세스의 ID는 +1(+ve)입니다.
  • 예를 하나 더 살펴보겠습니다. 포크 시스템 콜의 개념을 좀 더 명확하게 이해하는 데 도움이 될 것입니다.

  • main() {
    fork();
    fork();
        printf("Hello");
    }
    



    이 경우 2차 포크 시점에 C1과 P가 부모 역할을 하게 됩니다. 따라서 다이어그램과 같이 다음과 같은 출력이 얻어집니다.
    여기에 Hello가 4번 인쇄됩니다.
  • 총 실행 횟수 = 2n
  • 자식 프로세스의 총 수 = 2n-1
  • n은 분기 명령 수를 나타냅니다.

  • 이것은 포크 시스템 콜에 관한 것이었습니다. 여러분이 그것을 좋아하고 그것으로부터 새로운 것을 배우기를 바랍니다.

    질문, 질문, 의심이 있거나 저와 공유하고 싶은 것이 있으면 언제든지 저에게 연락하십시오.

    📱 저에게 연락



    Telegram

    📧 메일 쓰기



    [email protected]

    🚀 기타 링크



    GitHub
    HackerRank

    좋은 웹페이지 즐겨찾기