This thesis examines sharing aware scheduling on multicore systems. It explores how operating systems can better schedule multithreaded applications by detecting data sharing between threads. The author first provides background on multicore architectures and caching mechanisms. Experiments are then conducted to measure data sharing between threads of different applications using hardware performance counters. Finally, a sharing aware scheduler is designed and tested that improves application performance by up to 42% by considering data sharing during scheduling decisions.