Skip to content

RishvinReddy/Interactive-Disk-Scheduling-Algorithm-Visualizer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

13 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

⚑ Syncing Talent with Technology ⚑

A comprehensive, interactive Operating Systems simulation & visualization suite

Python CustomTkinter Matplotlib NetworkX License Status



Formerly: Disk Scheduling Algorithm Visualizer


πŸ“‘ Table of Contents

# Section
1 Overview
2 Live Demo
3 System Architecture
4 Module Breakdown
5 Algorithms Reference
6 Tech Stack
7 Project Structure
8 Setup & Installation
9 Usage Guide
10 Performance Benchmarks
11 Viva Prep

Overview

Talensync OS Simulation Engine is a full-featured Python GUI application that brings Operating System theory to life through real-time simulation and interactive visualization. What began as a simple disk scheduling tool has evolved into a multi-module OS learning platform.

Built for OS coursework, academic demos, lab sessions, and viva preparation.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    WHAT THIS PROJECT COVERS                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   πŸ’Ύ Disk I/O        β”‚   🧠 CPU Scheduling   β”‚   πŸ”’ Deadlock         β”‚
β”‚   FCFS, SSTF, SCAN   β”‚   FCFS, SJF, RR, P   β”‚   RAG + Banker's Algo β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   πŸ”„ Synchronization β”‚   πŸ“ File Systems     β”‚   πŸ” Process States   β”‚
│   Mutex + Race Cond  │   Contiguous/Linked   │   New→Ready→Run→Term  │
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🌐 Live Demo

πŸš€ Try the interactive web version instantly β€” no installation required:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  🌍  LIVE DEMO FEATURES                                              β”‚
β”‚                                                                      β”‚
β”‚   βœ…  Disk Scheduling Visualizer (Browser-based)                     β”‚
β”‚   βœ…  Interactive graph animations                                   β”‚
β”‚   βœ…  FCFS Β· SSTF Β· SCAN β€” all runnable in-browser                   β”‚
β”‚   βœ…  Zero setup β€” works on any device                               β”‚
β”‚   βœ…  Mobile friendly                                                β”‚
β”‚                                                                      β”‚
β”‚  URL: rishvinreddy.github.io/Interactive-Disk-Scheduling-            β”‚
β”‚       Algorithm-Visualizer/                                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

System Architecture

High-Level Application Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        TALENSYNC ENGINE                                 β”‚
β”‚                                                                         β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚   β”‚   main.py    │───────▢│         OS Architecture Dashboard        β”‚  β”‚
β”‚   β”‚  (Entry Pt.) β”‚        β”‚   [Central Hub + Real-Time Log Stream]   β”‚  β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                            β”‚                            β”‚
β”‚              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚              β”‚             Sidebar Navigation                       β”‚    β”‚
β”‚              β””β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                 β”‚      β”‚      β”‚      β”‚            β”‚       β”‚             β”‚
β”‚                 β–Ό      β–Ό      β–Ό      β–Ό            β–Ό       β–Ό             β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β” β”Œβ”€β”€β”€β” β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚
β”‚   β”‚  Disk    β”‚ β”‚CPUβ”‚ β”‚DL β”‚ β”‚Syncβ”‚ β”‚ FS  β”‚ β”‚ Proc β”‚ β”‚ Factory β”‚       β”‚
β”‚   β”‚  I/O     β”‚ β”‚Schβ”‚ β”‚Detβ”‚ β”‚    β”‚ β”‚Allocβ”‚ β”‚Statesβ”‚ β”‚Hardware β”‚       β”‚
β”‚   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”¬β”€β”˜ β””β”€β”¬β”€β”˜ β””β”€β”€β”¬β”€β”˜ β””β”€β”€β”¬β”€β”€β”˜ β””β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜       β”‚
β”‚        β”‚         β”‚     β”‚      β”‚       β”‚        β”‚           β”‚           β”‚
β”‚        β–Ό         β–Ό     β–Ό      β–Ό       β–Ό        β–Ό           β–Ό           β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚   β”‚             Matplotlib Β· NetworkX Β· ReportLab Β· CustomTkinter    β”‚ β”‚
β”‚   β”‚                    [ Visualization & Export Layer ]               β”‚ β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Module Interaction Diagram

                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚    Dashboard (Hub)   β”‚
                    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
                    β”‚  β”‚  Event Logger  β”‚  β”‚
                    β”‚  β”‚  Metric Store  β”‚  β”‚
                    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚ fires events
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β”‚                    β”‚                    β”‚
          β–Ό                    β–Ό                    β–Ό
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚  Disk Module  β”‚   β”‚  CPU Scheduler β”‚   β”‚  Deadlock Det β”‚
  β”‚  ─────────── β”‚   β”‚  ──────────── β”‚   β”‚  ─────────── β”‚
  β”‚  Algorithm    β”‚   β”‚  Process Queue β”‚   β”‚  RAG Builder  β”‚
  β”‚  Engine       β”‚   β”‚  Gantt Chart   β”‚   β”‚  Banker's Algoβ”‚
  β”‚  Animation    β”‚   β”‚  Burst Calc    β”‚   β”‚  Safe State   β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚                    β”‚                   β”‚
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚   Export / Report   β”‚
                    β”‚   (ReportLab PDF)   β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Module Breakdown

πŸ’Ύ Module 1 β€” Disk I/O Management

  Disk Track Layout  (0 ──────────────────────────── 199)

  Head: 53 ──▢
  Requests: [98, 183, 37, 122, 14, 124, 65, 67]

  FCFS:   53β†’98β†’183β†’37β†’122β†’14β†’124β†’65β†’67     Total: 640
  SSTF:   53β†’65β†’67β†’37β†’14β†’98β†’122β†’124β†’183     Total: 236  ← βœ… Best
  SCAN:   53β†’65β†’67β†’98β†’122β†’124β†’183β†’37β†’14     Total: 331

Algorithms Supported:

Algorithm Strategy Starvation Risk Complexity
FCFS First Come First Serve Low O(n)
SSTF Shortest Seek Time First High O(nΒ²)
SCAN Elevator (bidirectional) None O(n log n)
C-SCAN Circular SCAN None O(n log n)
LOOK SCAN up to last request None O(n log n)
C-LOOK Circular LOOK None O(n log n)

🧠 Module 2 β€” CPU Scheduling

  Process Timeline (Gantt Chart View)

  P1 β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘
  P2 β–‘β–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘
  P3 β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘
  P4 β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆ
       0    5   10   15   20  β†’ Time (ms)

  Legend:  β–ˆ = Executing   β–‘ = Waiting
Algorithm Type Preemptive Best Use Case
FCFS Non-preemptive ❌ Batch systems
SJF Non-preemptive ❌ Short jobs known upfront
SRTF Preemptive SJF βœ… Real-time estimation
Round Robin Time-quantum βœ… Time-sharing systems
Priority Priority-based βœ…/❌ Mixed priority tasks

πŸ”’ Module 3 β€” Deadlock Detection & Analysis

  Resource Allocation Graph (RAG)

       P1 ──requests──▢ R1
       P1 ◀──holds────  R2
       P2 ──requests──▢ R2
       P2 ◀──holds────  R1

                  ↑
         DEADLOCK DETECTED ⚠️
         (Circular Wait Condition)

  Banker's Algorithm β€” Safe Sequence Finder:
  β”Œβ”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ P# β”‚ Max Need β”‚Allocationβ”‚  Remaining β”‚
  β”œβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ P0 β”‚  7 5 3   β”‚  0 1 0   β”‚   7 4 3    β”‚
  β”‚ P1 β”‚  3 2 2   β”‚  2 0 0   β”‚   1 2 2    β”‚
  β”‚ P2 β”‚  9 0 2   β”‚  3 0 2   β”‚   6 0 0    β”‚
  β”‚ P3 β”‚  2 2 2   β”‚  2 1 1   β”‚   0 1 1    β”‚
  β”‚ P4 β”‚  4 3 3   β”‚  0 0 2   β”‚   4 3 1    β”‚
  β””β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  Available: [3, 3, 2]
  Safe Sequence: P1 β†’ P3 β†’ P4 β†’ P0 β†’ P2  βœ…

πŸ”„ Module 4 β€” Process Synchronization

  Mutex Lock Simulation

  Thread-1: LOCK(mutex) ──▢ [Critical Section] ──▢ UNLOCK(mutex)
                                    β•‘
  Thread-2: LOCK(mutex) ──▢ β–‘β–‘β–‘WAITINGβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ ──▢ [Critical Section]
                                    ↑
                             Blocked until T1 releases

  Race Condition Scenario (No Lock):
  Thread-1 reads x=5 ──▢ computes x+1=6
  Thread-2 reads x=5 ──▢ computes x+1=6
  Both write 6 ──▢ LOST UPDATE ❌  (expected x=7)

πŸ“ Module 5 β€” File System Allocation

  β”Œβ”€β”€β”€ CONTIGUOUS ──────────────────────────────────────┐
  β”‚  Block: [0][1][2][3][4][5][6][7][8][9][10][11][12] β”‚
  β”‚  File A:  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘        β”‚
  β”‚  File B:  β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘         β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

  β”Œβ”€β”€β”€ LINKED ──────────────────────────────────────────┐
  β”‚  [Block 0]──▢[Block 3]──▢[Block 7]──▢[Block 11]β–ΆNULLβ”‚
  β”‚  File data     data        data         data         β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

  β”Œβ”€β”€β”€ INDEXED ─────────────────────────────────────────┐
  β”‚  Index Block: [3][7][11][15]                         β”‚
  β”‚       β”‚        β”‚   β”‚    β”‚                            β”‚
  β”‚       β–Ό        β–Ό   β–Ό    β–Ό                            β”‚
  β”‚    Block3   Blk7 Blk11 Blk15  (file data)            β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Method Access Fragmentation Overhead
Contiguous O(1) External Low
Linked O(n) None Medium (pointers)
Indexed O(1) None High (index block)

πŸ” Module 6 β€” Process Lifecycle States

                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Άβ”‚    NEW      β”‚
        β”‚           β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
        β”‚                  β”‚ admitted
        β”‚           β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
        β”‚     β”Œβ”€β”€β”€β”€β–Άβ”‚    READY    │◀────────┐
        β”‚     β”‚     β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜         β”‚
        β”‚  I/Oβ”‚            β”‚ scheduled       β”‚ I/O done
        β”‚  done     β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”         β”‚
        β”‚     β”‚     β”‚   RUNNING   β”‚β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚     β”‚     β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
        β”‚     β”‚            β”‚ wait(event)
        β”‚     β”‚     β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
        β”‚     └─────│   WAITING   β”‚
        β”‚           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚                  β”‚ exit
        β”‚           β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
        └───────────│  TERMINATED β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Tech Stack

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        TECH STACK                               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Language           β”‚  Python 3.x                               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  GUI Framework      β”‚  CustomTkinter (dark/light adaptive UI)   β”‚
β”‚                     β”‚  Tkinter (base widgets)                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Visualization      β”‚  Matplotlib (plots + animations)          β”‚
β”‚                     β”‚  NetworkX (graph-based deadlock RAGs)     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Export             β”‚  ReportLab (PDF report generation)        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Web Demo           β”‚  HTML Β· CSS Β· JavaScript (GitHub Pages)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Project Structure

Talensync-OS-Simulation-Engine/
β”‚
β”œβ”€β”€ πŸ“„ main.py                          ← Application entry point
β”œβ”€β”€ πŸ“„ disk_scheduling_gui.py           ← Legacy standalone visualizer
β”œβ”€β”€ πŸ“„ requirements.txt
β”œβ”€β”€ πŸ“„ README.md
β”‚
β”œβ”€β”€ πŸ“ OS_Simulation_Suite/
β”‚   β”œβ”€β”€ πŸ“„ main.py                      ← Suite launcher
β”‚   β”œβ”€β”€ πŸ“„ dashboard.py                 ← Central hub + real-time logs
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“ modules/
β”‚   β”‚   β”œβ”€β”€ πŸ“„ disk_io.py               ← Disk scheduling algorithms
β”‚   β”‚   β”œβ”€β”€ πŸ“„ cpu_scheduling.py        ← CPU scheduler + Gantt chart
β”‚   β”‚   β”œβ”€β”€ πŸ“„ deadlock.py              ← RAG + Banker's Algorithm
β”‚   β”‚   β”œβ”€β”€ πŸ“„ synchronization.py       ← Mutex + race condition sim
β”‚   β”‚   β”œβ”€β”€ πŸ“„ file_system.py           ← File allocation strategies
β”‚   β”‚   β”œβ”€β”€ πŸ“„ process_states.py        ← State transition visualizer
β”‚   β”‚   └── πŸ“„ factory_monitor.py       ← Factory hardware simulation
β”‚   β”‚
β”‚   β”œβ”€β”€ πŸ“ utils/
β”‚   β”‚   β”œβ”€β”€ πŸ“„ algorithm_engine.py      ← Core algorithm logic
β”‚   β”‚   β”œβ”€β”€ πŸ“„ report_exporter.py       ← ReportLab PDF export
β”‚   β”‚   └── πŸ“„ random_generator.py      ← Test data generator
β”‚   β”‚
β”‚   └── πŸ“ assets/
β”‚       └── πŸ“„ themes.py                ← Dark/Light theme config
β”‚
└── πŸ“ web/                             ← GitHub Pages live demo
    β”œβ”€β”€ πŸ“„ index.html
    β”œβ”€β”€ πŸ“„ style.css
    └── πŸ“„ visualizer.js

Setup & Installation

Prerequisites

βœ… Python 3.8 or higher
βœ… pip (Python package manager)
βœ… Git

Installation Steps

# 1. Clone the repository
git clone https://github.com/RishvinReddy/Interactive-Disk-Scheduling-Algorithm-Visualizer.git

# 2. Navigate to the project directory
cd Interactive-Disk-Scheduling-Algorithm-Visualizer

# 3. (Recommended) Create a virtual environment
python -m venv venv
source venv/bin/activate        # Linux/macOS
venv\Scripts\activate           # Windows

# 4. Install all dependencies
pip install -r requirements.txt

# 5. Launch the full suite
cd OS_Simulation_Suite
python main.py

# --- OR run the legacy single-file disk visualizer ---
python disk_scheduling_gui.py

Dependencies (requirements.txt)

customtkinter>=5.2.0
matplotlib>=3.7.0
networkx>=3.1
reportlab>=4.0.0

Usage Guide

πŸ–₯️ Dashboard Navigation

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  TALENSYNC  [Dark ●]                              [Minimize][X] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚            β”‚                                                    β”‚
β”‚  🏠 Home   β”‚         ← Module Content Area β†’                   β”‚
β”‚            β”‚                                                    β”‚
β”‚  πŸ’Ύ Disk   β”‚   Simulation controls, graphs,                     β”‚
β”‚            β”‚   and real-time metrics appear here                β”‚
β”‚  🧠 CPU    β”‚                                                    β”‚
β”‚            β”‚                                                    β”‚
β”‚  πŸ”’ DLock  β”‚                                                    β”‚
β”‚            β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  πŸ”„ Sync   β”‚  πŸ“‹ REAL-TIME LOG                                  β”‚
β”‚            β”‚  [12:01] Disk SCAN completed β€” Seek: 331           β”‚
β”‚  πŸ“ Files  β”‚  [12:02] Deadlock detected in RAG β€” P1, P2        β”‚
β”‚            β”‚  [12:03] Safe sequence found: P1β†’P3β†’P0            β”‚
β”‚  πŸ” States β”‚                                                    β”‚
β”‚            β”‚                                                    β”‚
β”‚  🏭 Factoryβ”‚                                                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Disk Scheduling β€” Step by Step

Step Action
1 Enter number of requests OR click "Generate Random Test"
2 Fill in Disk Requests (space-separated integers, range 0–199)
3 Set Initial Head Position (single integer)
4 Choose SCAN Direction β€” Left or Right
5 Click "Run All Algorithms"
6 View the Comparison Table for seek totals
7 Open visual graphs per algorithm
8 Export results as PDF report (optional)

Sample Input / Output

INPUT:
  Disk Requests    :  98 183 37 122 14 124 65 67
  Initial Head     :  53
  SCAN Direction   :  Right

OUTPUT COMPARISON TABLE:
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ Algorithm β”‚ Seek Sequence        β”‚  Total   β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ FCFS      β”‚ 53β†’98β†’183β†’37β†’...    β”‚   640    β”‚
  β”‚ SSTF      β”‚ 53β†’65β†’67β†’37β†’...     β”‚   236    β”‚ ← βœ… BEST
  β”‚ SCAN      β”‚ 53β†’65β†’67β†’98β†’...     β”‚   331    β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Performance Benchmarks

Algorithm Efficiency Comparison (Sample Run)

  Total Head Movement (Lower = Better)

  FCFS   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 640
  SCAN   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 331
  SSTF   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 236  ← πŸ† Optimal
  LOOK   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 280
  C-SCAN β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 370
  C-LOOK β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ 310

         0        200      400      600

Big-O Complexity Reference

Algorithm Time Complexity Space Notes
FCFS O(n) O(1) No sorting needed
SSTF O(nΒ²) O(1) Greedy nearest search
SCAN O(n log n) O(n) Sort + single pass
C-SCAN O(n log n) O(n) Circular variant
LOOK O(n log n) O(n) Optimized SCAN
C-LOOK O(n log n) O(n) Optimized C-SCAN

Viva Prep & Interview Notes

The Four Conditions for Deadlock

  ALL four must hold simultaneously for deadlock to occur:

  1. MUTUAL EXCLUSION  ─ Only one process can use a resource at a time
  2. HOLD AND WAIT     ─ Process holds resources while waiting for more
  3. NO PREEMPTION     ─ Resources cannot be forcibly taken away
  4. CIRCULAR WAIT     ─ P1 waits for P2, P2 waits for P3, P3 waits for P1

Quick Algorithm Cheatsheet

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   FCFS          β”‚ Service in arrival order. Simple but inefficient  β”‚
β”‚   SSTF          β”‚ Go to closest request. Fast but may starve far    β”‚
β”‚                 β”‚ requests                                           β”‚
β”‚   SCAN          β”‚ Move in one direction like an elevator. Reverse   β”‚
β”‚                 β”‚ at ends. Fair & prevents starvation               β”‚
β”‚   C-SCAN        β”‚ Like SCAN but only one direction. Jumps back to   β”‚
β”‚                 β”‚ start after reaching end. More uniform wait times  β”‚
β”‚   LOOK          β”‚ SCAN but only goes as far as last request. Saves  β”‚
β”‚                 β”‚ unnecessary head movement                          β”‚
β”‚   C-LOOK        β”‚ Circular LOOK. Best overall in most benchmarks    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key Definitions

Term Definition
Seek Time Time for disk head to move to target track
Rotational Latency Time waiting for sector to rotate under head
Transfer Time Time to actually read/write the data
Starvation A process perpetually denied CPU/resource access
Safe State A state where a safe sequence of execution exists
Race Condition Outcome depends on non-deterministic thread ordering
Critical Section Code segment accessing shared resources
Mutual Exclusion Only one process in critical section at a time


Designed & Developed for Operating Systems Analysis & Teaching

🌐 Live Demo Β· ⭐ Star this repo if it helped you Β· πŸ› Found a bug? Open an issue


Built with Python Β· CustomTkinter Β· Matplotlib Β· NetworkX Β· ReportLab

Releases

No releases published

Packages

 
 
 

Contributors

Languages