CPU 스케줄링
CPU 스케줄러는 프로세스가 생성된 후 종료될 때까지 모든 상태 변화를 조정하는 일을 하며, CPU 스케줄링은 CPU 스케줄러가 하는 모든 작업을 가리킴
스케줄링의 단계
고수준 스케줄링
시스템 내의 전체 프로세스 수를 조절하는 것
전체 시스템의 부하를 고여하여 작업을 시작할지 말지를 결정
멀티프로그래밍 정도(degree of multiprogramming)중간 수준 스케줄링
전체 시스템의 활성화된 프로세스 수를 조절하여 과부하를 막는 것
저수준 스케줄링
어떤 프로세스에 CPU를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 등을 결정하는 것
오늘날의 CPU 스케줄러는 대부분 중간 수준 스케줄링과 저수준 스케줄링으로 구성되어 있음
스케줄링의 목적
공평성
모든 프로세스가 자원을 공평하게 배정받아야 하며, 자원 배정 과정에서 특정 프로세스가 배제되어서는 안됨
효율성
시스템 자원이 유휴 시간 없이 사용되도록 스케줄링을 하고, 유휴 자원을 사용하려는 프로세스에는 우선권을 주어야 함
안정성
우선순위를 사용하여 중요 프로세스가 먼저 작동하도록 배정함으로써 시스템 자원을 점유하거나 파괴하려는 프로세스로부터 자원을 보호해야 함
확장성
프로세스가 증가해도 시스템이 안정적으로 작동하도록 조치해야함
시스템 자원이 늘어나는 경우 이 혜택이 시스템에 반영되게 해야함반응 시간 보장
응답이 없는 경우 사용자는 시스템이 멈춘 것으로 가정하기 때문에 시스템은 적절한 시간안에 프로세스의 요구에 반응해야 함
무한 연기 방지
특정 프로세스의 작업이 무한히 연기되어서는 안됨
스케줄링 시 고려 사항
우선순위가 높은 프로세스에 CPU를 먼저 할당함.
우선순위가 높은 프로세스는 커널 프로세스, 전면 프로세스, 대화형 프로세스, 입출력 집중 프로세스
우선순위가 낮은 프로세스는 일반 프로세스, 후면 프로세스, 일괄 작업 프로세스, CPU 집중 프로세스
다중 큐
프로세스를 효율적으로 관리하기 위해 큐를 여러 개 두어 관리하는 것
준비 상태에서는 우선순위에 따라 다중 큐를 운영
대기 상태에서는 같은 입출력을 요구한 프로세스들을 모아 다중 큐를 운영
선점형? 비선점형?
선점형 스케줄링
어떤 프로세스가 CPU를 할당받아 실행 중이더라도 운영체제가 CPU를 강제로 빼앗을 수 있는 스케줄링 방식
비선점형 스케줄링
어떤 프로세스가 CPU를 점유하면 다른 프로세스가 이를 빼앗을 수 없는 스케줄링 방식
스케줄링 알고리즘
FCFS(First Come First Served) 스케줄링
준비 큐에 도착한 순서대로 CPU를 할당하는 비선점형 스케줄링 방식
선입선출 스케줄링이라고도 함
초기의 일괄 작업 시스템에서 사용됨
모든 프로세스는 우선순위가 동일SJF(Shortest Job First) 스케줄링
준비 큐에 있는 프로세스 중에서 실행 시간이 가장 짧은 작업부터 CPU를 할당하는 비선점형 방식
최단 작업 우선 스케줄링이라고도 함단점
운영체제가 프로세스의 종료 시간을 정확하게 예측하기 어렵다
프로세스가 자신의 작업 시간을 운영체제에게 알려주어 해결가능
공평하지 못하다
에이징으로 해결가능
프로세스가 자신의 순서를 양보할 때마다 나이를 한 실씩 먹어 최대 몇 살까지 양보하도록 규정하는 것
어떤 기준으로 정할지 문제HRN(Highest Response Ratio Next) 스케줄링
CPU를 할당받기 위해 기다린 시간과 CPU 사용 시간을 고려하여 스케줄링을 하는 비선점형 방식
최고 응답률 우선 스케줄링이라고도 함
우선순위 = (대기 시간 + CPU 사용 시간) / CPU 사용 시간라운드 로빈 스케줄링
한 프로세스가 할당받은 시간(타임 슬라이스) 동안 작업을 하다가 작업을 완료하지 못하면 준비 큐의 맨 뒤로 가서 자기 차례를 기다리는 선점형 방식
순서 순환 방식이라고도 함
가장 단순한 선점형 스케줄링 방식타임 슬라이스가 큰 경우
너무 크면 하나의 작업이 끝난 뒤 다음 작업이 시작 되는 것 처럼 보임
타임 슬라이스가 작은 경우
여러 프로그램이 동시에 실행되는 것처럼 느낄수 있으나, 문맥 교환(Context Swiching)이 너무 자주 일어나 걸리는 시간이 실제 작업 시간보다 상대적으로 커지며, 이는 실제 작업을 못하는 경우가 발생할 수 있음
SRT(Shortest Remaing Time) 스케줄링
기본적으로 라운드 로빈 스케줄링을 사용하지만, CPU를 할당받을 프로세스를 선택할 때 남아있는 작업 시간이 가장 적은 프로세스를 선택하는 선점형 방식
최소 잔류 시간 우선 스케줄링이라고도 함우선순위 스케줄링
프로세스는 중요도에 따라 우선순위를 갖는데 이러한 우선순위를 반영하여 CPU를 할당하는 방식
선점형, 비선점형 방식으로 구현 가능다단계 큐 스케줄링
우선순위에 따라 준비 큐를 여러 개 사용하는 비선점형 방식
프로세스는 운영체제로부터 부여받은 우선순위에 따라 해당 우선순위 큐에 삽입되어 실행다단계 피드백 큐 스케줄링
다단계 큐 스케줄링과 기본적인 형태가 같지만, CPU를 사용하고 난 프로세스가 원래의 큐로 되돌아가지 않고 우선순위가 하나 낮은 큐의 끝으로 들어감
프로세스의 우선순위가 낮아진다고 할지라도 커널 프로세스가 일반 프로세스의 큐에 삽입되지는 않음
오늘날의 운영체제가 CPU 스케줄링을 위해 일반적으로 사용하는 방식
인터럽트 벡터
시스템에는 많은 입출력 장치가 있기 때문에 입출력이 동시에 끝날 경우 여러개의 인터럽트가 한번에 처리됨
동시에 끝나는 인터럽트를 처리하기 위해 인터럽트 벡터라는 자료구조를 사용
인터럽트 처리 과정
- 인터럽트가 발생하면 현재 실행 중인 프로세스는 일시 정지 상태가 되며, 재시작하기 위해 현재 프로세 관련 정보를 임시로 저장
- 인터럽트 컨트롤러가 실행되어 인터럽트의 처리 순서를 결정. 이때 여러 개의 인터럽트가 동시에 발생했다면 인터럽트 우선순위를 고려하여 중요한 인터럽트부터 처리하도록 순서를 결정
- 먼저 처리할 인터럽트가 결정되면 인터럽트 백터에 등록된 인터럽트 핸들러가 실행
- 인터럽트 벡터에 연결된 핸들러가 인터럽트 처리를 마치면 일시 정지된 프로세스가 다시 실행되거나 종료됨