Aplicações em áreas como genômica comparativa, em neurociências ou de controle de tráfego aéreo têm a característica de requerem grande quantidade de processamento de modo a obterem os resultados. Muitas vezes, essas aplicações são executadas em Desktop grids, que são uma plataforma baseada em máquinas de uso geral, mas que em grande escala tem potencial de atingirem grande quantidade de processamento. As aplicações em grid são em geral aplicações complexas, que executam em um número grande e heterogêneo de nós não dedicados, disponíveis em domínios administrativos distintos. As abordagens atuais de utilização dos recursos em desktop grids são centralizadas, possuindo geralmente escalabilidade limitada. O modelo Peer-to-Peer (P2P) evoluiu simultaneamente e em paralelo aos interesses da computação em grid. Devido à característica descentralizada da arquitetura P2P, ela tem sido utilizada como solução complementar à arquitetura em grid. Observa-se, então, uma convergência entre a computação em grid e a arquitetura P2P, juntando as melhores características de cada tecnologia. Nesse contexto, a alocação de tarefas é um problema importante que visa atribuir tarefas a um conjunto de recursos, objetivando maximizar o uso dos recursos. A alocação de tarefas em ambientes descentralizados é complexa, uma vez que não há uma visão global do sistema. Nessa dissertação, propomos e avaliamos um framework flexível para alocação descentralizada de tarefas em ambiente de grid com múltiplas políticas de alocação. Além do framework, propomos e avaliamos duas políticas de alocação de tarefas baseadas em Work Stealing: Work Stealing with Replication (WSR) e Local Work Stealing with Replication (LWSR). O protótipo do framework proposto foi desenvolvido utilizando JXTA como middleware e o Chord como overlay P2P. Entretanto, o framework é flexível pois não está acoplado nem ao middleware de rede nem ao overlay P2P utilizado. Os resultados obtidos em um ambiente heterogêneo composto de 16 máquinas dispostas em dois laboratórios, executando aplicações de controle de tráfego aéreo, mostraram que o tempo de execução da aplicação pode ser sensivelmente reduzido com o nosso framework. Um speedup de 11,86 foi obtido para uma aplicação composta de 180 tarefas, reduzindo o tempo de execução seqüencial da melhor máquina de 22,35 minutos para 1,8 minutos, com 16 máquinas.