• CPU 스케줄링
비디오 재생, 디스크 백업 작업 - 입출력 집중 프로세스
연산, 컴파일, 그래픽 처리 - CPU 집중 프로세스
입출력 집중 프로세스는 실행보다 IO 상태가 더 길고 <- IO버스트
CPU 집중 프로세서는 실행 상태가 더 길다 <- CPU 버스트
입출력 집중 프로세스를 먼저 실행해서 입출력장치를 작동시키고 CPU집중 프로세스에 CPU를 할당하는게 효율적이다
이렇게 프로세스가 상황에 맞게 CPU를 배분하기 위해 스케줄링을 한다
프로세스에 PCB에 우선순위를 명시하고 우선순위 기준으로 먼저 처리할 프로세스를 결정하게 된다
• 스케줄링 큐
메모리에 적재되거나 IO하거나 CPU를 쓰려는 프로세스들을 줄세워서 스케줄링 큐로 관리하는 방법
CPU를 이용하려는 준비 큐와
입출력장치를 이용하려는 대기 프로세스들이 있는 대기 큐가 있다
• 선점형/비선점형 스케줄링
선점형 스케줄링은 프로세스가 CPU같은 자원을 사용 중에도 OS가 강제로 자원을 뺏어서 다른 프로세스에 할당 가능
RR처럼 일정 시간만 쓰고 타이머 인터럽트로 다음 프로세스에 할당하는 방식
비선점형 스케줄링은 한 프로세스가 종료나 대기 상태가 될 때 까지 자원을 독점하는 방식
선점형 스케줄링은 자원 독점을 막고 배분 가능하지만, 컨텍스트 스위칭 과정에서 오버헤드가 발생
비선점형 스케줄링은 자원 배분의 문제가 발생할 수 있다
• CPU 스케줄링 알고리즘
FIFO : 선입선출, 뒤에 있는 프로세스는 기다리는 시간이 길어지게 된다
SJF : 최단 작업 우선 스케줄링, CPU 사용시간이 짧은 프로세스부터 실행
RR : FIFO+시분할, 정해진 시간만큼 CPU를 이용하고 아직 완료되지 않았다면 다시 큐의 맨 뒤로 삽입
타임 슬라이스의 크기가 너무 크면 FIFO와 다르지 않고, 너무 작으면 컨텍스트 스위칭 비용이 더 커질 수 있으니
타임 슬라이스의 크기를 적절하게 설정하는게 중요하다
SRT : 최소 잔여 시간 우선 스케줄링, SJF + RR, 남아있는 작업 시간이 가장 적은 프로세스를 선택해서 정해진 시간동안
CPU 사용
우선순위 스케줄링 : 높은 우선순위를 가진 프로세스부터 실행하는 스케줄링 알고리즘
우선순위가 낮은 프로세스는 계속 밀려서 CPU를 사용하지 못하는 기아 상태가 발생할 수 있다
기아 상태를 방지하기 위해서 에이징(오랫동안 대기한 프로세스의 우선순위를 증가시킴)방식을 사용한다
MFQ 다단계 큐 스케줄링 : 우선순위별로 준비 큐를 여러개 사용하는 방식
우선순위가 높은 준비 큐에 있는 프로세스들을 먼저 처리하고, 다음 우선순위 큐의 프로세스를 처리하는 방법
큐를 여러개 사용하면서 프로세스 유형별로 우선순위를 구분해서 실행할 수 있다
MLFQ 다단계 피드백 큐 스케줄링 : 다단계 큐를 발전시킨 형태
다단계 큐 스케줄링에서는 프로세스들이 준비 큐 사이를 이동할 수 없어서 다시 기아 상태가 발생할 수 있다
MLFQ에서는 새로 준비 상태가 된 프로세스를 우선순위가 제일 높은 큐에 넣고 실행한다. 우선순위가 높은 큐에서 타임 슬라이스 만큼 실행한 후 프로세스가 끝나지 않았다면 다음 우선순위 큐에 삽입하는 과정을 반복한다
이런 과정을 통해 CPU 집중 프로세스들은 자연스럽게 우선순위가 낮아지고, CPU를 적게 쓰는 입출력 집중 프로세스는
우선순위가 높은 큐에서 실행하게 된다
낮은 우선순위 큐에서 너무 오래 기다리고 있는 프로세스가 있다면 점차 우선순위가 높은 큐로 이동시키는 에이징 기법이 적용 가능하다!
MLFQ는 구현이 복잡하지만 가장 일반적인 CPU 스케줄링 알고리즘이다