줘이리의 인생적기

fork, exec, wait / copy-on-write / exit 본문

공부/시스템 프로그래밍

fork, exec, wait / copy-on-write / exit

줘이리 2021. 12. 17. 23:00
728x90

 

wait()시스템콜이 있는 이유는

 

fork()함수 호출 시 자식 프로세스가 종료할 때까지 부모 프로세스가 기다린다.

기다리지 않으면 부모 프로세스가 먼저 끝나서 자식 프로세스는 고아프로세스가 되어버린다.

리턴값은 자식프로세스의 pid이다.


copy-on-write

copy-on-write는 fork() 시스템콜이 4GB를 복사하는데 시간이 너무 오래걸린다는 문제점에서 출발했다.

자식프로세스 생성 시에 복사를 하지 않고 우선 부모 프로세스 페이지를 우선 사용한다.

읽기가 아니라 쓰기를 할 때 해당 페이지를 물리메모리에서 복사하고 분리한다.

분리한 후에는 업데이트된 물리 메모리의 page pointer를 자식 프로세스의 페이지테이블에서 업데이트한다.

장점은 프로세스 생성 시간을 줄일 수 있으며, 새롭게 할당 되어야 하는 페이지 수도 최소화할 수 있다.

 


exit() 

exit() 시스템콜은 프로세스 종료할 때 사용된다.

return 0과의 차이점은 리턴은 단지 main()이라는 함수를 종료하는 것이고, exit()는 프로세스를 바로 종료하는 것이다.

내부 실행 동작:

 1. atexit()에 등록된 함수가 실행(프로세스 종료 시 실행될 함수를 등록하기 위해 사용되며, 등록된 역순으로 실행된다)

 2. 열려있는 입출력 스트림 버퍼 모두 삭제(stdin, stdout, stderr 등)

 3. 프로세스가 오픈한 파일들 모두 닫음

 4. tmpfile()함수를 통해 임시 생성 파일 삭제