Process Creation
부모 프로세스가 자식 프로세스 생성하여 트리(계층 구조) 형성
-> 자식은 부모의 주소 공간을 복사해서 그 공간에 새로운 프로그램을 올림
ex) 유닉스 : fork() - 시스템 콜이 새로운 프로세스를 생성, exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림.
-> 프로세스가 마지막 명령을 수행한 후 운영체제에게 알려줌. exit
-> 부모프로세스가 자식의 수행을 종료시킴 abort
-> 부모프로세스와 자식프로세스는 모든 자원을 공유하기도 하고, 일부만 공유하기도 하고, 전혀 공유하지 않을 수도 있다. 그러나 대다수의 경우 공유하지 않고, 서로 자원을 더 많이 차지하려고 한다.
wait( ) 시스템 콜
부모프로세스가 wait() 시스템 콜을 호출하면 커널은 자식프로세스가 종료될 때 까지 부모프로세스를 sleep시킨다.(block상태) 자식프로세스가 종료되면 커널은 부모프로세스를 깨워 ready상태로 만든다.
부모프로세스와 자식프로세스가 병렬적으로 수행되는 경우도 있지만, wait() 시스템 콜 처럼 자식프로세스가 종료될 때까지 blocked되었다가 다시 실행되는 모델도 있다.
exit( ) 시스템 콜
프로세스의 종료
1. 자발적 종료
- 스스로 exit() 시스템 콜을 통해 main함수가 리턴되는 위치에 컴파일러가 넣어줌.
2. 비자발적 종료
- 부모 프로세스가 자식프로세스를 강제 종료시킴.
(자식에게 할당된 태스크가 더 이상 필요없을 때 / 자식프로세스가 한계치를 넘어서는 자원을 요청할 때)
- 부모가 종료하는 경우
부모프로세스가 종료하기 전에 자식들이 먼저 종료됨.
- 키보드로 kill, break 등을 친 경우
프로세스와 관련된 시스템 콜
fork() 복사해서 자식 프로세스 생성
exec() 새로운 프로세스 생성
wait() 자식프로세스가 종료될 때까지 sleep상태
exit() 모든 자원을 반납하고, 부모프로세스에게 종료됨을 알림
프로세스 간 협력
원칙적으로 프로세스는 각자의 주소 공간을 가지고, 독립적으로 수행한다. 그러나 경우에 따라서는 협력메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미치기도 한다. 이를 프로세스 간 협력 메커니즘(IPC:Interprocess Communication)이라고 한다.
이러한 방법에는 두 가지가 있다.
1. message passing : 커널을 통해 메시지 전달
2. 주소 공간을 공유하는 방법 : shared memory - 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 함.
thread: 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵지만, 동일한 process를 구성하는 thread간에는 주소 공간을 공유하므로 협력이 가능하다.
CPU 스케줄링이 필요한 이유
cpu bound job(ex)연산작업과 같이 계산 위주의 job)과 I/Obound job(cpu를 잡고 계산하는 시간보다 I/O에 많은 시간이 필요한 job)이 있는데 I/O bound job이 ineractive한 작업이기 때문에 cpu bound job이 너무 오래 cpu를 차지하고 있으면 사용자에게 불편함을 줄 수 있다. 그렇기 때문에 자원을 효율적으로 사용하기 위한 스케줄링이 필요한 것이다.
CPU Scheduler
Ready 상태의 프로세스 중에서 이번에 CPU를 줄 프로세스를 고른다.
Dispatcher
cpu의 제어권을 cpu scheduler에 의해 선택된 프로세스에게 넘긴다. 이 과정을 context switch(문맥 교환)이라고 한다.
nonpreemptive(=자진 반납)에 해당하는 cpu 스케줄링이 필요한 경우
1. Running - > Blocked (예: I/O요청하는 시스템 콜)
2. Running - > Ready (예: 할당시간만료로 timer Interrupt)
3. Blocked - > Ready (예: I/O완료 후 인터럽트) : device controller가 cpu에게 인터럽트를 검.
4. Terminate
다른 스케줄링은 preemptive(강제로 빼앗음)한 경우이다.
'운영체제' 카테고리의 다른 글
Deadlock (0) | 2021.06.29 |
---|---|
Process Synchronization (0) | 2021.06.28 |
CPU Scheduling (0) | 2021.06.28 |
운영체제 프로세스 (0) | 2021.05.14 |
운영체제 개요 (0) | 2021.05.13 |