CS

CS) CPU 스케줄링

zzugest1 2026. 1. 14. 21:59

 

CPU 스케줄링

CPU 스케줄링이란 언제 어떤 프로세스에 CPU를 할당할지 결정하는 알고리즘을 말한다.

 

 

 

만약 CPU가 따로 규칙 없이 먼저 들어온 프로세스 순서대로만 처리한다면

 

ex) 내가 게임을 하려고 켰는데, 뒤에서 다른 프로그램 업데이트를 시작한 상황

이 경우 프로그램 업데이트가 10분 걸린다고 하면 CPU는 이를 10분동안 처리할 것이고 그 동안 나는 게임을 10분동안 못할 것이다.

 

이렇게 프로세스 별로 CPU 처리시간이 다른데 프로세스가 수 없이 CPU에 들어오면 문제가 생길 것이다.

이러한 상황을 막기 위해 운영체제는 CPU 사용 시간을 아주 잘게 쪼개서 나눠서 실행 한다. 이를 CPU 스케줄러라고 한다.

 

 

 

보통 스케줄러는 아래 세가지 경우에 개입을 한다.

  • 프로세스가 끝났을 때
  • 입력/출력 요청, 대기 시
  • 시간 초과

 

 

스케줄러 알고리즘에는 다양한 알고리즘이 있다

 

1. 선입선출

먼저 들어온 프로세스 순서대로 CPU를 할당하는 방식이다. 모든 프로세스는 우선순위가 동일하고, 프로세스의 CPU 처리 시간을 고려하지 않는 단순한 방법이다.

 

하지만 CPU 처리시간이 긴 프로세스가 먼저 들어오면 뒤의 프로세스는 많이 기다려야하는 단점이 있다. 그래서 현대 운영체제에선 거의 안쓰는 알고리즘이다.

 

2. 최단작업 우선(Shortest Job First : SJF)

프로세스 중 처리시간이 가장 짧은 프로세스부터 CPU에 할당하는 방식이다. 그래서 평균 대기 시간이 가장 짧은 알고리즘이다.

 

 

3. 우선순위 스케줄링

프로세스 중 우선순위가 가장 높은 프로세스에게 제일 먼저 CPU를 할당하는 방식이다. 우선순위를 결정하는 방식에는 여러 가지에 있으며 유동적으로 할당한다.

 

 

4. 라운드 로빈(Round Robin)

 

프로세스들에게 각각 동일한 CPU 할당 시간을 부여해서 이 시간 동안만 CPU를 읽게 하고 끝나면 다음으로 넘기는 방식이다. 할당 시간 동안 끝내지 못하면 맨 뒤로 간다. 

 

이 알고리즘은 따로 CPU 처리 시간을 계산하지 않아도 되고 우선 순위도 없는 가장 단순한 알고리즘이다.

 

 

 

이 외에도 스케줄러 방식에 사용되는 알고리즘은 다양하다.

 

 

 

현대 컴퓨터 윈도우는 우선순위 스케줄링 + 라운드 로빈 + 유동적인 스케줄링을 사용한다고 한다.

 

알고리즘을 직접 볼 순 없지만 작업 관리자에서 우선 순위를 관리하는 것을 볼 수 있다.

 

이렇게 각 프로세스 별 우선순위를 높음 ~ 낮음 으로 관리하는 것을 볼 수 있다.

 

 

#include <windows.h>
#include <iostream>


int main() {
    // 1. 현재 내 스레드 가져오기
    HANDLE hThread = GetCurrentThread();

    // 2. 스케줄러에게 말해 우선순위 높임
    SetThreadPriority(hThread, THREAD_PRIORITY_ABOVE_NORMAL);

    std::cout << "제 우선순위가 올라갔습니다. CPU를 더 자주 받습니다." << std::endl;


    return 0;
}

 

C++ 코드로 특정 스레드를 수동으로 우선순위를 높일 수가 있다. 

 

게임을 하면 수많은 프로세스와 스레드를 CPU가 읽어들일 텐데, 상황에 맞게 스케줄러의 우선순위를 바꾸면 CPU가 빠르게 프로세스와 스레드를 처리하므로 게임이 빠르고 원활하게 돌아가는 것이다.

'CS' 카테고리의 다른 글

CS) 물리적 메모리 vs 논리적 메모리  (0) 2026.01.15
CS) 데드락(교착 상태)  (0) 2026.01.15
CS) 스택 프레임  (0) 2026.01.14
CS) 프로세스와 스레드  (1) 2026.01.14
CS) 캐시 메모리  (0) 2026.01.14