Comunicação entre processos
Freqüentemente, processos precisam se comunicar com outros processos. Por
exemplo, em um pipeline do interpretador de comandos, a saída do primeiro processo
deve ser passado para o segundo processo, e isso prossegue até o fim da linha de
comandos.
Assim, há uma necessidade de comunicação entre processos que deve ocorrer, de
preferência, de uma maneira muito estruturada.
Em relação a esta comunicação, há três tópicos de devem ser levados em
consideração:
Como um processo passa informações para outro processo;
Como garantir que dois ou mais processos não invadam uns aos outros, quando
envolvidos em regiões críticas. Por exemplo, suponha que dois processos
tentem, cada um, acessar uma determinada região de memória.
O relacionamento, ou seqüência adequada, quando existir dependência entre
processos. Se o processo A produz dados e o processo B os imprime, B deve
esperara até que A produza alguns dados para serem impressos.
Prof. Dr. Márcio Andrey Teixeira
Condições de Disputa
Processos que trabalham em conjunto podem compartilhar
armazenamento em comum, do qual cada um pode ler e escrever.
algum
Exemplo de compartilhamento: Dados, arquivos etc. Podem estar na
memória principal como também em um arquivo compartilhado. Exemplo:
Um spool de impressão. Quando quer imprimir um arquivo, o processo entre
com o nome do arquivo que será impresso no diretório de spool.
Um outro processo, um deamon de impressão, verifica periodicamente se há
algum arquivo para ser impresso e, se houver, os imprime e então remove os
nomes do diretório de spool
Imagine a seguinte seguinte situação:
O nosso spool de impressão contém um grande número de vagas numeradas
de 1, 2, 3 ...., cada vaga pode conter um nome de um arquivo para ser
impresso.
Imagine também que há duas variáveis compartilhadas:
Prof. Dr. Márcio Andrey Teixeira
Condições de Disputa
out: que aponta para o próximo arquivo a ser impresso;
in: que aponta para a próxima vaga no diretório;
4
Processso A
.
.
.
5
6
in = 7
7
Processso B
.
.
.
Em um dado instante, as vagas 0 a 3 estão vazias;
Prof. Dr. Márcio Andrey Teixeira
out = 4
Condições de Disputa
out: que aponta para o próximo arquivo a ser impresso;
in: que aponta para a próxima vaga no diretório;
4
Processso A
.
.
.
5
6
in = 7
7
Processso B
.
.
.
Em um dado instante, as vagas 0 a 3 estão vazias;
As vagas de 4 a 6 estão preenchidas;
Prof. Dr. Márcio Andrey Teixeira
out = 4
Processso A
Processso B
4
5
6
7
.
.
.
out = 4
in = 7
.
.
.
Mais ou menos ao mesmo tempo, os processos A e B decidem colocar um arquivo na
fila de impressão;
O processo A lê in, e armazena o valor 7 na variável local chamada
proxima_vaga_livre;
Ocorre uma interrupção O processo B também lê in e obtem igualmento o número 7;
Neste momento, ambos os processos pensam que a próxima vaga liver é a 7;
O processo B segue sua execução e atualiza a variável in com o número 8;
Prof. Dr. Márcio Andrey Teixeira
Processso A
Processso B
4
5
6
7
.
.
.
out = 4
in = 7
.
.
.
Ao final, o processo A executa novamente a partir de onde parou. Verifica que a
próxima vaga é 7, e sobrescreve o nome o arquivo que o processo 8 mandou
imprimir.
Feito isto, o processo A calcula a nova vaga, e altera o valor de in para 8. Neste
instante, o diretório de spool está inconsistente internamente.
O processo B não conseguirá imprimir os seus dados
Prof. Dr. Márcio Andrey Teixeira
Regiões Críticas
O que fazer para evitar condições de disputa? A resposta para esta pergunta é impedir
que dois ou mais pocessos leiam ou escrevam em uma região de memória
compartilhada, ou outro recurso compartilhado.
Em outras palavras, é necessário exlcusão mútua (mutual exclusion). Isto é, algum
modo de assegurar que outros processos sejam impedidos de usar uma variável ou um
outro recurso compartilhado que já estiver em uso por outro processo.
A escolha de operações primitivas para evitar este problema é muito importante no
desenvolvimento de sistemas operacionais.
Prof. Dr. Márcio Andrey Teixeira
Regiões Críticas
Para conseguir chegar em uma boa solução para este problema, quatro condições
devem ser satisfeita:
1. Nunca dois ou mais processos podem estar simultaneamente em suas regiões
críticas;
2. Nada pode ser afirmado sobre o número e a velocidade de CPUs;
3. Nenhum processo executando em uma região crítica pode bloquear outros
processos;
4. Nenhum processo pode esperar eternamente para entrar em sua região critica;
Em um sentido abstrato, a figura abaixo mostra o comportamento ideal;
A entra na região crítica
A sai na região crítica
Processo A
B tenta entrar na
região crítica
B entra na região
crítica
B deixa a região
crítica
Processo b
T1
Prof. Dr. Márcio Andrey Teixeira
T2 B bloquado T3
T4
Download

Região Crítica e Exclusão Mútua