Não tenho experiência em programar aplicações RT com C ++: usei Ada; também, Erlang pode se encaixar. (Há também RT Java, mas eu não tenho experiência disso.)
Em princípio, o uso de C ++ não deve ser um problema, considerando as ferramentas para IPC (como você mencionou) e para multiprogramação: fork
, etc. O gerenciamento explícito de memória estará sujeito a erros até você dominá-lo. / p>
O RT Linux é uma extensão do Linux comum. (Isso é comum para muitos RTOSs - eles são extensões para sistemas operacionais não-RT, mas de tempo compartilhado, OSs.)
Para que as tarefas de RT coexistam com os processos não-RT, o RTOS toma certas medidas: por exemplo, ele bloqueia as tarefas na memória, ou atribui-lhes prioridades mais altas que os processos. O objetivo é garantir que nenhum processo não RT bloqueie uma tarefa de RT (possivelmente levando a que ela não cumpra seu prazo - e o objetivo dos RTSs é evitar que isso aconteça).
No caso do RT Linux, ele irá atribuir ao kernel Linux a menor prioridade.
O RT Linux está abaixo do kernel do Linux, logo acima do hardware. Mas o kernel do Linux ficará indiferente a isso: ele perceberá o hardware e o RT Linux como um (isto é, como hardware). No entanto, todas as interrupções de hardware serão interceptadas pelo kernel do RT Linux, e algumas (aquelas relacionadas a tarefas de RT) serão tratadas pelo RTOS (o restante será passado para o kernel comum do Linux).
O RT Linux usa algoritmos de escalonamento RT que garantem um comportamento "previsível" (na linguagem RT), ou seja, que todas as tarefas cumprem seus prazos. Isso difere do Linux, que não pode fazer tais garantias. Além disso, o RT Linux não suporta a memória virtual, já que isso (alternando e alternando) levaria a interruptores de contexto muito mais longos (sem limites) e, portanto, tempos de atraso imprevisíveis. (Na verdade, todas as tarefas do RT Linux têm acesso total ao hardware.)