운영체제

스케쥴링

CPU I/O 버스트(Burst) Cycle
➡️ 프로세스 실행은 CPU 실행 및 입출력(I/O)대기로 구성
CPU 버스트 분포
➡️ 많은 수의 짧은 CPU 버스트와 적은 수의 긴 CPU 버스트 존재

  • I/O-bound프로그램 ➡️ 많은 수의 짧은 CPU 버스트
  • CPU-bound프로그램 ➡️ 적은수의 긴 CPU 버스트

CPU 스케쥴러

: 메모리에 있는 프로세스들 중 실행할 준비가 되어있는 ready 상태의 프로세스를 선택하고, 그 프로세스에 CPU를 할당

  • CPU 스케쥴링 결정은 다음의 네가지 상황에서 발생
    1️⃣ 한 프로세스가 실행 상태에서 대기 상태로 전환 될 때 ➡️ 비선점형(협조적)
    ex) 입출력 요청 또는 자식프로세스를 기다리기위해 부모프로세스가 wait()
    2️⃣ 프로세스가 실행 상태에서 준비 완료 상태로 전환될 때 ➡️ 선점형
    ex) 인터럽트 발생
    3️⃣ 프로세스가 대기 상태에서 준비 완료 상태로 전환될 때 ➡️ 선점형
    ex) 입출력 종료 되었을때 ➡️ 비선점형(협조적)
    4️⃣ 프로세스가 종료될 때

디스패쳐 작업

  • context switch
  • 사용자 모드로 전환
  • 프로그램을 다시 시작하기 위해 사용자 프로그램의 적절한 위치로 이동

디스패쳐 지연(Latency)

  • 하나의 프로세스를 중지하고 다른 프로세스를 실행시킬 때 소요되는 시간

스케쥴링을 하기위해 고려해야할 요소들
🔹 CPU 이용률(Utilization) 🔼 : CPU를 가능한 최대한 바쁘게 유지(보통 70% 정도 점유하면 많이한거)
🔹 처리량(Throuhgput) 🔼 : 단위 시간 당 완료된 프로세스 개수
🔹 총 처리 시간(Turnaround time) 🔽 : 프로세스의 제출 시간과 완료 시간의 간격(메모리에 들어가기위해 준비한 시간, 큐에서 대기한시간, 실행한 시간, 입출력시간 모두 포함)
🔹 대기 시간(Waiting time) 🔽 : 준비 완료 큐에서 대기하면서 보낸 시간의 합
🔹 응답 시간(REsponse time) 🔽 : 하나의 요구를 제출한 후 첫번째 응답이 발생할 때까지의 시간 (응답 출력하면서 걸리는 시간은 포함안됨)

스케쥴링 알고리즘

선입 선처리 스케쥴링 (First-come, First-Served, FCFS)
먼저 요청하는 프로세스가 먼저 CPU 할당받아. FIFO 큐로 관리
최단 작업 우선 스케쥴링 (Shortest-Job-First, SJF)
CPU burst가 짧을 수록 CPU 먼저 할당
우선 순위 스케쥴링 (Priority)
우선순위가 높은 프로세스 먼저 CPU 할당
라운드 로빈 스케쥴링 (Round-Robin)
시간 할당량(Time Quantum)이라고 일컫는 작은 단위의 시간을 정의. 한번에 한 프로세스에게 한 퀀텀동안 CPU를 할당

1️⃣ 선입 선처리 스케쥴링
😃 가장 간단한 형태
😃 코드 작성이 쉽고 이해하기 쉬움
🥲 순서에 따라 대기 시간의 차이가 큼
🥲 모든 다른 프로세스들이 하나의 긴 프로세스가 CPU를 양도하기를 기다려야 함(CPU 릴리즈를 기다려. 이런 효과를 호위효과, Convoy effect라고 함)
🥲 비선점형이기 때문에, 시분할에 부적합(시분할시스템(대화형)에서는 각 사용자가 규칙적으로 CPU의 몫을 얻는게 매우 중요함)

2️⃣ 최단 작업 우선 스케쥴링
😃 최소의 평균 대기시간
🥲 다음 CPU 요청의 길이 파악이 어려움(예측 어려움)

ㄴ비선점형 최단 작업 우선 스케쥴링

ㄴ선점형 최단 작업 우선 스케쥴링 / 최소 잔여 시간 우선 스케쥴링

3️⃣ 우선 순위 스케쥴링
😃 내부적 정의 (시간제한, 메모리 요구, open files수 등)활용 가능
😃 외부적 정의(프로세스의 중요성, 컴퓨터 사용을 위해 지불되는 비용의 유형과 양 등)활용 가능
🥲 무한 봉쇄, 기아 상태 ➡️ Aging 고려

4️⃣ 라운드 로빈 스케쥴링
😃 시분할 시스템 최적화
🥲 시간 할당량(Time Quantum)에 따른 영향도 존재
너무 클 경우 - FCFS와 동일한 알고리즘이 됨
너무 작을 경우 - Context Switch에 시간을 더 뺏김
(80%정도가 time quantum보다 작은게 좋다~)

5️⃣ 다단계 큐 스케쥴링

  • 프로세스 타입에 따라 몇개의 큐로 나누어 프로세스를 분류
    포그라운드(대화형), 백그라운드(일괄처리)
  • 큐 별로 별도의 스케쥴링 알고리즘을 가짐
    포그라운드 - RR/ 백그라운드 - FCFS
  • 각 큐는 낮은 우선순위의 큐보다 절대적인 우선순위를 가짐
  • 각 큐는 일정 비율로 CPU시간을 나누어 사용
    포그라운드큐 - RR, CPU 시간의 80%
    백그라운드큐 - FCFS, CPU 시간의 20%

6️⃣ 다단계 피드백 큐 스케쥴링

  • 프로세스가 큐들 사이를 이동하는 것을 허용
  • 프로세스를 CPU 버스트 성격에 따라 구분
  • Aging을 통하여 기아 상태를 예방

https://bit.ly/3FVdhDa
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

profile
Devops, AWS에 관심있어요.

0개의 댓글