> 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/05_.md).

# 05. 스케쥴링 알고리즘

* **프로세스란?**
  * 메모리에 올려져서 실행 중인 프로그램
  * 코드 이미지(바이너리): 실행 파일, 예: ELF format

    > 작업, task, job이라는 용어와 혼용 됨
  * 응용프로그램 != 프로세스
    * 응용프로그램은 여러 개의 프로세스로 이루어질 수 있음.
    * 하나의 응용프로그램은 여러 개의 프로세스가 상호작용 하면서 실행될 수 있음.

      > 간단한 C/C++ 프로그램을 만든다면 => 하나의 프로세스\
      > 여러 프로그램을 만들어서 서로 통신하면서 프로그램 작성상(IPC 기법)

* **스케쥴러와 프로세스관계**
  * 스케쥴러 : 프로세스 실행을 관리&#x20;

* **스케쥴링 알고리즘**

  > 어느 순서대로 프로세스를 실행시킬까?
  >
  > * 목표
  >   * 시분할 시스템 예: 프로세스 응답 시간을 가능한 짧게
  >   * 멀티 프로그래밍 예: CPU 활용도를 최대로 높혀서 프로세스를 빨리 실행

* **기본 스케쥴링 알고리즘**
  * **FIFO**
    * 프로세스가 저장 매체를 읽는다는지, 프린팅을 한다든지 하는 작업 없이 쭉 CPU를 처음부터 끝까지 사용한다.
    * 가장 간단한 스케쥴러
    * 배치 처리 시스템과 유사
    * FCFS(First Come First Served) 스케쥴러<br>
  * **최단작업우선(SJF: Shortest Job First) 스케쥴러**
    * 가장 프로세스 실행 시간이 짧은 프로세스부터 먼저 실행시키는 알고리즘
    * 장점: 응답 시간이 짧은 프로세스부터 실행되어 FIFO보다는 응답 시간이 짧을 수 있음. 줄줄이 지 되는 경우는 발생하지 않는다.
    * 단점: 단, 실행 시간을 알아야 한다.<br>
  * **우선순위 기반(Priority-Based) 스케쥴러**
    * 프로세스에 우선순위를 메겨둠.
    * 정적 우선순위
      * 프로세스마다, 우선순위를 미리 지정
      * (웹을 1순위로 해 놓는 다는지 그런)
    * 동적 우선순위
      * 스케쥴러가 상황에 따라 우선순위를 동적으로 변경<br>
  * **Round Robin 스케쥴러**
    * 시분할 시스템을 위해 설계된 선점형 스케쥴링의 하나.
    * 시간 단위로 CPU(process) 할당
    * 단위 시간 안에 해당 프로세스가 모두 실행되지 않았을 경우, 다시 준비 queue로 돌아가서, CPU 할당 받을 준비를 다시 함.

* **잠깐!(SJF에 참조)**
  * RealTime OS(RTOS): 응용프로그램 성능 보장을 목표로 하는 OS
    * 정확하게 프로그램 시작, 완료 시간을 보장.
    * Hardware RTOS, Software RTOS
    * 시간에 민감한 컴퓨팅 환경에 적합
  * General Purpose OS(GPOS)
    * 프로세스 실행 시간에 매우 민감하진 않고, 일반적인 목적으로 사용되는OS
    * 예: Windows, Linux등 (일반적인 OS)
