- 프로세스 상태: 상태 단위(New, Running, Waiting, Ready, Terminated)별로 큐를 사용
프로세스
스케줄링
- CPU 스케줄링: 프로세스에 CPU를 할당하는 방법 → CPU 사용을 효율적으로 하기 위해서 time sharing 방법 적용
"CPU를 사용할 다음 프로세스를 여러 개의 프로세스 가운데에서 잘 고르자!"
- Job, Ready, Wait 큐
- 리눅스의 프로세스 상태: (1). TASKRUNNING = Ready + Running (2). TASK(UN)INTERRUPTIBLE = Waiting
- 모바일 시스템의 멀티태스킹: (1). 여러 개 중 1개 프로세스만 실행, 나머지 지연 (2). iOS: 싱글 foregound 프로세스 - 유저 인터페이스로 컨트롤, multiple background 프로세스 - 메모리 상의 작동, 실행 중이지만 한계(단일하고 짧은 태스크, 알림 받기 등만 가능)가 있는 상태 (3). 안드로이드: foreground, background 모두 제한이 있는 상태로 실행.
CPU, I/O Burst
- Burst: "한 번"에 전송되는 데이터 블록
- 컴퓨터는 CPU, I/O 사이를 반복하면서 변경되는 구조(alternate). CPU burst - I/O busrt 반복하는 사이클 구조
- CPU burst가 먼저 시작하는 형태. I/O burst에서는 CPU가 기다리고 있으므로 보다 효율적으로 관리해야 함
I/O burst에서 유휴 시간을 가지는 CPU를 잘 활용하는 게 CPU 스케줄링의 주요한 이슈!
-
특정 사이클 내에서 CPU 또는 I/O 둘 중 어떤 분야가 더 많은 부분을 차지하는지 → I/O bound(intensive) process, CPU-bound(intensive) process로 분리
-
짧은 텀의 CPU burst가 많고, 긴 텀의 CPU burst는 적다는 일반적 통계
-
데이터의 응답 속도가 빨라짐에 따라서 짧은 텀의 CPU burst 또한 늘어나고 있음
스케줄러
1. CPU 스케줄러
- Short term: 다음에 실행될 프로세스를 골라서 CPU 할당 (빈번하게 호출되므로 속도가 빨라야 함)
순서를 어떻게 할당하는가에 따라서 CPU 활용률이 바뀐다!
- running → waiting
- running → ready: 인터럽트 발생
- waiting → ready: I/O 작업 완료 시
- terminates
네 가지의 프로세스 변경 스케줄링 중 어떤 것을 선택하느냐에 따라서 스케줄러의 종류가 다르게 불린다!
- Non-preemptive 비선점형 스케줄러: running → waiting / terminates. 프로세스가 실행 중이라면 다른 어떤 것도 이 프로세스를 방해할 수 없음. OS는 실행 중인 프로세스를 컨트롤할 수 없음. OS가 overwrite할 수 있으므로 거의 사용되지 않는 스케줄러
- Preemptive 선점형 스케줄러: running → waiting / running → ready / waiting → ready / terminates. 실행 중인 프로세스를 통제하거나 인터럽트할 수 있음.
- Synchronization 동기화: 선점형 스케줄러의 주요 이슈 중 하나. 고유 데이터에 접근 가능할 수 있기 때문. 커널 모드 상의 preemption 이슈. OS 주요 행위가 일어날 때 인터럽트 발생 가능.
2. Job 스케줄러
- Long term: ready 큐에 들어갈 프로세스를 고르는 스케줄러 (드물게 호출되므로 느릴 수도 있음, 멀티 프로그래밍의 정도를 통제함) → CPU, I/O bound 프로세스 간을 적절히 조정
- E.g.) Apache Hadoop YARN(분산 빅데이터 처리 프레임워크): 글로벌 리소스 매니저, 노드 매니저, 어플리케이션 마스터 → 클라이언트가 리소스 매니저에게 요청, 리소스 매니저가 작업량을 연결된 노드 매니저에게 전달 및 분배
3. Midium term 스케줄러
- 멀티 프로그래밍의 정도를 낮추기 위해 도입되는 스케줄러.
- 메모리가 충분하지 않을 때(주소 공간에 한계가 있을 때) 작업을 부분적으로 수행함(메인 메모리 내용을 세컨더리 디스크로 옮기는 swap-out/in 수행)
스케줄링 기준
- CPU utilization: CPU를 가능한 한 바쁘게. Max
- Throughput: 특정 시간 내 처리한 작업량. Max
- Turnaround time: 특정 프로세스 생성 후 모든 작업을 완료(생성, ready, waiting, terminates)할 때까지 걸리는 시간 (waiting time 포함). Min
- Waiting time: ready 큐에 있는 시간. Min
- Response time: 첫 번째 응답이 오는 데까지 걸리는 시간(인터럽트 발생 후 ISR가 처리되기까지 걸리는 시간). 요청(request) 전달 시점 ~ 도착 시점까지 걸리는 시간. Min
단일 스케줄러가 이 모든 조건을 만족하기란 거의 불가능하다! 시스템에 따라서 선택과 집중하자.