오늘의 질문
CPU 스케줄링에 대해서 설명해주세요.
📍 정답 확인
CPU 스케줄링은 운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것을 말한다. 만약 CPU 스케줄링이 없다면 반드시 실행되어야 할 프로세스들이 실행되지 못할 수 있으며, 당장 급하지 않은 프로세스가 실행되는 등 무질서한 상태가 발생할 수 있다. CPU 스케줄링은 선점형과 비선점형 방식으로 구현할 수 있으며, 다양한 알고리즘이 있다.
선점형 스케줄링
프로세스가 CPU 를 사용하고 있더라도 운영체제가 프로세스로부터 자원을 강제로 빼앗아 다른 프로세스에 할당할 수 있는 방식이다. 해당 방식은 응답 시간이 낮으며 효율적이지만, 컨텍스트 스위칭 오버헤드가 발생할 수 있으며 경쟁 상태가 발생할 수 있다.
비선점형 스케줄링
하나의 프로세스가 자원을 사용중이라면 해당 프로세스가 종료되거나 스스로 대기 상태로 전환되기 전까지 다른 프로세스가 자원을 점유할 수 없는 방식이다. 컨텍스트 스위칭 비용이 상대적으로 적지만, 응답 시간이 길어질 수 있다.
CPU 스케줄링 알고리즘
선입 선처리 스케줄링 (FCFS)
준비 큐에 삽입된 순서대로 프로세스를 처리하는 비선점형 스케줄링 방식이다.
공정해보이지만 호위효과 (Convoy Effect)가 발생할 수 있다는 점에서 부작용이 있다.
예를 들어, 준비 큐에 A 작업 (실행시간 10ms), B 작업 (실행시간 5ms), C 작업 (실행시간 2ms) 가 순서대로 들어온다면
실행 시간이 가장 적은 C 작업이 실행되기 위해 15ms 를 기다려야 한다.
최단 작업 우선 스케줄링 (SJF)
준비 큐에 삽입된 프로세스들 중에서 CPU 이용 시간이 가장 짧은 프로세스부터 실행되는 비선점형 스케줄링 방식이다.
호위 효과를 방지하고, 대기 시간이 짧다는 이점이 있지만 기아 현상이 발생할 가능성이 있다.
(기아 현상은 프로세스가 자원을 할당받지 못하고 무한정 준비 큐에 존재하는 상황을 말함)
라운드 로빈 스케줄링 (RR)
선입 선처리 스케줄링에 타임 슬라이스 (각 프로세스가 CPU 를 사용할 수 있는 시간) 개념이 추가된 선점형 스케줄링 방식이다.
정해진 타임 슬라이스만큼의 시간 동안 돌아가며 프로세스를 수행한다.
타임 슬라이스의 크기가 크다면 선입 선출 방식과 다르지 않아 호위 효과가 발생할 수 있으며,
반대로 타임 슬라이스의 크기가 작다면 컨텍스트 스위칭 비용이 증가하는 문제가 있을 수 있다.
최소 잔여 시간 우선 스케줄링 (SRT)
최단 작업 우선 스케줄링에 선점형 스케줄링을 혼합한 방식이다.
프로세스가 실행되는 도중 실행 시간이 짧은 프로세스가 추가되면 현재 실행되는 프로세스를 중단하고 해당 프로세스에 자원을 할당한다.
다단계 큐 스케줄링 (Multilevel Queue Scheduling)
우선 순위별로 큐를 여러 개 사용하는 방식이다.
우선 순위가 가장 높은 큐에 있는 작업들을 먼저 처리하고, 우선순위가 가장 높은 큐가 비어있다면 그 다음 순위 큐의 프로세스들을 처리한다.
🤔 기아 현상을 해결하는 방법 ?
기아 현상을 방지하기 위해, 대표적으로 에이징 기법을 활용할 수 있다. 에이징(Aging)이란 오랫동안 대기한 프로세스의 우선순위를 점차 높이는 방식이다.
🔖 참고자료