운영체제

fork() 시스템 호출 , exec() 시스템 호출

야곰야곰+책벌레 2023. 2. 13. 09:04
728x90
반응형

fork() 시스템 호출

fork() 시스템 호출은 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수다. 커널이 제공하는 이 함수는 프로세스를 복사하는 일종의 시스템 호출이다. 예를 들면 크롬에서 어떤 페이지를 보다가 Ctrl + N 키를 누르면 크롬이 하나 더 실행된다. 이것은 새로운 크롬을 실행한 것이 아니라 현재의 크롬 프로세서를 복사한 것이다.

 

fork() 시스템 호출을 하면 프로세스 제어 블록을 포함한 부모 프로세스 영역의 대부분이 자식 프로세서에 복사되어 똑같은 프로세스가 만들어진다. 단, 프로세스 제어 블록의 내용 중 일부가 변경되는데 변경되는 부분은 다음과 같다.

  • 프로세스 구분자(PID)
  • 메모리 관련 정보
  • 부모 프로세스 구분자(PPID)와 자식 프로세스 구분자(CPID)가 바귄다.

fork() 시스템 호출로 프로세스를 복사하면 다음과 같은 장점이 있다.

  • 기존 메모리에서 복사하기 때문에 자식 프로세서 생성 속도가 빠르다.
  • 부모 프로세스가 사용하던 모든 자원을 추가 작업 없이 자식 프로세서에 상속할 수 있다.
  • 자식 프로세스의 자원을 부모 프로세스가 관리함으로 시스템이 효율적으로 관리될 수 있다.

exec() 시스템 호출

exec() 시스템 호출은 기존의 프로세스를 새로운 프로세스로 전환하는 함수다. fork() 가 새로운 프로세스를 복사하는 것이라면 exec()는 완전히 다른 새로운 프로세스로 전환되는 것이다. exec() 시스템 호출을 사용하는 목적은 프로세스의 구조체를 재활용하기 위함이다. 만들어진 프로세스 제어블록, 메모리 영역, 부모-자식 관계를 그대로 사용할 수 있어 편리하다.

  

  exec() 시스템 호출은 각종 프로세스 구분자(PID, PPID, CPID)만 남겨두고 프로세스 나머지 내용을 새로운 것으로 바꾼다. 또한 데이터 영역이 새로운 데이터로 채워지고 스택 영역이 리셋된다.

728x90
반응형

'운영체제' 카테고리의 다른 글

멀티스레드의 장단점  (0) 2023.02.13