Skip to content

Latest commit

ย 

History

History
683 lines (526 loc) ยท 24.6 KB

File metadata and controls

683 lines (526 loc) ยท 24.6 KB

๐Ÿš€ Dynamic Load Balancing in Multiprocessor Systems

Python PyTorch Tests Algorithms License

A production-grade simulator for dynamic load balancing algorithms with AI-powered optimization

Quick Start โ€ข Features โ€ข Algorithms โ€ข Documentation โ€ข Contributing


๐ŸŽฌ Quick Start

# Clone the repository
git clone https://github.com/Auankj/dynamic_load_balancer.git
cd dynamic_load_balancer

# Create virtual environment
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Launch the GUI
python main.py
๐Ÿ–ผ๏ธ Screenshot Preview

The GUI features:

  • Real-time processor load visualization with color-coded bars
  • Interactive Gantt chart showing process execution timeline
  • Live metrics dashboard with performance statistics
  • Algorithm comparison with side-by-side analysis

๐ŸŽฏ Overview

Load balancing is a critical operating system technique that distributes workloads across multiple processors to maximize efficiency. This simulator provides:

Goal Description
๐Ÿš€ Maximize Throughput Complete more work in less time
โšก Minimize Response Time Users get faster responses
โš–๏ธ Optimize Utilization All processors stay busy
๐Ÿ›ก๏ธ Prevent Bottlenecks No single processor gets overwhelmed

โœจ Features

๐ŸŽฎ Core Simulation Engine

Feature Description
Multi-Processor Configure 2-16 virtual processors with customizable speed
Process Types CPU-bound, I/O-bound, Real-time, Batch, Interactive
Workload Patterns Uniform, Bursty, Poisson, Diurnal, Spike, Wave
13 Algorithms Load Balancing + Classic CPU Scheduling
AI-Powered Deep reinforcement learning with PyTorch (GPU accelerated)
Process Migration Dynamic load rebalancing across processors

๐Ÿค– AI Load Balancing

Feature Description
Q-Learning Discrete state-space reinforcement learning
Deep Q-Network (DQN) Neural network with experience replay
Double DQN Reduced overestimation bias
Prioritized Replay Focus on important experiences
Model Persistence Save/load trained models automatically

๐Ÿ“Š Advanced Simulation

Feature Description
Process Types CPU_BOUND, IO_BOUND, MIXED, REAL_TIME, BATCH, INTERACTIVE
Workload Patterns UNIFORM, BURSTY, POISSON, DIURNAL, SPIKE, GRADUAL_RAMP, WAVE
Advanced Processors Multi-level feedback queue, cache simulation, power states
Scenario System Predefined and custom simulation scenarios
SLA Tracking Service Level Agreement metrics and violations

๐ŸŽจ Rich Visualization & Charts

๐Ÿ“Š Processor Load Monitor

Real-time visualization of processor loads with intelligent color-coding:

   0%                    50%                   100%
   โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
   ๐ŸŸข Green (0-40%)        ๐ŸŸก Yellow (40-70%)       ๐Ÿ”ด Red (70-100%)
  • Load Bars: Animated horizontal bars showing current CPU utilization
  • Color Gradient: Smooth transitions between load states
  • Queue Indicators: Number badges showing pending processes per CPU

๐Ÿ“ˆ Gantt Chart Timeline

Interactive process execution timeline with rich details:

  • Process Blocks: Color-coded by process priority/type
  • Time Scale: Auto-adjusting based on simulation duration
  • Hover Details: Process ID, burst time, start/end times
  • Migration Lines: Dashed connectors showing process migrations
  • Zoom & Pan: Mouse wheel zoom, drag to navigate

๐Ÿ“‰ Real-Time Performance Graphs

Live updating charts with multiple metrics:

Metric Type Visualization Update Frequency
CPU Utilization Line chart with fill Every simulation tick
Throughput Stacked area chart Per completed process
Wait Times Box plot with outliers Per process completion
Queue Depths Multi-line overlay Every scheduling decision
Load Variance Gradient heat strip Continuous

โš–๏ธ Algorithm Comparison Dashboard

Side-by-side performance analysis for all 13 algorithms:

  • Grouped Bar Charts: Compare avg wait, turnaround, response times
  • Radar Charts: Multi-dimensional algorithm profiling
  • Ranking Tables: Sortable by any metric
  • Export Options: PNG, SVG, CSV data export

๐ŸŽฏ Additional Visualizations

Chart Type Description
๐Ÿ”„ Queue Visualization Ready queue depth per processor with process IDs
๐ŸŽฏ Fairness Index Jain's fairness index dial (0.0 to 1.0)
โฑ๏ธ Response Time Distribution Histogram with percentile markers (p50, p95, p99)
๐Ÿ”ฅ Utilization Heatmap Time ร— Processor matrix showing load intensity
๐Ÿ“Š Process Timeline Individual process lifecycle from arrival to completion
๐ŸŒก๏ธ System Temperature Overall system load gauge with thresholds

๐Ÿ“ˆ Comprehensive Analytics

  • Process Metrics โ€” Turnaround time, waiting time, response time
  • Processor Metrics โ€” CPU utilization, queue length, throughput
  • System Metrics โ€” Load variance, Jain's fairness index, migrations
  • Data Export โ€” JSON and CSV export for external analysis

๐Ÿ—๏ธ Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                           GUI Layer                                โ”‚
โ”‚                          (gui.py)                                  โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚ Load Bars  โ”‚ โ”‚  Metrics   โ”‚ โ”‚   Charts   โ”‚ โ”‚   Controls     โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                 โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                       Simulation Layer                             โ”‚
โ”‚           (simulation.py / enhanced_simulation.py)                 โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚                    SimulationEngine                        โ”‚   โ”‚
โ”‚   โ”‚    Time Management โ€ข Event Processing โ€ข State Control      โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚                  โ”‚                   โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚Load Balancerโ”‚   โ”‚   Processor   โ”‚   โ”‚    Metrics    โ”‚
โ”‚             โ”‚   โ”‚               โ”‚   โ”‚               โ”‚
โ”‚โ€ข RoundRobin โ”‚   โ”‚โ€ข Execution    โ”‚   โ”‚โ€ข Process      โ”‚
โ”‚โ€ข LeastLoadedโ”‚   โ”‚โ€ข Queue Mgmt   โ”‚   โ”‚โ€ข Processor    โ”‚
โ”‚โ€ข Threshold  โ”‚   โ”‚โ€ข Migration    โ”‚   โ”‚โ€ข System       โ”‚
โ”‚โ€ข Q-Learning โ”‚   โ”‚โ€ข Power States โ”‚   โ”‚โ€ข SLA Tracking โ”‚
โ”‚โ€ข DQN        โ”‚   โ”‚โ€ข Cache Sim    โ”‚   โ”‚               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚                  โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚          Core Layer            โ”‚
โ”‚   config.py โ€ข process.py       โ”‚
โ”‚   utils.py โ€ข validators.py     โ”‚
โ”‚   advanced_simulation.py       โ”‚
โ”‚   integration.py               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Design Patterns

Pattern Implementation Purpose
Strategy LoadBalancer ABC Swappable algorithms
Factory LoadBalancerFactory Algorithm instantiation
Observer GUI callbacks Real-time updates
Builder ScenarioBuilder Custom scenario creation
Singleton SimulationLogger Centralized logging

โš–๏ธ Load Balancing Algorithms

Quick Comparison

Algorithm Speed Balance Adaptability Best For
Round Robin โญโญโญ โญ โญ Uniform workloads
Least Loaded โญโญ โญโญโญ โญโญ Variable workloads
Threshold โญโญ โญโญโญ โญโญโญ Dynamic environments
Q-Learning โญโญโญ โญโญโญ โญโญโญ Pattern-rich workloads
DQN โญโญ โญโญโญ โญโญโญ Complex continuous states

1. Round Robin

Distributes processes cyclically: P0โ†’P1โ†’P2โ†’P3โ†’P0...

def assign(self, process, processors):
    target = processors[self.current_index]
    self.current_index = (self.current_index + 1) % len(processors)
    return target

โœ… Simple, predictable, zero overhead
โŒ Ignores actual load, can create imbalance


2. Least Loaded First

Assigns to the processor with the lowest current load

def assign(self, process, processors):
    return min(processors, key=lambda p: p.current_load)

โœ… Optimal distribution, adapts to state
โŒ O(n) per assignment, monitoring overhead


3. Threshold-Based

Migrates processes when load difference exceeds threshold

def check_balance(self, processors):
    loads = [p.current_load for p in processors]
    if max(loads) - min(loads) > self.threshold:
        self.migrate_process(overloaded, underloaded)

โœ… Dynamic rebalancing, prevents severe imbalance
โŒ Migration has cost, needs threshold tuning


4. Q-Learning (AI)

Learns optimal assignments through reinforcement learning

def assign(self, process, processors):
    state = self.encode_state(processors, process)
    if self.training and random() < self.epsilon:
        action = random_choice(len(processors))  # Explore
    else:
        action = argmax(self.Q[state])           # Exploit
    return processors[action]

โœ… Learns optimal strategy, improves over time
โŒ Needs training, initial random behavior


5. Deep Q-Network (DQN)

Neural network approximates Q-function for continuous states

class DQNetwork(nn.Module):
    def __init__(self, state_dim, action_dim):
        self.fc1 = nn.Linear(state_dim, 128)
        self.fc2 = nn.Linear(128, 256)
        self.fc3 = nn.Linear(256, 128)
        self.out = nn.Linear(128, action_dim)

โœ… Handles continuous states, excellent generalization
โŒ Requires PyTorch, more computationally intensive


๐ŸŽ“ AI Training Guide

Mode Exploration (ฮต) Purpose When to Use
Train 100% โ†’ 5% Learn optimal strategies First runs, new patterns
Exploit Fixed 1% Use learned knowledge After training complete

Recommended Training:

  • Q-Learning: 500-2000+ process assignments
  • DQN: 1000-5000+ process assignments

๐Ÿ“š Classic CPU Scheduling Algorithms

The simulator also includes 8 classic CPU scheduling algorithms that every OS student should know!

Algorithm Comparison Table

Algorithm Type Preemptive Optimal For Starvation
FCFS ๐Ÿ“‹ FIFO โŒ Simplicity โŒ
SJF โฑ๏ธ Burst โŒ Avg Wait Time โš ๏ธ
SRTF โฑ๏ธ Burst โœ… Response Time โš ๏ธ
Priority ๐ŸŽฏ Priority โŒ Critical Tasks โš ๏ธ
Priority (P) ๐ŸŽฏ Priority โœ… Urgent Tasks โš ๏ธ
Multilevel Queue ๐Ÿ“Š Class โœ… Mixed Workloads โš ๏ธ
MLFQ ๐Ÿง  Adaptive โœ… General Purpose โŒ
EDF โฐ Deadline โœ… Real-Time โŒ

1๏ธโƒฃ FCFS โ€“ First Come First Served

The OG of schedulers. Whoever comes first gets the CPU first.

def select_next(self):
    return sorted(self.queue, key=lambda p: p.arrival_time)[0]

โœ… Simple, no starvation, minimal overhead
โŒ Convoy effect โ€” one big process blocks everyone


2๏ธโƒฃ SJF โ€“ Shortest Job First

Picks the process with the shortest burst time. Productivity king! ๐Ÿ‘‘

def select_next(self):
    return min(self.queue, key=lambda p: p.burst_time)

โœ… Optimal average waiting time (provably!)
โŒ Long jobs may starve, needs burst time prediction


3๏ธโƒฃ SRTF โ€“ Shortest Remaining Time First

The chaotic younger sibling of SJF. Preemptive version!

def should_preempt(self, new_process):
    return new_process.remaining_time < self.current.remaining_time

โœ… Even better response time than SJF
โŒ High overhead, long jobs get ghosted constantly ๐Ÿ‘ป


4๏ธโƒฃ Priority Scheduling

CPU goes to the highest priority process. VIP treatment! ๐ŸŽ–๏ธ

def select_next(self):
    # Uses aging to prevent starvation
    for p in self.queue:
        p.effective_priority = p.priority - p.wait_time // 10
    return min(self.queue, key=lambda p: p.effective_priority)

โœ… Critical processes get attention, flexible
โŒ Can starve low priority (solved with aging!)


5๏ธโƒฃ Round Robin (RR)

Every process gets a time slice (quantum). Fair & democratic! ๐Ÿ—ณ๏ธ

def tick(self):
    self.quantum_remaining -= 1
    if self.quantum_remaining <= 0:
        self.queue.append(self.current)  # Back of queue
        self.current = self.queue.popleft()

โœ… Fair, good response time, no starvation
โŒ Quantum too small = too many switches, too big = becomes FCFS


6๏ธโƒฃ Multilevel Queue Scheduling

Think of it like a school with different sections! ๐Ÿซ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Queue 0: System Processes (RR, q=8) โ”‚ โ† Highest Priority
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Queue 1: Interactive (RR, q=4)      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Queue 2: Batch Jobs (FCFS)          โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Queue 3: Idle Processes             โ”‚ โ† Lowest Priority
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โœ… Good for categorized workloads, optimizes each queue
โŒ Inflexible โ€” processes stuck in their queue


7๏ธโƒฃ MLFQ โ€“ Multilevel Feedback Queue

The genius, adaptive version. Processes can MOVE between queues! ๐Ÿง 

The Rules:

  1. ๐Ÿ†• New processes start at top queue (highest priority)
  2. โฌ‡๏ธ Use full quantum? Get demoted to lower queue
  3. โฌ†๏ธ Give up CPU early (I/O)? Stay or get promoted
  4. ๐Ÿ”„ Periodic priority boost prevents starvation
def after_quantum(self, process):
    if process.used_full_quantum:
        self.demote(process)  # CPU hog detected!
    else:
        self.promote(process)  # Nice I/O-bound process

โœ… Adapts automatically, no prior knowledge needed
โŒ Complex to tune, can be gamed


8๏ธโƒฃ EDF โ€“ Earliest Deadline First

For real-time systems. Nearest deadline = gets the CPU! โฐ

def select_next(self):
    return min(self.queue, key=lambda p: p.deadline)

โœ… Optimal for single processor real-time (can achieve 100% utilization!)
โŒ Deadline miss cascade โ€” one miss can cause many


๐Ÿ“ Project Structure

dynamic_load_balancer/
โ”œโ”€โ”€ ๐ŸŽฏ Core Modules
โ”‚   โ”œโ”€โ”€ main.py                 # Application entry point
โ”‚   โ”œโ”€โ”€ config.py               # Configuration and constants
โ”‚   โ”œโ”€โ”€ process.py              # Process model and generator
โ”‚   โ”œโ”€โ”€ processor.py            # Processor execution logic
โ”‚   โ””โ”€โ”€ simulation.py           # Standard simulation engine
โ”‚
โ”œโ”€โ”€ ๐Ÿค– AI & Scheduling Modules
โ”‚   โ”œโ”€โ”€ load_balancer.py        # Algorithm implementations
โ”‚   โ”œโ”€โ”€ ai_balancer.py          # Q-Learning balancer
โ”‚   โ”œโ”€โ”€ dqn_balancer.py         # Deep Q-Network balancer
โ”‚   โ””โ”€โ”€ scheduling_algorithms.py # Classic CPU schedulers (FCFS, SJF, etc.)
โ”‚
โ”œโ”€โ”€ ๐Ÿš€ Advanced Simulation
โ”‚   โ”œโ”€โ”€ advanced_simulation.py  # Enhanced process/processor models
โ”‚   โ”œโ”€โ”€ enhanced_simulation.py  # Production-grade engine
โ”‚   โ””โ”€โ”€ integration.py          # Scenario management
โ”‚
โ”œโ”€โ”€ ๐Ÿ“Š Support Modules
โ”‚   โ”œโ”€โ”€ metrics.py              # Performance metrics
โ”‚   โ”œโ”€โ”€ gui.py                  # Tkinter GUI
โ”‚   โ”œโ”€โ”€ utils.py                # Logging and export
โ”‚   โ””โ”€โ”€ validators.py           # Input validation
โ”‚
โ”œโ”€โ”€ ๐Ÿงช Testing
โ”‚   โ””โ”€โ”€ test_suite.py           # 133 comprehensive tests
โ”‚
โ””โ”€โ”€ ๐Ÿ“„ Documentation
    โ”œโ”€โ”€ README.md               # This file
    โ””โ”€โ”€ requirements.txt        # Dependencies

Module Overview

Module Purpose Key Classes
config.py Configuration SimulationConfig, LoadBalancingAlgorithm
process.py Process model Process, ProcessGenerator
processor.py Execution Processor, ProcessorManager
load_balancer.py Algorithms RoundRobin, LeastLoaded, Threshold
ai_balancer.py Q-Learning QLearningAgent, StateEncoder
dqn_balancer.py Deep RL DQNAgent, DQNetwork, PrioritizedReplay
scheduling_algorithms.py CPU Scheduling FCFS, SJF, SRTF, Priority, MLFQ, EDF
advanced_simulation.py Advanced models AdvancedProcess, AdvancedProcessor
enhanced_simulation.py Production engine EnhancedSimulationEngine
integration.py Scenarios ScenarioBuilder, PerformanceAnalyzer

๐ŸŽฎ Predefined Scenarios

Scenario Processors Processes Pattern Description
Basic 4 20 Uniform Standard simulation
CPU Intensive 8 30 Uniform Long-running computation
I/O Intensive 4 40 Bursty Frequent blocking
Mixed Workload 6 50 Diurnal Real-world simulation
Bursty Traffic 4 60 Spike Sudden load spikes
Real-Time 8 25 Uniform Strict deadlines
Stress Test 4 100 Spike Maximum load testing

๐Ÿ“Š Performance Metrics

Key Metrics

Metric Formula Description
Turnaround Time completion - arrival Total time in system
Waiting Time start - arrival Time in queue
Response Time first_run - arrival Time to first execution
CPU Utilization busy_time / total_time Processor efficiency
Throughput completed / time Processes per time unit
Jain's Fairness (ฮฃx)ยฒ / (n ร— ฮฃxยฒ) Load distribution fairness

Jain's Fairness Index

$$J(x_1, x_2, ..., x_n) = \frac{(\sum_{i=1}^{n} x_i)^2}{n \cdot \sum_{i=1}^{n} x_i^2}$$

  • J = 1.0: Perfect fairness (equal load)
  • J = 1/n: Worst case (all load on one processor)

๐Ÿงช Testing

# Run all 125 tests
python -m pytest test_suite.py -v

# Run specific test class
python -m pytest test_suite.py::TestDQNBalancer -v

# Run with coverage
python -m pytest test_suite.py --cov=. --cov-report=html

Test Categories

Category Tests Coverage
Configuration 6 Config creation, defaults
Process Model 12 Lifecycle, state transitions
Processor 14 Execution, queue management
Load Balancers 20 All algorithm correctness
Q-Learning 15 Agent training, inference
DQN 20 Neural network, replay buffer
Simulation 12 Engine initialization, execution
Metrics 13 Calculations, edge cases
Integration 6 End-to-end workflows
Edge Cases 7 Boundary conditions

๐Ÿ“š API Reference

Quick Examples

# Create and run simulation
from simulation import SimulationEngine
from config import SimulationConfig, LoadBalancingAlgorithm

config = SimulationConfig(num_processors=4, num_processes=20)
engine = SimulationEngine(config)
engine.initialize(algorithm=LoadBalancingAlgorithm.DQN)

while not engine.is_complete():
    engine.step()

result = engine.get_result()
print(f"Avg Turnaround: {result.system_metrics.avg_turnaround_time:.2f}")
# Use scenario builder
from integration import ScenarioBuilder, IntegratedSimulationManager
from advanced_simulation import WorkloadPattern, ProcessType

scenario = (ScenarioBuilder("Custom Test")
    .with_processors(8)
    .with_processes(50)
    .with_workload(WorkloadPattern.BURSTY)
    .with_algorithm(LoadBalancingAlgorithm.DQN)
    .build())

manager = IntegratedSimulationManager(use_enhanced=True)
manager.load_scenario(scenario)
manager.initialize()
manager.start()

โš™๏ธ Configuration

SimulationConfig Options

Parameter Default Range Description
num_processors 4 2-16 Number of processors
num_processes 20 1-100 Processes to generate
time_quantum 4 1-20 Round robin time slice
min_burst_time 1 1-100 Minimum burst time
max_burst_time 20 1-1000 Maximum burst time
migration_threshold 0.3 0.0-1.0 Load diff for migration

๐Ÿ’ป Platform Notes

macOS

source venv/bin/activate
python main.py

Windows (PowerShell)

.\venv\Scripts\Activate.ps1
python main.py

Windows (Command Prompt)

venv\Scripts\activate.bat
python main.py

๐Ÿค Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Write tests for your changes
  4. Ensure all 125 tests pass: python -m pytest test_suite.py
  5. Commit with conventional format: feat(scope): description
  6. Push to your branch: git push origin feature/amazing-feature
  7. Open a Pull Request

Commit Format

type(scope): Brief description

Types: feat, fix, docs, refactor, test, perf

Examples:
- feat(balancer): Add weighted round robin
- fix(gui): Resolve chart rendering issue
- test(dqn): Add edge case tests

๐Ÿ“„ License

This project is licensed under the MIT License โ€” see the LICENSE file for details.


Made with โค๏ธ for learning Operating Systems concepts

GitHub

v2.0.0 โ€ข 125 Tests Passing โ€ข Python 3.8+ โ€ข PyTorch 2.0+