CS

[CS] 스케줄링

KJihun 2023. 7. 15. 20:11
728x90

스케줄링: 프로세스 실행 시 필요한 여러 자원을 해당 프로세스에게 할당하는 것

  • 스케줄링의 종류
    • 장기 스케줄링 : 어떤 프로세스가 시스템 자원을 할당받을지 결정 후 준비상태 큐로 보냄
      • 작업 스케줄링, 상위 스케줄링이라고도 하며 작업 스케줄러에 의해 수행
    • 중기 스케줄링 : 어떤 프로세스들이 CPU를 할당받을 것인지 결정하는 작업
      • CPU를 할당받으려는 프로세스들이 많을 시 일시보류 시킨 후 활성화해서 부하 조절
    • 단기 스케줄링 : CPU를 할당받는 시기와 특정 프로세스를 지정하는 작업
      • 프로세서 스케줄링, 하위 스케줄링 이라고도 한다
      • 프로세서 스케줄링 및 문맥교환은 프로세서 스케줄러에 의해 수행됨
  • 문맥교환(Context Switching) : OS에 의해 CPU가 할당되는 프로세스 변경 시 실행
    1. 프로세스에 CPU 할당을 위해 현재 CPU가 할당된 프로세스의 상태 정보를 저장
    2. 새로운 프로세스의 상태 정보를 설정 후 CPU를 할당하여 실행
  • 스케줄링의 목적 : CPU나 자원을 효율적으로 사용하기 위한 정책
    • 공정성 : 모든 프로세스에 공정하게 할당
    • 처리율(량) 증가 : 단위 시간당 프로세스를 처리하는 비율(양)을 증가시킨다
    • CPU 이용률 증가 : CPU의 낭비시간을 줄여 프로세스 실행 시간 비율을 증가시킴
    • 우선순위 제도 : 우선순위가 높은 프로세스를 먼저 실행시킴
    • 오버헤드 최소화
    • 응답시간(Response Time, 반응시간)최소화 : 작업 지시, 반응시간을 최소화
    • 반환시간(Turn Around Time) 최소화 : 프로세스 제출 - 완료까지 걸리는 시간을 최소화
    • 대기 시간 최소화 : 준비상태 큐에서 대기하는 시간을 최소화
    • 균형 있는 자원의 사용 : 메모리, 입출력 장치 등의 자원을 균형있게 사용
    • 무한 연기 회피 : 자원을 사용하기 위해 무한정 연기되는 상태를 회피
  • 스케줄링 성능 평가 기준 : CPU이용률, 처리율, 반환시간, 응답시간으로 비교
  • 프로세스 스케줄링의 기법 : 선점(Preemptive), 비선점(Non-Preemptive) 스케줄링이 있다
  • 선점 스케줄링 : 우선순위가 높은 프로세스가 CPU를 강제로 빼앗음
    • SRT(Shortest Remaining Time) : 작업시간이 짧은 순서대로 수행
    • 라운드로빈(Round-Robin) : 시간 내에 완료하지 못하면 ready queue의 맨 뒤로 보냄
    • 다단계 큐(Multi-level Queue) : Ready queue를 여러 개 사용
  • 비선점 스케줄링 : CPU의 사용이 끝날 때 까지 기다림
    • FCFS(First Come - First Service) = FIFO
      • 준비상태 큐에 도착한 순서에 따라 CPU에 할당하는 기법
      • 공평성은 유지되나 우선순위가 높은 작업이 늦게 수행될 수 있다
    • SJF(Shortest Job First, 단기작업우선) : 실행시간이 가장 짧은 프로세스에게 CPU할당
      • 가장 적은 평균 대기시간을 제공
      • 실행기시간이 긴 프로세스는 무기한 연기될 수 있다
    • HRN(Hightest Response-ratio Next) : SJF + 대기시간과 실행시간을 이용하는 기법
      • 실행시간이 긴 프로세스에 불리한 SJF를 보완한 기법
      • 서비스 실행 시간이 짧거나 대기 시간이 긴 프로세스일 경우 우선순위가 높아짐
      • 우선순위를 계산하여 숫자가 높은 거서 부터 우선순위가 부여
      • 우선순위 계산식 : 대기시간 + 서비스 시간 / 서비스시간
    • 우선순위(priority) 스케줄링: 프로세스에게 우선순위를 부여, 높은 순서대로 처리
    • 기한부(Deadline) 스케줄링: 작업을 명시된 시간이나 기한 내에 완료하도록 계획.

'CS' 카테고리의 다른 글

[CS] 쿠키와 세션의 차이  (0) 2023.08.01
[CS] TDD(Test-Driven Development)란?  (0) 2023.07.31
[CS] 병행(Concurrency)과 병렬(Parallel)  (0) 2023.07.12
[Spring] Spring AOP(Aspect-Oriented Programming)  (0) 2023.07.11
[CS] DBMS  (0) 2023.07.08