KOCW > 이화여자대학교 반효경 교수님 > 운영체제 > 3. 프로세스 관리(5)
3. 프로세스 관리(5)
프로세스 생성(Process Creation)
- 부모 프로세스가 자식 프로세스를 fork() 시스템 콜을 통해 생성
- 프로세스의 트리(계층 구조) 형성
- 자식은 부모의 공간을 복사(binary and OS data) 후, 그 공간에 새로운 프로그램을 올림
- UNIX의 예
- fork() 시스템 콜이 새로운 프로세스를 생성 후,
- 그 다음 이어지는 exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림
- 프로세스는 자원을 필요로 함
- 운영체제로부터 받는다
- 혹은 부모와 공유하기도 함
- 자원의 공유 방식의 종류
- 부모와 자식이 모든 자원을 공유하는 모델
- 일부를 공유하는 모델
- 전혀 공유하지 않는 모델
프로세스 종료(Process Termination)
- exit(): 프로세스가 마지막 명령을 수행한 후, 운영체제에게 이를 알려줌
- 자식이 부모에게 output data를 보냄
- 프로세스의 각종 자원이 운영체제에게 반납됨
- abort(): 부모 프로세스가 자식의 수행을 종료시킴
- 자식이 할당 자원의 한계치를 넘어섬
- 자식에게 할당된 태스크가 더 이상 필요하지 않음
- 부모가 먼저 종료(exit)하는 경우는?
- 가장 말단의 자식부터 먼저 단계적으로 종료 후, 부모를 종료
fork() 시스템 콜
- 부모와 자식을 구별하는 방식은 pid(프로세스 식별자, Process ID)를 이용
int main()
{
int pid;
pid = fork();
if (pid == 0)
printf("\n Hello, I am child!\n")
else if (pid > 0)
printf("\n Hello, I am parent!\n")
}
exec() 시스템 콜
int main()
{
int pid;
pid = fork();
if (pid == 0)
printf("\n Hello, I am child! Now I'll run date \n")
execlp("/bin/date", "/bin/date", (char *)0);
else if (pid > 0)
printf("\n Hello, I am parent!\n")
}