Processos (complementos) Processos cooperantes e processos independentes! Os processos que se executam de forma concorrente podem ser: Cooperantes podem afectar ou ser afectados pela execução de outros processos Independentes não interferem com outros processo! Motivos para permitir a cooperação entre processo Partilha de informação Aumento de desempenho Etc. 2 1
Modelo de comunicação entre processos! A comunicação entre processos pode geralmente reduzir-se a uma interacção entre um produtor e um consumidor de informação O processo produtor gera informação que envia a um processo consumidor! O modelo pode ser generalizado considerando vários processos produtores de informação que comunicam com um consumidor ou com um conjunto de consumidores! Como em qualquer sistema de comunicação, a transferência de informação é suportada por um canal ou ligação 3 Comunicação entre processos! A cooperação entre processos exige mecanismos para permitir que os processos comuniquem entre si (troca de informação) e sincronizem as suas acções! A comunicação entre processos pode ser conseguida utilizando: Memória partilhada esta zona de memória faz parte simultaneamente do espaço de endereçamento de 2 ou mais processos Outro recurso de comunicação entre processos (IPC InterProcess Communication) fornecido pelo sistema 4 2
Solução com memória partilhada - buffer limitado 5 Dados partilhados #define n ; typedef item; item buffer[n-1] ; int in, out; Produtor do{ produzir um item em nextp while (((in+1) % n)==out) ; buffer[in]=nextp; in:=(in+1) % n; } while 1; Utilização de uma linguagens algorítmica (muito semelhante à linguagem C) Consumidor do{ while (in==out) do ; nextc:=buffer[out]; out=(out+1) % n; consumir o item em nextc }while 1; Memória partilhada 6! O sistema tem que permitir que 2 processos possam considerar simultaneamente uma zona de memória como pertencendo ao seu espaço de endereçamento Nalguns sistemas é impossível a partilha do espaço de endereçamento! É o mecanismo mais simples de implementar um canal de comunicação entre dois processos! A sincronização entre os processos tem que ser explicitamente programada (veremos posteriormente como a sincronização entre processos cooperativos pode ser implementada de forma eficiente em um ambiente de memória partilhada) 3
Outro recurso de comunicação entre processos (IPC) troca de mensagens! Oferecidos directamente pelo sistema (normalmente) O sistema fornece objectos que normalmente têm capacidade de armazenamento temporária de mensagens (armazenamento no espaço de endereçamento do núcleo), e que são controladas pelo sistema (que efectua a sincronização e faz as transferências de informação) O processo produtor coloca informação na caixa de correio que, por sua vez, é retirada pelo consumidor A sincronização mais habitual:! O produtor da mensagem bloqueia-se quando a caixa de correio está cheia! E o consumidor sempre que não existam mensagens para ler! Este tipo de recurso de IPC pode ser implementado de diferentes formas e a utilização, como parece obvio, apresenta diferenças de sistema para sistema! Operações básicas deste recurso de IPC enviar(mensagem) e receber(mensagem) 7 Troca de mensagens Questões de implementação! A dimensão das mensagens que a ligação pode acomodar é fixa ou variável Mensagens de dimensão variável facilitam a utilização mas dificultam a implementação! Comunicação directa ou comunicação indirecta Na comunicação directa um canal é associado implicitamente a um processo, por outro lado, na comunicação indirecta os canais são criados explicitamente (resultando em objectos do tipo caixas de correio)! Comunicação simétrica ou assimétrica (no endereçamento) Na comunicação simétrica os processos de envio e recepção precisam de se identificar mutuamente, por outro lado, na comunicação assimétrica apenas o remetente identifica o destinatário! Bufferização automática ou explícita! Envio por cópia ou por referência 8 4
Troca de mensagens Comunicação directa! Troca de mensagens Variante simétrica! enviar(p, mensagem) envia uma mensagem ao processo P! receber(q, mensagem) recebe uma mensagem do processo Q Variante assimétrica! enviar(p, mensagem) envia uma mensagem ao processo P! receber(id, mensagem) recebe uma mensagem de qualquer processo, guardando em id o seu identificador! Desvantagem necessidade de actualizações de referências a processos quando o seu nome muda! Propriedades do canal de comunicação As ligações são estabelecidas automaticamente Uma ligação é associada exactamente a um par de processos Entre cada par existe exactamente uma ligação A ligação pode ser unidireccional mas é, em geral, bidireccional 9 Troca de mensagens Comunicação indirecta! As mensagens são trocadas através de caixas de correio ou portos Enviar(A, mensagem) envia uma mensagem para a caixa de correio A Recever(A, mensagem) recebe uma mensagem da caixa de correio A! Propriedades do canal de comunicação A ligação é estabelecida apenas se os processos partilham uma caixa de correio Uma ligação pode ser associada a mais de dois processos Dois processos podem partilhar mais de uma ligação As ligações podem ser unidireccionais ou bidireccionais 10 5
Bufferização na troca de mensagens! As mensagens que são trocadas pelos processos em comunicação residem numa fila! Formas de implementar a fila Capacidade 0 o emissor tem de esperar que o receptor receba a mensagem Capacidade limitada o emissor tem de esperar se a ligação estiver cheia Capacidade não limitada o emissor nunca espera 11 Classifique com V ou F as afirmações seguintes: 12 a) Um processo executa-se dentro de um espaço de endereçamento bem delimitado b) O espaço de memória de um processo é constituído por uma zona acessível em modo utilizador e outra acessível apenas em modo supervisor c) A estrutura designada por bloco de controlo do processo contém a informação associada a um processo que é gerida em modo monitor d) A restrição do repositório de instruções e o confinamento dos processos a espaços de endereçamento limitados são a base dos mecanismos de protecção que o sistema operativo implementa e) Os mecanismos de protecção, que o sistema operativo implementa, devem garantir que um processo nunca poderá interferir com outro 6