How does Magento\Framework\ObjectManager\Config\Config::getPreference() work?

Context: How does Magento\Setup\Module\Di\Compiler\Config\Reader::generateCachePerScope() work?