OS

4. 프로세스 생성

깜이오빠 2023. 12. 27. 19:46

1. 프로세스 생성

부모 프로세스가 자식 프로세스를 생성 ☞ 프로세스의 트리 계층 구조 형성

 

모든 프로세스는 자원을 필요로 함

  • 1. 운영체제로부터 직접 자원을 전달받음
  • 2. 부모 프로세스와 자원을 공유함
    → 부모와 자식이 모든 자원을 공유하는 모델
     일부를 공유하는 모델
     전혀 공유하지 않는 모델 (일반적)

UNIX의 예

  • fork() 시스템 콜
     부모 프로세스는 해당 시스템 콜을 통해 자신의 복사본을 자식 프로세스로 생성
     이때 자식 프로세스는 프로세스 ID를 제외한 부모 프로세스의 모든 정보 (문맥)를 복사
  • exec() 시스템 콜
     자식 프로세스는 해당 시스템 콜을 통해 자신의 메모리 영역을 새로운 프로그램으로 덮어씌움

 

2. 프로세스 종료

자발적 종료 

  • exit() 시스템 콜
     운영체제에 자신이 종료됨을 통보하는 시스템 콜
     운영체제는 자원을 회수

비자발적 종료

  • abort() 시스템 콜
    부모 프로세스가 자식 프로세스의 수행을 강제로 종료시키는 시스템 콜
  • 1. exit() 시스템 콜을 통해 부모가 종료하는 경우
     운영체제는 부모가 종료하는 경우 더 이상 자식이 수행되도록 두지 않음
     최하단 자식부터 차례대로 종료됨 (단계적 종료)
     고아 프로세스 : 부모가 먼저 종료된 자식 프로세스
  • 2. 자식이 할당 자원의 한계치를 넘어서는 요구를 할 경우
  • 3. 자식에게 할당된 Task가 더 이상 필요하지 않은 경우

 

3. fork() 시스템 콜

int main() {
    int pid;
    pid = fork();
    
    if (pid == 0)
		printf("\n Hello, I am child!\n");
    else if (pid > 0)
		printf("\n Hello, I am parent!\n");
}

 

  • 부모 프로세스가 fork() 시스템 콜을 통해 자식 프로세스를 생성하며 자식 프로세스 또한 똑같이 복사된 위의 코드를 실행한다.
  • 자식 프로세스는 부모 프로세스의 문맥 (프로그램 카운터 포함)을 복사하였기에 코드의 진행 상황도 복사하게 된다.
  • 따라서 자식 프로세스는 처음부터 코드를 실행하는 것이 아닌 fork() 이후의 코드부터 실행한다.
  • 또한 fork() 시스템 콜은 부모 프로세스의 경우 자식 프로세스의 PID (양수)를 반환하고, 자식 프로세스의 경우 0을 반환한다.

 

4. exec() 시스템 콜

int main() {
    int pid;
    pid = fork();
    
    if (pid == 0) {
        printf("\n Hello, I am child! Now I'll run date \n");
        execlp("/bin/date", "/bin/date", (char *) 0);
    }
    else if (pid > 0)
        printf("\n Hello, I am parent!\n");
}

 

  • 부모 프로세스가 fork() 시스템 콜을 통해 자식 프로세스를 생성한다.
  • 그 후 자식 프로세스가 execlp() 시스템 콜을 통해 메모리 공간을 새로운 프로그램으로 덮어씌운다.

 

5. wait() 시스템 콜

int main() {
    int pid;
    pid = fork();
    
    if (pid == 0) {
        /* code for child process */
    }
    else if (pid > 0)
        wait();
}

 

  • wait() 시스템 콜은 "자식이 종료될 때까지 부모가 기다리는 모델"에서 프로세스 간 동기화를 위해 사용된다.
  • 부모 프로세스가 wait() 시스템 콜을 호출하면 커널은 자식 프로세스가 종료될 때까지 부모 프로세스를 Blocked 상태로 만든다.
  • 그 후 자식 프로세스가 종료되면 커널은 부모 프로세스를 Ready 상태로 만든다.

 

6. 프로세스 간 통신

 

프로세스 간 통신 (IPC, Inter-Process Communication)이란?

  • 프로세스는 각자의 메모리 영역을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함 (독립적)
  • 프로세스 간 통신 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음 (협력적)

메시지를 전달하는 방식

  • 메시지 전달 (Message Passing)
     메시지를 프로세스끼리 직접 주고받을 수 있다면 원하지 않는 메시지를 전달해 다른 프로세스에 악영향을 미칠 수 있으므로 운영체제는 메시지를 주고받는 연산을 특권 명령으로 규정해 커널을 통해서만 가능하도록 설계
     Direct Communication : 통신하려는 프로세스의 이름을 명시적으로 표시
     Indirect Communication : Mailbox 또는 Port를 통해 메시지를 간접 전달

메모리 영역을 공유하는 방식

  • 공유 메모리 (Shared Memory)
     서로 다른 프로세스 간에도 일부 메모리 영역을 공유
  • 스레드 (Thread)
     스레드는 사실상 하나의 프로세스이므로 프로세스 간 통신으로 보기는 어려움
     동일한 프로세스를 구성하는 스레드 간에는 메모리 영역을 공유하므로 통신 가능

 

이화여자대학교 반효경 교수님의 운영체제 강의를 정리한 글입니다.

http://www.kocw.net/home/cview.do?cid=3646706b4347ef09

 

운영체제

운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

www.kocw.net

 

또한 반효경 교수님의 "운영체제와 정보기술의 원리" 책을 참고하였습니다.

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=238716482

 

운영체제와 정보기술의 원리

온라인 공개강좌 KOCW에서 꾸준히 호평받아온 이화여대 반효경 교수의 컴퓨터 입문서이다. 단순히 컴퓨터 관련 전문 지식을 전달하는 것에서 그치지 않고, 복잡한 문제를 효율적으로 풀 수 있는

www.aladin.co.kr