728x90

fork() System Call이 새로운 프로세스를 생성한다. 부모를 그대로 복사 (OS data except PID + binary) 후, 주소 공간을 할당한다. fork() 다음에 이어지는 exec() System Call을 통해 새로운 프로그램을 메모리에 올린다.

목차

  1. 프로세스 생성 (Process Creation)
  2. 프로세스 종료 (Process Termination)
  3. fork( ) System Call
  4. exec( ) System Call
  5. wait( ) System Call
  6. exit( ) System Call
  7. 프로세스 간 협력

 

 


프로세스 생성 (Process Creation)

➳ 부모 프로세스 (parent process)가 자식 프로세스 (children process)를 생성한다.

    • 운영체제에게 만들어달라고 요청한다. - fork() system Call

➳ 프로세스의 트리 (계층 구조)를 형성한다.

➳ 프로세스는 자원을 필요로 한다.

    • 운영체제로부터 받는다.

    • 부모와 공유한다.

➳ 자원의 공유

    • 부모와 자식이 모든 자원을 공유하는 모델

    • 일부를 공유하는 모델

    • 전혀 공유하지 않는 모델

➳ 수행 (execution)

    • 부모와 자식은 공존하며 수행되는 모델

    • 자식이 종료 (terminate)될 때까지 부모가 기다리는 (wait) 모델

➳ 주소 공간 (address space)

    • 자식은 부모의 공간을 복사한다. (biinary and  OS data)

    • 자식은 그 공간에 새로운 프로그램을 올린다.

➳ 유닉스의 예

    • fork() System Call이 새로운 프로세스를 생성한다. 부모를 그대로 복사 (OS data except PID + binary) 후, 주소 공간을 할당한다.

    • fork() 다음에 이어지는 exec() System Call을 통해 새로운 프로그램을 메모리에 올린다.

 

 


프로세스 종료 (Process Termination)

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

 자식이 부모에게 output data를 보낸다. (via wait)

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

 

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

 자식이 할당 자원의 한계치를 넘어선 경우

 자식에게 할당된 task가 더 이상 필요하지 않은 경우

 부모가 종료 (exit)하는 경우

    • 운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수행되도록 두지 않는다.

    • 단계적인 종료이다.

    •  e.g. 티스토리 글쓰기 창을 없애면 글쓰기 창 안의 여러 프로세스들도 동시에 없어지는 것과 같다.

 

 


fork( ) System Call

" create a child (copy) "

 

➳ A process is created by the fork() system call.

    • creates a new address space that is a duplicate of the caller.

 

 

fork()는 자식을 하나 만들어달라고 요청하는 함수이다. fork() 하는 순간 아래와 같이 복제한다.

물론 메모리 공간, Program Counter도 복제한다.

 

 

부모와 자식 모두 fork() 한 다음부터 실행한다. 그리고 이 둘은 별개의 프로세스가 되는 것이다. 복제했기 때문에 내가 부모인지 자식인지 알 수가 없어 서로 구분할 필요가 있다. fork()를 호출한 return 값이 부모 프로세스는 양수 값, 자식 프로세스는 0이므로 이를 통해 구분이 가능하다.

 

fork()는 한 프로세스의 동일한 실행 파일을 실행한 것과 같다. 완전히 다른 프로그램을 실행하고 싶다면 fork() system call 로만은 어렵다. 새로운 프로그램을 덮어 씌우는 서비스가 필요한데, 이를 위한 것이 바로 exec() system call이다.

 

• pid = 프로세스 식별자

 

 


exec( ) System Call

" overlay new image "

 

➳ A process can execute a different program by the exec() system call.

    • replaces the memory image of the caller with a new program.

 

 

 


wait( ) System Call

" sleep utill child is done "

 

 

프로세스 A가 wait() System Call을 호출하면

➳ 커널은 child가 종료될 때까지 프로세스 A를 sleep 시킨다. (block 상태)

➳ child process가 종료되면 커널은 프로세스 A를 깨운다. (ready 상태)

 

 

아래 프로세스의 상태를 살펴보면, 자식의 종료를 기다리며 block 상태가 되도록 하는 부분이 wait() system call이라고 볼 수 있다.

 

 

만약 wait() system call이 없다면 부모  프로세스와 자식 프로세스는 CPU를 먼저 차지하기 위해 서로 경쟁할 것이다. 하지만 부모 프로세스가 fork() 후, wait()를 호출한다면 자식이 종료될 따까지 부모는 block 상태에 있는 것이다.

 

 


exit( ) System Call

" frees all the resources, notify parent " 

 

프로세스의 종료

🔮 자발적 종료

마지막 statement 수행 후 exit() system call을 통해 종료한다.

프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어준다.

 

🔮 비자발적 종료

부모 프로세스가 자식 프로세스를 강제 종료시키는 경우

    • 자식 프로세스가 한계치를 넘어서는 자원을 요청하는 경우

    • 자식에게 할당된 task가 더 이상 필요하지 않은 경우

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

부모가 종료하는 경우

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

 

 


프로세스 간 협력

 독립적 프로세스 (Independent process)

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

 

협력 프로세스 (Cooperating process)

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

 

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

 

1)  메시지를 전달하는 방법

" message passing "

널을 통해 메시지를 전달한다.

 

 

2) 주소 공간을  공유하는 방법

" shared memory "

서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 메커니즘이 있다.

 

" thread "

thread는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵지만 동일한 프로세스를 구성하는 thread 간에는 주소 공간을 공유하므로 협력이 가능하다.

 

 

 

원칙적으로는 각 프로세스는 본인만의 code, data, stack만 접근할 수 있으므로 서로 다른 프로세스가 메모리 공간을 share 할 수 없다. Shared Memory를 위해 운영체제에게 system call로 부탁하는 것이다. 프로세스 간 서로 신뢰할 수 있는 경우에만 shared memory를 만들어야 한다.

 

 


Reference

KOCW 운영체제 강의 (이화여자대학교, 반효경 교수님)

 

 

728x90

'CS > OS' 카테고리의 다른 글

프로세스 동기화 (Process Synchronization)  (0) 2022.12.28
CPU 스케줄링  (2) 2022.12.26
프로세스 (Process)와 스레드 (Thread)  (2) 2022.12.14
컴퓨터 시스템의 구조에 대하여  (0) 2022.12.11
운영체제란 무엇인가 ?  (0) 2022.12.09

+ Recent posts