반응형
System Call
fork( ), exec( ), wait( )와 같은 것들은 Process 생성과 제어를 위한 System call임.
- fork, exec는 새로운 Process 생성과 관련이 되어 있음
- wait는 Process (Parent)가 만든 다른 Process(child)가 끝날 때까지 기다리는 명령어임.
프로세스 생성(Process Creation)
- 프로세스는 여러 개의 새로운 프로세스들을 생성할 수 있다. 생성한 프로세스를 부모 프로세스(parent process), 새로운 프로세스는 자식 프로세스라고 부른다.
- 또한 생긴 새로운 프로세스도 다시 프로세스를 생성할 수 있으며, 이러한 과정을 반복하면 프로세스 트리가 생성된다.
- 각 노드들은 프로세스 식별자(pid)를 사용하여 구분되며, 이 식별자는 보통 정수이다.
- 트리의 root node인 init은 유일하게 부모 프로세스가 없는 노드이다. (커널이 부팅하는 과정에서 커널이 직접 init 만든 것임)
- 운영체제마다 다르지만 부모 프로세스의 자원을 자식 프로세스에게 물려주는 경우가 많다. (자식 프로세스는 부모 프로세스의 자원을 가진 상태로 생겨남)
- 부모 프로세스의 주소 공간을 복제하여 자식 프로세스에게 사용하게 된다.
- fork()
- UNIX 운영체제의 system call
- 프로세스 생성에 사용되는 시스템 콜
- 부모 프로세스가 fork()를 호출하면 자식 프로세스가 생성됨
- exec()
- 부모 프로세스에 의해 fork()되어서 생성된 자식 프로세스는 생성된 직후에 exec() 시스템 콜을 호출함
- exec()을 호출한 프로세스 주소 공간을 시스템 콜에서 지정한 실행파일로 교체함 (즉, exec()을 실행하면 부모 프로세스와 다른 자신의 프로그램을 실행하게 됨)
- 위 사진은 아래 코드를 보면 더욱 이해가 쉽다.
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main(){
pid t pid;
/* 새 프로세스를 생성한다(fork) */
pid = fork(); // fork()가 성공적으로 return 되는 경우 부모 프로세스, 자식 프로세스 모두에게 리턴
// 부모 프로세스에게는 fork()리턴 값이 자식 프로세스의 pid가 리턴 됨 (양수 값)
// 자식 프로세스에게는 fork()의 리턴 값이 0
if (pid<0){
fprintf(stderr, "Fork Failed");
return 1;
}
else if(pid == 0){ /*"자식 프로세스"*/
execlp("/bin/ls", "ls", NULL); //자식 프로세스가 ls라는 프로그램을 실행함
//exec는 프로세스 자체는 유지하되, 프로세스가 실행하고 있는 프로그램을 다른 프로그램으로 대체하는 시스템 콜
//즉, 프로그램이 바뀜
}
else{ /*"부모 프로세스"*/
/* 부모가 자식이 완료되기를 기다림 */
wait(NULL);
printf("Child Complete");
}
return 0;
}
프로세스 종료(Process Termination)
- exit() 시스템 콜이 종료 기능을 수행함
- exit()을 수행한 프로세스는 모든 자원을 반환함. 종료하고자 하는 프로세스가 자기 자신이 호출함
- abort() 비정상적으로 프로세스를 종료 시킴. 자식 프로세스를 강제 종료시키기 위해 부모 프로세스가 호출하는 시스템 콜
- 언제 abort()를 사용하냐?
- 자식 프로세스가 자원 사용량이 지나치게 많을 때 abort()를 호출
- 자식 프로세스가 수행하는 작업이 더 이상 필요 없을 때
- 부모 프로세스가 exit()를 했는데, 자식 프로세스만 남아있는 것을 원치 않을 때
- 부모 프로세스는 wait() 시스템 콜을 통해서 자식 프로세스의 종료를 기다릴 수 있다. / 리턴 값은 종료한 자식 프로세스의 pid
- 좀비 프로세스 (Zombie process)
- 자식 프로세스가 exit()은 하였는데, wait()를 호출하고 있는 부모 프로세스가 없는 경우
- 고아 프로세스 (orphan process)
- 부모 프로세스가 먼저 종료한 경우
출처 - 공룡 책 (Operating System Concepts)
반응형
'CS > OS' 카테고리의 다른 글
[OS]Threads(스레드) (0) | 2021.05.12 |
---|---|
[OS]프로세스 간 통신(Interprocess Communication) (0) | 2021.04.30 |
[OS]프로세스(Process)란? (0) | 2021.04.29 |
[OS]멀티프로그래밍(Multiprogramming) (0) | 2021.04.27 |
[OS]운영체제 구조 (Operating System Structure) (0) | 2021.02.19 |