EPSSim is a Java CPU scheduling simulator designed for teaching operating systems courses. It runs one or more scheduling algorithms on the same randomly generated process set and outputs a side-by-side comparison of performance metrics, letting students observe the trade-offs between algorithms under identical conditions.
- Java 8 or higher
- No external dependencies or build tools required
# Clone the repository
git clone https://github.com/<!-- TODO: username -->/EPSSim.git
cd EPSSim
# Compile
javac simprocesos/*.java
# Run
java simprocesos.AppThe program is non-interactive. All parameters are read from config.properties in the working directory.
Edit config.properties before running. The main settings are:
# Workload
numeroProcesos=10 # number of processes to generate
maxBT=10 # maximum burst time
maxWT=10 # maximum arrival time
# Which algorithms to run (one boolean per algorithm, in order):
# RR, SJF, ADRR, DMLFQ, KFACTOR, MMRRA, ETS, PBRR, IRR, MTSJRR
bool_resultados=true,true,false,false,false,false,false,false,false,false
# Output files (written to ArchivosTexto/ and ArchivosCsv/)
bool_txt=true
bool_csv=true
nombreArchivo=resultado_simulacion
nombreCsv=resultado_simulacionEach algorithm also has its own parameter line in the file. The comments inside config.properties describe every argument in detail.
| Key | Algorithm |
|---|---|
| RR | Round Robin |
| SJF | Shortest Job First |
| ADRR | Adaptive Dynamic Round Robin |
| DMLFQ | Dynamic Multilevel Feedback Queue |
| KFACTOR | K-Factor |
| MMRRA | Min-Max Round Robin with Adjustment |
| ETS | Effective Time Slice |
| PBRR | Priority-Based Round Robin |
| IRR | Improved Round Robin |
| MTSJRR | Modified Time-Slice with Job-Ratio Round Robin |
Results are printed to the console for each enabled algorithm, showing per-process values (AT, BT, CT, WT, TT) and summary metrics:
| Metric | Meaning |
|---|---|
| MTT | Mean Turnaround Time |
| MWT | Mean Waiting Time |
| NCS | Number of Context Switches |
| NS | Number of Queue Sortings |
If bool_txt=true or bool_csv=true, results are also saved to ArchivosTexto/ and ArchivosCsv/ respectively.
config.properties
simprocesos/
├── App.java Entry point
├── Planificador.java Scheduler
├── Cpu.java CPU model
├── Proceso.java Process representation
├── Algoritmo.java Abstract base class
├── RoundRobin.java
├── Sjf.java
├── Adrr.java
├── Dmlfq.java
├── K_Factor.java
├── Mmrra.java
├── EffectiveTimeSlice.java
├── PriorityBasedRoundRobin.java
├── ImprovedRoundRobin.java
└── MTSJRR.java
If you use EPSSim in your research or teaching, please cite:
@inproceedings{epssim2025,
author = {<!-- TODO: authors -->},
title = {{EPSSim}: Aprendiendo Planificación del Procesador mediante la Simulación},
booktitle = {Actas de las XXX Jornadas sobre la Enseñanza Universitaria de la Informática (JENUI)},
year = {2025}
}This project is licensed under the MIT License.