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

Context: How are the generated/medatata files generated in Magento 2.2?

Details: How does Magento\Setup\Module\Di\Compiler\Config\Reader::fillThirdPartyInterfaces() work?

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