본 글은 다음 강의를 들으며 정리한 내용입니다.
강의 정보 : 운영체제 / 이화여대 반효경
강의 링크
Copy-on-write (COW) 기법
부모 프로세스(Parent process)가 자식 프로세스(children process) 생성
프로세스의 트리(계층 구조) 형성
프로세스는 자원을 필요로 함
자원의 공유
수행 (Execution)
주소 공간 (Address space)
유닉스의 예
fork()
시스템 콜이 새로운 프로세스를 생성fork
다음에 이어지는 exec()
시스템 콜을 통해 새로운 프로그램을 메모리에 올림프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌 (exit
)
wait
)부모 프로세스가 자식의 수행을 종료시킴 (abort
)
A Process is created by the fork()
system call.
int
main()
{
int pid;
pid = fork();
if (pid == 0)
printf("Hello, I am child!\n");
else if (pid > 0)
printf("Hello, I am parent!\n");
}
A process can execute a different program by the exec()
system call.
int
main()
{
int pid;
pid = fork();
if (pid == 0)
{
printf("Hello, I am child! Now I'll run date.\n");
execlp("/bin/date", "/bin/date", (char *)0);
}
else if (pid > 0)
printf("Hello, I am parent!\n");
}
프로세스 A가 wait() 시스템 콜을 호출하면
커널은 child가 종료될 때까지 프로세스 A를 sleep시킨다. (block 상태)
Child process가 종료되면 커널은 프로세스 A를 깨운다. (ready 상태)
프로세스의 종료
마지막 statement 수행 후 exit() 시스템 콜을 통해
프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어줌
부모 프로세스가 자식 프로세스를 강제 종료시킴
키보드로 kill, break 등을 친 경우
부모가 종료하는 경우
fork()
: create a child (copy)
exec()
: overlay new image
wait()
: sleep until child is done
exit()
: frees all the resources, notify parent
메시지를 전달하는 방법
주소 공간을 공유하는 방법
Message system
Direct Communication