A scheduling heuristics for distributed real-time embedded systems tolerant to processor and communication media failures