CS

[운영체제] CPU 스케줄링

2023. 10. 6. 02:36
목차
  1. CPU 스케줄링
  2. 스케줄링의 종류
  3. 스케줄링 알고리즘
  4. 비선점형 스케줄링
  5. 선점형 스케줄링

 

 

CPU 스케줄링


CPU 스케줄링은 운영체제가 프로세스들에게 CPU 자원을 배분하는 것이다.

운영체제는 준비 큐에 있는 프로세스들 중에서 어떤 프로세스에게 CPU를 할당할지 결정한다.

시분할 시스템에서 각 프로세스들의 CPU 수행시간이 다르기 때문에 CPU 스케줄링을 통헤 적절히 CPU를 할당하여 빠른 사용자 응답을 제공하고, CPU와 입출력장치의 효율을 높일 수 있다.

 

 

 

 

스케줄링의 종류


 

단기 스케줄링

  • 준비 큐에 있는 대기 상태 프로세스 중 어떤 프로세스를 다음으로 실행할지 스케줄링 알고리즘으로 결정한다.
  • CPU 스케줄링이라고도 한다.

 

중기 스케줄링

  • 너무 많은 프로세스에게 메모리를 할당해 성능이 저하되는 경우를 막기 위해, 메모리에 로드 된 프로세스 수를 동적으로 조절한다.
  • 메모리에 프로세스가 많이 로드되면 스왑 아웃해서 일부 프로세스를 통째로 디스크에 저장한다.

 

장기 스케줄링

  • 준비 큐에 어떤 프로세스를 넣을지 결정해 메모리에 올라가는 프로세스 수를 조절한다.
  • 현대 운영체제에서는 시분할 시스템을 사용하기 때문에 대부분 사용하지 않는다.

 

 

 

 

 

스케줄링 알고리즘


스케줄링 알고리즘은 CPU 스케줄러(단기 스케줄러)가 준비 큐에 있는 프로세스 중 어떤 프로세스를 실행시킬지 결정하는데 사용된다.

CPU 사용률, 처리량, 응답시간, 반환시간, 대기시간 등의 기준으로 평가한다.

 

 

비선점형 스케줄링


비선점형 스케줄링은 실행 중인 프로세스가 종료될 때까지 다른 프로세스를 실행할 수 없음을 의미한다.

CPU 획득한 프로세스가 스스로 CPU를 반납하기 전까지는 CPU를 빼앗기지 않는 스케줄링 방법이다.

 

 

FCFS 스케줄링

  • 선입선출(First Come First Served) 스케줄링
  • 준비 큐에 먼저 들어온 프로세스가 우선순위를 갖는 알고리즘이다.
  • 구현이 간단하지만 CPU 사용시간이 매우 긴 프로세스가 먼저 도착한다면 다수의 프로세스들이 긴 시간 기다리는 현상(convoy effect)이 발생한다는 단점이 있다.

 

SJF 스케줄링

  • 최단 작업 우선(Shortest Job First) 스케줄링
  • 실행시간이 짧은 프로세스가 우선순위를 갖는 알고리즘으로, 준비 큐에 있는 프로세스 중 CPU를 점유하는 시간이 가장 짧은 프로세스부터 실행한다.
  • 평균 대기 시간이 가장 짧지만, 실행 시간이 긴 프로세스는 실행 시간이 짧은 프로세스에 밀려 기아 상태가 될 수 있다.

 

우선순위 스케줄링

  • 프로세스들에 우선순위를 부여하고 가장 높은 우선순위를 가진 프로세스부터 실행하는 알고리즘이다.
  • 우선순위를 정하는 기준은 다양한 방법이 있다.
  • 단점은 프로세스가 기아 상태가 될 수 있다는 것이다.

 

💡 기아상태(Starvation)
     : 우선순위가 높은 프로세스만 수행되어 우선순위가 낮은 특정 프로세스가 계속 자원을 할당받지 못하는 상태


해결 방법
- 오래 기다린 프로세스의 우선순위 높이기 (에이징)
- 우선 순위가 아닌 요청 순서대로 처리하는 요청 큐 사용
- 프로세스 우선순위 수시 변경으로 각 프로세스에게 동등한 기회 부여

 

 

 

 

선점형 스케줄링


선점형 스케줄링은 스케줄러가 실행 중인 프로세스를 중단시키고 다른 프로세스를 실행할 수 있음을 의미한다.

프로세스가 CPU를 계속 사용하기를 원하더라도 강제로 빼앗을 수 있는 스케줄링 방법이다.

 

 

라운드 로빈(RR) 스케줄링

  • 프로세스간 우선 순위가 없다.
  • 각 프로세스들이 CPU를 연속적으로 사용할 수 있는 시간을 타임 퀀텀(타임 슬라이스)으로 제한된다. (일반적으로 시간 단위는 0~100ms)
    • 모든 프로세스를 순서대로 일정 시간 동안 실행하며, 일정 시간을 초과하면 다른 프로세스를 실행한다.
    • 한 프로세스가 타임 퀀텀만큼 CPU를 사용했다면, 타이머 인터럽트가 발생하고 준비 큐에 있는 다른 프로세스에게 CPU를 할당한다.
  • 타임 퀀텀의 크기가 매우 중요하다.
    • 타임 슬라이스가 지나치게 크면 FCFS 스케줄링과 마찬가지로 convoy effect가 생길 여지가 있다.
    • 타임 슬라이스가 지나치게 작으면 콘텍스트 스위칭이 빈번하게 일어나서 오버헤드가 크다는 단점이 있다.
  • 모든 프로세스가 반복 수행되어 응답 속도가 빠르다는 장점이 있다.

 

SRTF 스케줄링

  • 최소 잔류 시간 우선(Shortest Remaining Time First) 스케줄링 - SJF의 선점 버전
  • 준비 큐에서 실행 시간이 가장 짧게 남은 프로세스를 우선 수행하는 알고리즘이다.
  • 현재 실행 중인 프로세스의 남은 CPU 실행 시간보다 실행시간이 더 짧은 프로세스가 준비 큐에 들어오면 CPU를 빼앗아 할당한다.
  • 평균 대기 시간이 가장 짧지만, 실행 시간이 긴 프로세스는 영원히 CPU를 할당받지 못하는 기아 상태가 될 수 있다.

 

멀티 레벨 큐 스케줄링

  • 준비 큐를 목적에 따라 여러 개로 분리해 사용하는 알고리즘이다.
  • 분리한 큐는 각각 우선순위가 있고 각자 다른 스케줄링 알고리즘을 적용할 수 있다.
  • 일반적으로 전위(foreground) 큐와 후위(background) 큐로 구분된다.
    • 전위 큐 : CPU 실행시간이 짧은 대화형 프로세스를 담기 위함 - 라운드 로빈 방식 적용 (응답 속도 중요)
    • 후위 큐 : CPU 실행시간이 긴 계산위주의 프로세스를 담기 위함 - FCFS 방식 적용 (성능 중요)
  • 프로세스 뿐만 아니라 큐에 대한 스케줄링을 적용해야한다
    • 큐마다 다른 스케줄링 알고리즘 사용
    • 큐에 우선순위 부여
    • 큐별로 타임 슬라이스 여러개 지정

 

멀티 레벨 피드백 큐 스케줄링

  • 멀티 레벨 큐 스케줄링의 발전된 형태로, 기아 현상을 방지 하기 위해 프로세스들을 여러 개의 준비 큐에 줄 세우는 방식이다.
  • 프로세스들이 큐 사이를 이동할 수 있다.
  • 각 큐들은 우선순위를 갖고 있고. 타임 슬라이스 동안 실행을 마치지 못한 프로세스는 점점 우선순위가 낮은 큐로 이동한다.
  • 우선순위가 낮은 큐에서 너무 오래 기다린 프로세스들을 다시 우선순위가 높은 큐로 이동시키는 에이징 기법을 적용하여 기아 현상을 예방할 수 있다.
  • 구현이 복잡하지만 가장 일반적인 CPU 스케줄링 알고리즘이다.

 

 

 

저작자표시 (새창열림)

'CS' 카테고리의 다른 글

[운영체제] 프로세스 동기화, 데드락  (0) 2023.10.07
[네트워크] 네트워크 레이어, IP 프로토콜  (0) 2023.10.07
[네트워크] 신뢰적 데이터 전송, TCP  (0) 2023.10.05
[운영체제] 프로세스와 스레드  (0) 2023.09.22
[네트워크] HTTPS, DNS, UDP  (0) 2023.09.21
  1. CPU 스케줄링
  2. 스케줄링의 종류
  3. 스케줄링 알고리즘
  4. 비선점형 스케줄링
  5. 선점형 스케줄링
'CS' 카테고리의 다른 글
  • [운영체제] 프로세스 동기화, 데드락
  • [네트워크] 네트워크 레이어, IP 프로토콜
  • [네트워크] 신뢰적 데이터 전송, TCP
  • [운영체제] 프로세스와 스레드
jny0
jny0
성장일기
jny0
J N Y 0
jny0
  • 분류 전체보기 (192)
    • 트러블슈팅 (6)
    • Java (22)
    • HTML, CSS , JavaScript (7)
    • MySQL, DBMS (9)
    • GIT (6)
    • 객체지향의 사실과 오해 (3)
    • 자바 ORM 표준 JPA 프로그래밍 (13)
    • 알고리즘 (114)
      • 자료구조 (59)
      • 수학 (11)
      • 정렬 (2)
      • 그리디 (3)
      • DP (4)
      • 그래프 (3)
      • 탐색 (9)
      • 재귀 (2)
      • 문자열 (9)
      • 기타 (12)
    • CS (10)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 관리

공지사항

인기 글

태그

  • 백준
  • 구현
  • 프로그래머스
  • BFS
  • 알고리즘
  • db
  • JS
  • git
  • 투포인터
  • 그리디
  • MySQL
  • JPA
  • 스택
  • codeup
  • DP
  • Java
  • 영상후기
  • 누적합
  • method
  • 자료구조

최근 댓글

최근 글

hELLO · Designed By 정상우.
jny0
[운영체제] CPU 스케줄링
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.