Skip to content

refracta/Process-Scheduling-Simulator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Process-Scheduling-Simulator

Java와 JavaFX를 이용한 CPU 프로세스 스케줄링 시뮬레이터.

UI

Simulator

코어와 스케줄링 기법 및 스케줄링 별 필요 세부사항을 설정한다.

  • 성능 코어(P코어) 수 설정
  • 효율 코어(E코어) 수 설정
  • 성능 코어 상한 수와 효율 코어 상한 수 설정을 통한 랜덤 코어 수 설정
  • 스케줄링 기법 설정
  • Time quantum 설정 - RR(Round-Robin), RR2Q(Round-Robin with Run queue, Ready queue), GMRL(Give More Rice cake to Loser)에 필요하다.
  • Run queue(실행 큐) 내의 작업 개수 설정 - RR2Q에 필요하다.
  • 플래그 상한 설정 - GMRL에 필요하다.

프로세서와 프로세스의 정보를 볼 수 있다.

  • P코어의 전력 소비량
  • E코어의 전력 소비량
  • 프로세스 수
  • 전체 수행 시간
  • 평균 응답 시간

프로세스를 하나씩 추가해 각 프로세스의 도착 시간, 실행 시간을 설정한다.

  • 프로세스 추가와 도착 시간, 실행 시간 설정
  • 무작위 프로세스 추가
  • 프로세스 제거

스케줄링 결과 간트차트를 보여준다.

프로세스 테이블을 보여준다.

  • 프로세스 테이블에는 프로세스별 AT(도착 시간), BT(실행 시간), WT(대기 시간), TT(반환 시간), NTT(실행 시간 대비 반환 시간) 정보를 볼 수 있다.

구현된 스케줄링 기법

아래는 구현된 스케줄링 기법의 시뮬레이션 결과이다.

FCFS (First Come First Service)

FCFS

RR (Round-Robin)

RR

SPN (Shortest-Process-Next)

SPN

SRTN (Shortest-Remaining-Time-Next)

SRTN

HRRN (High-Response-Ratio-Next)

HRRN

RR2Q (Round-Robin with Run Queue, Ready Queue)

RR2Q

알고리즘 설명

  • Preemptive scheduling
  • 스케줄링 기준 : 도착 시간
  • Time quantum과 Run queue의 크기를 설정해 주어야한다.
  • 설명 : Round-Robin에 queue가 하나 더 추가된 구성이다. Run queue와 Ready queue를 가진다. Ready queue는 Run queue로 이동하기 전 프로세스들이 대기하는 큐이고 Run queue는 프로세서를 할당받을 수 있는 프로세스들이 있는 큐이다. Run queue는 크기가 정해져있으므로 Run queue에 있는 프로세스의 수가 Run queue의 크기보다 작을 때 Ready queue의 프로세스가 Run queue로 이동할 수 있다. Run queue에 있는 프로세스들이 Round-Robin으로 번갈아가며 Time quantum만큼 프로세서를 사용한다.

RR2Q1

  • 예시 : 만약 Run queue의 크기가 5, 프로세서를 할당 받으려는 프로세스가 13개 있다면
  1. Run queue에는 프로세스가 5개, Ready queue에는 프로세스가 8개 있게 된다.
  2. Run queue에 있는 프로세스는 5번 중 1번씩 Time quantum만큼 프로세서를 할당받게 된다.
  3. 잔여 실행 시간이 0인 프로세스는 Run queue를 나가게 되고 나가면서 생긴 1개의 빈자리는 Ready queue에 있는 프로세스로 채운다.

Run queue의 크기에 따른 특징

  • Run queue의 크기가 1일 때 : FCFS와 같아진다.
  • Run queue의 크기가 아주 클 때 : RR과 거의 같아진다.

목적

실행 시간이 작은 프로세스와 큰 프로세스가 적절히 섞여서 실행을 원하는 상황일 때, Run queue에 있는 실행 시간이 작은 프로세스는 어느정도 빨리 실행 시간이 0이 되게 하고 실행 시간이 큰 프로세스는 꾸준히 실행 시간을 줄인다. 그렇게 함으로써 실행 시간이 작은 프로세스의 수는 빨리 줄이면서 실행 시간이 큰 프로세스는 실행 시간 대비 반환 시간이 너무 커지는 것을 방지한다.

GMRL(Give More Rice cake to Loser)

GMRL

알고리즘 설명

  • 스케줄링 기준: 도착 시간(Arrival time), 수행 시간(Burst Time)
  • 사전에 Time Quantum과 Flag_Count를 설정해줄 필요성이 있음
  • 설명: Round-Robin과 SPN의 반전형을 혼합한 형태이다. 기본적으로 Round-Robin의 형태로 진행되고, 프로세스들이 CPU를 할당받을 때마다 Flag_Count가 1씩 증가한다. 만약 Flag_Count가 사전에 설정된 Flag의 상한에 도달하게 되면, 가장 실행 시간이 긴 프로세스를 골라 CPU를 Time Quantum만큼 할당한다. 그 후에는 Flag_Count를 다시 초기화시키고 Round-Robin을 반복한다.

GMRL1

  • 예시: 만약 Count_Flag가 3이고 프로세스 P1, P2, P3, P4 순으로 도착했을 때 P2의 남은 실행 시간이 제일 길다면…

GMRL2

남은 실행 시간이 제일 긴 P2가 Flag가 3일때 CPU를 할당받게 된다. Flag = 3인 순간 전후는 Round-Robin으로 스케줄된다.

특징

  • 프로세스의 수가 적은 경우에는 RR과 비교하여 거의 차이점이 체감되지 않음
  • Flag는 단순한 전역변수에 가까워 Overhead가 거의 발생하지 않음

목적

Round-Robin에서 수행 시간이 긴 프로세스들이 오랫동안 큐에서 계류하는 문제를 해결하여, 궁극적으로 프로그램의 수행 시간을 줄이고 성능을 향상시키기 위함이다.

About

Graphical CPU Scheduling Simulator Based on JavaFX

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •