Sistema de execução remota de programas em Grade.
Um sistema em que o usuário pode utilizar um pacote (.zip) que contenha o código fonte de um arquivo (em C), e um arquivo de entrada, para executar processamento remoto e em paralelo.
Este arquivo é enviado para uma máquina remota, onde um processo o recebe, descompacta, compila, executa e envia em retorno o arquivo de saída.
A compilação será sempre com um comando na forma gcc -o <nome_arquivo> <nome_arquivo).c. Por exemplo, supondo que o arquivo seja prog1.c, a compilação será com o comando gcc -o prog1 prog1.c;
A execução será sempre com um comando na forma ./<nome_programa> > <nome_programa>.out. Por exemplo, supondo que o arquivo seja prog1.c, a execução será na forma ./prog1 > prog1.out.
Para enviar arquivos, o programa dispara processos em sua própria máquina, a partir de um arquivo de descrição de job (JDF – Job Description File). Que informa o endereço e a porta do destinatário, mais o nome do arquivo .zip que deve ser enviado, e o nome que deve ter o arquivo de saída recebido (o programa deve renomeá-lo).
Por exemplo. Suponha que um usuário deseje contar as ocorrências de uma certa cadeia de nucleotídeos numa sequência de DNA muito grande.
Com o sistema que será dispnibilizado, ele pode desenvolver um programa em C (digamos, conta_seq.c), que abre um arquivo com duas linhas. A primeira contém uma cadeia de nucleotídeos e a segunda uma sequencia de DNA. O programa percorre a sequência e grava, no arquivo de saída, a quantidade de vezes que a cadeia ocorre naquele arquivo.
De posse deste programa e do sistema, o usuário pode fracionar o arquivo original em n partes menores (digamos parte1.txt, parte2.txt, etc.), e criar n pacotes .zip. Cada um desses pacotes conterá uma das partes do arquivo original, e o programa conta_seq.c.
Cada parte do arquivo original deverá estar devidamente renomeada para um nome padrão, (digamos entrada.txt), e com a cadeia a ser buscada na primeira linha, e a sequência na segunda, de forma que possa ser processada pelo programa conta_seq).
Por culpa de Ceará, neste problema de busca de cadeia de DNA especificamente, será necessário copiar os últimos k-1 caracteres do final de um arquivo para o início de outro, sendo k o tamanho da cadeia a ser procurada.
Depois de criados os pacotes, o usuário, usando o sistema, dispara N execuções em N máquinas diferentes, enviando a cada uma delas um dos pacotes que foram criados. Ao final, ele vai receber N arquivos de saída que podem ser concatenados (comando cat) e processados localmente para se saber a contagem total.
As Figuras abaixo dão uma ideia de como seu sistema ajudará neste problema. Inicialmente o usuário fraciona o arquivo original em partes que poderão ser executadas remotamente.
De posse das partes, o usuário produz os pacotes com cada uma das partes, e o programa que processará remotamente, mais o arquivo JDF que indica para onde cada parte deverá ser enviada.
Após a execução remota, os resutados focam disponíveis nas máquinas remotas e podem ser enviados de volta ao usuário.
Quando os resultados das execuções remotas chegam, o sistema deve renomeá-los de acordo com o que está especificado no arquivo .JDF.
Após esta execução o usuário pode concatenar as saídas e fazer algum processamento local para tratar os resultados remotos.