Prévia do material em texto
UAM – Arquitetura de software – Unidade 4 – Pratique Padrões de arquitetura para sistemas embutidos Um sistema embarcado pode ser definido como "um sistema computadorizado dedicado a executar um conjunto específico de funções do mundo real, ao invés de fornecer um ambiente de computação generalizado". Claramente, essa é uma ampla categorização que inclui pequenos computadores de 8 bits , incorporados em marcapassos cardíacos, e computadores de 64 bits que controlam aeronaves, comunicações, controle de incêndio para aeronaves e WANs, compostos por centenas de poderosos sistemas para gerenciamento de C4ISR (Comando, Controle, Comunicações, Computadores, Inteligência, Vigilância e Reconhecimento). Muitos sistemas embarcados não possuem discos, interface humana e quase nenhuma memória, mas o escopo do mercado de sistemas embarcados é muito mais amplo do que esses dispositivos simples. Os sistemas embarcados já controlam, aumentam, monitoram e gerenciam praticamente todos os dispositivos de alta tecnologia que existem, de televisores, trens a automação de fábrica, e seu uso está aumentando. Um subconjunto importante de sistemas embarcados são os sistemas em tempo real. Muitas pessoas têm a impressão equivocada de que "tempo real" significa "bem rápido", mas isso não é verdade. Um sistema em tempo real é aquele em que as restrições de pontualidade devem ser atendidas para a correção do sistema. Uma categorização comum, embora simplista, de sistemas em tempo real é dividida em dois grupos (rígido e moderado). Sistemas em tempo real são aqueles em que as restrições de pontualidade são modeladas com pontos no tempo em que é necessário concluir a execução de ações específicas. Isso pode incluir taxa de transferência média, tempo médio de execução, duração máxima de burst ou alguma outra medida. Todos os sistemas podem ser modelados como sistemas rígidos em tempo real, mas isso geralmente resulta em um " over-design " do sistema para ser mais rápido ou ter mais recursos disponíveis do que o necessário, aumentando o custo recorrente (aproximadamente "custo de fabricação") do sistema. Embora todos os sistemas possam ser modelados como sistemas rígidos em tempo real, na verdade, a maioria não é. Se a resposta for ocasionalmente atrasada ou mesmo se um evento de entrada inteiro for perdido, a maioria dos sistemas continuará funcionando corretamente. O principal motivo para modelar sistemas em tempo real é porque facilita a garantia da pontualidade do sistema por meio de análises matemáticas. Por dentro, uma das características mais marcantes dos sistemas embarcados é a severidade de suas restrições. Ao contrário do software para um computador de uso geral, um sistema embarcado geralmente é enviado já integrado com todo o hardware necessário. A plataforma de hardware geralmente não é extensível ao usuário; portanto, recursos como memória, energia, refrigeração ou poder de computação contribuem para o custo por unidade (conhecido como custo recorrente). Para manter a lucratividade, quase sempre há uma enorme pressão sobre o desenvolvedor para minimizar o uso desses recursos de hardware . Isso significa que os sistemas embarcados geralmente exigem esforços adicionais de otimização muito além do exigido para aplicativos de desktop. Além da necessidade de minimizar o hardware , as preocupações com o desempenho geralmente são críticas para o sucesso de um sistema. Há muitos aspectos no desempenho, e sistemas diferentes valorizam esses aspectos de maneira diferente. Em alguns sistemas, a taxa de transferência é um critério crítico. A taxa de transferência é normalmente medida em termos do número de transações, amostras, conexões ou mensagens que podem ser processadas por unidade de tempo. Em outros sistemas, lidar com cada solicitação o mais rápido possível é mais importante, uma qualidade conhecida como capacidade de resposta, geralmente capturada como o pior tempo de execução. Outros sistemas valorizam a previsibilidade do desempenho em relação à taxa de transferência máxima ou capacidade de resposta. A previsibilidade é geralmente medida como ocorrendo dentro de um intervalo ou como extraída de uma função de densidade de probabilidade. Confiabilidade, robustez e segurança são outros tipos de restrições impostas aos sistemas embarcados. A confiabilidade de um sistema é uma medida (estocástica) da probabilidade de o sistema fornecer a funcionalidade correta. Robustez refere-se à capacidade de um sistema de fornecer serviços adequadamente quando suas condições prévias (como condições operacionais ou taxas de entrada de dados) são violadas. Segurança denota o nível de risco de um sistema, ou seja, a probabilidade de que o uso do sistema resulte em acidente ou perda. Essas preocupações geralmente exigem medidas adicionais de hardware e software para manter a operação do sistema dentro de limites aceitáveis. Por exemplo, a maioria os sistemas incorporados têm um POST ( Power on Self-Test ), bem como um teste interno periódico ou contínuo (BIT). Coletivamente, essas restrições no sistema são conhecidas como qualidades de serviços (QoS) fornecidas pelo sistema. Além das várias restrições de QoS, para reduzir custos recorrentes, é comum criar hardware personalizado que requer software de driver de dispositivo especializado. Vamos Praticar Como a arquitetura para sistemas embarcados deve ser considerada para melhorar o desempenho e confiabilidade do software a ser executado nestes dispositivos? Ao final, disponibilize seu trabalho no fórum da seção. Resposta: A arquitetura para sistemas embarcados deve ser cuidadosamente projetada para atender às restrições específicas desses sistemas, melhorando o desempenho e a confiabilidade do software. Aqui estão algumas considerações importantes e abordagens arquiteturais para sistemas embarcados: 1. Arquitetura em Camadas: · Implementar uma arquitetura em camadas bem definida, separando claramente as responsabilidades: a) Camada de Hardware Abstraction Layer (HAL) b) Camada de Sistema Operacional (se aplicável) c) Camada de Middleware d) Camada de Aplicação Benefícios: · Melhora a portabilidade do software · Facilita a manutenção e atualizações · Permite otimizações específicas em cada camada 2. Arquitetura Baseada em Componentes: · Dividir o sistema em componentes modulares e reutilizáveis · Definir interfaces claras entre os componentes Benefícios: · Facilita o desenvolvimento paralelo · Melhora a testabilidade · Permite a reutilização de código em diferentes projetos 3. Arquitetura Orientada a Eventos: · Implementar um sistema baseado em eventos para lidar com entradas e saídas assíncronas · Utilizar filas de eventos e callbacks para gerenciar o fluxo de controle Benefícios: · Melhora a capacidade de resposta do sistema · Otimiza o uso de recursos limitados · Facilita a implementação de sistemas em tempo real 4. Arquitetura de Microkernel: · Implementar um kernel mínimo que fornece apenas serviços essenciais · Mover funcionalidades não essenciais para o espaço do usuário Benefícios: · Reduz o footprint de memória · Melhora a confiabilidade do sistema · Facilita a customização para diferentes plataformas de hardware 5. Arquitetura de Tempo Real: · Implementar escalonadores de tempo real (ex: Rate Monotonic, Earliest Deadline First) · Utilizar mecanismos de prioridade e preempção Benefícios: · Garante o atendimento de deadlines críticos · Melhora a previsibilidade do sistema 6. Arquitetura Tolerante a Falhas: · Implementar mecanismos de detecção e recuperação de falhas · Utilizar redundância de hardware e software quando crítico Benefícios: · Aumenta a confiabilidade do sistema · Melhora a robustez em condições adversas 7. Arquitetura de Baixo Consumo de Energia: · Implementar estados de energia e modos de sleep · Otimizar o uso de recursos de hardware Benefícios: · Prolonga a vida útil da bateria em dispositivos portáteis · Reduz o consumo de energia em sistemas embarcados 8. Arquitetura de Memória Otimizada: · Implementar técnicas de gerenciamento de memória eficientes · Utilizaralocação estática de memória quando possível Benefícios: · Reduz o footprint de memória · Melhora a previsibilidade do sistema 9. Arquitetura de Comunicação: · Implementar protocolos de comunicação eficientes e leves · Utilizar buffers circulares e DMA para comunicação eficiente Benefícios: · Melhora a eficiência da comunicação entre componentes · Reduz a sobrecarga do processador 10. Arquitetura de Segurança: · Implementar mecanismos de segurança em nível de hardware e software · Utilizar criptografia e autenticação quando necessário Benefícios: · Protege contra ataques e acesso não autorizado · Garante a integridade dos dados do sistema 11. Arquitetura de Atualização Segura: · Implementar mecanismos de atualização de firmware seguros · Utilizar partições duplas para atualizações robustas Benefícios: · Permite atualizações de software seguras em campo · Melhora a manutenibilidade do sistema 12. Arquitetura de Diagnóstico: · Implementar mecanismos de logging e diagnóstico · Utilizar watchdogs de hardware e software Benefícios: · Facilita a detecção e resolução de problemas · Melhora a confiabilidade do sistema Ao aplicar essas considerações arquiteturais, é importante lembrar que cada sistema embarcado tem requisitos únicos. A arquitetura deve ser adaptada às necessidades específicas do projeto, considerando fatores como: · Restrições de hardware (memória, processador, energia) · Requisitos de tempo real · Criticidade do sistema (segurança, confiabilidade) · Ambiente operacional · Custo-alvo do sistema Além disso, é crucial realizar uma análise cuidadosa e modelagem do sistema antes de finalizar a arquitetura. Técnicas como: · Análise de Worst-Case Execution Time (WCET) · Modelagem de desempenho · Análise de confiabilidade · Simulação de sistema Essas técnicas podem ajudar a validar a arquitetura proposta e identificar potenciais gargalos ou problemas antes da implementação. Por fim, a utilização de ferramentas e frameworks específicos para sistemas embarcados, como RTOS (Real-Time Operating Systems), middleware para sistemas embarcados, e ferramentas de análise estática de código, pode auxiliar na implementação eficiente da arquitetura escolhida. Em resumo, uma arquitetura bem projetada para sistemas embarcados deve equilibrar as restrições de recursos, requisitos de desempenho, confiabilidade e segurança. Deve ser flexível o suficiente para acomodar futuras atualizações, mas otimizada para o hardware específico e os casos de uso do sistema. A chave é uma abordagem sistemática e bem pensada que considere todos os aspectos do sistema embarcado desde o início do processo de design.