Computer systems are experiencing great changes with rapid technology advancements in multi-core processors and rapid workload pattern shifts from computing-intensive to highly data-intensive applications. In today's multi-core computing environments, most resources on the memory hierarchies,
e.g. space in the last level CPU caches, assesses to buffer pools, and throughput of disk storages, are shared and contended by a large number of threads concurrently running on multiple computing cores, and the performance of applications is more and more determined by how fast they can access their data. Compared with these rapid changes, operating systems as the resource managers have been evolved very slowly in several decades and have not been fully advanced to respond to these
changes. The performance issues incurred by the increasingly complex structure and operations of these resources have not been effectively addressed at any level of computer systems.
In this Ph.D. dissertation, we advance software systems to manage critical resources in increasingly complex computer
architecture to respond the high demand of large-scale and
data-intensive applications. Specifically, we will design and
improve systems in the following focused areas. Firstly, at the multi-core processor level, we will make operating system be aware of the shared cache structure of multi-core processors to better utilize the processors by enhancing scheduling capability. We propose to develop new scheduling scheme to improve the effective caching capacity per core and/or per thread, and to minimize congestion in off-chip
memory accesses by coordinating cache space sharing. Secondly, at the storage level, we will make operating system play
an important role to improve disk accesses as fast as possible.
We enable operating systems to effectively exploit "sequential
locality" --- for the same amount of data, sequential accesses
are several orders of magnitude faster than random accesses in
disks. Finally, we improve the scalability of buffer pool management in software systems to service data accesses quickly from memory for as many concurrent threads as possible.