상세 컨텐츠

본문 제목

5. 프로세스 생성과 복사

CS전공 지식/1. OS

by 본투비곰손 2023. 6. 28. 22:09

본문

728x90

프로세스 생성

  • OS가 Process단위로 접근 제어 하고 Threads는 해당 권한을 공유한다.
  • Process가 실행되면 가상 메모리라는 독립 공간이 생기게 되고 Process의 모든Thread는 모두 사용 할 수 있다.
  • 새로운 Process가 생성 되면 OS는 Process 마다 가상 메모리를 할당 해준다.

프로세스 복사

프로세스들은 각자 고유한 번호인 프로세스 id, PID(Process IDentifier)갖게 된다.

UNIX는 부팅 시에 커널에 초기 프로세스 3개가 생성되고, PID는 0, 1, 2입니다.

그중에서 PID 1 프로세스가 init 프로세스인데, 

이 프로세스는 모든 프로그램 프로세스의 조상입니다.

 즉, 모든 프로그램은 init 프로세스가 복제된 것입니다.

 프로세스는 fork() / exec() 시스템 콜에 의해 복제됩니다. 

fork() / exec()는 Unix에서 사용됨

fork()

프로세스는 프로그램 코드 + PCB+ VMS 로 구성

fork() 시스템 콜이 실행되면, 해당 프로세스와 거의 똑같은 프로세스가 하나 복제

결과적으로, 원본 프로세스는 부모 프로세스, 복제된 프로세스는 자식 프로세스가 되며,

fork() 이후부터 다시 순서대로 코드가 실행

 

이들은 부모 자식 관계를 나타내기 위해 부모 - 자식 PID를 가리키는

PPID(Parent PID), CPID(Child PID) 데이터를 갖는다.

즉, 자식 프로세스는 PID, 가상 메모리는 별 할당 받음 다르고 나머지는 부모 프로세스와 전부 동일

exec()

fork() 같이 불필요한 자원을 낭비하지 않기 위해 exec() 시스템 콜이 호출

exec()은 해당 프로세스에 실행될 프로세스 코드를 덮어 버린다. 

그러면 fork()와 다르게 자식 프로세스를 위해 별도의 공간을 할당할 필요도 없고,

PID도 그대로 사용하여 프로세스의 text, data 영역만 덮어 씌워주고, 코드를 처음부터 다시 실행, 프로그램 카운터가 0이 된다.

정리

fork()는 거의 동일한 프로세스가 하나 더 생성되는 것이고 (원래 프로세스 + 새로운 프로세스),

exec()은 원래 프로세스는 사라지고 새로운 프로세스만 남게 됩니다. (새로운 프로세스)

 

fork()와 exec()은 함께 사용할 수도 있고 단독으로 사용할 수도 있는데, 상황에 맞게 사용하면 됩니다.

 원래 프로그램은 실행 중인 상태로 놔두고 다른 작업을 하고 싶다면 fork(), exec()을 함께 사용하고,

그게 아니라면 둘 중에 하나를 알맞게 사용하면 됩니다.

728x90

관련글 더보기