주제 : 스케쥴링 동작시점
CS에 기초도 모르던 내가, CS를 공부하며 다소 흥미를 느끼고 있다는 것이 신기하다.
다만 조금 더디고 여러번 강의를 되풀이 할 때가 많고, CPU를 공부하다 다소 복잡한 부분이 있어, 심화학습 후 해당 부분을 기록해본다.
들어가기 전 : 스케쥴링 종류
스케쥴링 종류에는 크게 선점 스케쥴링(Preemptive Scheduling) / 비선점 스케쥴링(Non-Preemptive Scheduling)
이 있다.
선점 스케쥴링 : OS가 CPU의 사용권을 선점할 수 있는 경우, 강제 회수하는 경우 활용되며 처리 시간 예측의 어려움이 있다.
비선점 스케쥴링 : 프로세스 종료 또는 I/O(Input/Output) 등 이벤트가 있을 때까지 실행을 보장하며 처리시간 예측이 용이하다.
스케쥴링 동작시점
위 이미지와 같이 스케쥴링 알고리즘에 따라 프로세스들은 상태변화가 일어나며 준비/수행 상태일때 CPU를 사용한다.
- 수행 -> 대기 (Running->Waiting) : I/O요청이 발생하거나, 자식 프로세스가 종료 대기를 할 때
- 수행 -> 종료 (Running -> Terminate) : 프로세스를 강제로 종료시켰을 때
- 수행 -> 준비 (Running-> Ready) : 인터럽트(중단 요청)가 발생 했을 때
- 대기 -> 준비 (Waiting -> Ready) : I/O가 완료 되었을 때
이렇게만 보면 이해가 잘 되지 않아 자세하게 들여다보며 쉽게 이해하려 다음과 같이 작성해보았다.
스케쥴링 동작시점(자세한 풀이)
프로세스가 띄어지면 '준비' 상태로 돌입하고,
CPU 할당을 기다리다 프로그램이 스케쥴링을 통해 '수행' 상태가 되면 CPU를 통해 작업이 이루어진다.
작업 중 입출력이 필요한 상황이오면 '대기' 상태가 되며, 대기 중 입출력이 들어오면 '준비' 상태로 변경된다.
준비 상태에서 CPU 할당을 기다리다가 스케쥴링을 통해 차례가 오면 다시 CPU에 할당되며, 해당 과정을 지속적으로 반복하다 수행이 완료되면 프로그램이 탈출하면서 '종료' 상태가 된다.
동작시점 내 선점/비선점 스케쥴링 구분
여기서 선점/비선점 스케쥴링을 구분하자면,
위 파란색 글자 중 1번, 2번은 OS에 의한 강제적인 것이 아닌, 프로세스가 자발적으로 CPU를 반환하기 때문에 비선점 스케쥴링에 포함되며,
3번, 4번의 경우 I/O가 완료되어 CPU를 할당하거나, OS를 통해 보다 긴급한 프로세스 요청이 들어오거나 다른 이벤트들로 강제로 중단이 발생하는 경우로 선점 스케쥴링에 포함된다.