Arquitetura de Sistemas Operativos Sistemas Operativos 2011/2012
1 Modelos de Interacção entre Processos Produtor e Consumidor
Os dados transmitidos entre as aplicações são geralmente opacos para o sistema operativo, na medida em que este apenas se encarrega de os recolher do produtor (emissor) e entregá-los ao consumidor (recetor), ignorando a sua organização e estrutura internas (que podem ir desde simples sequências de caracteres ou valores numéricos até documentos estruturados, ou grafos de objetos serializados, quer em XML quer em codificação binária).
Cabe aos processos acordar o formato que os dados devem respeitar, bem como o protocolo a que obedece a troca dos mesmos. Estas operações são efetuadas recorrendo aos mecanismos de comunicação entre processos que são disponibilizados pelo sistema operativo.
A comunicação entre processos é também necessária para a própria sincronização entre tarefas e processos que se executam em máquinas diferentes, uma vez que não é possível, na ausência de uma memória comum, a dois processos em execução em computadores distintos, sincronizar-se, sem que haja transmissão física de informação entre eles.
Desta forma, os mecanismos de comunicação entre processos permitem elevar o nível de abstracção com que é programada a cooperação entre processos, uma vez que integram tanto os aspetos da sincronização como os da transferência de dados.
O modelo computacional da comunicação entre processos será descrito recorrendo à abstração de um objeto canal. A partir deste objeto conceptual são apresentadas as formas típicas de interação entre processos através de canais de comunicação, seguidas da explicação das características mais relevantes dos mesmos (por exemplo, estrutura das mensagens, sincronização), das técnicas de implementação e da sua integração no modelo computacional.
Estas vertentes vão permitir categorizar os mecanismos de comunicação reais integrados nos sistemas operativos Linux e Windows. Modelo de comunicação como generalização do modelo de cooperação entre processos através da abstração de um objeto canal:
Canal conceptual.
Na cooperação entre processos, existe um conjunto de algoritmos mais utilizados em problemas reais (por exemplo, produtor-consumidor, leitores e escritores). No modelo de comunicação entre processos existem também modelos de interação que são mais usuais e, por isso, importantes para compreender a maior parte das situações de comunicação entre processos.
A possibilidade de seguir um determinado modelo de interação entre processos determina muitas vezes qual ou quais os mecanismos de comunicação efetivamente utilizados por uma aplicação. A exploração destas características permite também otimizar a implementação dos mecanismos de transferência da informação.
Assim os modelos de interação entre processos envolvidos na comunicação, de modo a realizarem a comunicação entre si, são definidos por dois aspetos principais: o número de processos interlocutores envolvidos, i.e., associados ao canal, e o papel desempenhado por cada um deles.
Os modelos de interacção mais relevantes são apresentados de seguida indicando o número de processos com acesso a cada uma das extremidades do canal conceptual, referido na Figura anterior, juntamente com o nome porque são tradicionalmente conhecidos: Um-para-Um (Mestre-Escravo); Muitos-para-Um (Correio ou canal sem ligação); Um-para-Um de Vários (Diálogo ou canal com ligação); Um-para-Muitos (Difusão); Muitos-para-Muitos.
Um-Para-Um (Mestre-Escravo) Este modelo de interação baseia-se na associação estrita entre dois processos, sendo estabelecida uma ligação entre ambos. Pressupõe que o processo escravo tem a sua atividade totalmente controlada por um processo mestre. O canal de comunicação entre os dois processos é fixo e a associação destes ao canal é preestabelecida, o que implica que cada um conheça previamente a identificação do outro.
Um-Para-Um (Mestre-Escravo) Este modelo corresponde a estabelecer um canal com ligação entre os dois processos. O processo mestre age principalmente como produtor enquanto o escravo age principalmente como consumidor das mensagens enviadas pelo produtor, embora exista a possibilidade de transmissão de mensagens nos dois sentidos para envio de resultados da tarefa executada (pelo processo escravo).
Um-Para-Um (Mestre-Escravo) Este modelo de interação representa a alternativa mais simples de comunicação; todavia, impõe uma rigidez que limita fortemente o seu uso.
Um-Para-Um (Mestre-Escravo) É normalmente utilizado em situações em que existe um processo escravo encarregue de realizar tarefas específicas como controlar sensores, braços-robot, gravadores CD/DVD, cuja atividade é completamente controlada por um processo gestor (o mestre).
Um-Para-Um (Mestre-Escravo) O diagrama da figura seguinte descreve o decurso do modelo de interação mestre/escravo.
Um-Para-Um (Mestre-Escravo) O mestre não tem de pedir permissão para utilizar o escravo (enviando uma mensagem passo 1). O processo escravo processa a informação recebida (passo 2), podendo em sequência notificar o mestre de que completou o processamento. O principal aspecto deste modelo de interação reside na natureza estática e predefinida da associação entre processo mestre e escravo.
Um-Para-Um (Mestre-Escravo) Este modelo de interação é utilizado, por exemplo, em Linux quando o processo que executa a shell de interacção com o utilizador (mestre) cria processos-filho (escravos para executar os comandos digitados por este, e também quando a saída de um processo (mestre) é utilizada como entrada para outro processo (escravo) através do mecanismo de pipes.
Muitos-Para-Um (Correio) O correio baseia-se na possibilidade de transferência assíncrona de informação sob a forma de mensagens. As mensagens são enviadas individualmente por um conjunto de processos produtores a um processo consumidor que está preparado para recebê-las. O canal é criado previamente pelo processo consumidor e o seu nome é conhecido por todos os processos produtores, sendo por isso estático.
Muitos-Para-Um (Correio) Cada processo consumidor pode, desta forma, ser visto como um servidor que atende pedidos de vários clientes (os processos produtores). Este modelo de interação é mais flexível que o anterior. O produtor pode enviar mensagens sem que as anteriores tenham sido recebidas e processadas pelo consumidor. O produtor não tem qualquer controlo sobre o consumidor.
Muitos-Para-Um (Correio) O consumidor não é escravo uma vez que não trabalha para um produtor em particular, mas para o conjunto de processos a quem oferece um serviço. Este modelo de interacção é utilizado tradicionalmente pelos serviços de impressão (spooling) em que o processo consumidor recebe mensagem enviadas através do canal pelos processos produtores contendo pedidos de impressão de documentos.
Muitos-Para-Um (Correio) É também utilizado no âmbito das grids computacionais em que um computador de grande porte (consumidor) recebe mensagens de computadores pessoais (produtores) contendo pedidos de execução de cálculos científicos complexos. Numa analogia com o mundo real, este modelo de interacção é ainda exemplificado pelo envio de telegramas, mensagens telefónicas e o correio postal tradicional que lhe dá o nome.
Muitos-Para-Um (Correio) O diagrama da figura seguinte descreve o decurso do modelo de interação correio.
Muitos-Para-Um (Correio) O canal de comunicação deve memorizar as mensagens durante o intervalo de tempo que decorre entre a sua produção e o seu consumo, podendo um produtor ficar bloqueado se a capacidade de memorização do canal ti ver sido excedida. O mesmo pode ocorrer com o consumidor quando não há mensagens para serem recebidas ficando este bloqueado. O canal com capacidade de memorização das mensagens, utilizado neste âmbito, é vulgarmente designado por caixa de mensagens.
Um-Para-Um de Vários (Diálogo) O diálogo é um modelo de comunicação que se pode considerar como apresentando características híbridas dos dois modelos anteriores. Tal como na interacção mestre/escravo, também se estabelece um canal fixo entre dois processos. Contudo, este é criado de uma forma dinâmica.
Um-Para-Um de Vários (Diálogo) Um dos processos, designado normalmente como cliente, deve requisitar o estabelecimento da ligação enviando uma mensagem para um canal previamente criado pelo servidor exclusivamente para esse fim. Como resultado é criado um novo canal ao qual o cliente e o novo processo (ou tarefa) servidor dedicado ficam automaticamente associados.
Um-Para-Um de Vários (Diálogo) A associação é temporária e durará apenas o tempo da interação. Portanto, ao terminar esta ligação entre os dois processos, o novo canal é eliminado. Existe ainda uma variante desta forma de interação para o caso em que não é possível, ou desejável, criar um novo processo ou tarefa como servidor dedicado a cada cliente.
Um-Para-Um de Vários (Diálogo) Neste caso, cada um dos processos ou tarefas do servidor pode servir um número, desejavelmente reduzido, de clientes. Esta situação, também híbrida, tem um pendor adicional na solução do tipo correio.
Um-Para-Um de Vários (Diálogo) A justificação principal para este modelo de comunicação advém da maior eficácia que se pode obter da utilização de um canal dedicado quando os processos vão interactuar longamente ou transferir um grande volume de dados. A arquitetura e os protocolos de transferência de dados podem ser otimizados no sentido de obter melhor desempenho que utilizando duas caixas de mensagens.
Um-Para-Um de Vários (Diálogo) Este modelo de interação é utilizado no estabelecimento de uma sessão remota com um outro computador (por exemplo, telnet, ssh), na transferência de ficheiros e na utilização de remote desktop connection em Windows. Este modelo de interacção é tipicamente exemplificado pelas ligações telefónicas que consistem num canal dedicado entre dois telefones criado pela rede de centrais telefónicas.
Um-Para-Um de Vários (Diálogo) O diagrama da figura seguinte descreve o decurso do modelo de interacção diálogo.
Um-Para-Um de Vários (Diálogo) O processo cliente executa-se numa máquina e começa por estabelecer a comunicação com um servidor principal, encarregue do serviço em causa, que se executa num outro computador, utilizando para isso um canal predeterminado. Uma vez estabelecido o contacto, o servidor principal cria um novo processo (ou tarefa) e um novo canal dedicados apenas interação posterior com o cliente. Desta forma, o servidor principal apenas recebe pedidos de comunicação e, dinamicamente, cria a infra-estrutura específica que vai atender cada cliente.
Um-Para-Muitos (Difusão) Neste modelo de interacção, um processo produtor pretende enviar a mesma informação a um conjunto de processos consumidores, elencados em extensão, ou reunidos num grupo com identificação própria. Este modelo distingue-se do correio no seguinte aspecto: cada mensagem não é apenas recebida por um processo.
Um-Para-Muitos (Difusão) O motivo mais imediato para utilizara difusão relaciona-se com a necessidade de enviar a vários processos a mesma mensagem, tipicamente com informação de uso geral. Por exemplo, notificar que um serviço está disponível ou ficou indisponível. A difusão pode também ser realizada como um desdobramento do modelo de correio, obrigando o produtor a repetir a mensagem um número de vezes idêntico ao cardinal do conjunto de consumidores.
Um-Para-Muitos (Difusão) Contudo, esta realização é ineficiente e pouco flexível, dado que obriga a conhecer os nomes dos canais associados a todos os processos consumidores. Esta dificuldade é particularmente relevante no âmbito da comunicação em sistemas distribuídos sendo por isso utilizadas soluções como multicast IP e comunicação em grupo
Um-Para-Muitos (Difusão) O diagrama da figura seguinte ilustra este modelo de interação, de que um exemplo é o comportamento dos gestores de janelas quando se pretende desligar o computador, realizado através da difusão de uma mensagem de terminação/fecho a todas as janelas de aplicações em execução.
Um-Para-Muitos (Difusão)
Um-Para-Muitos (Difusão) Analogamente, quando se pretende minimizar todas as janelas, ocorre a difusão de uma mensagem específica, pelo gestor de janelas, a todas as janelas de aplicações em execução. Outros exemplos incluem a selecção de processos (por exemplo, selecção do gestor de periférico que controla uma impressora laser difundindo uma mensagem de detecção de gestores), detecção de recursos e serviços nas arquitecturas Jini e UPnP, e para aumento da fiabilidade (difusão das operações de um sistema de ficheiros a dois ou mais processos controladores de modo a manter duas cópias actualizadas e tolerar faltas).
Um-Para-Muitos (Difusão) Estabelecendo novamente a analogia com a comunicação no mundo real, este modelo é também exemplificado pelas transmissões rádio e TV com um único produtor (estação emissora) e muitos consumidores (aparelhos de receção).
Muitos-Para-Muitos Neste modelo de interação generalizado, todos os processos podem ser produtores e consumidores de mensagens e alternarem esses papéis durante a sua execução. Todos os processos podem ser produtores e as mensagens ficam disponíveis à totalidade dos processos que também podem agir como consumidores. Esta forma de interação é normalmente exclusiva para ambientes em que todos os processos interlocutores podem ler e escrever para memória partilhada entre eles.
Muitos-Para-Muitos Um exemplo deste modelo de interação é a utilização do clipboard no Windows onde todas as janelas de aplicações, instruídas pelo utilizador, podem produzir e consumir informação. Como exemplo de um sistema distribuído, a Wikipedia segue também este modelo de interação, onde todos os utilizadores podem consultar e inserir texto em cada artigo wiki. Fora do âmbito da informática, este modelo de interação pode ser exemplificado pela utilização de um quadro numa sala de reuniões através do qual todos os participantes podem produzir e consumir informação. Os modelos de interação apresentados constituem as formas
Muitos-Para-Muitos Na tabela seguinte são apresentados exemplos adicionais de correspondência com situações no mundo real. Modelo de Interação Situação no Mundo Real Um-para-um Muitos-para-um Um-para-um de vários Um-para-um Muitos-para-muitos Comunicação com par de walkie-talkies Correio postal, SMS entre telemóveis. Serviço telefónico. Televisão, rádio, painéis publicitários. Youtube, Clipboard.
Avaliação - Trabalho Teórico-Prático 4 Descreva um dos seguintes conceitos: Um-para-Um (Mestre-Escravo); Muitos-para-Um (Correio ou canal sem ligação); Um-para-Um de Vários (Diálogo ou canal com ligação); Um-para-Muitos (Difusão). O texto deverá: ser elaborado em grupo; enviado por email ao professor no final da aula; e deverá conter entre 250 a 500 palavras.