Files
pss/README.md
T

7.4 KiB
Raw Blame History

🖥️ Process Scheduler Simulator

Uma ferramenta educacional interativa para visualizar e comparar algoritmos clássicos de escalonamento de processos de Sistemas Operacionais.

React TypeScript Vite Tailwind CSS Vitest License: MIT


✨ 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

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

  1. 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.
  2. Configure o escalonador — Escolha o algoritmo e ajuste os parâmetros (quantum para RR, aging para Priority, etc.).
  3. Execute a simulação — Use os controles de Play/Pause/Step para rodar a simulação na velocidade que quiser (0.25× até 4×).
  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

Also available in: 🇺🇸 English


🤝 Contribuindo

Contribuições são bem-vindas! Por favor, consulte nosso guia em CONTRIBUTING.md para obter detalhes sobre como configurar o ambiente de desenvolvimento, reportar bugs ou enviar um Pull Request.


📜 Licença

Distribuído sob a Licença MIT. Desenvolvido por Lucas Rayan Guerra.