UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA CURSO DE CIÊNCIAS DA COMPUTAÇÃO Proposta de Projeto Programação Concorrente Segura em Java Autor João Vitor Mallmann Florianópolis, 07 de Abril de 2006 Programação Concorrente Segura em Java __________________________________ João Vitor Mallmann (Autor) __________________________________ José Mazzucco Junior (Orientador) 1. Tema A criação de sistemas em tempo real esta cada vez mais em evidencia, sendo necessário para isso a utilização de softwares que possam agir de forma concorrente, utilizando-se do conceito de threads pra conseguir tal artifício. Com a liberdade e a flexibilidade dada pelas API´s (application programming interfaces), a geração de aplicações utilizando processamento multithread ficou simplificado, resultando em sistemas defeituosos, devido ao perigo da ocorrência de condições indesejadas, tais como corridas de hazards, deadlock, livelock e starvation (negação de serviços infinita). Desta forma, deve se tomar cuidado com cada tipo de sincronismo utilizado nas threads dentro da construção de uma aplicação, utilizando uma variedade de regras, normas e padrões de projeto. 2. Limitações do tema No trabalho a ser desenvolvido será o usado o pacote de Communicating Threads for Java (CTJ), threads que se comunicam em Java, que implementa o modelo CSP em Java, que inclui padrões de threads muito mais simples e confiáveis que o modelo das threads de Java. O pacote CTJ fornece um pequeno conjunto de padrões de projeto que é suficiente para programação concorrente em Java. Um importante avanço do CTJ é que o programador pode usar um grande conjunto de regras para eliminar os hazardas, deadlocks, livelock, starvation etc. durante o projeto e implementação. A teoria de processos seqüenciais de comunicação (Communicating Sequential Processes - CSP) oferece uma notação matemática pra descrever padrões de comunicação por expressões algébricas e contem evidencias formais para análise, verificando e eliminando as condições indesejáveis na utilização de threads. Esse modelo foi provado bem-sucedido para criação de softwares concorrentes para tempo real e sistemas embarcados. 3. Objetivo geral Estudar a ferramenta existente que faz a verificação e validação do código de programas feitos utilizando CSP. Analisar passo a passo as verificações que o programa faz, verificando se respeita as condições impostas pela teoria de CSP, que eliminam os problemas comuns da utilização de threads, elaborando um manual de utilização. Desenvolver algum sistema clássico, jantar dos filósofos por exemplo, utilizando a teoria de CSP, verificando manualmente e com o programa de validação, se os resultados obtidos serão os mesmos e estarão de acordo com a teoria. Elaborando uma documentação sobre a utilização da teoria CSP em Java. 4. Motivação Devido a grande disseminação da linguagem Java, e sua vasta área de atuação, verificar se a utilização do pacote CTJ, que implementa a teoria de CSP, elimina o grande problema na utilização de múltiplas threads, que é a geração de hazardas, deadlocks, livelock, starvation etc. Pretendendo difundir a teoria de CSP, sua funcionalidade na pratica, e os custos para a sua utilização na resolução de problemas computacionais. 5. Problema O problema abordado nesse trabalho é a eliminação das condições indesejadas geradas pela utilização de programação multithread. Tais condições são o principal fator do aumento da complexidade na escrita de códigos que utilizam threads. 6. Desenvolvimento do trabalho Pesquisa e buscas de referências na literatura para o estudo da teoria de CSP, de Charles Antony Richard Hoare. Pesquisa e busca de referências na literatura para o estudo do pacote CTJ (Communicating Threads for Java). Desenvolvimento de uma aplicação utilizando o pacote CTJ, para comparações com códigos que utilizam multithread em Java, e verificação da aplicação com o programa validador, excluindo a existência de condições indesejáveis no código. Elaboração de manuais de utilização do pacote CTJ e de seu programa validador. 7. Referências bibliográficas 1. C. A. R. Hoare, "A theory of CSP," Commun. ACM, vol. 21, no. 8, Aug. 1978. 2. Gerald Hiderink, Jan Broenink and André Bakkers, Communicating Threads for Java, DRAFT, REV. 5, October 2000.