본문 바로가기

Linux/RaspberryPi

리눅스 및 커널 프로그래밍 스터디 정리 #4

Multi - Tasking

- 하나 이상의 프로세스를 동시에 중첩형태로 실행

 

Cooperative Multi tasking

- Yield를 통해서만 CPU를 양보

- 양보를 모르는 독점적 프로세스

- Mac OS 9 or less, Windows 3.1

- 잘못된 프로그램이 계속돌면 뺏어 올 수가 없음

 

Preemptive Multi tasking

- Linux와 UNIX 에서 사용

- 스케줄러가 프로레스의 실행중단과 다른 프로세스 선택을 결정

- preemption: 실행중인 프로세스를 강제 중지시키는 것

- time slice: Preempt되기 전까지 프로세스에게 주어지는 시간

 

POLICY

 * I/O oriented Process

 - GUI를 가진 대부분의 프로그램

 

 * Processor oriented Process

- key generator, MATLAB

 

 스케줄러의 목적

- Response time의 최소화 

- System utilization의 최대화 

 

스케줄러는 우선순위가 높은 프로세스를 먼저 수행

- 우선순위가 같은 프로세스는 round- robin 방식으로 수행

 

두 종류의 우선순위

- 기본 값에 nice(-20 ~ 19)를 더하여 일반 프로세스의 우선순위 결정 (nice↑, 우선순위 ↓)

-> nice가 작으면 time slice↑, nice가 크면 time slice↑

 

Time slice

- 선점되기 전가지 실행할 수 있는 시간

 

- 긴 time slice: interactive System의 response time 증가

   ->Processor oriented process에 적합

 

- 짧은 time slice: Context Switch overhead 증가

   I/O oriented Process에 적합

 

- 다수 운영체제의 time slice: 10ms

- Linux의 CFS: Process별로 Processor 시간 할당비율 지정

ex) 문서편집기: I/O oriented, Short response time

     동영상 인코더: Processor oriented, Loose deadline

 

Linux에서는?

두 프로세스의 nice값이 같으면 50%

문서편집기가 깨어나면?(Key Board가 클릭되면 READY)

CFS는 문서편집기가 보장된 50%보다 매우 적게 사용되었음을 인지

인코더를 선점하여 문서편집기에 프로세서 할당

 

 

Linux scheduling Algorithm

- CFS는 sched_normal_class 해당

 

ex) 예시 

     nice가 0이면 time slice 100ms

     nice가 1이면 time slice 95ms 

 

Process

Nice

Time Slice

Process type

Context Switch 주기

P1

0

100ms

Foreground

100ms

P2

19

5ms

Background

5ms

 

위와 같은 상황에서 문제 발생

 

문제 1: P2는 5ms 마다 Switching 하므로 Context overhead 발생

 

문제 2: Nice값으로 time slice를 결정할 것인가?

 

Process

Nice

Time Slice

Ratio

P1

0

100ms

100%

P2

1

95ms

95%

P1

18

10ms

100%

P2

19

5ms

50%

 

문제 3: CPU에 따라 time tick이 차이가 있다.