일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- frequency-domain spectrum analysis
- stride
- SJF
- AINCAA
- 컴퓨터 네트워크
- MLFQ
- DP
- OWASP
- Unity #Indie Game
- Security
- polymorphism
- FIFO
- 운영체제
- 유스케이스
- Trap
- MAC
- OSI 7계층
- SDLC
- 메카님
- DSP
- Waterfall
- unity
- 배경 그림
- link layer
- 유니티
- STCF
- protection
- 게임 개발
- 게임개발
- information hiding
- Today
- Total
다양한 기록
스케줄링과 그 방법: FIFO, SJF, STCF, RR / Busy Waiting, Sleeping 본문
제한된 자원(CPU)를 어떻게 프로세스들에게 나누어 줄 것이냐의 이야기
* 단어 : 워크로드
작업의 양
컴퓨터 과학에서는 작업의 양+ 특성
* 단어: 매트릭스
평가 기준. 스케줄링의 경우..
1. 반환시간(Turnaround Time) : 종료시간 - 도착시간
2. 응답시간(Response Time) : 첫 실행시간 - 도착시간
3. 공평성(Fairness)
4. 처리율(Throughput)
5. Deadline
여기서 반환시간과 응답시간을 중점으로 보게 될 것입니다.
* 데드라인이 필요할 정도의 환경이면 애초에 스케줄링을 안 돌리고 프로세스 하나만 쭉 돌리는 게 나을 것입니다.
1. FIFO
프로세스 A, B, C가 동시에 도착하고, 같은 크기의 작업을 가지고 있을 경우
위 이미지의 1번 경우에서는
평균 반환시간: (10 + 20 + 30) / 3 = 20
평균 응답시간 = (0 + 10 + 20) / 3 = 10
문제는 2번 경우: 크기가 다른데, 작업 양이 큰 프로세스가 앞에 오는 경우입니다.
평균 반환시간: (100 + 110 + 120) / 3 = 110
평균 응답시간 = (0 + 100 + 110) / 3 = 73.3333...
뒤에 있는 프로세스들이 너무 밀림
장점: 단순하고 구현하기 쉬움
단점: 기다리는 시간이 너무 길어짐 (Convoy Effect)
2. SJF( Shortest Job First == SPN, Shortest Process Next )
프로세스 A, B, C가 동시에 도착한 경우
1번 경우, 동시에 들어온 프로세스들의 경우 길이가 짧은 프로세스부터 처리합니다.
평균 반환시간: (10 + 20 + 120) / 3 = 50
평균 응답시간 = (0 + 10 + 20) / 3 = 10
2번 경우는 A가 제일 양이 많은데 동시에 안오고 살짝 일찍 온 경우입니다.
이 경우 FIFO에서 보았던 문제가 다시 떠오릅니다.
3. STCF ( Shortest Time-to-Compliation First == SRT, Shortest Remaining-Time next )
SJF에다 Preemptive, 선점 개념(Dispatch)을 넣은 것입니다.
이전까진 하나의 프로세스가 Compliation 될 때까지 자리를 유지했으나,
이제는 실행중 더 짧은 프로세스가 들어오면 뒤로 미룹니다.
위 이미지가 예시입니다.
평균 반환시간: (10 + 20 + 120) / 3 = 50
평균 응답시간 = (0 + 10 + 20) / 3 = 10
문제는, 프로세스를 완전히 끝내고 넘어가야 하다보니 응답시간이 너무 깁니다.
응답이 너무 느리면, 답답해서 사용하지 못할 것입니다.
4. RR ( Round-Robin )
한 잡을 타임 슬라이스 (타임 퀀텀)만큼 멈추고 멈춥니다.
그리고 다음 잡으로 넘어갑니다. => 타임 슬라이스 만큼이 리스폰스 타임이 될 것
이 타임 슬라이스를 점점 줄이다, 컨텍스트 스위치의 오버헤드와의 균형을 적절히 맞출 때 멈춥니다.
타임 슬라이스를 작게 주면 응답성은 오르지만 오버헤드가 커져서, 트레이드오프가 있습니다.
(Amortization)
위 이미지 기준
평균 반환시간: (13 + 14 + 15) / 3 = 14
평균 응답시간 = (0 + 1 + 2) / 3 = 1
자른 만큼 응답시간은 빨라질 수 밖에 없지만,
그만큼 작업 완료가 늦어지니 반환시간은 늦어질 것입니다.
둘 중 하나는 포기해야 하는데,
대화형 컴퓨터는 응답 시간이 중요하니 응답 시간을 선택하게 됩니다.
Busy Waiting과 Sleeping
이번엔 I/O가 끼어드는 경우에 대해 생각해 볼 수 있습니다. 이러면 레디/런 두 상태만으론 문제가 있습니다.
Busy Waiting은 I/O 도중에 CPU 권한을 놓지 않고 붙잡는, Run 상태를 유지하는 걸 의미합니다.
그럼 I/O 시간만큼 손해를 보게 됩니다.
그래서 Sleep 방식을 사용하게 됩니다.
I/O 중에는 Wating (Blocked) 상태가 되고, 그 시간에 다른 프로세스를 끼워넣어 Run 시키는 것입니다.
'운영체제' 카테고리의 다른 글
스케줄링 과정 그려보기, ART, ATT (0) | 2024.03.26 |
---|---|
MLFQ (Multi-Level Feedback Queue) (0) | 2024.03.25 |
제한된 직접 수행: restrict operation / context switching (0) | 2024.03.18 |
프로세스와 프로세스의 상태 (0) | 2024.03.17 |
가상화, 병행성, 영속성 (0) | 2024.03.04 |