[OS] 스케줄링 기준과 레벨

parkheeddong·2023년 4월 6일
0

Operating System

목록 보기
14/63
post-thumbnail

1. 스케줄링 기준

어떤 기준으로 프로세스를 평가하고, 스케줄링 순서를 정해줄까?

1) 프로세스 속성(Process Characteristics)

✅ I/O Bound 프로세스냐 CPU 바운드 프로세스냐

I/O Bound Process : cpu 사용보다는 입출력을 많이 하는 프로세스
CPU Bound Process (=Compute-bound) : cpu를 많이 사용하고, 연산을 많이 하는 프로세스

하나의 시스템에 여러 프로세스들이 섞여 들어올 때, I/O 바운드를 먼저 할지 CPU 바운드 프로세스를 먼저 할지 결정하는 것
무조건은 아니지만, 일반적으론 I/O Bound Process를 먼저 스케줄링한다. ready que에 I/O 바운드와 CPU 바운드 프로세스가 있을 때, CPU 바운드를 먼저 할당하게 되면 그 프로세스가 자신의 Time Quantum을 다 써야 I/O 프로세스가 들어간다. 만약 I/O 프로세스가 먼저 들어가게 되면, I/O 바운드는 CPU를 많이 안 쓰니까 자기 Time Quantum을 다 쓰지 않고 I/O를 하고 Sleep 상태가 된다. 그 때 CPU 바운드 프로세스가 CPU에 올라와서 실행 가능하다. 즉, I/O 바운드 프로세스는 I/O 디바이스를 활용하고 Compute바운드 프로세스는 CPU를 사용하기 때문에 병렬료 사용되는 상황이 된다. 즉 일반적으로는 I/O 바운드 프로세스를 먼저 사용하는 것이 선호된다.

✅ Batch 프로세스냐 Interactive 프로세스냐

Batch Process(=Background Process) : 명령을 입력한 사용자가 기다리지 않는 것
Interactive Process(=Foreground Process) : 명령을 입력한 사용자가 기다리고 있는 것
당연히 Interactive Process가 우선순위를 가지게 된다.

2) 프로세스의 응급성 (Urgency of the Process)

Real Time System에서 자주 사용되는 스케줄링 기준

✅ Hard Real-time이냐, Soft Real Time이냐, non-real time 이냐

Deadline : 프로세스는 특정 시간까지 output을 내야 하는 '데드라인'을 가진 경우가 있다.
Real Time Process : deadline을 가진 프로세스를 real time process라고 한다.
Hard Real Time : deadline을 반드시 키져야 하는 경우는 hard real time process
Soft Real Time : deadline을 반드시 키지지는 못하더라도 가급적 빨리해야 하는 프로세스
None Real Time : deadline이 없는 프로세스
=> Hard Real Time과 Soft Real Time을 'Real Time Task'라고 한다.

3) 프로세스 타입과 프로세스 중요성

그 application의 도메인이 무엇인지, 얼마나 중요한지
학교에서 컴퓨터 시스템이 학생들의 실습으로 사용되면서 동시에 성적 처리용으로 사용되고 있다. 이 경우에는 일반적으로 성적을 처리하는 것이 더 중요하다.
컴퓨터 시스템에 중요도를 반영하기는 쉽지 않지만 프로세스의 중요도를 기준으로 스케줄링할 수 있다.

4) 프로세스의 서비스 타임

프로세스의 burst time을 기준으로 할 수도 있다. 서비스타임이 1초인 프로세스와 100초인 프로세스 중 1초인 프로세스를 먼저 스케줄링한다.

5) 프로세스의 우선순위

프로세스의 우선순위를 정해서 우선순위별로 스케줄링을 할 수도 있다.

2. 스케줄링 레벨

스케줄링은 기본적으로 3단계로 이뤄진다.

1단계) Long-term Scheduling

= Job Scheduling = admission Scheduling = high-level Scheduling
(1) 여러 App(Job)들 중에 어떠한 것을 선택해서 프로세스를 생성할지(커널에 등록할지) 결정
(2) 컴퓨터 시스템 내부에 이미 너무 많은 프로세스가 있어서 오버로드되어 있는 경우, 바깥에 있는 앱이 더 이상 들어오지 않도록 막는 역할을 한다. 즉 생성된 프로세스의 개수 (=멀티프로그래밍 degree)가 너무 높으면 시스템의 성능이 하락하는 현상이 발생하기 때문에, 이미 degree가 높다면 long term scheduler가 차단을 하는 역할을 한다.
(3) i/o 바운드와 compute 바운드 프로세스를 적절히 섞어서 선택한다. cpu 바운드 프로세스만 많으면 cpu만 사용하고 i/o만 많으면 cpu가 놀게 되기 때문에 좋지 않아서, 적절하게 섞어서 cpu도 활용이 잘 되고 i/o도 활용이 잘 되도록 프로세스를 선택하게 된다.
(4) 대부분의 time-sharing system에서 (interactive system)에서는 job이나 command가 submission 되면 즉시 커널에 등록되고 프로세스로 탄생이 된다. 즉 long term scheduling을 거의 하지 않는다는 것이다.

2단계) Medium-term Scheduling

생성된 프로세스들 중 어떤 것에게 메모리를 할당 할지 결정
swapping 작업을 담당한다. 즉 어떤 것을 swap-in 시키고, 어떤 것을 swap-out 시킬지 결정한다.

3단계) Short-term Scheduling : 주 관심사 ✔️

= Process Scheduling, low-level Scheduling
(1) Ready Que에 있는 프로세스 중 어떤 것에게 cpu를 할당할지 결정
현재 CPU를 사용중이던 프로세스가 CPU를 나가면(인터럽트가 생기거나 프로세스가 시스템 콜을 할 경우 등) 그 때 스케줄링을 하게 된다.
(2) 스케줄링의 주기는 일반적으로 굉장히 자주 발생한다. 따라서 스케줄링을 잘 하는 것도 중요하지만, 스케줄링 선택을 빨리 해야 한다.
ex) 프로세스가 할당받고 cpu를 사용하는 시간이 평균 100ms인데 스케줄링 결정에 10ms가 소요된다면, 좋지 않다. CPU가 10/(100+10) = 9% 정도는 스케줄링 선택에만 사용되는 것이기 때문이다.

3. Scheduling Policy

1) Preemptive Scheduling : 선점형 스케줄링

  • CPU에 프로세스 A가 실행중인데, A가 스스로 CPU에서 나오지 않고 계속 사용중일 때 Time Quantum이 지나서 혹은 더 높은 우선순위로 인해서 다른 프로세스를 cpu에 할당시키는 것을 '선점형 스케줄링'이라고 한다.

  • Time Quantum이라는 개념이 있다면 '선점형 스케줄링' 기법이다.

  • Time Sharing 시스템이나 Real Time System의 경우에 사용된다.

선점형 스케줄링 기법은 context switching이 자주 발생하기 때문에, context switching 때마다 커널이 개입하게 되어 커널의 개입 overhead가 커진다.
그렇지만 선점형 스케줄링이 더 flexible하고 adaptable 하기 때문에 자주 사용된다.

2) Non-preemptive Scheduling : 비선점형 스케줄링

  • Time Quantum 이라는 개념이 없고, 한번 cpu에 들어가면 끝까지 cpu를 사용하게 된다.
  • 프로세스가 cpu에 들어가면, 더 우선순위가 높은 프로세스가 있어도 계속 실행된다. (= 우선순위 역전현상 : 우선순위 높은 프로세스가 기다리고, 낮은 프로세스가 cpu를 사용하는 현상)
  • context switching 발생 횟수가 줄어들기 때문에 커널의 개입이 적다.

✅ 그렇다면 우선순위(priority)란 무엇일까?

1) 고정 우선순위 : Static Priority

프로세스가 생성될 때 우선순위가 결정되고, 프로세스가 실행하는 동안 우선순위가 바뀌지 않음
외부에서 주어지는 경우가 많다.

2) 다이나믹 우선순위 : Dynamic Priority

프로세스가 생성될 때 초기 우선순위가 배정되고, 프로세스 실행 동안 계속 상태에 따라서 우선순위가 변함.
커널에서 내부적으로 결정되는 경우가 많다.
더욱 더 시스템 환경에 adaptive하고 flexible하기 때문에 더 많이 사용된다.

✅ CPU-Burst와 I/O Burst란 ?

프로세스가 처음 탄생하면 그 프로세스가 cpu를 사용하는 구간과 I/O를 쓰는 구간이 번갈아 발생한다. CPU 실행이 진행되는 구간이 CPU burst이고, I/O 가 실행되는 구간이 I/O Burst이다.

0개의 댓글