이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;)
RR: 시간을 정해놓고 CPU를 할당한 다음, 할당된 시간이 끝나면 강제로 다른 프로세스에게 CPU를 할당
CPU 사용 시간이 짧을 경우 한 번에 자신의 job을 처리하고 빠져나갈 수 있어서 효율적
결국 CPU를 기다리는 시간이, 자신이 CPU를 사용하려는 시간과 비슷함.
CPU를 뺏길 때 Process의 context를 save하고, 다시 CPU를 얻었을 때 context로부터 다시 일을 시작할 수 있는 메커니즘 덕분에 가능
지금까지의 ready que는 한 줄.
반면 Multilevel Queue는 여러 줄에서 프로세스들이 기다림.
각 줄마다 우선순위가 존재. 위에 있는 줄일수록 우선순위가 높음.
1) System process
2) Interactive: 사람과 상호작용
4) Batch process: CPU만 오래 사용함
위의 줄이 비어있어야 다음 줄에 우선순위가 할당. 우선순위가 낮은 process는 starvation을 겪을 수 있음
foreground que와 background que 두 개의 큐를 운용
- foreground que: Interactive job(with human) -> 사람과 상호작용하기 때문에 Round Robin을 사용
- background que: batch(no human interactive) -> 어차피 CPU만 오래 사용하는 프로세스. 응답시간이 빠르다고 좋을 이유가 그다지 없기 때문에 context 오버헤드를 줄이기 위해 FCFS를 사용
각 줄은 독립적인 스케줄링 알고리즘을 가짐
1) 어떤 줄(que)을 사용할 것인지
2) 줄(que) 내에서 누구에게 우선권을 줄 것인지
우선순위가 높은 줄이 비어있을 때만 낮은 줄에게 우선순위를 주는 스케줄링 -> 우선순위 낮은 줄이 starvation
이를 막기 위해 각 줄별로 어느 정도는 CPU 이용 시간을 나눠서 줌
ex. 전체 시간의 80%는 우선순위가 높은 프로세스, 나머지 20%는 우선순위가 낮은 프로세스에게 CPU를 할당하는 스케줄링
보통은, 처음 들어오는 프로세스는 우선순위가 가장 높은 que에 주고, 우선순위가 높은 que는 Round Robin에서 quantum time을 짧게 할당. 그리고 우선순위가 낮은 que로 갈수록 RR의 시간을 많이 할당. 그리고 마지막에서는 FCFS.
프로세스가 맨 위의 que에서 할당시간이 끝나면 한 단계 낮은 que로 강등.
CPU burst가 짧은 프로세스는 일찍 도착하여 바로 작업을 끝내고 나갈 수 있음.
CPU burst가 긴 프로세스는 점점 아래 que로 이동하면서 할당 시간을 더 받음.
CPU 사용 시간이 짧은 프로세스에게 빠른 순서 제공. CPU 사용 시간이 긴지 짧은지 예측할 필요도 없음
어떤 job은 CPU가 반드시 실행해야 하는 작업.
Load sharing: CPU가 여러 개가 있으면 Load sharing이 잘 되어야 함. 작업을 잘 나눠줘야 함
Symetric: 모든 CPU들이 대등하기 때문에 각 프로세서가 알아서 결정
Asymmetric: 여러 cpu 중 하나의 CPU가 전체적인 컨트롤을 담당. 데이터의 접근, 공유 등. 나머지는 그 CPU를 따르는 방식
Real-Time job: 데드라인이 존재하는 job. 정해진 시간 안에 반드시 끝내야 함.
CPU 스케쥴링을 할 때에도 real-time job은 반드시 데드라인을 보장해줘야 함. Real-time job에 대해서는 데드라인 안에 꼭 끝낼 수 있도록 미리 스케줄링을 해주는 방식. 오프라인으로 먼저 스케줄링을 해줌
real-time job은 주기적으로 activate 해야하는 period한 경우가 많은데(몇 초에 한 번씩 CPU를 몇 초 씩 실행), 여기에 맞게 데드라인을 보장해줌
반드시 보장되어야 하는 real-time을 Hard real-time systems
데드라인이 존재하기는 하지만, 반드시 지켜야하는 건 아닌 Soft real-time systems
Thread: 하나의 프로세스 안에 여러 개의 수행 단위가 존재
- 쓰레드 구현 방식
1) Local(User level): 운영체제는 쓰레드의 존재를 모름 -> 운영체제는 그냥 프로세스에게 CPU를 줄지 말지
CPU를 주면 어떤 쓰레드가 CPU를 사용할지는 프로세스 내부에서 결정
2) Global(Kerner level): 운영체제가 쓰레드의 존재를 알고 있음 -> 프로세스 스케줄링을 하듯이 어떤 쓰레드에게 CPU를 줄 지 결정
1) Queueing model: 굉장히 이론적인 모델. 도착률과 처리률을 계산해서 계산
2) Implementation(구현) & Measurement(성능 측정): 실제 시스템에 알고리즘을 구현한 뒤 돌려보고 성능을 측정
3) Simulation(모의실험): 실제로 알고리즘을 만들어서 실행하지는 않음.
Simulation에서 input으로 들어갈 데이터 -> trace(실제 프로그램에서 뽑을 수도, 임의로 만들 수도 있음)
단지 하나의 예를 가지고 알고리즘 성능을 판단하지 않음. 실제 시스템에서 CPU burst와 I/O burst의 패턴을 분석하고 이를 바탕으로 성능을 판단하는 게 더 신뢰도가 높음
'Information Technology > OS' 카테고리의 다른 글
[운영체제] Process Synchronization(2) (0) | 2020.02.05 |
---|---|
[운영체제] Process Synchronization(1) (0) | 2020.02.01 |
[운영체제] CPU Scheduling(2) (0) | 2020.01.28 |
[운영체제] CPU Scheduling(1) (0) | 2020.01.26 |
[운영체제] Process Management(2) (0) | 2020.01.26 |