Applying hypervisor-based fault tolerance techniques to safety-critical embedded systems