BaseAlgorithm structure, update engine and tests, and add new algorithm and metrics documentation.
🖥️ Process Scheduler Simulator
Uma ferramenta educacional interativa para visualizar e comparar algoritmos clássicos de escalonamento de processos de Sistemas Operacionais.
✨ O que é?
O Process Scheduler Simulator (PSS) roda completamente no navegador — sem servidor, sem instalação de dependências de sistema. Você define os processos, escolhe o algoritmo, e assiste à simulação acontecer em tempo real através do diagrama de Gantt.
Ideal para:
- 📚 Estudantes de Sistemas Operacionais querendo visualizar o que antes era só teoria
- 👩🏫 Professores buscando uma ferramenta interativa para sala de aula
- 🔍 Profissionais revisitando fundamentos de SO
🚀 Quick Start
Pré-requisitos
- Node.js 20+
- npm 10+
Instalação e execução local
# Clone o repositório
git clone https://github.com/lucasrguerra/pss.git
cd pss
# Instale as dependências
npm install
# Inicie o servidor de desenvolvimento
npm run dev
Acesse http://localhost:5173 no seu navegador.
Build de produção
npm run build
npm run preview
Com Docker
docker compose up
🎮 Como usar
- Crie seus processos — No painel esquerdo, adicione processos definindo nome, tempo de chegada, prioridade e sequência de bursts (CPU e I/O). Ou use o gerador aleatório para começar rápido.
- Configure o escalonador — Escolha o algoritmo e ajuste os parâmetros (quantum para RR, aging para Priority, etc.).
- Execute a simulação — Use os controles de Play/Pause/Step para rodar a simulação na velocidade que quiser (0.25× até 4×).
- Analise os resultados — O diagrama de Gantt mostra em tempo real o estado de cada processo. Ao final, o painel de métricas exibe turnaround, waiting time, throughput e mais.
💡 Dica: Carregue um dos presets disponíveis para ver fenômenos clássicos como o efeito de comboio do FCFS ou starvation com Priority Scheduling.
⚙️ Algoritmos Suportados
| Algoritmo | Preemptivo? | Parâmetros |
|---|---|---|
| FCFS — First Come, First Served | ❌ | — |
| SJF — Shortest Job First | ❌ | — |
| SRTF — Shortest Remaining Time First | ✅ | — |
| Round Robin (RR) | ✅ | Quantum |
| Priority NP — Prioridade Não-Preemptivo | ❌ | Aging (opcional) |
| Priority P — Prioridade Preemptivo | ✅ | Aging (opcional) |
| HRRN — Highest Response Ratio Next | ❌ | — |
| Multilevel Queue | ✅ | Quantum por fila |
Consulte a documentação dos algoritmos para detalhes sobre como cada um funciona.
📊 Métricas calculadas
Para cada processo simulado, o PSS calcula automaticamente:
- Response Time — tempo até o primeiro uso de CPU
- Turnaround Time — tempo total desde a chegada até o término
- Waiting Time — tempo total na fila Ready
- CPU Time / I/O Time — tempo efetivo em cada tipo de burst
- CPU Utilization — percentual do turnaround em CPU
- Bound Type — classificação automática em CPU Bound, I/O Bound ou Balanced
E globalmente: médias de response/turnaround/waiting, throughput e utilização global de CPU.
🗂️ Estrutura do Projeto
src/
├── core/ # Lógica pura — sem React
│ ├── algorithms/ # Implementação de cada algoritmo
│ │ ├── base.ts # Classe abstrata BaseScheduler
│ │ ├── fcfs.ts
│ │ ├── sjf.ts
│ │ ├── rr.ts
│ │ ├── priority.ts
│ │ ├── priority_rr.ts
│ │ ├── hrrn.ts
│ │ ├── multilevel.ts
│ │ └── index.ts # Dispatch por algoritmo
│ ├── engine.ts # SimulationEngine — orquestra os ticks
│ ├── metrics.ts # Cálculo de métricas por processo e globais
│ ├── types.ts # Todas as interfaces TypeScript
│ └── presets.ts # Cenários pré-definidos
│
├── store/ # Estado global com Zustand
├── components/ # Componentes React
│ ├── ProcessPanel/ # Criação e edição de processos
│ ├── SchedulerPanel/ # Seleção de algoritmo e parâmetros
│ ├── ControlBar/ # Play, Pause, Step, Reset, velocidade
│ ├── GanttChart/ # Diagrama de Gantt interativo
│ ├── MetricsPanel/ # Tabela, gráficos e métricas globais
│ └── shared/ # Botões, badges, tooltips, modais
│
└── hooks/ # Hooks personalizados (loop de animação, export, etc.)
📦 Presets disponíveis
Carregue cenários clássicos com um clique para explorar fenômenos de SO:
| Preset | O que demonstra |
|---|---|
classic_fcfs |
Execução básica com FCFS, sem I/O |
convoy_effect |
Efeito de comboio: um processo longo bloqueando vários curtos |
rr_demo |
Revezamento justo com Round Robin (quantum=3) |
starvation |
Processos de baixa prioridade nunca recebem CPU |
aging_fix |
O mesmo cenário de starvation, resolvido com aging |
io_heavy |
Mix de processos CPU Bound vs I/O Bound |
multilevel_demo |
Múltiplas filas com prioridades diferentes |
🧪 Testes
# Roda todos os testes unitários
npm test
# Modo watch (re-executa ao salvar)
npm run test:watch
# Com relatório de cobertura
npm run test:coverage
Os testes cobrem a engine de simulação, todos os algoritmos de escalonamento, e o cálculo de métricas.
🛠️ Stack Tecnológica
| Camada | Tecnologia |
|---|---|
| Framework UI | React 18 |
| Linguagem | TypeScript 5 |
| Build tool | Vite 6 |
| Estilos | Tailwind CSS 4 |
| Estado global | Zustand 5 |
| Gráficos | Recharts |
| Ícones | Lucide React |
| Testes | Vitest + Testing Library |
📄 Documentação adicional
- 📐 Algoritmos de Escalonamento — descrição detalhada de cada algoritmo, regras de desempate e exemplos
- 📏 Métricas — fórmulas e definições de todas as métricas calculadas
🤝 Contribuindo
Contribuições são bem-vindas! Sinta-se livre para abrir uma issue ou enviar um Pull Request.
📜 Licença
Distribuído sob a Licença ISC. Desenvolvido por Lucas Rayan Guerra.