[OS] Chapter 3. Processes : 프로세스의 생성

지코·2025년 5월 19일

OperatingSystem

목록 보기
3/4
post-thumbnail

📌 프로세스의 연산들(Operations on Processes)

fork() system call

  • 새로운 프로세스는 fork() 라는 시스템 콜에 의해 생성된다.
  • 자식 프로세스(child process)는 부모 프로세스(parent process)의 주소 공간의 복사본으로 구성된다.
  • 두 프로세스는 fork() 시스템 콜 이후의 명령어를 계속해서 실행한다.
  • fork() 명령어의 반환 코드가 0이면 자식 프로세스이고, OS가 부여한 0이 아닌 pid를 반환하면 부모 프로세스이다.

fork() 시스템 콜 코드 예시

#include <stdio.h>
#include <unistd.h>

int main()
{
    pid_t pid;

    pid = fork();
    printf("Hello, Process!\n");
    return 0;
}
[출력 결과]
Hello, Process!
Hello, Process!
➡️ 부모 프로세스가 자식 프로세스를 호출하여 각각 "Hello, Process!"를 출력한다.

PID 출력 코드 예시

#include <stdio.h>
#include <unistd.h>

int main()
{
    pid_t pid;

    pid = fork();
    printf("Hello, Process! %d\n", pid);
    return 0;
}
[출력 결과 예시]
Hello, Process! 1004
Hello, Process! 0
➡️ 부모 프로세스에서 fork()했을 때 return하는 pid 값은 자식 프로세스의 pid이고, 자식 프로세스에서 fork()했을 때 return하는 pid 값은 0이다.

fork() system call 이후의 수행

부모 프로세스가 자식 프로세스를 생성한 후 할 수 있는 일은
1️⃣ 자기 프로세스 실행을 계속 하거나
2️⃣ wait() system call을 호출하고, 자기 자신을 ready queue에서 빼내어 wait queue에 넣은 후, 자식 프로세스의 실행 종료를 기다린다.

부모 프로세스가 wait()하는 예시

#include <stdio.h>
#include <unistd.h>
#include <wait.h>

int main()
{
    pid_t pid;

    pid = fork();
    
    if (pid > 0)
    {
        wait(NULL);
    }
    printf("Hello, Process! %d\n", pid);
    return 0;
}
[출력 결과]
Hello, Process! 0
Hello, Process! 16330
➡️ 부모 프로세스의 pid는 pid > 0 조건에 해당하기 때문에, 자식 프로세스를 통한 출력문이 먼저 수행되고 후에 부모 프로세스를 통한 출력문이 수행된 것을 확인할 수 있다.

Reference

🦖 운영체제 공룡책 강의

profile
꾸준함이 무기

0개의 댓글