terça-feira, 30 de abril de 2013

Condição de Corrida

Os sistemas operacionais sempre estão processando, assim é compartilhado memória ou arquivos em que um ou mais processos podem ler ou escrever no mesmo.
Segundo Tanenbaun (2010, p. 82) define condição de corrida como:
“Situação em que dois ou mais processos lêem e escrevem dados compartilhados e o resultado final depende da ordem de quem precisamente executa, e quando.”
Com essa definição podemos imaginar um spool de impressão, quando um processo quer imprimir um arquivo, o mesmo coloca o arquivo no diretório de impressão, se existir um arquivo já alocado, é impresso e outro arquivo é colocado.
Mas para nós entender o que a condição de corrida tem a ver com o spool de impressão, imaginamos o spool como uma fila, como mostrado na figura abaixo:

Imagem 1: Spool de Impressão.
Dentro dessa fila de impressora temos duas variáveis o IN (Apontador do próximo local livre da fila) e OUT (Apontador para o próximo arquivo a ser impresso), assim o valor 4 como esta na imagem acima esta sendo nosso OUT que será arquivo impresso e o IN para 7 que o próximo local livre na fila.  Sendo assim possuímos dois processos A e B, o primeiro a ser processado é o A, o mesmo lê a variável IN, mas antes de colocar um arquivo dentro da variável, o processador recebe uma interrupção e para o processo A, e começa a processar o processo B, o mesmo faz a mesmo caminho do processo A, lê a variável IN e nesse momento coloca um arquivo na variável, mas seu tempo de processamento acaba, e o processo A começa a processar novamente onde parou sendo assim coloca outro valor no IN.
Sendo assim chegamos à conclusão o processo B nunca vai ter seu arquivo impresso, pois o processo A colocou um valor em cima do B, e o spool não vai perceber essa situação de modificação de valores e vai continuar fazendo sua execução e imprimindo.

Então a condição de corrida depende da ordem e precisando que cada processo é executado.

Um comentário: