A novel task scheduling algorithm based on dynamic critical path and effective duplication for pervasive computing environment