CPU 스케줄링

고장난 고양이·2022년 8월 4일
0

운영체제

목록 보기
17/21
post-thumbnail

📚 CPU 스케줄링

✅ 기본개념

CPU 스케줄링은 어떤 작업에 CPU를 배정할지 결정하는 것을 말한다. 컴퓨터 시스템의 효율은 어떤 프로세스에 CPU에 먼저 배정하느냐에 따라 달라지므로 CPU 스케줄링은 작업의 형평성과 효율성을 결정하는 중요한 일이다.

✅ 스케줄링의 단계

1. 장기 스케줄링 or 고수준 스케줄링

  • 전체 시스템의 부하를 고려하여 작업을 시작할지 말지를 결정한다.

  • 이 결정에 따라 시스템의 전체 프로세스 수가 결정되는데 이를 멀티프로그래밍 정도(degree of multiprogramming)라고 한다.

  • 메인프레임과 같이 큰 시스템에서 규모가 큰 일괄작업을 처리할 때 사용한다.

2. 중기 스케줄링 or 중간수준 스케줄링

  • 중기 스케줄링은 이미 활성화가 된 프로세스들에 대한 관리를 한다. 이미 활성화된 프로세스들의 중지와 활성화로 전체 시스템의 활성화된 프로세스 수를 조절하여 과부화를 막는다.

  • 시스템의 부하를 조절하려면 고수준 스케줄링 대신 중간 수준 스케줄링을 고려해야한다.

  • 시스템에 과부하가 걸려서 전체 프로세스 수를 조절해야 한다면 이미 활성화된 프로세스 중 일부를 보류상태로 보낸다.

  • 보류된 프로세스는 처리 능력에 여유가 생기면 다시 활성화 된다.

3. 단기 스케줄링 or 저수준 스케줄링

  • 가장 작은 단위의 스케줄링으로 실제로 작업이 이루어지는 수준이다.

  • 오늘날의 CPU 스케줄러는 대부분 중간 수준 스케줄링과 저수준 스케줄링으로 구성되어 있다.

  • CPU 스케줄러는 필요에따라 준비 상태에 있는 프로세스를 실행 상태로 옮기기도 하고, 대기상태로 보내기도 하며, 타임 아웃으로 준비 상태로 돌려보내기도 한다.

✅ 스케줄링의 목적

공평성 : 모든 프로세스가 자원을 공평하게 배정 받아야하며, 자원 배정 과정에서 특정 프로세스가 배제되어서는 안된다.

효율성 : 시스템 자원이 유휴 시간 없이 사용되도록 스케줄링하고, 유휴 자원을 사용하려는 프로세스에는 우선권을 주어야 한다.

안정성 : 우선 순위를 사용하여 중요 프로세스가 먼저 작동하도록 배정함으로써 시스템 자원을 점유하거나 파괴하는 프로세스로부터 보호해야 한다.

확장성 : 프로세스가 증가해도 시스템이 안정적으로 작동하도록 조치해야한다. 또한 시스템 자원이 늘어나는 경우 이 혜택이 시스템에 반영되게 해야한다.

반응 시간 보장 : 응답이 없는 사용자는 시간이 멈춘 것으로 가정하기 때문에 시스템은 적절한 시간 안에 프로세스의 요구에 반응해야한다.

무한 연기 방지 : 특정 프로세스의 작업이 무한히 연기되어서는 안된다.

📚 스케줄링 시 고려사항

✅ 선점형 스케줄링

어떤 프로세스가 CPU를 할당받아 실행 중이더라도 운영체제가 CPU를 강제로 빼앗을 수 있는 스케줄링 방식이다.

✅ 비선점형 스케줄링

어떤 프로세스가 CPU를 할당받아 실행 중이더라도 운영체제가 CPU를 강제로 빼앗을 수 없는 스케줄링 방식이다.

구분선점형비선점형
작업방식실행상태에 있는 작업을 중단시키고 새로운 작업을 실행할수 있다.실행상태에 있는 작업이 완료될때까지 다른 작업이 불가능하다.
장점프로세스가 CPU를 독점할 수 없어 대화형이나 시분할 시스템에 적합하다.CPU 스케줄러의 작업량이 적고 문맥 교환의 오버헤드가 적다.
단점문맥 교환의 오버헤드가 많다.기다리는 프로세스가 많아 처리율이 떨어진다.
사용시분할 방식 스케줄러에 사용된다.일괄 작업 방식 스케줄러에 사용된다.
중요도높다낮다

✅ 프로세스 우선순위

  • 대부분의 CPU 스케줄러는 우선순위를 사용한다.
  • 우선순위가 있다는 것은 프로세스의 중요도가 다르다는 의미이다.
  • 프로세스는 크게 커널 프로세스와 일반 프로세스로 나뉜다.
  • CPU 스케줄러는 보통 커널 프로세스를 높은 우선순위에 둡니다.

✅ CPU 집중 프로세스 & 입출력 집중 프로세스

프로세스가 대기 상태에 있다가 CPU를 할당받아 실행하면 CPU burst, 입출력 작업을 하면 I/O burst(입출력 버스트)라고 한다.

  1. CPU 집중 프로세스(CPU bound process) : 수학 연산과 같이 CPU를 많이 사용하여 CPU burst가 많은 프로세스
  2. 입출력 집중 프로세스(I/O bound process) : 입출력을 많이 사용해 I/O burst가 많은 프로세스

두 프로세스 간에는 I/O bound process를 먼저 실행상태로 옮기는 것이 효율적이다.

IO bound process의 경우 CPU를 할당받아도 금방 대기 상태로 빠지는 반면 CPU bound process의 경우 할당받은 CPU 시간을 전부 사용하는 경우가 많기 때문이다.

✅ 전면 프로세스와 후면 프로세스

1. 전면 프로세스

GUI를 사용하는 운영체제에서 화면의 맨 앞에 놓인 프로세스. 사용자와 상호작용이 가능해 상호작용 프로세스라고도 불린다.

2. 후면 프로세스

사용자와 상호작용이 없는 프로세스이며, 사용자의 입력 없이 작동하여 일괄 작업 프로세스라고 불린다.

📚 CPU 스케줄링 알고리즘

✅ 알고리즘의 선택기준

CPU 사용률 : 전체 시스템의 동작 시간 중 CPU가 사용된 시간을 측정.

처리량 : 단위 시간 당 작업을 마친 프로세스의 수.

대기 시간 : 작업을 요청한 프로세스가 작업을 시작하기 전까지 대기한 시간.

응답 시간 : 프로세스 시작 후 첫 번째 출력 또는 반응이 나올 때까지 걸린 시간.

반환 시간 : 프로세스가 생성된 후 종료되어 사용하던 자원을 모두두 반환하는 데까지 걸리는 시간.

종류

구분종류
비선점형 알고리즘FCFS 스케줄링, SJF 스케줄링, HRN 스케줄링
선점형 알고리즘라운드 로빈 스케줄링, SRT 스케줄링,다단계 큐 스케줄링, 다단계 피드백 큐 스케줄링
둘다 가능우선순위 스케줄링

📌 선입 선처리(FCFS: First-Come First-Served) 스케줄링

  • 프로세스들이 준비 대기열에 도착하는 순서에 따라 CPU를 할당하는 방식이다.

  • 단순하고 공평하지만 처리 시간이 긴 프로세스가 CPU를 차지하면 다른 프로세스들은 하염없이 기다려 시스템의 효율성이 떨어지는 문제가 있다.

  • 이를 호위 효과(Convoy effect)라고 한다.

📌 최단 작업 우선(SJF: Shortest Job First) 스케줄링

  • 준비 큐에 있는 프로세스 중에서 실행 시간이 가장 짧은 작업부터 CPU에 할당하는 방식이다.

  • 작업 시간이 긴 프로세스의 처리가 계속해서 뒤로 밀리는 아사(starvation) 현상이 발생할 수 있다.

  • 운영체제가 프로세스의 종료 시간을 정확하게 예측하기 어렵다. 때문에 SJF 스케줄링을 사용하기 힘들다.

📌 라운드 로빈(RR: Round Robin) 스케줄링

  • 각 프로세스에 동일한 크기의 시간(time slice)을 할당받은 후, 해당 시간 동안 작업을 완료하지 못하면 준비 큐의 맨 뒤로 가서 자기 차례를 기다리는 방식이다.

  • 프로세스가 CPU를 일정 시간 동안 사용한 후 다른 프로세스에 주어야 하기 때문에 앞의 긴 작업을 무작정 기다리는 콘베이 효과가 줄어든다.

  • 타임 슬라이스가 너무 큰 경우 FCFS 스케줄링과 다를게 없어진다.
    타임 슬라이스가 너무 작은 경우 문맥 교환이 너무 자주 일어나 전반적인 성능이 떨어진다.

  • 결론적으로 타임 슬라이스는 되도록 작게 설정하되 문맥 교환에 걸리는 시간을 고려하여 적당한 크기로 하는 것이 중요하다.

📌 최소 잔류 시간 우선(SRT: Shortest Remaining Time) 스케줄링

  • SJF 스케줄링과 RR 스케줄링을 혼합한 방식이다. 기본적으로 RR 스케줄링을 사용하지만, CPU를 할당받을 프로세스를 선택할 때 남아 있는 작업 시간이 가장 적은 프로세스를 선택한다.

  • 현재 실행 중인 프로세스와 큐에 있는 프로세스의 남은 시간을 주기적으로 계산하고, 남은 시간이 더 적은 프로세스와 문맥 교환을 해야 하므로 추가 작업 시간이 발생한다.

📌 우선순위(Priority Scheduling) 스케줄링

  • 정수로 우선순위 값을 설정하여 스케줄링하는 방식이다. 즉, 우선순위가 높은 프로세스를 먼저 처리해주는 방식이다.

  • 비선점형 방식과 선점형 방식에 모두 적용할 수 있다.

  • 우선순위 스케줄링 역시 SJF처럼 Starvation 문제가 있을 수 있지만, Aging 기법을 사용하여 이를 해결할 수 있다.

  • Aging이란 프로세스가 기다리는 시간이 길어질수록 우선순위를 높여 한 프로세스가 무한정 기다리지는 않도록 해주는 방법이다.

📌 다단계큐(MQ: Multilevel Queue) 스케줄링

  • 프로세스 특성별로 준비 큐를 여러 개 두어 우선순위를 부여하고, 높은 우선순위 큐들이 모두 비었을 때만 다음 단계의 낮은 우선순위의 큐 프로세스들에게 CPU를 할당하는 방식이다.

  • 한 번 우선순위가 매겨저 준비 큐에 들어가면 이 우선순위는 바뀌지 않는다.

  • 각 큐에는 자체 스케줄링 알고리즘을 구현할 수 있다.

📌 다단계 피드백 큐(MFQ: Multi-level Feedback Queue) 스케줄링

  • 현대 사용되는 CPU 스케줄링 알고리즘 중 가장 일반적인 CPU 스케줄링 알고리즘이다.

  • Multilevel Feedback Queue 역시 큐를 여러 개로 분할했다는 점에서는 Multilevel Queue와 동일하지만, 다른 점은 바로 프로세스가 다른 큐로 이동이 가능하다는 것이다.

  • 프로세스가 CPU를 한 번씩 할당받아 실행될 때마다 프로레스의 우선순위를 낮춤으로써, 다단계 큐에서 우선순위가 낮은 프로세스의 실행이 연기되는 문제를 완화한다.

  • 반대로, 실행 중인 프로세스가 주어진 타임 퀀텀을 모두 소진한 후 CPU를 강제로 회수당하면, 이 프로세스는 계산 성향이 강해진 것으로 인식하여 이 프로세스를 입/출력 성향 기준 한 단계 낮은 준비 큐로 이동시킨다.

profile
개발새발X발일지

0개의 댓글