> For the complete documentation index, see [llms.txt](https://krjaeh0.gitbook.io/j-log/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://krjaeh0.gitbook.io/j-log/programming/cs_basics/os_memory/concurrency-and-synchronization/processscheduling.md).

# ProcessScheduling

## 프로세스 스케줄링 종류

* 비선점(Non-Preemptive): 프로세스 종료까지 다른 프로세스가 CPU 점유 불가능
* 선점(Preemptive): 다른 프로세스가 CPU 요청 시 실행중인 프로세스를 중단

## 비선점(Non-Preemptive) 스케줄링

### Priority (우선순위 방식)

{% stepper %}
{% step %}

### 특징

* 각 프로세스에 우선순위를 부여, 가장 높은 프로세스가 먼저 실행된다.
* 일반적으로 숫자가 작을수록 높은 우선순위를 의미한다. (0이 최고 우선순위)
* 시스템이 간단해 비선점형, 선점형 둘 다 구현 가능
  {% endstep %}

{% step %}

### 장점

* 긴급하거나 중요한 작업을 먼저 처리할 수 있다.
* 시스템에 유연성을 제공한다.
  {% endstep %}

{% step %}

### 단점

* 기아(Starvation, 낮은 우선순위를 가진 프로세스가 계속해서 CPU를 할당 받지 못함)가 발생할 수 있다.
  {% endstep %}
  {% endstepper %}

### Deadline

{% stepper %}
{% step %}

### 특징

* 실시간 시스템(Real-Time Systems)에서 매우 중요하게 사용되는 스케줄링 기법
* 각 프로세스가 정해진 시간(마감 시간, Deadline) 안에 반드시 완료되어야 하는 상황에 유리하다.
  {% endstep %}

{% step %}

### 세부 방식

* EDF (Earliest Deadline First): 가장 이른 마감시간을 가진 작업부터 우선 실행
* RM (Rate Monotonic Scheduling): 작업 주기가 짧을수록 높은 우선순위 부여
  {% endstep %}

{% step %}

### 장점

* 실시간 시스템의 시간 제약을 만족시키는 데 필수
* 시간에 민감한 작업 처리에 매우 적합
  {% endstep %}

{% step %}

### 단점

* 일반적인 운영체제(OS)에서는 잘 쓰이지 않는다.
* Deadline 기반 판단만으로 작업의 중요도나 실행시간을 충분히 고려하기 어렵다.
  {% endstep %}
  {% endstepper %}

### FIFO

{% stepper %}
{% step %}

### 특징

* 먼저 도착한 프로세스를 먼저 실행
* 프로세스들이 큐(Queue)에 들어오고, 도착 순서대로 CPU를 할당 받는다.
* 구현이 간단하고 직관적이다.
  {% endstep %}

{% step %}

### 주요 성능 지표

* 대기 시간 (Waiting Time): 실행 전까지 기다린 시간
* 반환 시간 (Turnaround Time): 도착부터 종료까지 걸린 전체 시간
  {% endstep %}

{% step %}

### 장점

* 구현이 간단해 운영체제 교육용으로 자주 사용된다.
* 시스템 구조를 단순화 시킬 수 있다.
  {% endstep %}

{% step %}

### 단점

* 평균 대기 시간이 길어질 수 있으며, 특히 실행 시간이 긴 프로세스가 먼저 오면 더 심각해진다.
* 전체 시스템의 반응성이 떨어진다.
* 공정성이 떨어진다.
  {% endstep %}
  {% endstepper %}

### SJF

{% stepper %}
{% step %}

### 특징

* 가장 짧은 작업(실행 시간)을 가진 프로세스를 먼저 실행
* 평균 대기 시간과 평균 반환 시간을 최소화 하는 이상적인 알고리즘
* 평균 대기 시간, 평균 반환 시간이 가장 낮은 스케줄링 방식이다. (단, 정확한 실행 시간(버스트 타임)을 알아야 함)
  {% endstep %}

{% step %}

### 장점

* 이론적으로 최적의 평균 대기 시간
* 짧은 응답 시간을 기대할 수 있다.
  {% endstep %}

{% step %}

### 단점

* 실행 시간 예측이 어렵다.
* 긴 작업이 계속 뒤로 밀려 기아가 발생할 수 있다.
  {% endstep %}
  {% endstepper %}

### HRN

{% stepper %}
{% step %}

### 특징

* 대기 시간과 실행 시간을 고려, 우선순위를 동적으로 계산하여 응답 비율이 가장 높은 프로세스부터 실행
* 짧은 작업은 빨리 처리하고, 긴 작업도 오래 기다렸다면 우선순위를 올려 실행되도록 한다.
* SJF의 기아 문제를 해결하면서도 평균 대기 시간을 줄이는 전략적인 방식
  {% endstep %}

{% step %}

### 장점

* 기아 문제를 해결
* SJF 보다 현실적이고 공정한 방식
* 평균 대기 시간도 낮음
  {% endstep %}

{% step %}

### 단점

* 매 스케줄링 시점마다 응답 비율을 다시 계산해야 해서 복잡성이 높아진다.
  {% endstep %}
  {% endstepper %}

## 선점(Preemptive) 스케줄링

### Round Robin, RR

{% stepper %}
{% step %}

### 특징

* 시간 할당(Time Quantum)을 정해두고, 준비 큐에 있는 모든 프로세스를 순환(Round Robin) 방식으로 실행
* 각 프로세스는 동등한 기회로 CPU를 사용한다.
* 프로세스가 주어진 시간만큼 CPU를 사용하고도 끝나지 않으면, 큐의 뒤로 이동하고 다음 프로세스가 실행된다.
* 빠른 응답 시간이 요구되는 시분할 시스템(Time-sharing System)에 적합하다.
  {% endstep %}

{% step %}

### 단점

* 너무 짧은 시간 할당되면 문맥 교환(Context Switching)이 너무 자주 일어나 성능이 떨어진다.
  {% endstep %}
  {% endstepper %}

### SRT

{% stepper %}
{% step %}

### 특징

* SJF의 선점형 버전, 남은 실행 시간이 가장 짧은 프로세스를 항상 선택하는 방식
  {% endstep %}

{% step %}

### 장점

* 평균 대기 시간, 평균 반환 시간이 매우 우수
* 실시간 처리 능력이 매우 뛰어남
  {% endstep %}

{% step %}

### 단점

* SJF 와 마찬가지로 기아 문제 발생할 수 있다.
* 자주 선점하면 CPU 자원을 문맥 교환에 낭비하게 된다.
* 보통 과거 실행 통계로 프로세스 실행 시간은 예측한다.
  {% endstep %}
  {% endstepper %}

### MQ

{% stepper %}
{% step %}

### 특징

* 다단계 큐 스케줄링이고 하며, 여러 개의 큐를 운영체제 내에 따로 만들어서 각 큐마다 다른 종류의 프로세스를 따로 관리한다.
* 큐마다 서로 다른 스케줄링 알고리즘을 사용하는 방식이다.
* 각 프로세스는 자신에게 적합한 큐로 이동, 운영체제는 우선순위가 높은 큐부터 차례로 실행시킨다.
  {% endstep %}

{% step %}

### 장점

* 다양한 프로세스 특성에 맞는 알고리즘을 적용할 수 있어 유연하다.
* 빠른 응답이 필요한 인터랙티브 프로세스는 우선 처리하여 시스템 전체 효율성을 올릴 수 있다.
* 실시간/비실시간, 사용자/시스템 프로세스를 구분해서 처리 할 수 있어 체계적이다.
  {% endstep %}

{% step %}

### 단점

* 기아 발생 가능성이 있다. (이 때문에 에이징 기법 활용)
* 복잡한 설계와 관리가 필요하다.
* 정적 MQ는 유연성이 떨어진다.
  {% endstep %}
  {% endstepper %}

### MFQ

{% stepper %}
{% step %}

### 특징

* MQ의 단점을 보완한 구조, 큐 사이를 프로세스가 이동할 수 있는 동적 구조를 갖는다.
* CPU를 많이 쓰는 프로세스는 낮은 우선순위로 밀려나고, 입출력 중심의 프로세스는 높은 우선순위로 올라간다.
* 각 큐마다 다른 Time Quantum과 스케줄링 방식을 적용한다.
  {% endstep %}
  {% endstepper %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://krjaeh0.gitbook.io/j-log/programming/cs_basics/os_memory/concurrency-and-synchronization/processscheduling.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
