06. 프로세스 상태와 스케쥴러
프로세스 상태
스케쥴링 알고리즘이 어떤 특정 시점에, 어떤 proceess를 실행시킬지 판단해야하는데, 이 때 중요한 요인을 '프로세스의 상태정보' 라고 한다.
프로세스 상태 종류
new: 프로세스 생성 중
ready state: CPU에서 실행 가능 상태(실행 대기 상태)
running state: 현재 CPU에서 실행상태
block state: 특정 이벤트 발생 대기 상태
(예: 프린팅 다 되었다, 저장 매체에서, 파일 읽기 요청)
exit(terminated): 종료(시스템 자원을 풀어줘야하는 경우)
single core proceess 라면, running state는 하나.
프로세스 상태 기반 스케쥴링 알고리즘
프로세스 상태 간 관계
(파일 읽기 요청하면) 프로세스가 Running state => Block상태가 됨(특정 이벤트 대기)
Ready상태에 있는 다른 프로세스를 선택해서 Running state로 바뀜
시분할 시스템과 같은 경우, 응답 시간을 줄이고자 running상태를 ready상태로 바꿈
Block 상태는 Ready상태로 변경이됨
state정보만 으로는 어떤 상태를 골라야할지 스케쥴러는 고민하게 됨
그래서, 새로운 알고리즘을 고안 하게됨!
예: state별로 queue를 둠(ready, running, block)
참고: idle상태 > CPU가 아무것도 실행하지 않는 상태
선점형과 비선점형 스케쥴러
선점형 스케쥴러 (Preemptive Scheduling)
하나의 프로세스가 다른 프로세스 대신에 프로세서(CPU)를 차지할 수 있음
프로세스 running중에 스케쥴러가 이를 중단시키고 다른 프로세스로 교체 가능.
중간에 강제 중단 시키고, 다른 프로세스를 실행하는 것을 구현하는 것이 어려워 후반에 나왔다.
빠른 응답 시간을 요구하는 대화식 시분할 시스템에 사용
선점으로 인한 오버 헤드 초래할 수 있음
선점을 위해 시간 배당을 위한 인터럽트용 타이머 클럭 필요
종류: SRT, 선점 우선순위, RR(Round Robin), 다단계 큐, 등
비선점형 스케쥴러 (Non-Preemptive Scheduling)
하나의 프로세스가 끝나지 않으면, 다른 프로세스는 CPU를 사용할 수 없음
프로세스가 자발적으로 blocking상태로 들어가거나,
실행이 끝났을 때만 다른 프로세스로 교체 가능
종류: FIFO(FCFS), SJF, 우선순위, HRN, 기한부(Deadline) 등
비선점형 스케쥴러 => 선점형 스케쥴러
스케쥴링 알고리즘 조합
스케쥴러 구분(정책, policy)
FIFO, SJF, Priority-Based 는 어떤 프로세스를 먼저 실행 시킬 지에 대한 알고리즘
Round Robin은 시분할 시스템을 위한 기본 알고리즘
조합 예시
프로세스 실행: 정적 우선순위
각 프로세스 스테이트(상태) 고려
CPU 선점: 시분할시스템(2초단위)
선점형
여러 알고리즘을 조합하여, 사용자가 편리할 수 있도록 개선 해야 한다.
최신에는 훨씬 더 복잡한 알고리즘을 조합하지만, 현재는 위와 같은 사례를 학습.
가볍게 듣기
랙? 마우스/ 키보드 반응이 느린 경우?
스케쥴러가 해결해야하는 이슈! 다양하고 복잡한 스케쥴링 알고리즘 필요
리눅스 스케쥴러: O(1), CFS와 같이 다양한 방식으로 변경시도 중
인터렉티브, IO, CPU 중심 프로세스로 미리 구분할 수 있다면 보다 개선된 스케쥴링이 가능함.
프로세스 수가 많이 띄워져 있을수록, 실행 시간이 길어진다.
Last updated