[OS]
✔️ [프로세스와 스레드] https://yoon-dumbo.tistory.com/30
✔️ [스케쥴러] https://yoon-dumbo.tistory.com/32
💛 [CPU 스케쥴러]
🙋🏻♀️ 오늘은 CPU 스케쥴러에 대해 알아보겠습니다.
사전에 제가 포스팅해 둔 글을 읽고 오시면 더 빠른 이해가 가능합니다.
프로세스가 구동이 되려면 다양한 시스템 자원이 필요합니다.
대표적으로 CPU와 입출력장치가 있는데,
최고의 성능을 내기 위해 자원을 어떤 프로세스에 얼마나 할당하는지 정책을 만드는 것 을 CPU스케줄링이라고 합니다.
스케줄링 대상은 Ready Queue(현재 메모리 내에 있으면서 CPU 를 잡아서 실행되기를 기다리는 프로세스들이 모여있는 공간) 에 있는 프로세스들입니다.
지난 시간 장기스케쥴링, 단기 스케쥴링, 중기 스케쥴링에 대해 배웠는데 CPU스케쥴링은 이 단기 스케쥴링에 해당합니다.
✔️ [스케쥴러] https://yoon-dumbo.tistory.com/32
❓ CPU스케쥴러의 목적은 어떻게 프로세스들이 CPU를 효율적으로 사용할지에 대한 물음부터 시작됩니다.
CPU스케쥴러는 어떤 프로세스에게 CPU를 배정해줄지에 대해 결정합니다.
CPU의 스케쥴링 목적은 사용자와 시스템간 차이가 있는데,
👤 사용자 입장에서는,
내가 데이터를 입력한 후 최대한 빠르게 출력되는 응답시간
프로그램을 제출 한 후 끝나때까지의 처리 시간인 반환시간
프로세스들이 준비 상태로 대기열에서 기다린 시간인 대기시간
🖥 시스템 입장에서는,
총 경과 시간 대비 CPU가 순수하게 사용자 프로세스를 수행한 시간의 비인 CPU 이용률
단위 시간 당 몇개의 프로세스를 처리했는지에 대한 처리량
으로 시스템과 사용자의 목표 지표는 다릅니다. 한쪽으로 편파되지 않도록 적절히 전략을 이용해야 합니다.
❓ 그렇다면 언제? CPU스케줄링이 일어날까요?
CPU 스케쥴링은 아래와 같은 상황에서 일어납니다.
✍🏻 프로세스가 입/ 출력을 요구할 때
✍🏻 프로세스가 종료를 요구할 때
✍🏻 높은 우선순위의 프로세스가 나타날때
✍🏻 주어진 CPU 실행시간을 초과했을 때( 각 프로세스마다 지정된 최대 시간을 타임 퀸텀(Time Quantum) 또는 타임 슬라이스(Time Slice) 이라 부름)
CPU 스케쥴링
CPU의 스케쥴링 전략에 대해 알아보겠습니다.
CPU 의 스케쥴링 전략은 크게 두가지로 분류 할 수 있는데 바로 선점형과 비선점형 입니다.
분류는 아래와 같습니다.
이 중 저 비선점형 전략을 이용한 스케쥴링과 선점형 전략을 이용한 스케쥴링이 무엇이 있는지 알아보겠습니다.
👀 FCFS(First Come First Served)
말그대로 순서대로 처리하는 친구 입니다.
일단 CPU를 답으면 CPU burst가 완료 될 때까지 CPU를 반환하지 않습니다.
이럴 경우 문제점은 어떤게 있을까요?
만약 소요시간이 긴 프로세스가 먼저 도착하면 뒤에 짧은 소요시간을 가진 프로세스들이
기다려야 한다는 문제가 있습니다 아래 그림 처럼요!
👀 SJF(Shortest - Job - First)
이친구는 다른 프로세스가 먼저 도착했어도 CPU burst time이 짧은 프로세스에게 선 할당한다는 특징이 있습니다.
어? 그럼 좋은 거 아니야? 하실 수 있겠지만, 이친구는 극단적으로 CPU 사용이 짧은 job만을 선호하기
때문에 사용시간이 긴 프로세스는 거의 영원히 할당을 못받을 수도 있습니다.
아래 그림 처럼요!
이처럼 계속해서 지연되는 상황을 보통 기아 상태(Starvation State) 라고 부릅니다.
👀 SRTF(Shortest Remaining Time First)
선점형 스케쥴링인 SRTF의 특징은 새로운 프로세스가 도착할때마다 새로운 스케쥴링이 이루어지는데,
현재 수행 중인 프로세스의 남은 burst time보다 더 짧은 CPU burst time을 가지는 새로운 프로세스가 도착하면 CPU를 뺏깁니다.
따라서 CPU 사용시간을 측정할 수가 없다는 문제점이 있습니다.
❓ SJF 랑똑같은 거 아냐? 할 수 있지만 SJF 는 실행시간이 가장 짧은 프로세스, SRTF 는 현재 실행중인 프로세스의 남아 있는 실행시간과 새로운 프로세스의 실행시간을 비교하여 짧은 것 이라 할 수 있습니다.
👀 HRRF(Highest Response Ratio First) 스케줄링
각 프로세스의 응답률을 계산하여, 응답률이 가장 큰 프로세스를 먼저 처리 하는 스케쥴링 전략 입니다.
응답률이 같다면 CPU버스트 시간이 짧은 프로세스가 우선순위가 더 높습니다.
준비 큐에 있는 프로세스에 대기시간과 작업시간을 통해 우선순위를 정해 CPU를 할당하기 때문에
CPU버스트 시간이 아무리 길더라도, 무한정 기다리는 기아현상이 예방 됩니다.
👀 Round Robin
가장 많이 쓰이는 스케쥴링으로
각 프로세스들은 동일한 크기의 할당시간(time quantum)을 갖습니다.
할당시간이 지나면 레디큐 제일 뒤에가서 줄을 섭니다.
CPU 버스트 타임이 랜덤할 경우에 효율적입니다.
😡 주의 할점은 time quantum이 너무 커지면, FCFS와 같아지고 너무 작아지면 잦은 context switch로 overhead발생하기 때문에 적당한 타임퀀덤을 설정하는게 중요 합니다.
👀다단계 큐(MQ: Multi-level Queue) 스케줄링
RR의 단점은 프로세스 특성을 고려할 수 없다는 것입니다.
이를 해결하기 위해 프로세스 특성 별로 레디 큐를 여러개 두어 우선순위를 부여하고, 높은 우선순위 큐들이 비었을 떄만 다음 단계의 낮은 우선순위의 큐 프로세스들에게 CPU를 할당하는 스케쥴링 전략을 도입했습니다.
같은 레디큐 안에 있는 프로세스 간에는 FSFS, SJF, RR등 다른 스케쥴링 전략을 사용할 수 있습니다.
😄 총정리
최대한 쉽게 설명하고자 노력했는데, 궁금한점이나, 잘못된 내용이 있으면 댓글로 피드백 부탁드립니다!
아래는 제가 한눈에 보기 쉽게 정리한 마인드 맵입니다.
✍🏻 참고자료
'os' 카테고리의 다른 글
[OS] 스케쥴러 (0) | 2021.03.15 |
---|---|
[OS] 프로세스와 PCB 그리고 스레드 (0) | 2021.03.07 |