contiki os

introdução

Contiki é um sistema operacional de código aberto para a Internet das Coisas. O Contiki conecta pequenos microcontroladores de baixo custo e baixo consumo de energia à Internet, é uma poderosa caixa de ferramentas para a construção de sistemas sem fio, como por exemplo iluminação publica, monitoramento de radiação, alarmes, etc..

Contiki ganhou popularidade por causa de sua pilha TCP/IP embutida e programação preventiva leve sobre o kernel orientado a eventos, que é uma característica muito motivadora para IoT. O nome Contiki vem do famoso Kon-Tiki de Thor Heyerdahl.

Contiki oferece multitarefa e um built-in Internet Protocol Suite (TCP / IP), que precisa de apenas 10 kilobytes de memória (RAM) e 30 kilobytes de memória de leitura (ROM). Um sistema completo, incluindo também a tão queridinha, para alguns, interface gráfica do usuário, que precisa de cerca de 30 kilobytes de RAM.

DESENVOLVIMENTO

ARQUITETURA E FUNCIONAMENTO DO SISTEMA

Em aplicativos nos quais temos memória limitada, um modelo multithread consome muito dessa memória. Cada thread requer uma pilha dedicada, e não é possível prever o tamanho da pilha antecipadamente. Assim, a pilha está super provisionada, uma vez que essa alocação de memória deve ser feita no momento da criação do encadeamento. Além disso, quando temos recursos compartilhados, temos mecanismos de bloqueio de recursos para que as operações simultâneas não modifiquem esses recursos. Sistemas orientados a eventos fornecem concorrência sem a necessidade de criação de pilhas separadas ou mecanismos de bloqueio, que também, tratam processos como manipuladores de eventos que monopolizam a CPU até a conclusão. Mas isso também se torna o problema de sistemas acionados por eventos, a CPU é incapaz de responder a estímulos externos se o evento que está sendo processado por ele é longo (longos algoritmos criptográficos, por exemplo). Se o sistema operacional fosse baseado em multithreading preemptivo, nosso problema seria resolvido, já que um evento longo seria antecipado. O Contiki resolve esse problema usando um modelo híbrido que é baseado em um kernel orientado a eventos, em que o multithread preemptivo é implementado como uma biblioteca de aplicativos que é opcionalmente vinculada a programas que o requerem obrigatoriamente.

Um sistema Contiki em execução consiste em um Kernel, Bibliotecas, Carregador de programas e conjunto de processos (aplicativo ou serviço).

KERNEL

O kernel é bem pequeno, por esse motivo o kernel inclui apenas algumas linhas de código que executam funções especificas. Por exemplo, o kernel consiste em um agendador de eventos, que é leve em termos de tamanho de código. Toda a execução do programa é acionada através do mecanismo de pesquisa ou por eventos enviados pelo kernel, o mesmo suporta dois tipos de eventos, síncrono e assíncrono.

Eventos assíncronos não são entregues ao processo de recebimento imediatamente após serem postados, eles são armazenados em uma fila de eventos, os eventos na fila são entregues ao processo de recebimento pelo kernel, o kernel entrega um evento da fila de eventos por meio de loop . O receptor de um evento assíncrono pode ser um processo específico ou todos os processos em execução. Quando o receptor é um processo específico, o kernel invoca esse processo para entregar o evento. Quando o receptor de um evento é configurado para ser um processo no sistema, o kernel entrega o mesmo evento a todos os processos sequencialmente, um após o outro. A função post do processo é usada para postar um evento assíncrono, na verdade, essa função é muito simples primeiro, o tamanho da fila de eventos é avaliado e, se houver espaço para o novo evento, o evento é adicionado à fila, caso contrário, a função retornará zero.

Os eventos síncronos funcionam de maneira diferente dos eventos assíncronos, no sentido de que, quando um evento síncrono é despachado, ele é entregue ao processo de recebimento imediatamente. Outra diferença entre eventos assíncronos e síncronos é o tipo de receptor enquanto eventos assíncronos podem ser recebidos por um processo específico ou por todos os processos em execução, um evento síncrono só pode ser recebido por um processo específico, o mecanismo para invocar um receptor síncrono é semelhante ao chamada de uma função. Um receptor síncrono é chamado, então ele executa sua tarefa, após o qual ele retorna o controle para o processo de postagem.

Além de eventos, o kernel suporta um mecanismo de pesquisa. Por que, em resumo, o mecanismo de pesquisa se comporta como eventos de alta prioridade que são agendados entre eventos assíncronos. Normalmente, os processos que operam próximos ao nível de hardware usam pesquisa para avaliar o status do hardware. Quando uma pesquisa é programada, todos os processos que implementam um manipulador de pesquisa são chamados sequencialmente de acordo com sua prioridade, de maneira semelhante às funções de postagem de eventos, o Contiki também fornece uma função de pesquisa de processo para postar uma pesquisa no kernel. Postar uma pesquisa tem um efeito semelhante a uma interrupção faz com que o processo de recebimento seja agendado o mais rápido possível, o kernel do Contiki usa uma única pilha compartilhada para toda a execução do processo.

Figura 1 - Arquitetura do Contiki OS (Simples).

Figura 2 - Arquitetura do Contiki OS (Complexo).

IDENTIFICADOR DE EVENTOS

Neste ponto, você pode ter dúvidas sobre eventos, como um evento único ou como identifica-lo melhor. Para responder isso, vamos falar sobre identificadores de eventos. Um identificador de evento é um número de 8 bits usado como um identificador exclusivo para um evento. Quando um processo recebe um evento, ele usa o identificador de evento para determinar as ações a serem executadas.

Existem vários identificadores de eventos reservados pelo kernel Contiki para lidar com controle de processos, comunicação entre processos e acesso periférico.

#define PROCESS_EVENT_NONE 128

#define PROCESS_EVENT_INIT 129

#define PROCESS_EVENT_POLL 130

#define PROCESS_EVENT_EXIT 131

#define PROCESS_EVENT_CONTINUE 133

#define PROCESS_EVENT_MSG 134

#define PROCESS_EVENT_EXITED 135

#define PROCESS_EVENT_TIMER 136

CARREGAMENTO DE PROGRAMAS

Para implementar programas carregáveis, o Contiki usa um formato binário que inclui informações de realocação e uma função de realocação de tempo de execução, mas como funciona um programa em carregamento? Quando um programa é carregado, o carregador usa as informações de realocação fornecidas pelo formato binário para alocar memória, no caso de não haver memória suficiente, o carregamento é abortado, caso contrário, a função de inicialização é chamada para iniciar ou substituir outros processos.

CONCLUSÃO

Algumas questões tem que ser ressaltadas sobre a arquitetura do Contiki:

  • É para sistemas com restrições de memória. Assim, usa um kernel orientado a eventos.
  • Como isso pode apresentar problemas durante computações longas, o Contiki fornece multi-encadeamento preventivo como uma biblioteca de aplicativos que é executada sobre o kernel baseado em eventos.
  • o contiki quando está em execução possui programas principais e carregados. O núcleo consiste no kernel, no carregador de programas, nas partes mais usadas do tempo de execução da linguagem e nas bibliotecas de suporte. Os programas carregados podem ser carregados e descarregados durante o tempo de execução.
  • O carregamento e descarregamento dinâmico de programas e serviços é viável em um sistema com recursos limitados, enquanto mantém o sistema básico leve e compacto. Embora nosso kernel seja baseado em eventos, o multithreading preemptivo pode ser fornecido por processo.
  • Devido à sua natureza dinâmica, o Contiki pode ser usado para multiplexar o hardware de uma rede entre vários aplicativos ou vários usuários.

REFERENCIAS E DOWNLOADS

Architecture CONTIKI OS - komalbattula.wordpress;

GitHub.