프로세스 스케줄링 (Process Scheduling)
프로세스가 실제로 시스템에서 어떻게 스케줄링이 되어 자원을 할당 받는지
1. 스케줄링을 하는 이유 ?
다중 프로그래밍(Multi-programming)이란,
여러 개의 프로세스가 시스템 내에 존재하는 것입니다.
따라서 자원을 할당 할 프로세스를 선택해야하는데요,
이 때 사용하는 것이 스케줄링입니다.
자원 관리에는 2가지가 있습니다.
- 시간 분할 (time sharing) 관리
- 공간 분할 (spacing sharing) 관리
- 시간 분할 관리란 ?
- 하나의 자원을 여러 스레드들이 번갈아 가며 사용하는 것입니다.프로세서(CPU)는 한 번에 프로세스 하나만 사용할 수 있기 때문이죵
- 따라서 프로세스 스케줄링(process scheduling)을 통해 프로세서 사용시간을 프로세스들에게 분배해줘야합니다.
- 예를 들면, 프로세서가 있습니다
- 공간 분할 관리란?
- 하나의 자원을 분할하여 동시에 사용하는 것입니다.
- 예를 들면, 메모리가 있습니다.
- 메모리는 프로세스들이 공간을 나누어 동시에 사용하기 때문이죵
2. 스케줄링(scheduling)의 목적
그럼 스케줄링을 하는 이유는 뭘까요 ?
바로, 시스템의 성능(performance)을 향상시키기 위해서입니다.
그런데 여기서 성능은 무엇을 기준으로 확인할 수 있는 것일까요 ?
여러 지표가 있지만 그 중 3가지를 먼저 보겠습니다.
- 응답시간 (response time)
- 작업 요청(submission)으로부터 응답을 받을 때까지의 시간
- 주로 interacitve system(대화형 시스템), real-time system(제한된 시간 내에 답을 줘야하는 시스템)에서 우선시 되는 성능 지표 (사용자 지향적임)
- 작업 처리량 (throughput)
- 단위 시간 동안 완료된 작업의 수
- 주로 batch system(일괄처리 시스템)에서 우선시 되는 성능 지표(시스템 지향적임)
- 자원 활용도 (resource utilization)
- 주어진 시간(Tc)동안 자원이 활용된 시간 (Tr) == (Tr/Tc)
- 주로 비싼 장비 사용 시ㅎㅋ, 최대한 뽕 뽑아야하니까 우선시 되는 성능 지표
이 외에도 공평성(fairness), 실행 대기 방지(무기한 대기 방지), 예측 가능성(predictability, 적절한 시간안에 응답을 보장하는가) 등등이 있습니다.
3. 스케줄링에서 사용하는 용어
대기시간, 응답시간, 실행시간, 반환시간
- 대기 시간은 프로세스가 도착한 이후 ~ 실행이 시작될 때까지의 시간입니다.
- 응답 시간은 프로세스가 도착한 이후 ~ 첫번째 출력 (응답)이 있을 때까지의 시간입니다.
- 실행 시간은 프로세스가 실행된 이후 ~ 실행이 종료될 때까지의 시간입니다.
- 반환 시간은 프로세스가 도착한 이후 ~ 실행이 종료될 때까지의 시간입니다.
그림으로 보시죵~!
4. 스케줄링 기준 (Criteria)
스케줄링 기법이 고려하는 항목들
- 프로세스(process)의 특성
- I/O-bounded(CPU burst time보다 I/O burst time이 긴 경우) or computed-bounded(CPU burst time이 I/O burst time보다 긴 경우)
- 시스템 특성
- Batch system or interative system -> 특성에 따라 목적이 달라지므로
- 프로세스의 긴급성(urgency)
- Hard- or soft- real time, non-real time systems
- 프로세스 우선순위(priority)
- 프로세스 총 실행 시간 (total service time)
1) CPU burst와 I/O burst는 뭔가요?
- 프로세스 수행은 CPU 사용과 I/O를 요청한 다음 기다리는 시간으로 이루어져 있습니다
- 즉, 프로세스 수행 = CPU 사용 + I/O 대기
이 때, CPU를 사용하는 것을 CPU burst라고 하며, CPU burst에 소요되는 시간을 CPU burst time이라고 합니다.
이와 동일하게, I/O를 요청한 다음 기다리는 것을 I/O burst라고 하며, I/O burst에 소요되는 시간을 I/O burst time이라고 합니다.
5. 스케줄링의 단계 (Level)
발생하는 빈도 및 할당 자원에 따른 구분
- Long-term scheduling(장기 스케줄링)
- 가끔 일어나는 것
- Job scheduling이 이에 속함
- Mid-term scheduling (중기 스케줄링)
- 종종 일어나는 것
- Memory allocation이 이에 속함
- Short-term scheduling(단기 스케줄링)
- 자주 일어나는 것
- Process scheduling이 이에 속함
1) Long-term Scheduling
긴 시간에 한 번씩 일어나는 스케줄링
- Job scheduling
- 여러 Job 중 시스템에 제출 할 (Kernel에 등록 할) 작업(Job) 결정
- Job이 커널에 등록되면 ==> 프로세스가 됨 !
- Admission scheduling, High-level scheduling
- 다중프로그래밍 정도(degree) 조절
- 다중프로그래밍 정도(multi-programming degree)란?
- 시스템 내의 프로세스 수
- 따라서 시스템 내의 프로세스 수를 조절하는 것임
- 이는 성능을 결정하는데 중요함
- 다중프로그래밍 정도(multi-programming degree)란?
- I/O-bounded와 compute-bounded 프로세스들을 잘 섞어서 선택해야함
- 이유
- 프로세스 수행은 CPU와 I/O device가 있음. 이 때 coumpute-bounded process만 선택하게 되면, CPU만 일하고 I/O device는 놀게 됨. 반대로 I/O-bounded process만 선택하게 되면 I/O device만 일하고 CPU는 놀게 됨. 이는 상당히 비효율적임. 따라서 둘을 잘 섞어야함
- 이유
- 시분할 시스템(time-sharing system)에서는 모든 작업을 시스템에 등록함.
- 이유
- 어차피 시간을 나누어 사용하므로 상대적으로 다른 시스템에 비해 long-term scheduling이 덜 중요함. 불필요까지는 아니고.. 왜냐하면 프로세스를 너무 많이 올리면 전반적으로 느려지니까.
- 이유
- 여러 Job 중 시스템에 제출 할 (Kernel에 등록 할) 작업(Job) 결정
2) Mid-term Scheduling
- 메모리 할당 결정(memory allocation)
- Job-scheduling 보다는 더 자주 일어나서 mid-term scheduling임.
- Intermediate-level scheduling
- Swapping (swap-in/swap-out) : 메모리의 관리를 위해 사용되는 기법
- swap-in : 주 기억장치(RAM)으로 불러오는 과정
- swap-out : 보조 기억장치로 내보내는 과정
3) Short-term Scheduling
- Process scheduling
- Low-level scheduling
- 프로세서(processor, CPU)를 할당할 프로세스(process)를 결정
- Processor scheduler, dispatcher
- 가장 빈번하게 발생함
- Interrupt, block(I/O), time-out, Etc ..
- 가장 빈번하게 발생하기 때문에 얘가 느리면 시스템 전반적으로 느려지게 되므로 매우 빨라야 함
- 예를 들어, average CPU burst = 100ms 이고 scheduling decision = 10ms이면 오버헤드는 10ms인데, 총 소요시간인 110ms에서 오버헤드가 차지하는 비율이 9%나 된다.
4) 총 정리 그림
6. 스케줄링 정책 (Policy)
- 선점 vs 비선점
- Preemptive scheduling, Non-preemptive scheduling
- 우선순위
- Priority
1) Preemptive / Non-preemptive scheduling
선점 : 누가 내 것을 빼앗을 수 있다.
비선점 : 누가 내 것을 뺏을 수 없다.
(1) Preemptive scheduling
- 타의에 의해 자원을 빼앗길 수 있음
- ex) 할당 시간 종료, 우선순위가 높은 프로세스 등장
- context switch overhead가 큼
- 왜냐하면, 프로세스가 자주 바뀌기 때문
- Time-sharing system, real-time system등에 적합
- 왜냐하면, 응답성이 높아지기 때문임.
(2) Non-preemptive scheduling
- 할당 받을 자원을 스스로 반납할 때까지 사용
- ex) system call, I/O, Etc..
- Context switch overhead가 적음
- 왜냐하면, 뺏을 수 없으므로 프로세스가 바뀌지 않음
- 잦은 우선순위 역전
- 우선 순위가 높은 프로세스를 먼저 처리할 수 없는 현상이 발생함
- 평균 응답 시간 증가
- 다른 프로세스들의 응답시간이 증가하게 됨
- 왜냐하면, 할당을 반납할 때까지 기다려야하기 때문임
- 다른 프로세스들의 응답시간이 증가하게 됨
2) Priority(우선순위)
프로세스의 중요도
(1) Static priority (정적 우선순위)
- 프로세스 생성 시 결정된 priority가 유지 됨
- 구현이 쉽고, overhead가 적음
- 시스템 환경 변화에 대한 대응이 어려움
(2) Dynamic priority(동적 우선순위)
- 프로세스의 상태 변화에 따라 priority 변경
- 구현이 복잡, priority 재계산 overhead가 큼
- 시스템 환경 변화에 유연한 대응 가능
'CS > OS' 카테고리의 다른 글
5. 프로세스 스케줄링 (3) (0) | 2021.05.10 |
---|---|
5. 프로세스 스케줄링 (2) (0) | 2021.05.10 |
4. 스레드 관리 (0) | 2021.05.09 |
3. 프로세스 관리(2) (0) | 2021.05.09 |
3. 프로세스 관리(1) (0) | 2021.03.14 |