프로세스 생성
부모 프로세스가 자식 프로세스 생성
트리구조
프로세스는 자원을 필요로 함
운영체제에서 받음 (보통)
부모와 공유
자원의 공유 (원칙적으로는 안함)
수행
1. 부모와 자식 공존하는 경우
2. 자식이 종료될 때까지 부모가 기다리는 경우
주소공간
자식은 부모의 공간을 복사함
그 공간에 새로운 프로그램을 올림
유닉스의 예
fork() 시스템 콜이 새로운 프로세스 생성
1. 부모를 그대로 복사
2. 주소 공간 할당
fork 다음에 이어지는 exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림
프로세스 종료
프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌 (exit)
자식이 부모에게 output data를 보냄
프로세스의 각종 자원들이 운영체제에게 반납됨
부모 프로세스가 자식의 수행을 종료시킴 (abort)
1. 할당 자원의 한계치를 넘어섬
2. 자식에게 할당된 태스크가 더 이상 필요하지 않음
3. 부모가 종료하는 경우
부모가 종료되는 경우 자식이 더 이상 수행되도록 두지 않음
최 하단부터 단계적인 종료
fork() 시스템 콜 (사용자 프로그램이 실행 시 동작하는 내용)
int main()
{ int pid;
printf("\n Hello, I`m child! \n|);
pid = fork(); 1) 이 함수를 통해 자식 프로세스 생성
if (pid == 0)
printf("\n Hello, I`m child! \n");
else if (pid > 0)
printf("\n Hello, I`m parent! \n");
}
2) 생성을 하면 똑같은 코드를 가진 자식이 생성되고 부모의 PC를 기억해둗ㄴ 상태이기 때문에 if문 부터 실행하게 됨
exec() 시스템 콜
어떤 프로그램을 완전히 새로운 프로세스로 태어나게 함
int main()
{ int pid;
printf("\n Hello, I`m child! \n|);
pid = fork(); 1) 이 함수를 통해 자식 프로세스 생성
if (pid == 0)
printf("\n Hello, I`m child! \n");
execlp("\bin\date", "\bin\data", (char *) 0);
else if (pid > 0)
printf("\n Hello, I`m parent! \n");
}
"\bin\date" 프로그램이 되어 그 함수를 실행하고 프로그램이 끝나면 그대로 끝남. 다시 돌아올 수 없음.
위 코드와 달리 꼭 자식을 만들어서 exec 할 필요는 없음.
wait() 시스템 콜
자식 프로세스가 종료될 때까지 sleep 시킴.
자식이 종료되면 부모를 ready 시킴
exit() 시스템 콜
프로세스를 종료시킬 때 호출함
프로세스의 종료
자발적 종료
마지막 statement 수행 후 exit() 시스템 콜을 통해서 함
명시적으로 선언하지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어줌.
비자발적 종료
부모 프로세스가 자식 프로세스를 강제 종료 시킴
자식 프로세스가 한계치를 넘어서는 자원 요청
자식에게 할당된 태스크가 더 이상 필요하지 않음
키보드로 kill, break 등을 친 경우
부모가 종료하는 경우
부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨.
프로세스 간 협력
독립적 프로세스
프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함
협력 프로세스
프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
프로세스 간 협력 메커니즘 (IPC)
메시지를 전달하는 방법
message passing: 커널을 통해 메시지를 전달
주소 공간을 공유하는 방법
shared memory: 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 함
thread의 경우는 사실상 하나의 프로세스이다. 동일한 프로세스 안에 있기 때문에 스레드 간 협력은 가능하다.
Message Passing
Message System
프로세스 사이에 공유 변수를 일체 사용하지 않고 통신하는 시스템
1. direct communication
통신하려는 프로그램의 이름을 명시적으로 표시
ex) Process P (send Q.message) -> Process Q (receive P.message)
2. indirect communication
mailbox (또는 port)를 통해 메시지를 간접 전달
Process P -> Mailbox M -> Process Q
Send(M.message) Receive(M.message)
모두 커널을 통해서 메시지를 전송하는 것이다.
Shared Memory
커널에게 shared memory를 사용한다고 공지 해야 함.
'운영체제 정리' 카테고리의 다른 글
쉽게 배우는 운영체제 챕터별 연습문제 및 심화문제 정리 [PART 3, PART 4] (0) | 2021.01.14 |
---|---|
쉽게 배우는 운영체제 챕터별 연습문제 및 심화문제 정리 [PART 1, PART 2] (0) | 2021.01.11 |
이화여대 운영체제 수업 3 - 1강(프로세스) 정리 (0) | 2019.11.27 |
이화여대 운영체제 수업 2 강(시스템 구조와 프로그램 실행) 정리 (0) | 2019.11.26 |
이화여대 운영체제 수업 1 강(개론) 정리 (0) | 2019.11.23 |