[운영체제] 스케줄러
스케줄링이란?
시스템이 실행하고자 할 때 프로세서(CPU)를 프로그램들에게 할당하는 과정
프로세스(Process)는 자신의 임무를 모두 수행하고 사라질 때까지 많은 큐를 돌아다님
이때 프로그램들은 제한된 프로세서(CPU)를 서로 사용하려고 함
OS는 이러한 프로세스 중 하나를 택하는데, 바로 스케줄러
가 이러한 역할을 담당
가장 자주 사용되는 스케줄러는 장기 스케줄러
와 단기 스케줄러
(주로 일괄처리 시스템에서 사용)
실행 준비가 완료된 프로세스들은 준비 큐
에 놓임
프로세스는, 프로세서(CPU)를 할당 받을 때까지 준비 큐에서 대기함
장기 스케줄러(Long Term Scheduler)
작업 스케줄러, 승인 스케줄러라고도 함
디스크 내의 작업을 어떤 순서로 메모리에 가져올 지 결정하는 프로그램
디스크와 같은 저장장치에 작업들을 저장해놓고, 필요할 때 실행할 작업을 작업 큐에서 꺼내 준비 큐를 통해서 메인 메모리에 적재함
장기 스케줄러에 의해서 new → ready 상태로 전이를 승인하게 됨
단기 스케줄러(Short Term Scheduler)
프로세스 스케줄러, CPU 스케줄러라고도 함
우선, CPU에게 필요한 데이터를 확보해주고, 메모리에 있는 프로세스 중 하나를 선택해서 프로세서(CPU)를 할당함
준비 큐에 있는 프로그램 중 먼저 도착한 프로세스에게 CPU 할당(= 디스페처)
단기 스케줄러에 의해서 ready → running 상태로 전이
중기 스케줄러(Medium Term Scheduler)
시분할 시스템에서 추가로 사용함
예를 들면, Unix나 윈도우에서는 장기 스케줄러가 거의 사용되지 않고, 작업이 Queue에 들어오면 바로 메모리에 올림
이러한 시분할 시스템에서 메모리에 대한 가중을 완화시켜주기 위해 중기 스케줄러 도입
메모리에서 CPU를 쓰기 위한 경쟁 프로세스들을 어느정도 제거시킨 뒤, 나중에 다시 메모리로 불러와 중단된 지점을 다시 실행시켜 줌 (Swapping 기법)
즉, 프로세스들이 서로 CPU를 차지하려고 경쟁이 심해지면, swapping 기법을 활용해 메모리를 관리함
swap out : 메모리에서 디스크로 잠시 나가는 상태
swap in : 디스크에서 메모리로 다시 들여오는 상태
장기 스케줄러와 단기 스케줄러의 차이?
가장 큰 차이점은 실행 빈도
우선 단기 스케줄러는 엄청나게 빨라야 함 (100만 분의 수초 정도)
Why?
프로세스 실행 시간은 밀리초 밖에 되지 않음 다음 프로세스 처리 위해선 다시 단기 스케줄러를 실행 만약
스케줄링 실행시간 > 프로세스 실행시간
이면 효율이 너무 떨어짐
반대로, 장기 스케줄러는 시스템에 새로운 작업이 들어오는 시간이 분 단위임
장기 스케줄러 실행은, 작업이 시스템을 나갈 때만 실행되므로 실행 간격이 상대적으로 김
중기 스케줄러는 장기 스케줄러의 비중이 적거나 아예 없는 시스템에서 추가해서 사용
보통 가상 메모리체제나 시분할 기법 시스템에서 주로 사용됨
중기 스케줄러는 swapping 기법을 통해 메모리에서 넣고 빼고가 가능하므로 다중 프로그래밍의 정도를 줄이는 것이 가능
전체적인 흐름 다시 정리하기
시스템에는 여러개의 수행 가능한 프로세스들이 존재 (하나일 수도 있음)
여러개면, 하나를 선택해서 CPU를 할당시켜 줌
이때, 스케줄러가 어떤 프로세스에게 CPU를 할당해줄 지 정하는 것이 스케줄링
준비 완료된 프로세스들은 준비 큐
에 들어감 (들어가서 CPU할당 받을 때까지 대기)
만약 하나의 프로세스가 CPU를 할당 받아서 실행되고 있는데, 해당 프로세스가 입출력 요청 or 자식 프로세스를 생성하면?
원래 할당받은 프로세스는 대기 상태로 들어가고, 입출력 or 자식 프로세스 종료까지 기다림
(장치 큐로 들어가서 대기)
실행 상태 중인 프로세스들은 인터럽트 결과로 인해서 CPU로부터 제거될 가능성도 존재
이때는 다시 준비 큐로 들어가게 되고, 이후에 다시 실행
이처럼 프로세스들은 상태를 변화시키며 큐 사이를 왔다갔다 이동하는데, 이때 OS는 적절한 스케줄링을 통해 큐에서 하나의 프로세스를 잘 선택해야 함 (이 역할을 담당하는 것이 스케줄러
)
스케줄러의 종류로는 장기
와 단기
장기 스케줄러
: 디스크에 저장되어 있는 프로세스들을 메인 메모리로 적재
메인 메모리는 프로세스를 무한대로 적재하는 것이 불가능하므로, 적재할 프로세스의 수를 제어해줘야만 함
또한 프로세스를 고를 때 입출력과 CPU를 균형있게 선택해야 시스템 안정화에 도움이 됨
입출력 프로세스 : 입출력 요청하는 프로세스
CPU 프로세스 : CPU 연산하는 프로세스
단기 스케줄러
: 준비 완료된 프로세스 중 하나를 선택해서 CPU 할당
당연히 CPU 할당은 빈번하게 일어나기 때문에, 장기 스케줄러보다 실행 빈도가 매우 높음
시분할 시스템에서 추가로 중기 스케줄러
또한 도입
: 메모리에서 프로세스 제거 후 나중에 다시 메모리에 불러와서 실행 재개 (swapping 기법 활용)
'CS > 운영체제' 카테고리의 다른 글
[운영체제] Deadlock (0) | 2019.03.31 |
---|---|
[운영체제] 뮤텍스(Mutex) & 세마포어(Semaphore) (2) | 2019.03.31 |
[운영체제] CPU 스케줄링 (1) | 2019.03.03 |
[운영체제] 프로세스/스레드 (0) | 2019.02.16 |
운영체제(Operating System)란? (0) | 2019.02.13 |