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이 차이가 있다.
'Linux > RaspberryPi' 카테고리의 다른 글
Raspberry Pi Compute Module 3 b+ EMMC OS 올리기 (0) | 2021.06.01 |
---|---|
리눅스 및 커널 프로그래밍 스터디 정리 #5 (2) | 2021.01.15 |
리눅스 및 커널 프로그래밍 스터디 정리 #3 (0) | 2021.01.13 |
리눅스 및 커널 프로그래밍 스터디 정리 #2 (0) | 2021.01.12 |
리눅스 및 커널 프로그래밍 스터디 정리 #1 (0) | 2020.11.29 |