Os_process_scheduling
CPU Scheduling
-
발생 경우
- 프로세스가 running -> waiting으로 전환 - Nonpreemptive
- 프로세스가 running -> ready로 전환 - Preemptive
- 프로세스가 waiting -> ready로 전환 - Preemptive
- 프로세스 종료 - Nonpreemptive
- Preemptive
- 현재 CPU를 할당받은 프로세스가 다른 프로세스에 자원을 내줄 수 있음
- 문제: race condition - 데이터를 공유하는 경우, 커널모드에서 preemption 발생, OS의 중요 작업중 인터럽트 발생
- Nonpreemptive
- CPU 자원을 할당받은 프로세스가 직접 자원을 반납하기 전까지 계속 자원 점유
Scheduling Criteria
- CPU Utilization: CPU를 idle 상태로 두지 않는 것. (Maximize)
- Throughput: 단위시간 동안 끝낼 수 있는 프로세스 수 (Maximize)
- Turnaround time: 특정 프로세스 실행까지 걸리는 시간 (Minimize)
- Waiting time: 프로세스가 ready queue에서 대기한 시간 (Minimize)
- Response time: 프로세스 실행 요청 생성 후 첫 response가 올때까지 걸린 시간 (Minimize)
FCFS Scheduling
- First Come First Served
- 프로세스 도착 순서대로 CPU 자원 할당.
- 문제점: convoy effect
- 실행시간이 짧은 프로세스가 긴 프로세스에 막혀 대기시간이 길어질 수 있다
- 예: I/O bound process가 많은 경우
SJF Scheduling
- Shortest Job Fisrt
- 실행시간(CPU Burst time)이 짧은 프로세스를 먼저 실행한다
- Optimal: 평균 대기시간이 가장 짧다
- 문제점: 각각의 프로세스들의 실행시간을 알아내기 어렵다
SRTF Scheduling
- Shortest Remaining Time First
- SJF의 Preemptive 버전
- 단위시간마다 각 프로세스들의 작업 완료까지 남은 시간을 계산하여 남은시간이 가장 짧은 프로세스를 실행한다
Priority Scheduling
- 각각의 프로세스에 우선순위 부여
- SJF = CPU Burst time이 짧을수록 높은 우선순위
- 문제점: Starvation
- 우선순위가 낮은 프로세스가 높은 프로세스에 밀려 무한히 대기하는 현상
- 해결: Aging - 대기한 시간에 따라 우선순위 상향 조정
Round Robin
- 각각의 프로세스에 실행시간(Time Quantum) 부여
- 프로세스 실행중 Time Quantum이 다 지나면 다른 프로세스에 의해 preemption되고 ready queue의 맨 뒤로 옮겨간다
- Starvation 문제 해결
- 매 quantum마다 timer interrupt 발생
- 성능
- q가 크면: FCFS와 유사(비효율적)
- q가 작으면: response time이 빨라지나 context switching overhead가 커진다
- SJF에 비해 turnaround time이 길지만 response가 더 뛰어나다
- q 설정: context switching에 걸리는 시간보다 길게 설정
Multilevel Queue
- Ready Queue를 여러 큐로 나누는 방식
- foreground: interactive processes (Round Robin)
- background: batch processes (FCFS)
-
우선순위
- System processes
- interactive processes
- interactive editing processes
- batch processes
- student processess
Multilevel Feedback Queue
- 프로세스가 현재 큐에서 다른 큐로 이동 가능
- 큐별로 다른 quantum 적용 가능
- 한 큐에서 quantum 내에 작업이 끝나지 않았으면 다음 큐로 이동하는 방식
Multiple Processor Scheduling
- Asymmetric Multiprocessing: 한 프로세서만 시스템 데이터 구조에 접근하여 데이터 공유의 필요성을 줄인다
- Symmetric Multiprocessing: 각각의 프로세서가 각자 스케줄링을 실행하고 모든 프로세스들이 하나의 ready queue를 공유하거나 각자 다른 ready queue를 갖는 구조
- Affinity: 특정 코어를 지정하여 task를 수행하도록 하는 설계
- NUMA
- Non Uniform Memory Access
- CPU에 묶여있는 메모리에 대해서는 접근 속도가 빠르고, 다른 CPU에 묶여있는 메모리에 대해서는 접근 속도가 느리다
- Affinity를 고려하여 메모리 배치
- Load Balancing
- 작업을 여러 프로세서에 고르게 분산시킨다
- Push migration: 주기적으로 프로세서들의 작업량을 확인하여 작업이 많은 프로세서의 작업을 작업이 적은 프로세서로 옮긴다
- Pull migration: 작업이 적은 프로세서가 작업이 많은 프로세서의 작업을 가져온다
Multithread Multicore System
- Memory stall: 프로세서가 요청한 데이터가 메모리로부터 도착하기까지 기다리는 시간
- Multithread Processor 구조: 2개 이상의 하드웨어 쓰레드가 각각의 코어에 할당되어 하나의 쓰레드에서 memory stall 발생시 다른 쓰레드로 전환하여 작업 처리