프로세스 (process)
- 실행 중인 프로그램을 프로세스라고 함
- 프로세스: 메모리에 올려져서, 실행 중인 프로그램
- 코드 이미지(바이너리): 실행 파일, 예:ELF format
프로세스는 작업, task, job라는 용어와 혼용
스케쥴링 알고리즘
- 여러 개의 프로세스가 있는데 어느 시점에서 어떤 프로세스를 실행 및 교체를 할지 결정하는가를 뜻한다.
- 목표
- 시분할 시스템 예: 프로세스 응답 시간 가능한 짧게
- 멀티 프로그래밍 예: CPU 활용도를 최대로 높혀, 프로세스를 빨리 실행
1. FIFO 스케쥴러
프로세스가 저장매체를 읽는 다든지, 프린팅을 한다든지 하는 작업 없이, 쭉 CPU를 처음부터 끝까지 사용한다.
- 배치 처리 시스템과 유사
- FCFS (First Come First Served) 스케쥴러 (CPU가 처리)
프로세서 = CPU (헷갈리지 말자)
2. 최단 작업 우선(SJF) 스케쥴러
- SJF(Shortest Job First) 스케쥴러
- 가장 프로세스 실행시간이 짧은 프로세스부터 먼저 실행을 시키는 알고리즘.
- 프로세스 딜레이가 줄겠지만, 모든 실행시간을 다 알아야한다.
기타
3. 우선순위 기반 스케쥴러
- Priority-Based스케쥴러
- 정적 우선순위
- 프로세스마다 우선순위를 미리 지정
예) 웹브라우저를 자주 쓰면 우선순위 높히고, 아닌건 우선순위 낮히고.
- 동적 우선순위
- 스케쥴러가 상황에 따라 우선순위를 동적으로 변경
예) 오래걸릴 거 같은 프로세스를 우선순위를 높히는, 그 반대의 경우 등.
4. Round Robin 스케쥴러
- 시분할 시스템을 기본으로.
- 동일한 시간을 모두 주고, 완료 못 한건 다시 뒤로 (Ready Queue)로 가서 대기.
중간 정리
멀티 프로그래밍과 Wait
- 멀티 프로그래밍: CPU 활용도를 극대화 하는 스케쥴링 알고리즘
- Wait: 간단히 저장매체로부터 파일 읽기를 기다리는 시간으로 가정
- Program을 프로세스라고 보자
이렇게 100% 활용하기 위해 스케쥴러가 우선순위 결정해야 한다.
그 때 필요한 요소가 바로 프로세스 상태 정보
프로세스 상태
- running state: 현재 CPU에서 실행 상태
- ready state: CPU에서 실행 가능 상태(실행 대기 상태)
- block state: 특정 이벤트 발생 대기 상태, 발생 전까지는 계속 대기 상태(예: 프린팅이 다 되었다!)
프로세스 상태간 관계
- 3가지의 상태: ready, running, block states
Process1, Process2, Process3이 ready에 있다면, 무엇을 running시켜야 하는지 결정할 때, 스케쥴러 입장에서 새로운 정책이 필요할 때가 된다.
그래서 어떤 스케쥴링 알고리즘을 쓰냐에 따라 CPU 활용도가 달라진다.
CPU idle 상태: CPU가 아무것도 실행하지 않는 상태
선점형과 비선점형 스케쥴러
- 선점형 스케쥴러 (Preemptive Scheduling)
: 하나의 프로세스가 다른 프로세스 대신에 프로세서(CPU)를 차지할 수 있음
- 비선점형 스케쥴러 (Non-Preemptive Scheduling)
: 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없음
선점형과 비선점형 스케쥴러 차이
- 선점형: 프로세스 running 중에 스케쥴러가 이를 중단시키고, 다른 프로세스로 교체 가능.
- 비선점형: 프로세스가 자발적으로 blocking 상태로 들어가거나, 실행이 끝났을 때만 (end), 다른 프로세스로 교체 가능.
예시:
스케쥴러 구분 (정책, policy)
- FIFO(FCFS), SJF, Priority-based는 어떤 프로세스를 먼저 실행시킬지에 대한 알고리즘.
(비선점형 스케쥴러에 가깝다)
- RoundRobind은 시분할 시스템을 위한 기본 알고리즘.(선점형 스케쥴러)
쉬어가기
- 랙?: 마우스/키보드 반응이 느린 경우?
- 특정 프로그램(게임)이 혼자 CPU를 많이 차지하고 있어서 마우스/키보드/GUI(화면/창) 등이 안 먹힌다.