Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas de Tempo Real Material Teórico Responsável pelo Conteúdo: Prof. Dr. Cléber Silva Ferreira da Luz Revisão Textual: Prof.ª Esp. Kelciane da Rocha Campos Sistemas de Tempo Real Distribuídos • Introdução; • Definição de Sistema Distribuído; • Modelos de Programação; • Plataformas de Processamento; • MPI; • Conclusão e Resumo da Unidade. · Apresentar todos os conceitos envolvidos no desenvolvimento de sis- temas de tempo real distribuídos. OBJETIVO DE APRENDIZADO Sistemas de Tempo Real Distribuídos Orientações de estudo Para que o conteúdo desta Disciplina seja bem aproveitado e haja maior aplicabilidade na sua formação acadêmica e atuação profissional, siga algumas recomendações básicas: Assim: Organize seus estudos de maneira que passem a fazer parte da sua rotina. Por exemplo, você poderá determinar um dia e horário fixos como seu “momento do estudo”; Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma alimentação saudável pode proporcionar melhor aproveitamento do estudo; No material de cada Unidade, há leituras indicadas e, entre elas, artigos científicos, livros, vídeos e sites para aprofundar os conhecimentos adquiridos ao longo da Unidade. Além disso, você também encontrará sugestões de conteúdo extra no item Material Complementar, que ampliarão sua interpretação e auxiliarão no pleno entendimento dos temas abordados; Após o contato com o conteúdo proposto, participe dos debates mediados em fóruns de discus- são, pois irão auxiliar a verificar o quanto você absorveu de conhecimento, além de propiciar o contato com seus colegas e tutores, o que se apresenta como rico espaço de troca de ideias e de aprendizagem. Organize seus estudos de maneira que passem a fazer parte Mantenha o foco! Evite se distrair com as redes sociais. Mantenha o foco! Evite se distrair com as redes sociais. Determine um horário fixo para estudar. Aproveite as indicações de Material Complementar. Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma Não se esqueça de se alimentar e de se manter hidratado. Aproveite as Conserve seu material e local de estudos sempre organizados. Procure manter contato com seus colegas e tutores para trocar ideias! Isso amplia a aprendizagem. Seja original! Nunca plagie trabalhos. UNIDADE Sistemas de Tempo Real Distribuídos Introdução Sistemas de tempo real são sistemas computacionais que se preocupam em responder a eventos em um determinado intervalo de tempo. Neste sistema com- putacional, eventos chegam a todo o momento, e o sistema deve responder a tais eventos em prazo determinado. Um sistema de tempo real deve ser capaz de res- ponder a diversos eventos simultaneamente. Dessa forma, a programação paralela e destruída possui grande influência em sistemas de tempo real. Um sistema com- putacional que responde a eventos de tempo real pode utilizar tanto computação paralela, como computação distribuída, visando responder aos diversos eventos simultaneamente e não perdendo nenhum prazo. Nesta aula, iremos realizar um estudo sobre sistemas de tempo real distribuído, isto é, sistemas de tempo implementados na forma de sistemas distribuídos. Todos os conceitos e elementos envolvidos na computação distribuída serão estudados nesta unidade, bem como a definição de sistema distribuído, plataforma de proces- samento, modelos de programação, entre outros. Definição de Sistema Distribuído Vamos começar pela definição de um sistema distribuído. Segundo Tanenbaum (2003), “um sistema distribuído é uma coleção de computadores independentes entre si que se apresenta ao usuário como um sistema único e coerente”. Em outra definição mais clara, um sistema distribuído é um sistema computacional composto por vários computadores conectados por uma rede física que se apresenta ao usu- ário como um único computador. Em um sistema distribuído, cada computador é considerado como uma unida- de de processamento. Uma unidade de processamento recebe vários nomes, tais como nó, node, máquina, host, entre outros. Nesta unidade, como uma forma de padronizar a nomenclatura, iremos nos referir a uma unidade de processa- mento como node. Toda vez que falamos a palavra node, estamos nos referindo a um computador do sistema distribuído. Um sistema distribuído visa distribuir o processamento de dados entre os n nodes presentes no sistema computacional (TANENBAUM, 2003). Um sistema distribuído pode ser classificado como: • Homogêneo; e • Heterogêneo. Um sistema distribuído homogêneo é um sistema composto por unidades de processamento iguais, isto é, todos os computadores do sistema distribuído são iguais. Já um sistema distribuído heterogêneo é composto por vários computadores diferentes, cada node no sistema é diferente um do outro. 8 9 Node 01 Node 02 Node 05 Node 06 Node 04 Node 03 Figura 1 – Sistema distribuído Agora que já definimos um sistema distribuído, por que implementar um sistema de tempo real de forma distribuída? A próxima seção nos ajuda a entender essa questão. Por Que Criar um Sistema de Tempo Real Distribuído? Existem 4 motivos para criar um sistema de tempo real de forma distribuída. • Compartilhamento de recursos; • Aumento da velocidade; • Confiabilidade; • Comunicação. Compartilhamento de recursos: uma das principais vantagens de criar um sistema de tempo real de forma distribuída é o compartilhamento de recursos. Um mecanicismo de compartilhamento em um sistema distribuído deve prover o compartilhamento de arquivos, dados, processamento e recursos. Por exem- plo, um sistema distribuído permite compartilhar o processamento. Cada node se apresenta como uma unidade de processamento. Dessa forma, um sistema dis- tribuído pode distribuir o processamento dos diversos eventos a que ele deve res- ponder simultaneamente e, assim, responder a todos os eventos ao mesmo tempo (TANENBAUM, 2003). Aumento da velocidade: um sistema de tempo real deve responder a todos os eventos no intervalo de tempo determinado, isto é, não deve haver perda de prazo. Se o sistema de tempo real puder compartilhar as tarefas que devem ser realizadas ao se responder a um evento, o tempo de resposta irá diminuir proporcionalmen- te. Por exemplo, uma tarefa leva 4 minutos para ser respondida. Se o sistema de tempo real distribuído possuir 4 recursos capazes de compartilhar o processamento de tal resposta, o tempo de resposta seria de 1 minuto. Com o compartilhamento 9 UNIDADE Sistemas de Tempo Real Distribuídos da tarefa, a velocidade de processamento aumenta e o tempo de resposta diminui (TANENBAUM, 2003). Confiabilidade: um sistema de tempo real deve ser totalmente tolerante a fa- lhas, caso as mesmas ocorram o sistema deve completar a tarefa no prazo deter- minado. Em um sistema de tempo real distribuído, caso um node falhe, os demais nodes podem continuar o processamento sem problema nenhum, isto é, se o processamento realizado no momento da falha for independente. Caso o proces- samento dependa dos outros nodes, o sistema deve identificar e corrigir a falha imediatamente. É importante enfatizar que o fato de o sistema agora possuir mais unidades de processamento não mascara a ocorrência de falhas, as mesmas podem ocorrer e devem ser solucionadas imediatamente (TANENBAUM, 2003). Comunicação: um sistema de tempo real distribuído facilita a comunicação entre os processos. Quando várias máquinas estão conectadas umas às outras por uma rede, a comunicação, isto é, a troca de mensagem, é realizada de forma fácil e eficaz (TANENBAUM, 2003). É importante ressaltar que, para aumentar a velocidade no processamento e, consequentemente, ganhar mais desempenho no processamento de uma aplicação distribuída, o sistema computacional deve possuir um bom mecanismo de balan- ceamento de carga. Um mecanismo de balanceamento de carga irá balancear as cargas de trabalhos entre os diversos nodes do sistema distribuído. Uma má distribuiçãona carga de trabalho entre os recursos de processamento pode sobre- carregar alguns recursos e deixar outros ociosos, impactando no desempenho da aplicação (GALVIN, 2000). Modelos de Programação Diversos modelos de programação são utilizados em sistemas de tempo real, entre eles estão: • Modelo mestre e escravo; • Pool de tarefa; • Pipeline. As próximas seções apresentam mais detalhes sobre estes modelos de programação. Modelo Mestre e Escravo No modelo mestre escravo, um node é definido como mestre e os demais nodes são definidos como escravos. O node mestre envia dados para os escravos processarem. Os nodes escravos, por sua vez, recebem os dados, processam tais dados e os enviam novamente para o mestre. Após receber os dados processados, o node mestre envia mais dados para os escravos processarem. O envio e recebi- mento de dados é realizado até que todos os dados sejam processados. 10 11 Processo Mestre escravo 1 escravo 2 escravo N . . . Figura 2 – Modelo mestre e escravos Neste modelo de programação, há uma comunicação muito grande entre o mes- tre e os escravos. Dessa forma, este modelo é muito eficiente quando a granulari- dade da computação é grossa, isto é, cada computador realiza uma quantidade grande de computação. A granularidade grossa mascara o overhead da comunica- ção. Agora se a granularidade da computação é fina, isto é, a computação que cada computador irá realizar é pequena, este modelo já não é tão eficiente, porque o overhead da comunicação será maior que a computação (TANENBAUM, 2003). Para a computação neste modelo ser eficiente, deve-se, também, realizar as seguintes observações: • este modelo funciona perfeitamente quando as tarefas são independentes; e • quando as tarefas ocorrem de forma inesperada. Pool de Tarefas Neste modelo de programação, não há a figura de um elemento central contro- lando o processamento. Os próprios nodes são responsáveis por pegar, selecionar a tarefa que eles irão processar. Como se os nodes mergulhassem em uma “piscina de tarefa”. Após processar uma tarefa, o node volta para a “piscina de tarefa” e seleciona outra tarefa para processar. Neste modelo de programação, o processamento só termina quando todas as tarefas tiverem sido processadas. Node 01 Node 02 Node 05 Node 06 Node 04 Node 03 Tarefa 1 Tarefa 2 Tarefa 3 Tarefa 4 Figura 3 – Pool de tarefas 11 UNIDADE Sistemas de Tempo Real Distribuídos Pipeline Neste modelo de programação, as unidades de processamento são responsáveis por processar uma fração da tarefa. A distribuição do processamento é realizada da seguinte forma: cada node realiza um “pedacinho” da tarefa. Conforme ilustrado na Figura 4. Node 01 Node 02 Node 05Node 04Node 03 Tarefa 1 Tarefa 1 Tarefa 1 Tarefa 1 Tarefa 1 Figura 4 – Modelo de programação Pipeline Plataformas de Processamento Um sistema de tempo real distribuído pode utilizar diversas plataformas de pro- cessamento, entre elas: • Cluster; • Grid. Cluster Um Cluster pode ser considerado como vários computadores conectados por uma rede física que se apresenta para o usuário como um único computador. Nes- te sistema computacional, cada computador é considerado como uma unidade de processamento independente, e juntos processam uma aplicação de forma distribu- ída. Habitualmente, um Cluster possui uma unidade central que se apresenta para o usuário como sendo “um único computador”. 12 13 O objetivo principal de um Cluster é distribuir o processamento da aplicação. Distribuindo o processamento da aplicação, é possível aumentar a velocidade do processamento da aplicação e ganhar mais desempenho no processamento. Unidade Central Figura 5 – Cluster Um Cluster pode usar vários modelos de programação, tais como mestre e es- cravo, pool de tarefas e pipeline. Grid Assim como um Cluster, um Grid é um aglomerado de computadores que se apresenta para o usuário como um único computador. Todavia, a diferença entre os dois é a forma como as máquinas são conectadas. Em um Grid, os computado- res são conectados por uma rede internet e não mais por uma rede física. Um Grid possui o mesmo objetivo de um Cluster, isto é, distribuir o proces- samento da aplicação. Como também utiliza os modelos de programação de um Cluster. Realmente, a única característica que os difere é a forma como os compu- tadores são conectados. Cluster por uma rede física e Grid pela internet. MPI É muito comum um sistema de tempo real distribuído ser implementado utili- zando um Cluster de computadores. MPI (Message-Passing Interface) é uma bi- blioteca de desenvolvimento voltada para aplicações distribuídas. Tendo como foco o envio e recebimento de mensagem, esta biblioteca é muito utilizada em Cluster de computadores. MPI disponibiliza funções para enviar e receber dados entre os vários nós do Cluster. Nesta seção, iremos estudar os principais aspectos de desen- volvimento de um sistema distribuído utilizando MPI. Iremos estudar as principais funções do MPI, entre elas daremos mais foco para as funções: • MPI_Init(); • MPI_Finalize(); 13 UNIDADE Sistemas de Tempo Real Distribuídos • Send(); • Recv(); • Isend(); • Irecv(); • Bcast(); • Scatter(); • Gather(). Em um programa MPI, processos são representados por ranks e estes são nu- merados, ex.: rank 0, rank 1, rank 2, rank 3 ... rank n. Um programa MPI sempre começa com MPI_Init(int *argc,char *argv); e ter- mina com MPI_Finalize(void);, entre MPI_Init e MPI_Finalize deve estar todo o código distribuído do programa. Uma mensagem pode ser enviada pela função MPI_Send(). A sintaxe do MPI_ Send() é a seguinte: MPI_Send(void *buf,int count,MPI_Datatype dtype,int dest,int tag,MPI_Comm comm); Nesta função: • buf é o endereço do dado; • int count é a quantidade de dados que será enviada; • MPI_Datatype é o tipo de dado que será enviado; • Dest é o número do rank destino; • tag é uma tag de identificação da mensagem; • comm é o “canal” de comunicação entre os ranks. Para o recebimento da mensagem, MPI disponibiliza a função MPI_Recv (). Sua sintaxe é: MPI_Recv(void *buf,int count,MPI_Datatype dtype,int source,int tag,MPI_Comm comm,MPI_Status *status); Nesta função: • buf é o endereço onde o dado será armazenado; • count é a quantidade de dados que será armazenada; • MPI_Datatype é o tipo de dado que será armazenado; • source é a identificação do rank emissor; • comm é o “canal” de comunicação entre os ranks; • status é uma estrutura que armazena o status da comunicação. 14 15 A Figura 6 ilustra um pequeno trecho de código em MPI utilizando a função Send() e Recv(). Nesse programa, utiliza-se o modelo mestre e escravo. Figura 6 – Trecho de Código MPI Send e Recv As funções Send() e Recv() são bloqueantes. Por exemplo, o rank 0 envia uma mensagem para o rank 1. O rank 1 ficará bloqueado até que toda a mensagem seja transmitida. Após o término da transmissão da mensagem, o rank 1 será desblo- queado e pode continuar o processamento. MPI_Send MPI_Reve espera espera Figura 7 – Send e Recv bloqueantes MPI também disponibiliza as funções Isend() e IRecv() para o envio de men- sagem não bloqueante. Utilizando o Isend() e o IRecv(), tanto o receptor como o emissor não ficam bloqueados. Por exemplo, o rank 0 pode enviar mensagem para o rank 1 e continuar o seu processamento. O mesmo ocorre com o rank 1 - enquanto os dados são transmitidos, o rank 1 pode continuar o processamento. A sintaxe do Isend é: MPI_Isend(void *buf,int count,MPI_Datatype dtype,int dest,int tag,MPI_Comm comm,MPI_Request *req) Nesta função: • buf é o endereço do dado; • int count é a quantidade de dados que será enviada; • MPI_Datatype é o tipo de dado que será enviado; • Dest é o número do rank destino; • tag é uma tag de identificação da mensagem; • comm é o “canal” de comunicação entre os ranks; 15 UNIDADE Sistemas de Tempo Real Distribuídos • req é o objeto que contém informações sobre a mensagem. • Já a sintaxe do Irecv() é: MPI_Irecv(void*buf,int count,MPI_Datatype dtype, int source, int tag, MPI_Comm comm, MPI_Request *req); Nesta função: • buf é o endereço onde o dado será armazenado; • count é a quantidade de dados que será armazenada; • MPI_Datatype é o tipo de dado que será armazenado; • source é a identificação do rank emissor; • comm é o “canal” de comunicação entre os ranks; • req é o objeto que contém informações sobre a mensagem. MPI_ISend MPI_IReve Figura 8 – ISend e IRecv não bloqueantes MPI ainda disponibiliza funções para o envio de mensagens coletivas MPI_Bcast(). Utilizando-se essa função, uma mensagem será enviada para todos os ranks. MPI_ Bcast() realiza uma de broadcast. Nesta operação todos os processos especificam o mesmo processo root (argumento root), cujo conteúdo do buffer será enviado. Os demais processos especificam buffers de recepção. Após a execução da chamada, todos os buffers contêm os dados do buffer do processo root. Sua sintaxe é a seguinte: MPI_Bcast(void *buf,int count,MPI_Datatype dtype,int root,MPI_Comm comm); Nesta função: • buf é o buffer onde o dado está localizado; • count é a quantidade de dados que será transmitida; • MPI_Datatype é o tipo de dado que será armazenado; • comm é o “canal” de comunicação entre os ranks. Outras funções de envio e recebimento de dados coletivos são Scatter() e Gather(). A função Scatter compartilha os dados armazenados em um buffer entre os recursos. Na operação scatter todos os processos especificam o mesmo count (número de elementos a serem recebidos). Argumentos send são significan- tes apenas para o processo root. 16 17 A sintaxe do Scatter é: MPI_Scatter(void *sendbuf,int sendcount,MPI_Datatype sendtype,void *recvbuf,int recvcount,MPI_Datatype recvtype,int root,MPI_Comm comm); Nesta função: • buf é o buffer onde o dado está localizado; • count é a quantidade de dados que será transmitida; • MPI_Datatype é o tipo de dado que será enviado; • Recvbuf é o buffer onde os dados serão armazenados; • Recvcount é a quantidade de dados que serão armazenados; • Datatype é o tipo de dado que será armazenado; • root é o rank emissor da mensagem; • comm é o “canal” de comunicação entre os ranks. Já a função Gather() é o contrário, recolhe os dados dos buffer de todos os ranks e os armazena no buffer do rank mestre. A sintaxe do Gather é: MPI_Gather(void *sendbuf,int sendcount,MPI_Datatype sendtype,void *recvbuf,int recvcount,MPI_Datatype recvtype,int root,MPI_Comm comm); Nesta função: • buf é o buffer onde o dado está localizado; • count é a quantidade de dados que será transmitida; • MPI_Datatype é o tipo de dado que será enviado; • Recvbuf é o buffer onde os dados serão armazenados; • Recvcount é a quantidade de dados que será armazenada; • Datatype é o tipo de dado que será armazenado; • root é o rank emissor da mensagem; • comm é o “canal” de comunicação entre os ranks. Conclusão e Resumo da Unidade Um sistema de tempo real pode ser implementado de forma distribuída. Um sistema distribuído é um sistema computacional composto por vários computadores conecta- dos por uma rede física que se apresenta ao usuário como um único computador. Em um sistema distribuído, cada computador é considerado como uma unida- de de processamento. Uma unidade de processamento recebe vários nomes, tais como nó, node, máquina, host, entre outros. 17 UNIDADE Sistemas de Tempo Real Distribuídos Um sistema distribuído pode ser classificado como homogêneo ou heterogê- neo. Um sistema homogêneo é um sistema composto por unidades de processa- mento iguais, isto é, todos os computadores do sistema distribuído são iguais. Já um sistema distribuído heterogêneo é composto por vários computadores diferen- tes, cada node no sistema é diferente um do outro. Ao se criar um sistema de tempo real distribuído, pode-se encontrar 4 vanta- gens, que são: Compartilhamento de recursos, Aumento da velocidade, Con- fiabilidade e Comunicação. Compartilhamento de recursos: um mecanicismo de compartilhamento em um sistema distribuído deve prover o compartilhamento de arquivos, dados, pro- cessamento e recursos. Aumento da velocidade: um sistema de tempo real deve responder a todos os eventos no intervalo de tempo determinado, isto é, não deve haver perda de prazo. Se o sistema de tempo real puder compartilhar as tarefas que devem ser realizadas ao se responder a um evento, o tempo de resposta irá diminuir proporcionalmente. Confiabilidade: um sistema de tempo real deve ser totalmente tolerante a fa- lhas, caso as mesmas ocorram o sistema deve completar a tarefa no prazo deter- minado. Em um sistema de tempo real distribuído, caso um node falhe, os demais nodes podem continuar o processamento sem problema nenhum, isto é, se o processamento realizado no momento da falha for independente. Comunicação: um sistema de tempo real distribuído facilita a comunicação entre os processos quando várias máquinas estão conectadas umas às outras por uma rede a comunicação, isto é, a troca de mensagem é realizada de forma fácil e eficaz. Um sistema distribuído deve possuir um mecanismo de balanceamento de carga que será responsável por balancear as cargas de trabalhos entre os diversos nodes do sistema distribuído. Um sistema distribuído pode utilizar diversos modelos de programação, entre eles estão: o modelo mestre e escravo, pool de tarefas e pipeline. No modelo mestre escravo, um node é definido como mestre e os demais nodes são definidos como escravos. O node mestre envia dados para os escravos processarem. Os nodes escravos, por sua vez, recebem os dados, processam tais dados e os enviam novamente para o mestre. Após receber os dados processados, o node mestre envia mais dados para os escravos processarem. No modelo pool de tarefas, os próprios nodes são responsáveis por pegar, selecionar a tarefa que eles irão processar. Como se os nodes mergulhassem em uma “piscina de tarefa”. Após processar uma tarefa, o node volta para a “piscina de tarefa” e seleciona outra tarefa para processar. No modelo Pipeline, as unidades de processamento são responsáveis por pro- cessar uma fração da tarefa. A distribuição do processamento é realizada da seguin- te forma: cada node realiza um “pedacinho” da tarefa. 18 19 Um Cluster pode ser considerado como vários computadores conectados por uma rede física que se apresenta para o usuário como um único computador. Neste sistema computacional, cada computador é considerado como uma unidade de pro- cessamento independente, e juntos processam uma aplicação de forma distribuída. Assim como um Cluster, um Grid é um aglomerado de computadores que se apresenta para o usuário como um único computador. Todavia, a diferença entre os dois é a forma como as máquinas são conectadas. Em um Grid, os computado- res são conectados por uma rede internet e não mais por uma rede física. Habitualmente, um sistema de tempo real distribuído é implementado utilizando um Cluster de computadores. MPI (Message-Passing Interface) é uma biblioteca de desenvolvimento voltada para aplicações distribuídas. Tendo como foco o envio e recebimento de mensagem, esta biblioteca é muito utilizada em Cluster de com- putadores. MPI disponibiliza funções para enviar e receber dados entre os vários nós do cluster. 19 UNIDADE Sistemas de Tempo Real Distribuídos Material Complementar Indicações para saber mais sobre os assuntos abordados nesta Unidade: Vídeos Sistema em Tempo Real - SO https://youtu.be/gaO9o-ZfMiU Sistema em Tempo Real https://youtu.be/HTLZUCkdQbA Leitura Sistemas de tempo real – parte 1 https://goo.gl/K29zuC Sistemas de tempo real https://goo.gl/4bcgvB 20 21 Referências GALVIN, S. Sistemas operacionais: conceitos. 5ª edição. São Paulo: Prentice Hall, 2.000. ________, S. Sistemas operacionais: conceitos e aplicações. 3ª edição. Rio de Janeiro: Campus, 1998. SHAW, A. C. Sistemas e software de tempo real. Porto Alegre: Bookman, 2003. TANENBAUM, A. S. Sistemas operacionais modernos. 2ª edição.São Paulo: Pearson Prentice Hall, 2003. 21
Compartilhar