Written by JS970
on
on
운영체제 2023-03-22 수업정리
Flow
- Process scheduling
- Scheduler
- Process creation & termination
Process scheduling
- 주어진 실행 가능한 프로세스 목록 중에서 어떤 프로세스를 실행할 것인지 정하는 규칙
- 빠르고 빈번하게 일어난다.
- 이런 규칙은 크게 아래와 같이 분류할 수 있다.
- non-preemptive scheduling
- 실행 중인 프로세스에서 CPU 자원을 해제할 때까지 기다려야 한다.(yeild())
- 프로세스 간 조율이 중요하다.
- preemptive scheduling
- 대부분의 현대 scheduler 형태이다.
- scheduler가 interrupt를 통해 프로세스를 중지하고 context switching을 실시한다.
- non-preemptive scheduling
- Process scheduling을 하는 이유
- CPU에서 Time Sharing을 통해 프로세스를 빨리 switching해서 CPU사용률을 높이기 위해
- scheduler는 다음에 실행이 가능한 프로세스 중에서 선택하여 다른 프로세스를 실행한다.
- 프로세스에 대한 scheduling queue를 사용한다. 프로세스는 아래의 여러 큐 사이에서 이동한다.
- Job Queue
- 시스템 내 모든 프로세스 큐
- Ready Queue
- main memory에 올라온 프로세스 큐
- Device Queue
- I/O 대기중인 프로세스 큐
- Wait Queue
- event 대기중인 프로세스 큐
- Queue들은 아래와 같이 PCB의 arrivaled time에 따라 linked list형태로 구현된다.
- Ready Queue에서 scheduler에 의해 다음 프로세스로 선택되면 CPU자원을 할당받는다.
- Job Queue
Scheduler
Short-term scheduler(CPU scheduler)
- CPU 점유를 할당할 다음 프로세스를 선택한다.
- milisecond단위로 빈번하게 동작한다.
Medium-term scheduler
- swapping이 일어날 프로세스에 대해서 관리한다.
- 아래 그림은 Medium-term scheduler의 동작 그림이다.
Long-term scheduler(Job Scheduler)
- ready queue로 올라갈 프로세스를 관리한다.
- 수 초~ 수 분의 간격으로 빈번하지 않게 동작한다.
- multiprogramming의 정도를 관리한다.
Process creation & termination
Process Creation
- 새로운 프로세스의 생성은 부모 프로세스가 자식 프로세스를 생성하는 형태로 이루어진다. 이를 트리 구조로 표현할 수 있다.
- 일반적으로 프로세스는 PID라는 고유 번호를 통해 식별된다.
- Resource Sharing
- 자식 프로세스는 부모 프로세스의 모든 자원을 공유할 수 있다.
- 자식 프로세스가 부모 프로세스의 일부 자원만 공유하는 것도 가능하다.
- 심지어 서로 아무런 자원도 공유하지 않는 것 역시 가능하다.
- Execution Modes
- 부모 프로세스는 wait()등의 system call을 통해 자식 프로세스의 실행이 끝날 때까지 대기할 수 있다.
- 부모 프로세스와 자식 프로세스는 동시에 실행될 수도 있다.
- Address Space Modes
- 자식 프로세스는 부모 프로세스의 복제본일 수 있다.
- 자식 프로세스와 부모 프로세스는 전혀 다른 프로세스 일 수 있다.
- 아래는 유닉스 시스템에서 프로세스 생성 과정을 도식으로 나타낸 것이다.
Process Termination
- 프로세스의 마지막 코드에서, 프로세스는 exit()등의 프로세스 종료 system call을 사용하여 프로세스를 삭제할 수 있다.
- 자식 프로세스가 종료될 경우 pid를 부모 프로세스로 반환한다.
- OS로부터 할당받은 자원을 해제한다.
- 부모 프로세스는 abort()를 사용하여 자식 프로세스를 종료시킬 수 있다.
- 자식 프로세스가 자원을 초과해서 사용하는 경우
- Task수행 중 더 이상 자식 프로세스가 필요 없는 경우
- 일부 운영 체제에서는 부모 프로세스가 종료되면 자식 프로세스가 실행되는 것을 허용하지 않는 경우도 있다.
- 이를 cascaded termination이라고 한다.
- 부모 프로세스가 waiting하고 있지 않은 경우 해당 프로세스는 zombie process이다.
- 부모 프로세스가 wait()없이 terminate하였다면 해당 프로세스는 orphan이다.