Quando um processo quer imprimir um arquivo na impressora, insere o nome do arquivo em um diretório de spool. Um outro processo verifica periodicamente se existe algum arquivo a ser impresso e, se houver, o imprime e remove seu nome do diretório. Suponha que o diretório de spool tenha vagas numeradas 0, 1, 2,... etc e que cada vaga é capaz de conter um nome de arquivo. Suponha que existem duas variáveis compartilhadas: Out, que indica o próximo arquivo a ser impresso e Free, que indica a próxima vaga livre do spool. Em um dado instante as vagas anteriores estão ocupadas e Free = 7 . Quase simultaneamente, os processos A e B decidem colocar um arquivo na fila de impressão e ocorre a sequência de ações:
1) O processo A lê Free e armazena o valor 7 na sua variável local chamada proxima_vaga_livre.
2) Em seguida ocorre uma interrupção do relógio e a CPU decide que o processo A já executou o suficiente e alterna para o processo B.
3) O processo B também lê Free e obtém o valor 7 . B armazena 7 na sua variável local proxima_vaga_livre.
4) Neste momento, ambos os processos têm a informação de que a vaga livre é a 7.
5) B prossegue sua execução, armazenando o nome do seu arquivo na vaga 7 e atualiza Free para 8.
6) Em seguida, o processo A executa novamente de onde parou. Verifica sua variável local proxima_vaga_livre, que é igual a 7, e então escreve o nome do seu arquivo na vaga 7 . O processo A atualiza o valor de Free para 8.
Nesta situação,
a) o arquivo do processo A será impresso primeiro e o arquivo do processo B será impresso em seguida.
|
b) duas interrupções de I/O serão geradas simultaneamente, indicando processamento paralelo.
|
c) a parte do programa que possui o processo B, que gerou uma condição de disputa, é chamado de código reentrante.
|
d) o processo B nunca terá seu arquivo impresso, pois ocorreu uma condição de disputa.
|
e)
nenhum dos arquivos será impresso, pois os processos A e B entraram em exclusão mútua, gerando um deadlock. |
Copyright © Tecnolegis - 2010 - 2024 - Todos os direitos reservados.