A genetic algorithm for file and task placement in a distributed system