[스터디] CPU 스케줄링

Jun_k·2026년 7월 12일

CS

목록 보기
17/19

CPU 스케줄링이란

  • 프로세스에 언제, 어떻게 CPU를 할당할지 결정하는 과정

  • 필요한 이유

    • CPU 코어 하나는 특정 순간에 프로세스 하나만 실행한다.

    • 실제 시스템에는 실행 대기 중인 프로세스가 수십~수백 개다.

    • 누구를 먼저, 얼마나 오래 실행할지 정하는 심판이 필요하다 → 이게 스케줄러이다.

    • 우리가 "여러 프로그램이 동시에 돌아간다"고 느끼는 건
      사실 스케줄러가 프로세스들을 아주 빠르게 번갈아 실행해서 만들어내는 착시이다.


스케줄링을 나누는 기준 - 단계별 분류

단계다른 이름하는 일음식점 비유
고수준 (high-level)장기 스케줄링 / 작업 스케줄링 (long-term / job)시스템에 동시에 들일 프로세스 총 개수를 결정 (작업 승인/거부)"하루 예약은 100명까지만 받자"
중수준 (mid-level)활성 프로세스 수를 조절해 과부하 방지. 프로세스를 보류(suspend) 하거나 다시 활성화(activate)"100명을 시간대별 20명씩 나눠 받자"
저수준 (low-level)단기 스케줄링 (short-term)준비 상태 프로세스 중 하나를 골라(dispatch) 실제로 CPU에서 실행"도착한 순서대로 주방에 주문 넣자"
  • 일반적으로 CPU 스케줄링이라고 하면 저수준 스케줄링을 의미한다.
    실제로 매 순간 벌어지는 대부분의 작업이 여기에 해당된다.

  • 위 3단계 분류는 사실 전통적인 어떤 교과서적인 모델이고,
    현대에서는 이렇게 딱 세 모듈로 구성되어 있지는 않다.

  • 중수준의 보류는 무엇인가?

    • 메모리 부족 or 시스템 과부화일 때 -> 활성 프로세스 일부를 잠시 메모리에서 밀어내
      대기 시켰다가 여유가 생기면 다시 불러오는 것이다.
      활성 프로세스 수 자체를 조절해서 저수준 스케줄러가 원할히 돌게 해주는
      완충제(buffer) 역할이다.

스케줄링을 나누는 기준 - 선점 여부

  • "실행 중인 프로세스로부터 CPU를 강제로 빼앗을 수 있는가?"로 나눈다.

  • 선점형 (Preemptive)

    • 스케줄러가 실행 중인 프로세스의 CPU를 강제로 뺏어
      다른 프로세스에게 줄 수 있는 방식

    • 예시: 시분할 시스템(각 프로세스가 정해진 시간만 쓰고 양보), 인터럽트 처리

    • 장점: 한 프로세스가 CPU를 독점하지 못함 → 응답이 빠름 →
      대화형/시분할 시스템에 적합

    • 단점: 뺏고 넘겨줄 때마다 문맥 교환(context switch) 이 발생 →
      오버헤드 대부분의 현대 저수준 스케줄러가 이 방식

  • 비선점형 (Non-preemptive)

    • 한 번 CPU를 잡은 프로세스가 작업이 끝날 때까지 CPU를 놓지 않는 방식

    • 장점: 문맥 교환이 적음 → 오버헤드 작음

    • 단점: 실행 시간이 긴 프로세스가 앞에 있으면, 짧은 프로세스들이
      하염없이 기다림 과거 일괄 작업(batch) 시스템에서 주로 사용

  • 문맥 교환이 오버헤드인 이유는?

    • CPU를 다른 프로세스로 넘기려면 지금 실행 중이던 프로세스의 상태를
      통째로 저장하고, 다음 프로세스의 상태를 불러와야 한다.
      이 저장/복원 작업 동안 CPU는 정작 중요한 사용자 프로그램 일은 하나도 못 한다.
      말 그대로 교환하는 작업은 실제 프로그램의 일을 하는 것이 아니기에
      순수 낭비 시간(오버헤드)으로 발생하고, 선점형은 이 교환이 자주 일어나서
      오버헤드가 큰 것이다.

우선순위(Priority)와 스케줄링

  • 우선순위가 왜 필요한가?

    • 우선순위가 없다 = 모든 프로세스 중요도가 같다 = 준비된 순서대로 한 줄로 실행
      그런데 커널 작업과 사용자 작업 똑같이 취급하면 중요한 커널 작업이 제때 실행
      안 돼 시스템이 불안정 해질 수 있다.
      그래서 우선순위 높은 프로세스가 먼저, 더 오래 CPU 차지하도록 한다.

    • 문서 편집기 vs 비디오 플레이어

      • 문서 편집기: 사용자 입력 속도가 CPU보다 훨씬 느림 → 조금 느려도 티 안 남 → 우선순위 낮아도 OK

      • 비디오 플레이어: 실시간으로 영상/소리를 뽑아내야 함 → 자주 실행 안 되면 화면이 끊김 → 우선순위 높아야 함

    • 우선순위 순위는 숫자가 높을 수록 높은 건가 낮은건가?

      - 시스템 종류에 따라 높은 숫자가 높은 우선순위이기도 하고, 
        낮은 숫자가 높은 우선순위이기도 하다.
      
      - 교재에는 낮은 숫자 = 높은 우선순위 규칙이 쓰여있다. 
      따라서 0번이 가장 높은 우선순위이다.

      예시: 리눅스의 nice
      nice는 프로세스가 얼마나 착하게 양보하느냐의 의미이고,
      높으면 아주 착한 것이기에 양보를 잘하니 우선순위가 낮고,
      낮으면 착하지 않은 것이기에 양보 안하고, 우선순위 높은 것이다.
      양보심이 낮을수록 자기가 먼저 쓰는 것이기에 그러니 우선순위가
      자연히 높아지는 것이다.
      그리고 renice는 이미 실행 중인 프로세스의 양보심을 나중에 바꾸는 것이다.
      (re + nice = 다시 nice)


      리눅스에서 일반 프로세스의 nice 값은 -20 ~ +19 범위이고,
      값이 낮을수록 우선순위가 높다(-20이 가장 높음).
      nice로 시작 시 우선순위를 정하고, renice로 실행 중 변경한다.
      그리고 우선순위를 높이는 권한은 관리자(root)에게만 있고,
      일반 사용자는 자기 프로세스 우선순위를 낮추는 것만 가능하다.
      (윈도우는 작업 관리자 > 세부 정보 >
      우선 순위 설정에서 실시간/높음/보통/낮음 등을 GUI로 조정할 수 있다.)

    • 왜 우선순위 올리기는 root만 되나?

      • 내 프로세스 우선순위 올린다 = 다른 사람 프로세스에서 CPU를 빼앗는다는 뜻

      • 남에게 피해를 줄 수 있으니 관리자(root) 권한이 필요하다.
        반대로 "나 더 양보할게"(우선순위 낮추기)는 남에게 손해가 아니니
        일반 사용자도 자유롭게 할 수 있다.

profile
개발을 즐겨보자.

0개의 댓글