Real-Time Systems On Multicore Platforms: Managing Hardware Resources For Predictable Execution