Satisfying hard real-time constraints using COTS components