※ CS 스터디/운영체제

7. CPU 스케줄링

J 크 2023. 11. 7. 23:43
728x90
반응형

본 게시글은  : 면접을 위한 CS 전공지식 노트 (출판사 : 길벗, 주홍철 지음) 을 참조하여 작성하였습니다. + 구글링


◆  CPU 스케줄링

CPU 스케줄링 개요

      --> 운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 분배해야함

      --> 분배가 이상할 경우 중요한 작업이 나중에 실행되거나 필요한 작업이 이루어지지 않는 현상 발생 가넝

      --> 이에따라 CPU 에서 프로세스 사용 계획이  필요 

      --> 프로세스 별로 우선순위가 다름

   

CPU 스케줄링 알고리즘 예시

CPU 스케줄러

    : CPU 스케줄링 알고리즘에 따라 프로세스에서 해야하는 일을 스레드 단위로  CPU에 할당

    : 프로그램이 실행 될 때는 CPU 스케줄링 알고리즘이 어떤 프로그램에 CPU 소유권을 줄 것인지 결정

    : CPU 이용률이 높게, 주어진 시간에 많은 일을 할 수 있도록, 준비 큐에 있는 프로세스는 적게, 응답 시간은

      짧게 설정하는 것을 목표

    : 한 줄 요약 == 최대한 효율적으로 CPU를 활용하여 프로세스 작업을 진행하는 것이 목표


◆  비선점형 방식

- 비선점형 방식 (non-preemptive)

    : 당장 우선 순위가 갑작스럽게 높아진 프로세스가 CPU에 작업 요청을 했다면?

      => 비선점형 방식에서는 현재 작업이 완료되거나 프로세스가 스스로 CPU 소유권을 포기하기 전에는 강제로 프로세스를 중지 하지 않는다.

    : 이에 따라 프로세스 작업 교환(컨텍스트 스위칭)으로 인한 부하가 적음

 

- FCFS (First Come, First Served)

    : 가장 먼저 온 것을 가장 먼저 처리하는 알고리즘

    : 길게 수행되는 프로세스 때문에 준비 큐에서 오래 기다리는 현상이 발생하는 단점 존재

 

- SJF (Shortest Job First)

    : 실행 시간이 가장 짧은 프로세스를 가장 먼저 실행하는 알고리즘

    : 긴 시간을 가진 프로세스가 실행되지 않는 현상 발생 가능 (starvation)

    : 평균 대기 시간이 가장 짧음

    : 실제로는 실행 시간을 알 수 없기 때문에 과거의 실행했던 시간을 참고로 추측하여 사용

 

- 우선순위

    : 기존 SJF 스케줄링의 경우 긴 시간을 가진 프로세스가 실행되지 않는 현상 발생

    : 오래된 작업일수록 우선순위를 높이는 방법을 통해 위의 단점을 보완


◆  선점형 방식

- 선점형 방식 (preemptive)

    : 당장 우선 순위가 갑작스럽게 높아진 프로세스가 CPU에 작업 요청을 했다면?

      => 선점형 방식에서는 현재 프로세스 작업을 중단 시키고 강제로 요청이 들어온 프로세스에 CPU 소유권을 할당

    : 즉, 사용하고 있는 프로세스를 알고리즘에 의해 중단 후, 강제로 다른 프로세스에 CPU 소유권을 할당

    : 이에따라 비선점형 방식과 다르게 프로세스 작업 교환 (컨텍스트 스위칭)으로 인한 부하가 발생 가능 (오버헤드)

- 라운드 로빈 (RR, Round Robin)

    : 우선순위 스케줄링의 일종으로 각 프로세스에 동일한 할당 시간을 주고 그 시간안에 끝나지 않으면 다시 준비 큐의 뒤        로 가는 알고리즘 ( 즉, 정해진 시간 안에 작업이 끝나지 않으면 다시 대기 )

    ex) q만큼의 할당 시간이 부여되었고 N개의 프로세스가 운영

          => N-1 * q 시간이 지나면 자기 차례가 옴

          => 할당 시간이 너무 크면 FCSFS가 되고 짧으면 프로세스 작업 교환 (컨텍스트 스위칭)이 잦아져 비용이 커짐

          => 일반적으로 전체 작업 시간을 길어지지만 평균 응답 시간은 짧아진다는 특징

 

- SRF (Shortest Remaining Time First)

    : SJF는 중간에 실행 시간이 더 짧은 작업이 들어와도 기존 작업을 모두 수행

    : 이와 다르게 SRF는 중간에 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행

 

- 다단계 큐

    : 우선순위에 따른 준비 큐를 여러 개 사용하고, 큐마다 라운드 로빈이나 FCFS등 다른 스케줄링 알고리즘을 적용한 것

    : 큐 간의 프로세스 이동이 안되므로 스케줄링 부담이 적지만 유연성이 떨어짐

 

다단계 큐 예시


위의 글과 관련하여 추가적인 내용이나 피드백은 언제나 환영입니다 :)