본문 바로가기

운영체제

스케줄링 알고리즘- FCFS(=FIFO) 스케줄링, SJF 스케줄링

FCFS는 Fisrt-Come First-Served의 약자로 프로세스를 어떤 순서로 cpu에 올려줄까?
하면 가장 쉽게 떠올릴 수 있는 방법이다. (선착순)
식당에 가서 주문하면 주문한 순서대로 음식을 내어주는 것과 마찬가지로
먼저 준비큐에 도착한 프로세스
디스패치 (프로세스가 cpu로 올라가 준비->실행됨) 된다. 

codarchive그림


FCFS 스케줄링은 비선점 방식으로 가장 간단하지만 대기시간과 반환시간 기준으로 성능을 평가했을때
그리 보통 성능이 좋은 알고리즘은 아니다. 게다가 비선점 방식인 만큼 아무래도 교착상태의 위험이...;
또한 D같이 잠깐만 실행하면 끝나는 프로세스가 늦게 도착하면 세월아 내월아 기다려야 하니
아무래도 평균적으로 성능이 좋지 못함

여기서 비선점 방식이라는 것은 하나의 프로세스가 종료 전, 실행 중에 순서를 다른 프로세스에게 뺏기지 않고 실행을 마치고 다음 순서 프로세스에게 실행이 넘어간다는 것.

 

SJF 는 Shortest Job First의 약자로 준비큐의 프로세스 중
실행 시간이 가장 짧다고 예상되는 잡을 먼저 디스패치한다. 

codarchive 그림

위의 그림이랑 같은 도착시간과 사이클을 가진 잡이지만 D같이 잠깐만 쓰고 끝나는 작업을 먼저 할 수 있게 해준다.

뭐..일단 SJF도 비선점 방식이라 교착상태의 위험은 있지만 짧게 치고 빠질 수 있는 놈들(?)을 먼저 처리해주다보니 FCFS에서 지지부진하던 성능을 어느정도 개선해주는 장점이 있다. 아주 잠깐만 쓰면 끝나는 잡인데 지지부진 선착순으로 기다리게 하는것보다는 먼저 실행시켜준다는 원리다. 근데 뭐 실행 시간 예측이 실패한다면.....

 

참고:https://www.geeksforgeeks.org/program-for-fcfs-cpu-scheduling-set-1/