여러 개의 프로세스가 시스템 내 존재하는 다중 프로그래밍 환경에서
여러개의 프로세스 중, 자원을 할당해야 할 프로세스를 선택해야 하는데 이것을 스케줄링이라 한다.
하나의 자원을 여러 스레드들이 번갈아가며 사용 ex)프로세서
ex) 프로세스 스케줄링: 프로세서 사용 시간을 프로세스들에게 분배
하나의 자원을 분할하여 동시에 사용 ex)메모리
스케줄링의 목적
시스템의 성능향상
시스템 성능 지표로는 여러가지가 있지만, 그 중 가장 대표적인 세가지를 꼽아보면
응답시간Response Time
작업 요청Submission으로부터 응답을 받을때까지의 시간
작업처리량
단위 시간 동안 완료된 작업의 수
자원 활용도
주어진 시간동안 자원이 활용된 시간 (주어진 시간 / 자원이 활용된 시간)
목적에 맞는 지표를 고려하여 스케줄링 기법을 선택해야 한다.
스케줄링 기법이 고려하는 항목들로는
프로세스의 특성
시스템 특성
프로세스의 긴급성
프로세스 우선순위
프로세스 총 실행 시간
등이 있다.
I/O Bounded or Compute Bounded
프로세스 수행시간은 Cpu 사용시간 + I/O 대기시간 으로 구성되어 있는데,
CPU를 더 많이 사용하는 것을 CPU Burst,
I/O 대기시간은 I/O Burst라고 한다.
Burst Time은 스케줄링의 중요한 기준 중 하나이다.
발생하는 빈도 및 할당 자원에 따른 구분
얼마나 자주 일어나냐에 따른 구분이다.
장기 스케줄링으로, 커널에 등록할 작업을 결정하는 Job Scheduling이 속해 있다.
시스템 내의 프로세스 수를 조절하는 다중 프로그래핑 정도Degree조절 역할을 한다.
CPU와 I/O가 놀지 않고 모두 일하게 할 수 있도록
I/O Bounded와 Compute Bounded 프로세스들을 잘 섞어서 선택해야 한다.
시분할 시스템에선 모든 작업을 시스템에 등록하므로 Long Term Scheduling이 불필요하다.
메모리 할당 결정(Memory Allocation)과 관련있다.
어떤 프로세스에게 메모리를 줄지, 빼앗을지 결정한다.
Ready나 ASleep 상태에서 Suspended 상태로 전이하는 상황에 관여한다
프로세서를 할당할 프로세스를 결정하는 Processor Scheduling와 관련있다.
Ready상태에서 Running 상태로 전이시키는 상황에 관여하며,
가장 빈번하게 발생하기 때문에 매우 빨라야 한다
스케줄링을 어떤 방법을 사용할 것인가?를 선택할 수 있다.
Preemptive vs Non - Preemptive scheduling
할당 받을 자원을 스스로 반납할 때 까지 사용(빼앗기지 않는다)
장점으로는 한번 자원을 받으면 계속 일을 할 수 있으므로 Context switch overhead가 적다
단점으로는 급한 일을 먼저 처리하지 못하고, 원래 하던 일이 끝날 때까지 기다려야 하여 우선순위가 자주 역전되며,
평균 응답시간이 증가한다
타의에 의해 자원을 빼앗길 수 있다
예) 할당 시간 종료, 우선순위가 높은 프로세스의 등장
프로세스가 자주 바뀌므로 Context switch overhead가 크다
Time-Sharing system, real time system등에 적합하다
프로세스의 중요도
프로세스 생성시 결정된 우선순위가 유지된다.
구현이 쉽고 overhead가 적지만, 시스템 환경 변화에 대한 대응이 어렵다
프로세스의 상태 변화에 따라 우선순위 변경
구현이 복잡하고, 우선순위 재계산에 따른 Overhead가 크다
하지만 시스템 환경 변화에 유연한 대응이 가능하다