##본 포스팅은 운영체제 강의 '이화여자대학교 운영체제 강의 - 반효경 교수님'를 보고 정리한 내용입니다.
Multiple-Processor Scheduling
CPU가 여러개인 경우, 병행 제어를 해야하기 때문에 스케줄링은 더욱 복잡해진다.
Homogeneous processor인 경우 Queue에 한줄러 세워서 각 프로세서가 알아서 꺼내가게 할 수 있음 반드시 특정 프로세서를 이용해야하는 프로세스가 있는 경우엔 문제가 복잡해짐
Load sharing CPU가 골고루 일하게 하는 것이 중요한데, 일부 프로세서에 job이 몰리지 않도록 적절히 공유하는 메커니즘을 사용 별개의 큐를 두는 방법 vs 공동 큐를 사용하는 방법
Symmetric Multiprocessing(SMP) 각 프로세서가 각자 알아서 스케줄링 결정
Asymmetric multiprocessing 하나의 프로세서가 대장이 돼서 시스템 데이터의 접근과 공유를 책임짐
등의 문제와 복잡성이 있다. 중요하진 않고, 이런 것이 있다~라고만 알아두면 된다.
Real-Time Scheduling
Real-Time Scheduling은 우리가 사용하는 운영체제에서의 스케쥴링은 아니다. Real-time job은 정해진 데드라인이 있어서, 그 시간 내에 반드시 처리해야하는 작업이다.
Real-Time Scheduling은 Dead Line이라는 시간이 추가되며, 이것을 만족하는 것이 중점이다.
Hard real-time scheduling 미리 프로세스들에 대해 off-line으로 큐에 프로세스가 오는 도착 시간을 미리 알고, 정해진 시간 안에 반드시 끝내도록 스케줄링 해야하는 것
Soft real-time scheduling 어기면 큰일난다!는 아니고, 작은 불편정도가 있는 것 - 동영상을 스트리밍해야한다거나, 데드라인이 있지만 큰일은 나지 않는 경우가 있음 일반 프로세스에 비해 높은 priority를 갖도록 해야 함 (전담 시스템을 두진 않지만)
Thread-Scheduling
하나의 프로세스 안에 CPU 수행 단위가 여러개 있는 것을 Thread라고 한다.
Thread를 구현하는 방법은 두개가 있는데, - User level thread : 운영체제는 스레드의 존재를 모르고, 사용자 프로세스 본인이 스레드를 여러 개 둔 경우 - Kernel level thread : 운영체제는 스레드의 존재를 앎
Local Scheduling User level thread의 경우 CPU 스케줄러가 CPU를 누구한테 줄지 결정하지 못하고, 그냥 프로세스에게 주는 것이고 프로세스가 CPU를 받았을 때 내부적으로 알아서 결정하는 것
Global Scheduling Kernel level thread의 경우 일반 프로세스와 마찬가지로 커널의 단기 스케줄러가 어떤 thread를 스케줄링할 지 결정
Algorithm Evaluation
CPU 스케줄링에서는 다양한 알고리즘과 평가 척도가 있는데, 이러한 평가 척도는 다음과 같은 방법들로 평가될 수 있다.
Queueing models 복잡한 수식을 이용하여 계산하는 방법(이론적인 방법) 출처 : 강의 캡쳐
확률 분포로 주어지는 arrival rate, service rate 등을 통해 각종 perfomance index 값을 계산 (옛날 방식)
Implementation(구현) & Measurement(성능 측정) 실제 시스템에 알고리즘을 구현하여 실제 작업에 대해서 성능을 측정하고 비교하는 방법 (어려움)
Simulation(모의 실현) 실제 시스템을 구현하는 것이 아니라, 가상으로 돌려보는 것 주어진 작업인 trace(신뢰성 있는 작업, 실제 작업과 유사해야함)를 입력하여 어떤 것이 더 좋은지 모의 실험을 하는 방법