Click here to load reader
Upload
tiago-bitencourt
View
46
Download
1
Embed Size (px)
Citation preview
RTLINUX
Marcus Vinicius Duarte Costa, Alonço Domingos, Henrique Mendonça,
Tiago Ferreira Bitencourt, Lucélia Santos
Engenharia da Computação – Faculdade Área1
02 Junho de 2012
Salvador – BA – Brasil
[email protected], [email protected], [email protected],
[email protected], [email protected]
Resumo. Objetivo deste artigo é desmistificar a aplicação do Linux como
Sistema em Tempo Real, mostrando como se deu origem, o funcionamento e a
finalidade.
1. Informações Gerais
O RTLinux é um sistema operacional de tempo real crítico. Seu kernel é uma extensão
Linux que se propõe a suportar tarefas com restrições temporais, as quais caracterizam
uma aplicação de tempo real.
Foi criado em fevereiro de 2007 por Michael Barabanov e Victor Yodaiken para que o
Linux além de ter velocidade e eficiência pudesse ter.
É possível obter desempenho em soft real time pelo kernel padrão e, com uma maior
dedicação, é possível criar aplicativos em tempo real hard.
2. Funcionalidades do Linux SRT
A maioria das funcionalidades do RTLinux está em uma coleção de módulos
carregáveis do kernel que prestam serviços opcionais e níveis de abstração. Estes
módulos incluem:
1. rtl sched uma prioridade programador que suporta uma "lite POSIX" interface.
2. rtl time que controla os relógios do processador e exporta uma interface abstrata
para ligar manipuladores do relógios.
3. rtl posixio suportes do estilo POSIX de read /white /open com interface para
drivers de dispositivos.
4. rtl fifo conecta tarefas RT e manipuladores de interrupção de processos do
Linux.
5. Semáforo, é um pacote contribuído por Jerry Epplin.
6. POSIX apoio mutex está prevista para estar disponível na próxima versão de
atualização do RTLinux.
7. mbuff é um pacote escrito por Tomasz Motylewski para fornecer memória
compartilhada entre os componentes e processos RT Linux.
3. Módulos implementados no Kernel
A aplicação RT-Linux é na verdade um módulo do kernel. É o mesmo tipo de módulo,
que o Linux usa para os drivers, sistemas de arquivos entre outros. A principal diferença
entre módulo RTLinux e um módulo comum do Linux é que o módulo RT-Linux chama
funções, que são oferecidos pelo RT-Linux kernel enquanto módulo comum usa funções
do kernel do Linux apenas.
Um código-fonte de um módulo Linux simples é dado abaixo. Ele contém duas funções:
init_module, que é utilizado para o módulo ser iniciado por insmod ou modprobe, e
cleanup_module, que é chamado antes do módulo ser removido por rmmod.
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
printk("Init\n"); /*Printing "Init" in Kernel*/
return 0;
}
void cleanup_module(void)
{
printk("Cleanup\n"); /*Clearing "Init" in Kernel*/
}
4. Threads
RT-Linux implementa uma API POSIX para a manipulação de threads; a thread é criada
pela função pthread_create() e utiliza parâmetro que contem o código que será
executado pela thread, e a sua prioridade de execução.
5. Tempo real no kernel padrão 2.6
Hoje, no kernel 2.6, é possível obter o desempenho em tempo real soft por meio de uma
configuração simples de kernel. No kernel Linux 2.6 padrão, quando um processo de
espaço de usuário faz uma chamada para o kernel (por meio de uma chamada de
sistema), ele não pode prevalecer. Isto significa que, se um processo de baixa prioridade
faz uma chamada de sistema, um processo de alta prioridade precisa esperar até o
término dessa chamada antes de obter acesso à CPU. A nova opção de configuração
CONFIG_PREEMPT altera esse comportamento do kernel permitindo um
escalonamento dos processos se um trabalho de alta prioridade estiver disponível
(mesmo se o processo estiver no meio de uma chamada de sistema).
Esta opção de configuração tem no entanto, um trade-off. Apesar de a opção permitir o
desempenho em tempo real soft e mesmo sob carga fazer com que o sistema operacional
execute mais uniformemente, isso é feito com um custo. Esse custo é um rendimento
levemente mais baixo e uma pequena redução no desempenho do kernel por causa da
sobrecarga incluída pela opção CONFIG_PREEMPT. Essa opção é útil para desktop e
sistemas embarcados, mas talvez não seja a correta em todos os cenários (por exemplo,
servidores).
6. Thin Kernel
A abordagem thin-kernel (ou microkernel) utiliza um segundo kernel como interface de
abstração entre o hardware e o kernel Linux. O kernel Linux que não trabalha em tempo
real é executado em segundo plano como uma tarefa de baixa prioridade do thin kernel e
hospeda todas as tarefas que não sejam em tempo real. As tarefas em tempo real são
executadas diretamente no Thin kernel.
A utilização principal do thin kernel (além de hospedar as tarefas em tempo real) é o
gerenciamento das interrupções. O thin kernel intercepta as interrupções para assegurar
que o kernel que não seja em tempo real não possa preceder a operação do thin kernel.
Isto permite que o thin kernel forneça suporte em tempo real hard.
Embora a abordagem do thin kernel tenha suas vantagens (a coexistência entre o suporte
em tempo real hard e um kernel Linux padrão), ela apresenta desvantagens. As tarefas
em tempo real e as que não são em tempo real são independentes, o que pode dificultar a
depuração de erros. As tarefas que não são em tempo real também não oferecem suporte
completo à plataforma Linux (é por isso que a execução do thin kernel se chama thin ).
7. Nano-kernel
Enquanto a abordagem thin kernel conta com um kernel minimizado que inclui
gerenciamento de tarefas, a abordagem nano-kernel dá um passo adiante ao minimizar
ainda mais o kernel. Passa, assim, a ser menos um kernel e mais um Hardware
Abstraction Layer (HAL). O nano-kernel fornece ao hardware o compartilhamento de
recursos para vários sistemas operacionais funcionando em uma camada mais alta.
Como o nano-kernel abstrai o hardware, pode fornecer uma priorização para sistemas
operacionais de camadas mais altas e, portanto, oferecer suporte em tempo real hard.
Observe as semelhanças entre essa abordagem e a abordagem de virtualização para
executar vários sistemas operacionais. Neste caso, o nano-kernel abstrai o hardware a
partir dos kernels em tempo real e dos que não são em tempo real. Isto é similar à forma
como os hypervisores abstraem o hardware vazio dos sistemas operacionais convidados.
Consulte Recursos para obter informações adicionais.
Um exemplo da abordagem nano-kernel é o Adaptive Domain Environment for
Operating Systems (ADEOS). O ADEOS oferece suporte a vários sistemas operacionais
concorrentes que estejam executando simultaneamente. Quando ocorrerem eventos de
hardware, o ADEOS consulta cada sistema operacional de uma cadeia para verificar
qual irá lidar com o evento.
8. Resource kernel
Outra arquitetura de tempo real é a abordagem resource kernel. Ela inclui um modulo a
um kernel para fornecer reservas a vários tipos de recursos. As reservas garantem acesso
a recursos de sistema multiplexados por tempo (CPU, rede ou largura de banda de
disco). Esses recursos apresentam diversos parâmetros de reserva, como o período de
repetição, o tempo de processamento exigido (ou seja, o tempo necessário para o
processamento) e o prazo final.
O resource kernel oferece um conjunto de Interfaces de Programação de Aplicativos
(APIs) que permitem às tarefas solicitar essas reservas. O resource kernel pode, então,
unir as solicitações para definir um planejamento, de modo a fornecer acesso garantido
por meio de limitações definidas por tarefa (ou retornar um erro se elas não puderem ser
garantidas). Ao utilizar um algoritmo de planejamento como o Earliest-Deadline-First
(EDF), o kernel pode então ser utilizado para lidar com a carga de trabalho dinâmica do
planejamento.
Um exemplo de uma implementação de resource kernel é o Linux/RK da CMU, que
integra um resource kernel portátil no Linux como um módulo carregável. Essa
implementação evoluiu para a oferta comercial TimeSys Linux/RT.
Conclusão
Sabendo que os Sistemas em Tempo Real estão cada vez mais presentes no nosso dia-a-
ddia, tentamos com este artigo mostrar que o linux pode ser adaptado a estes sistemas
com uma simples implementação em sua arquitetura, adicionando um kernel que
permite fazer o controle de prioridade a recursos de hardware.
Referências
Disponivel em: http://www.engr.mun.ca/~oyoung/8894-thesis.pdf
Consultado em: 28/05/2012
Disponivel em: http://www.yodaiken.com/
Consultado em: 28/05/2012
Disponivel em: http://www.ibm.com/developerworks/br/library/l-real-time-linux/
Consultado em: 28/05/2012
Disponivel em: http://www.ece.ufrgs.br/~fetter/eng04008/rtlinux.pdf
Consultado em: 28/05/2012
Disponivel em: http://www.das.ufsc.br/~romulo/discipli/cad-cbtisa/sotr-resumo.pdf
Consultado em: 28/05/2012