Copy-on-write(COW) 기법: 자식 프로세스가 부모 프로세스를 공유만 하고 있다고, 수정 사항이 생기면 해당 부분만 copy하는 기법(복제 생성이 아닌 방식)
부모 프로세스가 자식 프로세스 생성(복제 생성)
프로세스의 트리(계층 구조) 형성
프로세스가 실행되기 위해서는 자원을 필요로 함
자원의 공유
수행
주소 공간
유닉스 예
프로세스는 fork() 시스템 콜을 통해 만들어짐
int main(){
int pid;
printf("\n 부모 프로세스만 출력할 수 있는 부분");
pid= fork(); //fork 시점 이후부터 자식 프로세스가 실행됨(부모 프로세스의 PC를 자식이 알고 있기 때문에(문맥을 복사했기 때문))
//fork()의 리턴으로 pid가 오는데, 부모 프로세스의 pid는 양수이고, 자식 프로세스 는 0(구분가능)
if(pid==0)
printf("\n Hello, I'm Child Process");
else if(pid>0)
printf("\n Hello I'm Parent Process");
...
}
프로세스는 exec() 시스템 콜을 통해 다른 프로그램을 실행할 수 있음
int main(){
int pid;
pid= fork();
if(pid==0){
printf("Hello I'm Child");
execlp("/bin/date", "/bin/date",(char*)0);//이 함수가 exec() 시스템 콜을 함
//자식 프로세스는 date라는 프로그램을 덮 어씌우게 됨(새로운 프로그램 실행). 자식 프로세스는 해당 프로그램이 종료되면 수행을 다함. 다시 이곳으로 돌아올 수는 없음
}
else if(pid>0) printf("Hello I'm parent");
...
}
자식 프로세스가 종료될 때까지 부모 프로세스는 sleep(block) 상태로 만듦
자식 프로세스가 종료되면 부모 프로세스를 깨움(ready 상태)
int main(){
int childPID;
childPID= fork();
if(childPID==0){
...
}else{
wait()
}
...
}
ex) 리눅스의 명령 프롬프트에서 특정 프로그램의 이름을 입력하면, 명령 프롬프트라는 부모 프로세스가 특정 프로그램이라는 자식 프로세스를 생성하고 해당 프로그램이 종료될때까지 wait 했다가 다시 명령줄을 입력할 수 있게 함(자식 프로세스 종료전까지는 명령줄 입력 x)
독립적 프로세스
협력 프로세스
프로세스 간 협력 메커니즘(IPC: Interprocess Communication)
https://core.ewha.ac.kr/publicview/C0101020140307151724641842?vmode=f