execucao.Destacamos ainda, que um processo muda de estado durante seu processamento em funcao de eventos originados por ele mesmo (eventos voluntarios) ou pelo sistema operacional (eventos involuntarios). Basicamente, existem cinco mudancas de estado que podem ocorrer a um processo, conforme mostrado na figura 15.PROCESSOS INDEPENDENTESFalaremos agora sobre tres processos: independentes, subprocessos e thread. Esses processos sao maneiras diferentes de implementar a concorrencia dentro de uma aplicacao. O que significa que, busca-se subdividir o codigo em partes para trabalharem de forma cooperativa. Vamos tratar de cada um desses processos (fig 16).O uso de processos independentes e a forma mais simples de implementar a concorrencia em sistemas multiprogramaveis. Neste caso, nao existe vinculo do processo criado, com o seu criador. A criacao de um processo independente exige a alocacao de um PCB.SUBPROCESSOSSubprocessos sao processos criados dentro de uma estrutura hierarquica. Neste modelo, o processo criador e chamado de processo pai, enquanto o novo e chamado de processo filho. Alem disso, os processos filhos possuem seu proprio PCB e podem compartilhar quotas com o processo pai.Uma caracteristica desta implementacao e a dependencia existente entre o processo criador e o subprocesso. Caso um processo pai deixe de existir, os subprocessos subordinados sao automaticamente eliminados.O uso de processos independentes e subprocessos demanda consumo de diversos recursos do sistema. Sempre que um novo processo e criado, o sistema deve alocar recursos, consumindo tempo da CPU, neste trabalho. Outro problema e a comunicacao e sincronizacao entre processos, consideradas pouco eficientes, visto que cada processo possui seu proprio espaco de enderecamento (fig 17).THREADO conceito de thread foi introduzido na tentativa de reduzir o tempo gasto na criacao, eliminacao e troca de contexto de processos nas aplicacoes concorrentes, bem como economizar recursos do sistema como um todo.Em um ambiente multithread, um unico processo pode suportar multiplos thread, cada qual associado a uma parte do codigo da aplicacao. Neste caso, nao e necessario haver diversos processos para a implementacao da concorrencia.Cada thread possui seu proprio contexto de hardware, porem compartilha o mesmo contexto de software e espaco de enderecamento com os demais thread do processo. O compartilhamento do espaco de enderecamento permite que a comunicacao de thread, dentro de um mesmo processo, seja realizada de forma simples e rapida (fig 18).COMPLEXIDADE DOS SOFTWARES...A invisibilidade e uma das dificuldades essenciais ao desenvolvimento de software.Quando Frederick Brooks, um notavel cientista da computacao de origem norte-americana, conferiu a invisibilidade a denominacao de "uma das dificuldades essenciais do software", ele se referia a algo presente no dominio dos bits, sendo possivel evitar deadlocks em software , desde que se contorne o surgimento de quaisquer das quatro condicoes (fig 19). Ha tecnicas sofisticadas para isso, que fazem uso, por exemplo, de um ramo da matematica, denominado Teoria dos Grafos. Mas este e um assunto para outra conversa.COMO DETECTAR E TRATAR DEADLOCKS Por ora, o que provavelmente interessa a voce, Aluno Integrado, e que a manifestacao dos deadlocks mais comum e aquela que a voce, certamente, causa mais irritacao: os travamentos de programas. Na maioria das vezes em que um programa de computador deixa de responder, a causa