본문 바로가기

운영체제 정리

이화여대 운영체제 수업 3 - 2강(프로세스) 정리

프로세스 생성

 

부모 프로세스가 자식 프로세스 생성

트리구조

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

  운영체제에서 받음 (보통)

  부모와 공유

자원의 공유 (원칙적으로는 안함)

수행

  1. 부모와 자식 공존하는 경우

  2. 자식이 종료될 때까지 부모가 기다리는 경우

주소공간

  자식은 부모의 공간을 복사함

  그 공간에 새로운 프로그램을 올림

유닉스의 예

  fork() 시스템 콜이 새로운 프로세스 생성

    1. 부모를 그대로 복사

    2. 주소 공간 할당

  fork 다음에 이어지는 exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림

 

 

프로세스 종료

 

프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌 (exit)

  자식이 부모에게 output data를 보냄

  프로세스의 각종 자원들이 운영체제에게 반납됨

 

부모 프로세스가 자식의 수행을 종료시킴 (abort)

  1. 할당 자원의 한계치를 넘어섬

  2. 자식에게 할당된 태스크가 더 이상 필요하지 않음

  3. 부모가 종료하는 경우

    부모가 종료되는 경우 자식이 더 이상 수행되도록 두지 않음

    최 하단부터 단계적인 종료

 

 

fork() 시스템 콜 (사용자 프로그램이 실행 시 동작하는 내용)

 

int main()

{  int pid;

   printf("\n Hello, I`m child! \n|);

   pid = fork(); 1) 이 함수를 통해 자식 프로세스 생성

   if (pid == 0)

     printf("\n Hello, I`m child! \n");

   else if (pid > 0)

     printf("\n Hello, I`m parent! \n");

}

 

2) 생성을 하면 똑같은 코드를 가진 자식이 생성되고 부모의 PC를 기억해둗ㄴ 상태이기 때문에 if문 부터 실행하게 됨

 

 

exec() 시스템 콜

 

어떤 프로그램을 완전히 새로운 프로세스로 태어나게 함

 

int main()

{  int pid;

   printf("\n Hello, I`m child! \n|);

   pid = fork(); 1) 이 함수를 통해 자식 프로세스 생성

   if (pid == 0)

     printf("\n Hello, I`m child! \n");

     execlp("\bin\date", "\bin\data", (char *) 0);

   else if (pid > 0)

     printf("\n Hello, I`m parent! \n");

}

 

"\bin\date" 프로그램이 되어 그 함수를 실행하고 프로그램이 끝나면 그대로 끝남. 다시 돌아올 수 없음.

 

위 코드와 달리 꼭 자식을 만들어서 exec 할 필요는 없음.

 

 

wait() 시스템 콜

 

자식 프로세스가 종료될 때까지 sleep 시킴.

자식이 종료되면 부모를 ready 시킴

 

 

exit() 시스템 콜

 

프로세스를 종료시킬 때 호출함

 

프로세스의 종료

 

자발적 종료

  마지막 statement 수행 후 exit() 시스템 콜을 통해서 함

  명시적으로 선언하지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어줌.

 

비자발적 종료

  부모 프로세스가 자식 프로세스를 강제 종료 시킴

    자식 프로세스가 한계치를 넘어서는 자원 요청

    자식에게 할당된 태스크가 더 이상 필요하지 않음

  키보드로 kill, break 등을 친 경우

  부모가 종료하는 경우

    부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨.

 

 

프로세스 간 협력

 

독립적 프로세스

  프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함

 

협력 프로세스

  프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음

 

프로세스 간 협력 메커니즘 (IPC)

 

메시지를 전달하는 방법

  message passing: 커널을 통해 메시지를 전달

주소 공간을 공유하는 방법

  shared memory: 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 함

 

thread의 경우는 사실상 하나의 프로세스이다. 동일한 프로세스 안에 있기 때문에 스레드 간 협력은 가능하다.

 

 

Message Passing

 

Message System

  프로세스 사이에 공유 변수를 일체 사용하지 않고 통신하는 시스템

 

1. direct communication

  통신하려는 프로그램의 이름을 명시적으로 표시

  ex) Process P (send Q.message) -> Process Q (receive P.message)

 

2. indirect communication

  mailbox (또는 port)를 통해 메시지를 간접 전달

 

  Process P -> Mailbox M -> Process Q

  Send(M.message)              Receive(M.message)

 

모두 커널을 통해서 메시지를 전송하는 것이다.

 

 

Shared Memory

 

커널에게 shared memory를 사용한다고 공지 해야 함.