CPU 스케쥴링
CPU스케쥴링은 운영체제가 프로세스가 공정하고 합리적으로 CPU 자원을 배분하는 것 입니다.
입출력 집중 프로세스
입출력 집중 프로세스는 대부분의 실행 시간을 입출력 작업에 사용하는 프로세스를 의미합니다. 이러한 프로세스는 파일을 읽거나 쓰는 작업, 네트워크 연결을 설정하는 작업, 디스크에서 데이터를 검색하는 작업 등 입출력 작업이 많은 작업을 수행합니다. 이러한 프로세스는 입출력이 완료될 때까지 대기해야 하는 경우가 많기 때문에 CPU를 많이 사용하지 않습니다.
CPU 집중 프로세스
CPU 집중 프로세스는 대부분의 실행 시간을 CPU 작업에 사용하는 프로세스를 의미합니다. 이러한 프로세스는 계산이 많은 작업을 수행하거나, 정렬, 검색, 해시 테이블 작업 등의 연산이 많은 작업을 수행합니다. 이러한 프로세스는 입출력 작업이 적기 때문에 CPU를 많이 사용합니다.
CPU 버스트: CPU를 이용하는 작업
입출력 버스트: 입출력 장치를 기다리는 작업
운영체제는 프로세스 마다 우선순위를 부여해서 PCB에 우선순위를 명시하고 ,PCB에 적힌 우선순위를 기준으로 먼저 처리할 프로세스를 결정합니다.
스케쥴링 큐
준비 큐(Ready Queue)
CPU를 할당받을 준비가 된 프로세스들이 대기하는 큐입니다. 이 큐에 들어간 프로세스들은 CPU를 할당받을 수 있는 상태이며, CPU가 놀고 있는 상황이 발생하면 운영체제가 이 큐에서 우선순위나 순서 등을 고려하여 프로세스를 선택하여 CPU를 할당합니다.
대기 큐(Waiting Queue)
어떤 이벤트가 발생할 때까지 기다리는 프로세스들이 대기하는 큐입니다. 이 큐에 들어간 프로세스들은 CPU가 아닌 다른 자원을 기다리는 상태일 때 대기하게 됩니다. 예를 들어, 입출력 작업을 수행하기 위해 디스크나 네트워크 등의 자원이 사용 중인 경우, 해당 자원을 기다리기 위해 대기 큐에 들어가게 됩니다.
선점형 스케쥴링(Preemptive Scheduling)
운영체제에서 프로세스 스케줄링을 결정할 때, 다른 프로세스가 CPU를 사용 중일지라도 강제로 CPU를 빼앗아 다른 프로세스에게 할당하는 방식입니다. 즉, CPU를 현재 실행 중인 프로세스로부터 선점하여 다른 프로세스에게 할당하는 방식입니다.
선점형 스케줄링의 장점은 시스템의 응답 시간을 단축시키고, 우선순위가 높은 프로세스를 우선적으로 처리할 수 있으며, 다양한 프로세스들이 공평하게 CPU를 사용할 수 있다는 것입니다. 하지만 이에 따른 오버헤드가 발생할 수 있으며, 프로세스가 CPU를 계속 선점하는 경우 다른 프로세스의 실행이 지연될 수 있습니다.
비선점형 스케쥴링Non-preemptive Scheduling)
한 번 CPU를 할당 받은 프로세스는 다른 프로세스가 CPU를 선점하지 못하는 방식입니다. 즉, 현재 실행 중인 프로세스가 종료되거나 입출력 등의 이벤트가 발생하여 스스로 CPU를 양도하지 않는 이상, 다른 프로세스가 CPU를 사용할 수 없습니다.
비선점형 스케쥴링의 장점은 오버헤드가 적다는 것과, 프로세스 간의 문맥 교환(Context Switching)이 발생하지 않기 때문에 선점형 스케쥴링보다 시스템 자원을 효율적으로 사용할 수 있다는 것입니다. 하지만 우선순위가 높은 프로세스가 먼저 실행되지 않을 수 있고, 특정 프로세스가 CPU를 지속적으로 점유하면 다른 프로세스의 실행이 지연될 수 있습니다.
스케쥴링 알고리즘의 종류
선입 선처리 스케쥴링(First-Come First-Served Scheduling, FCFS)
운영체제에서 프로세스 스케줄링을 결정할 때, 도착한 순서대로 CPU를 할당하는 방식입니다. 즉, CPU가 현재 사용 중이 아닐 때 새로운 프로세스가 도착하면, 준비 큐의 가장 뒤에 추가되고, 앞에 있는 프로세스들이 CPU를 사용 중이 아닐 때 순서대로 실행됩니다.
최단 작업 우선 스케쥴링(Shortest Job First Scheduling, SJF)
실행 시간이 가장 짧은 프로세스에 높은 우선순위를 부여하여 CPU를 할당하는 방식입니다.
SJF 스케쥴링에서는 실행 시간이 가장 짧은 프로세스부터 우선적으로 CPU를 할당합니다. 이 방식은 대기 시간을 최소화하여 처리율을 높이는데 유용합니다. 만약에 다음에 실행될 프로세스가 이미 준비 큐에 있는 경우, 이전 프로세스의 실행 시간과 현재 프로세스의 예상 실행 시간을 비교하여 더 짧은 실행 시간을 가진 프로세스에 CPU를 할당합니다.
라운드 로빈 스케쥴링(Round Robin Scheduling)
각 프로세스에 일정 시간 할당 후 다음 프로세스에 CPU를 할당하는 방식입니다.
이 방식에서는 프로세스들은 순환하면서 CPU를 사용합니다. 라운드 로빈 스케쥴링은 시분할 시스템에서 사용되며, 각 프로세스들이 동시에 실행될 것처럼 보이도록 만듭니다.
최소 잔여 시간 스케쥴링(Shortest Remaining Time Scheduling)
실행 중인 프로세스 중 남은 실행 시간이 가장 적은 프로세스를 우선적으로 실행하는 방식입니다.
이 방식은 선점형 스케줄링 알고리즘으로, 프로세스가 CPU를 사용하고 있을 때 다른 프로세스가 우선순위가 높아져도, 현재 실행 중인 프로세스의 남은 실행 시간이 더 적으면 우선적으로 CPU를 할당합니다.
우선순위 스케쥴링(Priority Scheduling)
프로세스들에게 우선순위를 부여하여, 우선순위가 높은 프로세스에게 CPU를 할당하는 스케줄링 알고리즘입니다. 우선순위는 각 프로세스의 특성에 따라 다르게 설정될 수 있습니다.
다단계 피드백 큐 스케쥴링(Multi-Level Feedback Queue Scheduling)
여러 개의 큐(queue)를 사용하여 프로세스를 스케줄링하는 방식입니다. 각각의 큐는 서로 다른 우선순위(priority)를 가지고 있으며, 각각의 큐에서는 다른 스케줄링 알고리즘을 사용합니다.