장기, 중기, 단기 스케줄링
- 장기 스케줄링
- 스케줄링 프로세스가 CPU에 의해 실행될 수 있는 자격을 부여할지 여부 를 결정 및 프로세스 생성
- 다중프로그래밍 깊이(degree) 결정 -> 몇 개의 프로세스를 운영할지의 여부
- 중기 스케줄링
- 스케줄링 프로세스 이미지 전부 혹은 일부가 주 메모리에 올라올 수 있는 자격을 부여할지 여부 를 결정 및 어떤 프로세스를 스왑-아웃 할지의 결정
- 단기 스케줄링
- 스케줄링 CPU에 의해 실행될 다음 번 프로세스로 어떤 프로세스를 선택할지를 결정
장기 스케줄링
- 새로운 프로세스의 시스템(프로세스 풀) 진입 허용 여부를 결정
- 멀티프로그래밍의 정도 를 결정함
- 작업( job) 스케줄러라고도 하며 요청된 작업( job)을 프로세스로 변환 하는 기능
- 어떠한 순서로 생성된 프로세스를 프로세스 풀로 보낼 것인 지를 결정 하는 프로그램 (준비 큐 또는 준비/보류 큐)
- 새로운 프로세스의 진입 허용 시점은?
- 시스템 포화 상태 여부
- 시스템 내(프로세스 풀)의 부하 조절과 관리
- 어떤 규칙으로 대기중인 프로세스들을 골라 ‘프로세스 풀’ 로 진입할 것인가?
- FCFS (First-Come-First-Served)
- Priority-based
- CPU-burst 길이
- 입출력-중심 (I/O-bound) 프로세스 우대
- 여유 입출력 자원 사용 예정 프로세스 우대
중기 스케줄링
- 스와핑(swapping) 기능의 일부를 담당
- 스왑 공간으로 쫓겨나간 프로세스 이미지의 전체 또는 일부 중 어느 이미지를 다시 주기억장치로 스왑인(swap-in)할 것인가를 결정
- 주기억장치의 공간이 부족할 때 프로세스 전체 또는 일부를 스왑 공간으로 옮겨서(swap-out) 주기억장치의 추가 여유공간을 확보
- 가상메모리가 없는 시스템에서도 중기 스케줄러가 필요
- 스왑공간은 일반적으로 보조기억장치인 디스크(하드 디스크 드라이브)를 사용
단기 스케줄링
- 디스패처(dispatcher) 라고도 함
- 시스템 전체 성능을 높이기 위해 처리기 시간을 프로세스에게 효율적으로 배분하는 것이 목적
- 장기/중기 스케줄러보다 매우 자주 실행
- 세밀한 기준으로 다음 번에 실행시킬 프로세스를 선정
- 프로세서(CPU) 스케줄러라고도 함
- 단기 스케줄러 실행 시점
- 클럭(타이머) 인터럽트 -> 프로세스에게 주어진 시간 할당량(q) 만료 시
- 입출력 인터럽트
- 운영체제 시스템 호출
- 신호(signal) -> 세마포어 등
주요 기본 용어 정리
- 버스트 타임 (burst time) = CPU burst time + 입출력 burst time
- CPU burst time -> 프로세스 수행 중에 CPU 명령어가 실제로 수행되는 시간
- 입출력(I/O) burst time -> 입출력 처리에 소요되는 시간
- 처리기 중심 프로세스
- 프로세스의 주된 내용(코드)이 주로 CPU 연산(CPU burst time) 위주로 구성 되는 프로세스
- 입출력 중심 프로세스
- 프로세스의 주된 내용(코드)이 입출력 실행이 많은 프로세스. 입출력 burst time 비중이 높음
- 비선점 (non-preemptive)
- 수행중인 프로세스가 완전 종료시까지 계속 수행 되는 조건(모드) -> 입출력 요청시는 제외
- 클럭 인터럽트 를 별도로 설정해 종료시에 클럭 인터럽트가 발생(시간 q)해 스케줄러를 부름
- 선점 (preemptive)
- 수행중인 프로세스가 강제적으로 교체가 가능 한 조건(모드)
- 프로세스가 진행중에도 특정 상황을 만나면 해당 프로세스의 완료 이전에도 교체가 가능
- q (quantum)
- 실행중인 프로세스가 정상적으로 실행이 보장받는 시간. 시간 할당량
- 비선점 -> 프로세스 버스트 타임으로 설정, 선점 -> 주로 운영체제가 별도의 시간 값을 설정
스케줄링 정책 종류
- 우선순위(Priority) 스케줄링
- FCFS (First-Come-First-Served)
- 라운드-로빈 (Round-Robin)
- SPN (Shortest-Process-Next)
- SRT (Shortest-Remaining-Time)
- HRRN (Highest-Response-Ratio-Next)
- 피드백 (Feedback)
- Fair-share 스케줄링
[요약]스케줄링 정책
- 우선순위(Priority) 스케줄링 (선점/비선점모드 모두 가능)
- 우선순위가 높은 프로세스 를 무조건 먼저 실행 (복수개의 큐 사용 가능)
- FCFS (First-Come-First-Served) (비선점모드)
- 큐에 들어와 가장 오랫동안 기다린 프로세스를 선택
- 라운드-로빈 (Round-Robin) (선점모드)
- 큐에 있는 순서대로 프로세스들을 차례로 돌아가며 선택하지만 시간 할당량인 q 만큼만 실행
- SPN (Shortest-Process-Next) (비선점모드)
- 큐에 있는 프로세스 중에서 실행시간이 가장 짧은 프로세스(예상)를 선택
- SRT (Shortest-Remaining-Time) (선점모드)
- 큐에 새로운 입력이 들어올 때마다 큐의 모든 프로세스의 남은 실행시간들을 비교,
- 남아있는 실행시간(예상)이 가장 짧은 프로세스 를 다음 프로세스로 선택해 실행
- HRRN (Highest-Response-Ratio-Next) (비선점모드)
- 정규화된 반환 시간 추정치(대기시간과 실행시간을 고려)를 기반 으로 스케줄링 한다.
- 피드백 (Feedback) (선점모드)
- 여러 단계의 우선순위 큐를 설치하고 프로세스의 과거 실행 이력과 기타 기준 들을 사용하여 프로세스들을 적절한 수준의 큐로 할당한다.
- 스케줄링 프로세스가 CPU에 의해 실행될 수 있는 자격을 부여할지 여부 를 결정 및 프로세스 생성
- 다중프로그래밍 깊이(degree) 결정 -> 몇 개의 프로세스를 운영할지의 여부
- 스케줄링 프로세스 이미지 전부 혹은 일부가 주 메모리에 올라올 수 있는 자격을 부여할지 여부 를 결정 및 어떤 프로세스를 스왑-아웃 할지의 결정
- 스케줄링 CPU에 의해 실행될 다음 번 프로세스로 어떤 프로세스를 선택할지를 결정
- 멀티프로그래밍의 정도 를 결정함
- 작업( job) 스케줄러라고도 하며 요청된 작업( job)을 프로세스로 변환 하는 기능
- 어떠한 순서로 생성된 프로세스를 프로세스 풀로 보낼 것인 지를 결정 하는 프로그램 (준비 큐 또는 준비/보류 큐)
- 시스템 포화 상태 여부
- 시스템 내(프로세스 풀)의 부하 조절과 관리
- FCFS (First-Come-First-Served)
- Priority-based
- CPU-burst 길이
- 입출력-중심 (I/O-bound) 프로세스 우대
- 여유 입출력 자원 사용 예정 프로세스 우대
- 스왑 공간으로 쫓겨나간 프로세스 이미지의 전체 또는 일부 중 어느 이미지를 다시 주기억장치로 스왑인(swap-in)할 것인가를 결정
- 주기억장치의 공간이 부족할 때 프로세스 전체 또는 일부를 스왑 공간으로 옮겨서(swap-out) 주기억장치의 추가 여유공간을 확보
- 시스템 전체 성능을 높이기 위해 처리기 시간을 프로세스에게 효율적으로 배분하는 것이 목적
- 장기/중기 스케줄러보다 매우 자주 실행
- 세밀한 기준으로 다음 번에 실행시킬 프로세스를 선정
- 프로세서(CPU) 스케줄러라고도 함
- 클럭(타이머) 인터럽트 -> 프로세스에게 주어진 시간 할당량(q) 만료 시
- 입출력 인터럽트
- 운영체제 시스템 호출
- 신호(signal) -> 세마포어 등
- CPU burst time -> 프로세스 수행 중에 CPU 명령어가 실제로 수행되는 시간
- 입출력(I/O) burst time -> 입출력 처리에 소요되는 시간
- 프로세스의 주된 내용(코드)이 주로 CPU 연산(CPU burst time) 위주로 구성 되는 프로세스
- 프로세스의 주된 내용(코드)이 입출력 실행이 많은 프로세스. 입출력 burst time 비중이 높음
- 수행중인 프로세스가 완전 종료시까지 계속 수행 되는 조건(모드) -> 입출력 요청시는 제외
- 클럭 인터럽트 를 별도로 설정해 종료시에 클럭 인터럽트가 발생(시간 q)해 스케줄러를 부름
- 수행중인 프로세스가 강제적으로 교체가 가능 한 조건(모드)
- 프로세스가 진행중에도 특정 상황을 만나면 해당 프로세스의 완료 이전에도 교체가 가능
- 실행중인 프로세스가 정상적으로 실행이 보장받는 시간. 시간 할당량
- 비선점 -> 프로세스 버스트 타임으로 설정, 선점 -> 주로 운영체제가 별도의 시간 값을 설정
- 우선순위가 높은 프로세스 를 무조건 먼저 실행 (복수개의 큐 사용 가능)
- 큐에 들어와 가장 오랫동안 기다린 프로세스를 선택
- 큐에 있는 순서대로 프로세스들을 차례로 돌아가며 선택하지만 시간 할당량인 q 만큼만 실행
- 큐에 있는 프로세스 중에서 실행시간이 가장 짧은 프로세스(예상)를 선택
- 큐에 새로운 입력이 들어올 때마다 큐의 모든 프로세스의 남은 실행시간들을 비교,
- 남아있는 실행시간(예상)이 가장 짧은 프로세스 를 다음 프로세스로 선택해 실행
- 정규화된 반환 시간 추정치(대기시간과 실행시간을 고려)를 기반 으로 스케줄링 한다.
- 여러 단계의 우선순위 큐를 설치하고 프로세스의 과거 실행 이력과 기타 기준 들을 사용하여 프로세스들을 적절한 수준의 큐로 할당한다.