프로세스 생성과 복사 fork()와 exec()

 

널널한 개발자 - 프로세스 생성과 복사 fork()와 exec()

프로세스와 가상메모리의 관계

  • os는 프로세스 단위로 파일, 자원의 접근을 제어하고 권한을 부여한다. 프로세스가 os에게 자원을 할당받으면 내부에 있는 쓰레드들도 자연스럽게 공유 받을 수 있는 상태가 된다.
  • 프로세스는 가상메모리를 가지게 된다. 즉, 프로세스가 생성되면 독립적인 가상 메모리가 주어지게 된다.

프로세스의 내부

  • 프로세스는 PID, 고유의 id를 가지게 되며, 프로세스 + PCB + VMS(가상 메모리 공간)은 하나의 세트다.
  • 운영체제마다 각각 실행파일 포맷이 다르다
    • 유닉스계열은 ELF 파일 형식 (Executable and Linkable Format)
    • 윈도우계열은 PE 포맷 (Portable Executable)

프로세스 생성 과정

  1. 메모리 복사(실행코드)
  2. PCB 생성
  3. VMS 생성 (1,2번을 거치게되면 VMS(가상 메모리 공간)은 이미 확보된 상태가 된다.)

    VMS 내부에는 Heap, Stack, Data등이 있다.

프로세스를 생성하는데에는 관리를 위한 PCB 생성, 메모리 구축등 복잡한 과정을 거치게 되는데 특정 프로세스를 생성하게 될 때 앞의 과정을 다 거치지 않고, 자식 프로세스라는 정의를 내려 부모의 데이터를 복사한 후 일부의 데이터만 유니크하게 가진채 생성되게 된다.

운영체제별 프로세스 생성 방식

운영체제별로 프로세스를 생성하는 방식이 다르다.

  • 유닉스: fork(), exec()
  • 윈도우: createProcess()

유닉스의fork(), exec() 차이점
fork() 시스템은 새로운 프로세스를 위한 메모리를 할당한다. 기존 프로세스는 프로세스대로 작업을 실행하고 fork()를 사용해 생성된 프로세스는 그 나름대로 시스템 콜이 수행된 라인의 다음 라인부터 실행이 된다.
반면, exec()는 새로운 프로세스를 위한 메모리를 할당하는 것이 아니라, 기존 프로세스의 PID를 가지고 새로운 프로세스에 의해 덮어 쓰이는 것이다.