A constrained extremum-seeking control for CPU thermal management