> For the complete documentation index, see [llms.txt](https://minhee0327.gitbook.io/mini-til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://minhee0327.gitbook.io/mini-til/computer-science/operatingsystem/06_.md).

# 06. 프로세스 상태와 스케쥴러

* 프로세스 상태
  * 스케쥴링 알고리즘이 어떤 특정 시점에, 어떤 proceess를 실행시킬지 판단해야하는데, 이 때 중요한 요인을 '프로세스의 상태정보' 라고 한다.
  * 프로세스 상태 종류
    * new: 프로세스 생성 중
    * **ready state:** CPU에서 실행 가능 상태(실행 대기 상태)
    * **running state:** 현재 CPU에서 실행상태
    * **block state:** 특정 이벤트 발생 대기 상태 &#x20;

      (예: 프린팅 다 되었다, 저장 매체에서, 파일 읽기 요청)
    * exit(terminated): 종료(시스템 자원을 풀어줘야하는 경우)
  * single core proceess 라면, running state는 하나.<br>

* 프로세스 상태 기반 스케쥴링 알고리즘
  * 프로세스 상태 간 관계
    * (파일 읽기 요청하면) 프로세스가 Running state => Block상태가 됨(특정 이벤트 대기)
    * Ready상태에 있는 다른 프로세스를 선택해서 Running state로 바뀜
    * 시분할 시스템과 같은 경우, 응답 시간을 줄이고자 running상태를 ready상태로 바꿈
    * Block 상태는 Ready상태로 변경이됨
  * state정보만 으로는 어떤 상태를 골라야할지 스케쥴러는 고민하게 됨 &#x20;

    그래서, 새로운 알고리즘을 고안 하게됨!
  * 예: 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은 시분할 시스템을 위한 기본 알고리즘
  * 조합 예시
    * 프로세스 실행: 정적 우선순위&#x20;
    * 각 프로세스 스테이트(상태) 고려&#x20;
    * CPU 선점: 시분할시스템(2초단위)
    * 선점형
  * 여러 알고리즘을 조합하여, 사용자가 편리할 수 있도록 개선 해야 한다.
  * 최신에는 훨씬 더 복잡한 알고리즘을 조합하지만, 현재는 위와 같은 사례를 학습.

* 가볍게 듣기
  * 랙? 마우스/ 키보드 반응이 느린 경우?

    > 스케쥴러가 해결해야하는 이슈! 다양하고 복잡한 스케쥴링 알고리즘 필요
  * 리눅스 스케쥴러: O(1), CFS와 같이 다양한 방식으로 변경시도 중
    * 인터렉티브, IO, CPU 중심 프로세스로 미리 구분할 수 있다면 보다 개선된 스케쥴링이 가능함. &#x20;
  * 프로세스 수가 많이 띄워져 있을수록, 실행 시간이 길어진다.
