Task Scheduling on Heterogeneous Multi-core Processors