A semi-blocking checkpoint protocol to minimize checkpoint overhead