Skip to content

RafaelLopes23/SistemaMonitorCardiaco

Repository files navigation

Sistema de Monitoramento Cardíaco de Tempo Real em Rust

Rust Tokio License

Uma análise abrangente da simulação de um sistema de tempo real estrito, explorando a escalonabilidade com o runtime assíncrono Tokio.

📋 Sumário

🎯 Visão Geral

Este projeto implementa e analisa um Sistema de Monitoramento Cardíaco de Tempo Real (STR) desenvolvido integralmente em Rust. O sistema simula um ambiente de hard real-time, onde a corretude depende não apenas da lógica computacional, mas criticamente do cumprimento de prazos temporais (deadlines) rigorosos.

Contexto Acadêmico

Este projeto serve como uma exploração prática dos conceitos de Sistemas de Tempo Real. O resultado mais significativo é a conclusão quantificável de que o sistema, em sua configuração atual, está sobrecarregado e não é escalonável. Este "resultado negativo" demonstra a aplicação bem-sucedida de metodologias de análise para identificar limites operacionais de sistemas complexos.

Contribuição Principal

A principal contribuição reside na demonstração metodológica de como a Análise de Tempo de Resposta (RTA) pode prever falhas de escalonabilidade e como medições empíricas podem validar essas previsões.

🧠 Conceitos Fundamentais

Sistemas de Tempo Real Estritos (Hard Real-Time)

Um Sistema de Tempo Real Estrito é definido como um sistema onde a falha em cumprir um único deadline é considerada uma falha total do sistema. Diferentemente de sistemas de tempo real flexíveis (soft real-time), em sistemas estritos a previsibilidade temporal é absoluta.

Métricas Essenciais

  • WCET (Worst-Case Execution Time): Tempo máximo que uma tarefa leva para ser executada
  • WCRT (Worst-Case Response Time): Tempo de resposta de pior caso, incluindo tempo de espera
  • Análise de Escalonabilidade: Processo que determina se todas as tarefas podem cumprir seus deadlines

Escalonamento com Tokio

O projeto utiliza o runtime assíncrono Tokio, onde:

  • Cada tarefa é uma task assíncrona independente
  • Periodicidade gerenciada via interval.tick().await
  • Preempção cooperativa (não preemptiva)
  • Tensão arquitetônica: Tokio é otimizado para throughput, não determinismo temporal

🏗️ Arquitetura

Estrutura Modular

src/
├── lib.rs              # Declaração dos módulos
├── main.rs             # Ponto de entrada e orquestração
├── ecg_data.rs         # Leitura e parsing de dados ECG
├── tasks.rs            # Definição de tarefas e TaskManager
├── anomaly_detector.rs # Lógica de detecção de anomalias
├── interrupts.rs       # Simulador de interrupções esporádicas
├── performance_collector.rs # Coleta de métricas
└── wcrt_analysis.rs    # Análise de WCRT teórica e empírica

Por que Rust?

  • Segurança de Memória sem GC: Elimina pausas não-determinísticas
  • Performance Nativa: Código compilado altamente otimizado
  • Controle de Baixo Nível: Comparável a C/C++ em performance
  • Trade-off: Curva de aprendizado íngreme

⚡ Funcionalidades

Principais Capacidades

  1. Processamento de Sinal ECG

    • Leitura de dados a partir de ecg_input.csv
    • Conversão para estruturas EcgReading
  2. Detecção de Anomalias em Tempo Real

    • Comparação com limiares de voltagem
    • Geração de AnomalyEvent para anomalias detectadas
  3. Simulação de Interrupções

    • Eventos esporádicos (Hardware, Software, Emergência)
    • Carga não determinística para teste de robustez
  4. Coleta de Métricas de Performance

    • Instrumentação thread-safe de baixo overhead
    • Geração de relatório JSON detalhado
  5. Análise Híbrida de WCRT

    • Análise teórica pré-execução
    • Refinamento com dados empíricos pós-execução

🚀 Instalação e Configuração

Pré-requisitos

Instale a toolchain Rust via rustup.rs:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Instalação

# Clone o repositório
git clone https://github.com/RafaelLopes23/SistemaMonitorCardiaco.git

# Navegue para o diretório
cd SistemaMonitorCardiaco

Configuração

Os parâmetros da simulação são definidos em:

  • src/main.rs - Configurações globais (duração do teste: 60s)
  • src/tasks.rs - Parâmetros específicos das tarefas

Execução

# Execute no modo release para medições precisas
cargo run --release

Saída

  • Console: Logs de eventos em tempo real
  • Arquivo: performance_report.json com métricas detalhadas

📊 Análise de Performance

Metodologia Experimental

  1. Análise teórica de WCRT com estimativas conservadoras
  2. Execução do sistema por 60 segundos
  3. Coleta de métricas durante execução
  4. Geração de relatório empírico
  5. Re-análise com dados medidos

Características das Tarefas

Tarefa Prioridade Período (ms) Deadline (μs) Responsabilidade
InterruptService 1 (Alta) Esporádica 1000 Interrupções de alta prioridade
AnomalyDetection 2 2 2000 Análise de anomalias ECG
EcgAcquisition 3 5 5000 Leitura de amostras ECG
Preprocessing 4 5 5000 Pré-processamento de dados
HumanMachineInterface 5 100 100000 Atualização de interface
LogCommunication 6 (Baixa) 50 50000 Envio de logs

📈 Resultados

Falha Sistêmica de Escalonabilidade

Os resultados demonstram falha completa do sistema em atender aos requisitos de tempo real:

Tarefa Deadline (μs) WCRT Teórico (μs) Escalonável (Teoria) WCRT Medido (μs) Escalonável (Empírico) Margem Real (μs)
InterruptService 1000 335 ✅ Sim 2246 ❌ Não -1246
AnomalyDetection 2000 575 ✅ Sim 2341 ❌ Não -341
EcgAcquisition 5000 3350 ✅ Sim 6851 ❌ Não -1851
Preprocessing 5000 5225 ❌ Não 6735 ❌ Não -1735
LogCommunication 50000 52100 ❌ Não 51542 ❌ Não -1542
HumanMachineInterface 100000 114300 ❌ Não 101330 ❌ Não -1330

Principais Descobertas

  • Utilização de CPU: 100% durante todo o teste
  • Saturação Completa: Processador nunca ocioso
  • Efeito Cascata: Falha das tarefas de alta prioridade devido à saturação
  • Inversão de Prioridade: Escalonador cooperativo agrava o problema

🔧 Melhorias Futuras

1. Otimização de Código

  • Profiling detalhado das tarefas mais intensivas
  • Eliminação de alocações desnecessárias em loops críticos
  • Uso de referências em vez de tipos proprietários
  • Estruturas de dados otimizadas para cada caso de uso

2. Gerenciamento de Tarefas CPU-Bound

  • Refatoração de código puramente computacional
  • tokio::task::spawn_blocking para operações intensivas
  • Pool de threads separado para cálculos bloqueantes

3. Ajuste de Parâmetros

  • Análise de sensibilidade dos períodos das tarefas
  • Trade-off entre precisão e escalonabilidade
  • Reavaliação dos requisitos temporais

4. Runtimes Alternativos

  • RTIC (Real-Time Interrupt-driven Concurrency)
  • Embassy (Runtime assíncrono para embarcados)
  • Escalonamento preemptivo baseado em hardware

🛠️ Tecnologias

Core

  • Linguagem: Rust (Edição 2021)
  • Runtime: Tokio (Assíncrono)
  • Build: Cargo

Dependências

  • Serde: Serialização/desserialização
  • CSV: Leitura de dados
  • Chrono: Manipulação de tempo

📄 License

Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para detalhes.

🤝 Contribuição

Contribuições são bem-vindas! Por favor, abra uma issue ou submeta um pull request.


Nota: Este projeto é acadêmico e demonstra metodologias de análise de sistemas de tempo real. O "resultado negativo" de não-escalonabilidade é o objetivo pretendido do experimento.

About

Simulação de sistema de monitoramento cardíaco com foco em escalonamento, prioridades, deadlines e gerenciamento de tarefas periódicas e aperiódicas.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages