Engineered by Yug Arora
A modular Operating Systems (OS) simulator written in Java.
It contains small, focused implementations of classic OS topics (CPU scheduling, paging, memory allocation, disk scheduling, synchronization, deadlock detection) with a CLI to run demos and an analysis layer to compare results.
Algorithms & demos
- CPU Scheduling: FCFS, Round Robin (+ Gantt-style output)
- Paging: FIFO, LRU (+ step-by-step logs)
- Memory Allocation: First Fit, Best Fit, Worst Fit (+ compaction + fragmentation metrics)
- Disk Scheduling: FCFS, SSTF, SCAN, C-SCAN (+ head-movement graph)
- Synchronization: Producer–Consumer, Readers–Writers, Dining Philosophers (thread-based)
- Deadlock: Resource Allocation Graph → Wait-For Graph, cycle detection
Extras
cli/menu-driven scenariosanalysis/metrics + comparison reports + CSV exporter
cli/— interactive menu + scenario runnerscheduling/— FCFS, Round Robinpaging/— FIFO, LRU + comparators/formattersmemory/— allocators + reports/validationdisk/— disk schedulers + comparison + graphssynchronization/— semaphore + classic synchronization problemsdeadlock/— RAG/WFG + deadlock detectoranalysis/— metrics + report/CSV exportmodels/,utils/— shared data models and helpers
Prerequisites
- JDK (Java) installed (
javacandjavaavailable in PATH)
Build (run from the project root)
javac -d bin .\Main.java `
.\models\*.java `
.\utils\*.java `
.\scheduling\*.java `
.\paging\*.java `
.\memory\*.java `
.\disk\*.java `
.\synchronization\*.java .\synchronization\producerconsumer\*.java `
.\synchronization\readerswriters\*.java .\synchronization\philosophers\*.java `
.\deadlock\*.java `
.\analysis\*.java `
.\cli\*.javaRun the CLI
java -cp bin cli.Applicationjava -cp bin Main
java -cp bin paging.PagingComparison
java -cp bin memory.MemoryValidation
java -cp bin disk.DiskComparison
java -cp bin synchronization.producerconsumer.ProducerConsumerSimulator
java -cp bin synchronization.readerswriters.ReadersWritersSimulator
java -cp bin synchronization.philosophers.DiningPhilosophersSimulator- Architecture overview: see
ARCHITECTURE.md
- Run commands from the project root so
-cp binresolves correctly. - Disk scheduling assumes track indices are in the range
0todiskSize - 1. - Synchronization demos are thread-based, so output ordering may interleave.
