# Lab: 스케줄링 알고리즘 시뮬레이터

## 실습 목표

이 실습은 다음과 같은 목표를 달성하기 위해 설계되었습니다.

1. FIFO(First-In-First-Out), SJF(Shortest-Job-First), RR(Round-Robin) 스케줄링 알고리즘의 동작 원리를 이해합니다.
2. 각 스케줄링 알고리즘에 따른 작업의 응답 시간, 반환 시간, 대기 시간을 계산하는 방법을 배웁니다.
3. 스케줄링 문제를 생성하고 해답을 확인하는 방법을 익힙니다.
4. 커맨드 라인 인터페이스를 통해 스케줄링 시뮬레이터를 사용하는 방법을 알아봅니다.

## 실습 내용

이 실습에서는 scheduler.py 프로그램을 사용하여 다양한 스케줄링 알고리즘의 성능을 비교하고 분석합니다.

### scheduler.py 프로그램 사용 방법

1. 기본 사용법:
   - `./scheduler.py -p <스케줄링 정책> -j <작업 개수> -s <랜덤 시드>`
   - 예: `./scheduler.py -p FIFO -j 3 -s 100`
   - 이 명령은 FIFO 스케줄링 정책을 사용하여 3개의 작업을 생성하고, 랜덤 시드 100을 사용하여 문제를 출제합니다.
2. 정답 확인:
   - 기본 사용법에 `-c` 옵션을 추가하면 해당 문제에 대한 정답을 확인할 수 있습니다.
   - 예: `./scheduler.py -p FIFO -j 3 -s 100 -c`
   - 이 명령은 이전에 출제된 문제의 정답을 보여줍니다.
3. 사용자 정의 작업 목록 사용:
   - `-l` 옵션을 사용하여 직접 작업 목록을 지정할 수 있습니다.
   - 예: `./scheduler.py -p SJF -l 5,10,15`
   - 이 명령은 SJF 스케줄링 정책을 사용하여 길이가 5, 10, 15인 작업을 스케줄링합니다.
4. 도움말 확인:
   - `./scheduler.py -h` 명령을 사용하여 사용 가능한 모든 옵션과 설명을 확인할 수 있습니다.

## 실습 절차

1. 터미널에서 `./scheduler.py -p FIFO -j 3 -s 100` 명령을 실행하여 FIFO 스케줄링 문제를 생성합니다.
2. 출력된 작업 목록을 보고, 각 작업의 응답 시간, 반환 시간, 대기 시간을 계산해봅니다.
3. 계산이 끝나면 `./scheduler.py -p FIFO -j 3 -s 100 -c` 명령을 실행하여 정답을 확인합니다.
4. 다양한 옵션을 사용하여 서로 다른 스케줄링 문제를 생성하고 풀어봅니다.
   - `-p` 옵션으로 스케줄링 정책을 변경할 수 있습니다. (FIFO, SJF, RR)
   - `-j` 옵션으로 작업 개수를 변경할 수 있습니다.
   - `-s` 옵션으로 랜덤 시드를 변경하여 다양한 문제를 생성할 수 있습니다.
   - `-l` 옵션으로 직접 작업 목록을 지정할 수 있습니다.
5. 각 스케줄링 정책의 특성과 성능 차이를 이해하고, 스케줄링 알고리즘의 동작 원리를 파악합니다.

이 실습을 통해 다양한 스케줄링 알고리즘의 동작 원리를 이해하고, 주어진 작업 목록에 대한 응답 시간, 반환 시간, 대기 시간을 계산하는 방법을 배울 수 있습니다. 또한, 커맨드 라인 인터페이스를 사용하여 스케줄링 시뮬레이터를 다루는 방법도 익힐 수 있습니다.
