# a-elbana/os-scheduler architecture

> Architecture diagram of the GitHub repository a-elbana/os-scheduler, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/a-elbana/os-scheduler
- Repository: https://github.com/a-elbana/os-scheduler

## Overview

OS Scheduler is a discrete-event simulator: a user selects a scheduling mode, the generator reads and time-dispatches a workload, and the scheduler runs child workers against an emulated clock. Its main branches are HPF, Round Robin with demand-paged memory, and two-CPU FCFS with load balancing/stealing. Shared queues, PCB lookup, IPC helpers, and performance/logging support these flows. Relationships below rely on README statements and the provided excerpts; unsampled implementation details are not inferred.

Main entry points: [`scheduler.c`](https://github.com/a-elbana/os-scheduler/blob/main/scheduler.c) (Scheduler Entry), [`process_generator.c`](https://github.com/a-elbana/os-scheduler/blob/main/process_generator.c) (Process Generator), [`scheduler.h`](https://github.com/a-elbana/os-scheduler/blob/main/scheduler.h) (Scheduler Contract), [`RR.c`](https://github.com/a-elbana/os-scheduler/blob/main/RR.c) (Round Robin)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_generation["Workload and Clock"]
  node_generator["Process Generator"]
  node_clock["Emulated Clock<br/>[clk.c]"]
end

subgraph group_scheduling["Scheduling"]
  node_scheduler["Scheduler Entry<br/>[scheduler.c]"]
  node_hpf["HPF Scheduler<br/>[HPF.c]"]
  node_rr["Round Robin<br/>[RR.c]"]
  node_two_cpu["Two-CPU FCFS<br/>[TwoCPU.c]"]
  node_worker["CPU Worker<br/>[process.c]"]
end

subgraph group_memory["Paging"]
  node_rr_worker["Paging Worker<br/>[processRR.c]"]
  node_mmu["MMU and NRU<br/>[MMU.c]"]
  node_mmu_types["Memory Types<br/>[MMU.h]"]
  node_memory_requests["RR Memory Traces<br/>[requests_1.txt]"]
end

subgraph group_runtime["Runtime Support"]
  node_ready_queue["Ready Queues<br/>[queue.c]"]
  node_pcb_lookup["PCB Lookup<br/>[hash_table.c]"]
  node_scheduler_contract["Scheduler Contract<br/>[scheduler.h]"]
  node_ipc_helpers["IPC and Clock Helpers<br/>[headers.c]"]
  node_shared_types["Shared Types<br/>[headers.h]"]
end

node_user(("Operator"))

node_user -->|"selects mode"| node_generator
node_generator -->|"starts clock"| node_clock
node_generator -->|"starts scheduler"| node_scheduler
node_generator -->|"dispatches arrivals"| node_scheduler
node_scheduler -->|"routes mode"| node_hpf
node_scheduler -->|"routes mode"| node_rr
node_scheduler -->|"routes mode"| node_two_cpu
node_scheduler -->|"uses queues"| node_ready_queue
node_scheduler -->|"indexes PCBs"| node_pcb_lookup
node_scheduler -->|"starts worker"| node_worker
node_rr -->|"starts worker"| node_rr_worker
node_rr_worker -->|"reads trace"| node_memory_requests
node_rr -->|"handles paging"| node_mmu
node_mmu -->|"uses definitions"| node_mmu_types
node_scheduler -->|"uses IPC helpers"| node_ipc_helpers
node_generator -->|"uses clock helpers"| node_ipc_helpers
node_generator -->|"uses process messages"| node_shared_types
node_scheduler_contract -->|"includes types"| node_shared_types
node_scheduler_contract -->|"includes queue API"| node_ready_queue
node_scheduler_contract -->|"includes lookup API"| node_pcb_lookup
node_scheduler -->|"initializes memory"| node_mmu
node_two_cpu -->|"queues processes"| node_ready_queue

click node_generator "https://github.com/a-elbana/os-scheduler/blob/main/process_generator.c"
click node_clock "https://github.com/a-elbana/os-scheduler/blob/main/clk.c"
click node_scheduler "https://github.com/a-elbana/os-scheduler/blob/main/scheduler.c"
click node_hpf "https://github.com/a-elbana/os-scheduler/blob/main/HPF.c"
click node_rr "https://github.com/a-elbana/os-scheduler/blob/main/RR.c"
click node_two_cpu "https://github.com/a-elbana/os-scheduler/blob/main/TwoCPU.c"
click node_worker "https://github.com/a-elbana/os-scheduler/blob/main/process.c"
click node_rr_worker "https://github.com/a-elbana/os-scheduler/blob/main/processRR.c"
click node_mmu "https://github.com/a-elbana/os-scheduler/blob/main/MMU.c"
click node_mmu_types "https://github.com/a-elbana/os-scheduler/blob/main/MMU.h"
click node_memory_requests "https://github.com/a-elbana/os-scheduler/blob/main/requests_1.txt"
click node_ready_queue "https://github.com/a-elbana/os-scheduler/blob/main/queue.c"
click node_pcb_lookup "https://github.com/a-elbana/os-scheduler/blob/main/hash_table.c"
click node_scheduler_contract "https://github.com/a-elbana/os-scheduler/blob/main/scheduler.h"
click node_ipc_helpers "https://github.com/a-elbana/os-scheduler/blob/main/headers.c"
click node_shared_types "https://github.com/a-elbana/os-scheduler/blob/main/headers.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_generator,node_clock toneBlue
class node_scheduler,node_hpf,node_rr,node_two_cpu,node_worker toneAmber
class node_rr_worker,node_mmu,node_mmu_types,node_memory_requests toneMint
class node_ready_queue,node_pcb_lookup,node_scheduler_contract,node_ipc_helpers,node_shared_types toneRose
class node_user toneIndigo
```

## Components

### Workload and Clock

- [Process Generator](https://github.com/a-elbana/os-scheduler/blob/main/process_generator.c): `process_generator.c`
- [Emulated Clock](https://github.com/a-elbana/os-scheduler/blob/main/clk.c): `clk.c`

### Scheduling

- [Scheduler Entry](https://github.com/a-elbana/os-scheduler/blob/main/scheduler.c): `scheduler.c`
- [HPF Scheduler](https://github.com/a-elbana/os-scheduler/blob/main/HPF.c): `HPF.c`
- [Round Robin](https://github.com/a-elbana/os-scheduler/blob/main/RR.c): `RR.c`
- [Two-CPU FCFS](https://github.com/a-elbana/os-scheduler/blob/main/TwoCPU.c): `TwoCPU.c`
- [CPU Worker](https://github.com/a-elbana/os-scheduler/blob/main/process.c): `process.c`

### Paging

- [Paging Worker](https://github.com/a-elbana/os-scheduler/blob/main/processRR.c): `processRR.c`
- [MMU and NRU](https://github.com/a-elbana/os-scheduler/blob/main/MMU.c): `MMU.c`
- [Memory Types](https://github.com/a-elbana/os-scheduler/blob/main/MMU.h): `MMU.h`
- [RR Memory Traces](https://github.com/a-elbana/os-scheduler/blob/main/requests_1.txt): `requests_1.txt`

### Runtime Support

- [Ready Queues](https://github.com/a-elbana/os-scheduler/blob/main/queue.c): `queue.c`
- [PCB Lookup](https://github.com/a-elbana/os-scheduler/blob/main/hash_table.c): `hash_table.c`
- [Scheduler Contract](https://github.com/a-elbana/os-scheduler/blob/main/scheduler.h): `scheduler.h`
- [IPC and Clock Helpers](https://github.com/a-elbana/os-scheduler/blob/main/headers.c): `headers.c`
- [Shared Types](https://github.com/a-elbana/os-scheduler/blob/main/headers.h): `headers.h`

### Other components

- **Operator**

## Connections

- Operator → Process Generator: selects mode (evidence: `README.md`)
- Process Generator → Emulated Clock: starts clock (evidence: `README.md`)
- Process Generator → Scheduler Entry: starts scheduler (evidence: `README.md`)
- Process Generator → Scheduler Entry: dispatches arrivals (evidence: `process_generator.c`)
- Scheduler Entry → HPF Scheduler: routes mode (evidence: `scheduler.c`)
- Scheduler Entry → Round Robin: routes mode (evidence: `scheduler.c`)
- Scheduler Entry → Two-CPU FCFS: routes mode (evidence: `scheduler.c`)
- Scheduler Entry → Ready Queues: uses queues (evidence: `scheduler.c`)
- Scheduler Entry → PCB Lookup: indexes PCBs (evidence: `scheduler.c`)
- Scheduler Entry → CPU Worker: starts worker (evidence: `scheduler.c`)
- Round Robin → Paging Worker: starts worker (evidence: `RR.c`)
- Paging Worker → RR Memory Traces: reads trace (evidence: `README.md`)
- Round Robin → MMU and NRU: handles paging
- MMU and NRU → Memory Types: uses definitions (evidence: `MMU.c`)
- Scheduler Entry → IPC and Clock Helpers: uses IPC helpers (evidence: `scheduler.c`)
- Process Generator → IPC and Clock Helpers: uses clock helpers (evidence: `README.md`)
- Process Generator → Shared Types: uses process messages
- Scheduler Contract → Shared Types: includes types (evidence: `scheduler.h`)
- Scheduler Contract → Ready Queues: includes queue API (evidence: `scheduler.h`)
- Scheduler Contract → PCB Lookup: includes lookup API (evidence: `scheduler.h`)
- Scheduler Entry → MMU and NRU: initializes memory (evidence: `scheduler.c`)
- Two-CPU FCFS → Ready Queues: queues processes (evidence: `TwoCPU.c`)
