도구스개발

CPU 스케줄링 계산기 (FCFS·SJF·라운드로빈)

프로세스의 도착시각과 실행시간을 넣으면 FCFS·SJF·SRTF·라운드로빈·우선순위 각각의 간트 차트와 평균 대기시간·반환시간·응답시간을 계산합니다. 여섯 알고리즘을 한 표에서 견줍니다.

한 줄에 «이름 도착시각 실행시간 우선순위» 순으로 넣습니다. 이름과 우선순위는 생략해도 됩니다.

평균 대기시간

6.5

평균 반환시간 13 · 평균 응답시간 4.25 · SRTF (최소잔여시간 우선, 선점)

간트 차트

P2P4P1P305101726
프로세스도착실행완료반환대기응답
P108171790
P2145400
P32926241515
P43510722

반환시간 = 완료 − 도착, 대기시간 = 반환 − 실행, 응답시간 = 처음 CPU를 잡은 시각 − 도착입니다. 셋이 이 관계로 묶여 있어 하나만 어긋나도 나머지가 같이 틀어집니다.

전체 완료 시각26
CPU 유휴 시간0
CPU 이용률100%
문맥교환 횟수4

같은 자료를 여섯 알고리즘에 돌린 결과

알고리즘평균 대기평균 반환평균 응답문맥교환
FCFS (선입선처리)8.7515.258.753
SJF (최단작업 우선, 비선점)7.7514.257.753
SRTF (최소잔여시간 우선, 선점)6.5134.254
RR (라운드로빈)12.7519.25212
우선순위 (비선점)7.7514.257.753
우선순위 (선점)6.5134.254

라운드로빈은 시간 할당량 2로 돌린 값입니다. 평균 대기시간만 보면 SJF 계열이 늘 앞서지만, 응답시간 열을 함께 보시면 라운드로빈을 쓰는 이유가 드러납니다.

동점을 어떻게 처리했는지 밝힙니다. 이 계열 계산에서 교재와 답이 갈리는 이유는 거의 전부 여기입니다.① 실행시간·우선순위가 같으면 먼저 도착한 쪽을 먼저
② 도착시각까지 같으면 넣으신 순서대로
③ 선점형에서 값이 같으면 돌던 프로세스를 그대로 둡니다(엄격히 작을 때만 뺏습니다)
④ 라운드로빈에서 시간 할당량이 끝나는 순간과 새 프로세스가 도착하는 순간이 겹치면 새로 도착한 쪽을 큐에 먼저 넣습니다
특히 ④가 값이 갈리는 1순위 지점입니다. 반대로 잡은 교재도 있어 그 뒤의 순서가 통째로 달라집니다. 문맥교환에 드는 시간은 0으로 봅니다.
SJF가 평균 대기시간을 최소로 만듭니다. 모두 같은 시각에 도착한 경우에 대해 증명되어 있습니다. 그런데도 실제 운영체제가 쓰지 않는 이유는 두 가지입니다 — 실행시간을 미리 알 수 없고(과거 실행시간으로 «예측»할 뿐입니다), 짧은 작업이 계속 들어오면 긴 작업이 영원히 밀리는 기아가 생깁니다. 그래서 실무에서는 우선순위를 시간이 갈수록 올려 주는 에이징을 함께 씁니다.
입출력 대기는 다루지 않습니다. 실제 프로세스는 CPU를 쓰다가 입출력을 기다리며 CPU를 놓는 것을 되풀이하는데, 여기서는 CPU 버스트 하나짜리로 봅니다. 교재의 연습문제와 시험 문제가 대개 이 전제 위에 있어 그대로 따랐습니다. 다중큐·에이징·실시간 스케줄링도 범위 밖입니다.

사용 방법

  1. 1프로세스 표를 한 줄에 하나씩 «이름 도착시각 실행시간 우선순위» 순으로 넣습니다. 이름과 우선순위는 생략해도 됩니다.
  2. 2알고리즘을 고릅니다. 라운드로빈이면 시간 할당량을, 우선순위면 숫자의 방향을 함께 정합니다.
  3. 3간트 차트로 실행 순서를 확인하고, 표에서 프로세스마다의 대기·반환·응답시간을 봅니다.
  4. 4아래 비교표에서 같은 자료를 여섯 알고리즘에 돌린 결과를 견줍니다.
  5. 5교재와 답이 다르다면 동점 처리 규약 안내를 먼저 확인합니다.

자주 묻는 질문

반환시간은 도착해서 끝날 때까지 걸린 전체 시간이고, 대기시간은 그중 CPU를 못 쓰고 기다린 시간입니다. 관계식은 대기시간 = 반환시간 − 실행시간이고, 반환시간 = 완료시각 − 도착시각입니다. 응답시간은 또 다른 값으로, 처음 CPU를 잡은 시각에서 도착시각을 뺀 것입니다. 선점형에서는 한 번 잡았다가 뺏길 수 있어 응답시간이 대기시간보다 작아집니다.

거의 언제나 동점 처리 규약이 달라서입니다. 이 계산기는 실행시간이나 우선순위가 같으면 먼저 도착한 쪽을, 도착까지 같으면 넣으신 순서대로 고릅니다. 선점형에서는 값이 같을 때 돌던 프로세스를 그대로 두고 엄격히 작을 때만 뺏습니다. 특히 라운드로빈에서 시간 할당량이 끝나는 순간과 새 프로세스가 도착하는 순간이 겹칠 때 새로 도착한 쪽을 큐에 먼저 넣는데, 반대로 잡은 교재도 있어 그 뒤 순서가 통째로 달라집니다. 우선순위 숫자의 방향도 자료마다 반대라 화면에서 고를 수 있게 두었습니다.

모두 같은 시각에 도착한 경우에는 증명되어 있습니다. 짧은 작업을 앞에 두면 그 뒤 모든 작업의 대기시간이 함께 줄어들기 때문입니다. 도착시각이 어긋나 있으면 비선점 SJF는 최적이 아니고, 선점형인 SRTF가 그 상황에서 평균 대기시간을 최소로 만듭니다. 다만 두 경우 모두 실행시간을 미리 알고 있다는 전제 위에 있습니다.

실행시간을 미리 알 수 없기 때문입니다. 실제로는 과거 실행시간의 지수 평균으로 «예측»할 뿐이고 예측이 빗나가면 이점이 사라집니다. 더 큰 문제는 기아입니다 — 짧은 작업이 계속 들어오면 긴 작업이 영원히 밀립니다. 그래서 실무에서는 기다린 시간만큼 우선순위를 올려 주는 에이징을 함께 쓰거나, 다단계 피드백 큐처럼 여러 방식을 섞습니다.

할당량이 가장 긴 실행시간보다 크면 아무도 뺏기지 않아 FCFS와 똑같아지고, 아주 작게 잡으면 응답이 고르게 빨라지는 대신 문맥교환이 늘어납니다. 실무 기준으로는 CPU 버스트의 80% 정도가 한 번의 할당량 안에 끝나도록 잡으라고 흔히 말합니다. 이 계산기는 문맥교환에 드는 시간을 0으로 보기 때문에 할당량을 줄여도 전체 완료 시각이 그대로지만, 실제로는 그 비용이 붙어 처리량이 떨어집니다.

비선점은 한 번 CPU를 잡으면 스스로 놓을 때까지 끝까지 가고, 선점은 더 나은 후보가 나타나면 중간에 뺏깁니다. 같은 SJF라도 비선점은 SJF, 선점은 SRTF라고 따로 부르며 결과가 다릅니다. 선점형이 평균 대기시간과 응답시간에서 유리하지만 문맥교환이 늘고, 공유 자료를 다루는 중간에 뺏기면 동기화 문제가 생겨 커널 설계가 까다로워집니다.

아무 프로세스도 도착하지 않은 구간이 있을 때입니다. 예를 들어 첫 프로세스가 5에 도착하면 0부터 5까지는 CPU가 놉니다. 이 계산기는 그 구간을 간트 차트에 «유휴»로 표시하고 이용률에서 뺍니다. 모든 프로세스가 0에 도착하면 유휴가 없어 어떤 알고리즘을 쓰든 전체 완료 시각이 실행시간의 합과 같아집니다.

다루지 않습니다. 실제 프로세스는 CPU를 쓰다가 입출력을 기다리며 CPU를 놓는 것을 되풀이하지만, 이 계산기는 CPU 버스트 하나짜리로 봅니다. 교재의 연습문제와 자격시험 문제가 대개 이 전제 위에 있어 그대로 따랐습니다. 다중큐·에이징·실시간 스케줄링도 범위 밖입니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이루어지고 넣은 값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 동점 처리 규약: 실행시간·우선순위가 같으면 먼저 도착한 쪽, 도착까지 같으면 입력 순서입니다.
  • 라운드로빈에서 할당량 소진과 새 도착이 겹치면 새로 도착한 쪽을 큐에 먼저 넣습니다. 반대로 잡은 교재와는 답이 달라집니다.
  • 선점형은 값이 같을 때 돌던 프로세스를 그대로 둡니다. 엄격히 작을 때만 뺏습니다.
  • 우선순위는 기본적으로 숫자가 작을수록 높다고 봅니다. 화면에서 반대로 바꿀 수 있습니다.
  • 문맥교환에 드는 시간은 0으로 봅니다. 실제로는 할당량을 줄이면 그만큼 처리량이 떨어집니다.
  • 입출력 대기, 다중큐, 에이징, 실시간 스케줄링은 범위 밖입니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.