프로세스 생성
부모 프로세스가 자식 프로세스를 생성한다.
프로세스의 트리를 형성한다.
프로세스는 자원을 필요로 한다. 이러한 자원은 운영체제로부터 받으며, 부모와 공유한다.
자원 공유 종류는 크게 3가지가 있다. 부모와 자식의 모든 자원을 공유하는 모델, 일부를 공유하는 모델, 전혀 공유하지 않는 모델이 있다.
수행: 부모와 자식이 공존하며 수행되는 모델과 자식이 종료될 떄까지 부모가 기다리는 모델이 있다.
자식은 부모의 주소 공간을 복사하고, 그 공간에 새로운 프로그램을 올린다.
- Copy-on-write란 내용이 바뀔때 카피해서 새로운 내용을 만드는것을 말한다.
프로세스 종료
프로세스가 마지막 명령을 수행한 후 운영체제에게 알려준다. (exit라는 system call을 사용함)
- 프로세스 종료시
- 자식이 부모에게 output data를 보낸다. (wait)
- 프로세스의 각종 자원들이 운영체제에게 반납된다.
부모 프로세스가 자식의 수행을 종료시킨다. (abort)
- 자식이 할당 자원의 한계치를 넘어선 경우
- 자식에게 할당된 태스크가 더 이상 필요하지 않은 경우
- 부모가 종료하는 경우에 운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수행되도록 두지 않으며, 단계적인 종료가 이루어진다.
fork() 시스템 콜
프로세스는 fork() 시스템 콜에 의해 생성된다.
int main()
{
int pid;
/* 운영체제에게 새로운 함수를 만들라는 요청 */
pid = fork();
if(pid == 0) /* 자식 */
printf('자식프로세스')
else if (pid > 0) /* 부모 */
printf('부모프로세스')
}
exec() 시스템 콜
프로세스는 exec() 시스템 콜에 의해 다른 프로그램을 실행 할 수 있다.
exec를 만나면 자식 프로세스는 그 프로그램이 된다.
int main()
{
int pid;
/* 운영체제에게 새로운 함수를 만들라는 요청 */
pid = fork();
if(pid == 0) /* 자식 */
{ printf('자식프로세스')
execlp("/bin/date", "bin/date", (char *) 0);
}
else if (pid > 0) /* 부모 */
printf('부모프로세스')
}
wait() 시스템 콜
프로세스 A 가 wait() 시스템 콜을 호출하면 커널은 child가 종료될 떄까지 프로세스 A를 sleep 시킨다. (block 상태) 자식 프로세스가 종료되면 커널은 프로세스 A를 깨운다. (ready 상태)
main {
int childPID;
s;
childPID = fork();
if(childPID == 0)
자식프로세스 코드
else {
// 자식프로세스 코드가 종료 될 떄까지 기다린다.
wait();
}
}
exit() 시스템 콜
프로세스의 종료
- 자발적인 종료인 경우 마지막 문장 실행 후 exit() 시스템 콜을 통해서 종료된다. 프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어주며, 만약 임의로 exit()을 호출한 경우 그 프로그램은 해당 문장에서 종료된다.
- 비자발적인 종료인 경우 부모 프로세스가 자식 프로세스를 강제 종료시킨다.
- 자식이 할당 자원의 한계치를 넘어선 경우에 강제종료 시킨다.
- 자식에게 할당된 태스크가 더 이상 필요하지 않은 경우에도 강제종료 시킨다.
- 키보드로 kill, break등을 친 경우 (ex) ctrl + c)
- 부모가 종료하는 경우
프로세스 간 협력
- 독립적 프로세스: 프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행의 영향을 미치지 못한다.
- 협력 프로세스: 프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠수 있다.
- 프로세스간 협력 매커니즘(IPC)
- 방법에는 2가지가 있다.
- message passing: 커널을 통해 메시지를 전달하는 방법
- shared memory: 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 매커니즘이 있다.
Message passing
다른 프로세스에게 정보를 전달할 때는 커널을 통해서 메세지를 전달한다.
Direct Communication: 통신하려는 프로세스의 이름을 명시적으로 표시한다.
Indirect Communication: mailbox(또는 port)를 통해서 메세지를 간접 전달한다.
프로세스의 특성 분류
프로세스는 그 특성에 따라 다음 두 가지로 나눈다.
- I/O bound process: CPU를 잡고 계산하는 시간보다 I/O에 많은 시간이 필요한 job이다.
- CPU-bound process: 계산 위주의 job이다.
'Computer Science > Operating System' 카테고리의 다른 글
[CS] 운영체제 - 프로세스 동기화 (0) | 2022.09.01 |
---|---|
[CS] 운영체제 - CPU 스케줄링 (0) | 2022.09.01 |
[CS] 운영체제 - 프로세스 (0) | 2022.08.31 |
[CS] 운영체제 - 시스템 구조와 프로그램 동작 방식 (0) | 2022.08.30 |
[CS] 운영체제 - 운영체제란? (0) | 2022.08.30 |