Transient-Execution Attacks: Understanding Meltdown and Spectre