Improving Dependability Using Shared Supplementary Memory and Opportunistic Micro Rejuvenation in Multi-tasking Embedded Systems