본문 바로가기
교육, 학습/CS스터디_반효경 운영체제

운영체제 - 프로세스 관련 시스템 콜(fork, exec, wait, exit)

by 개발하는 경제학도 2022. 1. 8.

강의 소개

현재 수강하고 있는 KOCW 내 이화여자대학교 운영체제(2017, 반효경) 강의의 내용을 정리하였습니다.

개발자 관점에서 운영체제 기초를 학습하는 무료 강의로 자세한 강의 내용은 수강을 추천드립니다.


 

프로세스 관련 시스템 콜



1. fork() 시스템 콜

간단히 말하자면, 부모 프로세스를 자식 프로세스에 복제시키는 것이다. 이를 통해 자식 프로세스가 생성된다.

이때, 자식 프로세스는 부모 프로세스의 context를 그대로 복사해서 가져온다. fork() 시스템 콜로 부모 주소 공간(Address space: code, data, stack)을 그대로 복사한 자식 프로세스가 생성된다.

2. exec() 시스템 콜

fork() 시스템 콜로 복제된 자식 프로세스에 새로운 프로그램을 덮어 씌우는 것이다. 이것으로 자식 프로세스는 독자적인 작업을 수행할 수 있게 된다.

 

** fork()시스템 콜과 exec() 시스템 콜 자세히

2022.01.08 - [교육, 학습/CS스터디] - 운영체제 - fork시스템 콜, exec시스템 콜(자식, 부모 프로세스 관련), 프로세스의 생성과 종료

 

3. wait() 시스템 콜

자식 프로세스가 종료되기를 기다리며 부모 프로세스가 기다리게 할 때 사용한다.

 

- 순서

fork()시스템 콜로 복제된 자식을 만든 다음에, 부모 프로세스가 wait() 시스템 콜을 호출하면 커널은 자식 프로세스가 종료될 때까지 부모 프로세스를 sleep 시킨다.

(** block 상태: CPU를 주어도 당장 명령어를 수행할 수 없는 상태. 여기서는 부모 프로세스가 자식 프로세스의 종료를 기다리면서 wait 하는 상태)

자식 프로세스가 종료되면 커널은 부모 프로세스를 깨운다.(ready 상태)

출처: 운영체제(이화여자대학교, 2017년 1학기 반효경)

 

** 프로세스의 상태(자세히)

2022.01.06 - [교육, 학습/CS스터디] - 운영체제 - 프로세스 상태(Running, Ready, blocked), 프로세스가 running 중 CPU를 반환하는 경우

 

- 사용 예시

리눅스에서 명령어를 입력할 수 있는 하나의 프로세스를 쉘이라 한다.

자식 프로세스로 Vi 에디터를 사용할 때, A라는 파일의 수정을 하는 도중에는, 부모 프로세스인 쉘은 blocked상태로 기다린다.

Vi 프로그램을 종료하면 쉘에서 다시 커멘드를 입력할 수 있는 상태가 된다.

 

- 사용이유

부모가 wait하지 않으면(즉, ready상태이면) 부모 프로세스와 자식 프로세스는 CPU를 먼저 얻기 위해 경쟁관계에 있게 된다.

(부모, 자식은 사실 독립적인 프로세스이기 때문에)

따라서 wait() 시스템 콜을 통해 부모가 blocked 상태에 있게 된다.

 

4. exit() 시스템 콜

프로그램을 종료시키는 시스템 콜이다. 모든 자원을 반납하고 부모 프로세스에게 자신이 종료됨을 알린다.

 

- 프로세스의 종료의 종류

1) 자발적 종료(정상 종료: exit() 시스템 콜)

마지막 statement 수행 후 exit() 시스템 콜을 사용하여 종료된다.

사용자가 프로그램에 명시하지 않더라도, main 함수가 리턴되는 위치에 컴파일러가 exit()을 자동적으로 넣어준다.

 

2) 비자발적 종료(비정상 종료: abort() 시스템 콜)

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

(자식 프로세스가 한계치를 넘어서는 자원을 요청하거나, 자식에게 할당된 task가 더 이상 필요하지 않은 경우)

- 키보드로 kill, break 등을 친 경우(window 창의 x를 누르는 것도 이 같은 강제 종료이다)

- 부모가 종료하는 경우 (부모 프로세스가 종료하기 전에 자식들을 먼저 종료시킨다)

 

 

출처: 운영체제와 정보기술의 원리(반효경 )

댓글