QEMU/CPC:用于安全、可移植且高效协程的静态分析与 CPS 转换
编程语言
2013-11-21 v2
摘要
协程和事件是编写并发程序的两种常见抽象。由于协程通常更方便,而事件更具可移植性和效率,因此自然希望将前者转换为后者。CPC 就是这样一种针对 C 程序的源到源转换器,它基于对标记为协作式函数的部分续体传递风格(CPS conversion)转换。在本文中,我们研究了 CPC 转换器在 QEMU(一个开源机器模拟器,也使用带注释的协程函数进行并发处理)中的应用。我们首先提出了一种新型注释,用于识别从不协作的函数,并介绍了 CoroCheck,一种用于合作注释静态分析和推断的工具。随后,我们改进了 CPC 转换器,将 CPS 转换定义为 C 语言的一种调用约定,支持通过函数指针间接调用经 CPS 转换的函数。最后,我们将 CoroCheck 和 CPC 应用于 QEMU(75 万行 C 代码),修复了数百个缺失的注释,并比较了转换后代码与 QEMU 中现有协程实现的性能。我们的工作表明了静态注释检查对于防止实际并发错误的重要性,并证明了 CPS 转换是一种灵活、可移植且高效的编译技术,即使对于用命令式语言编写的超大型程序也是如此。
引用
@article{arxiv.1310.3404,
title = {QEMU/CPC: Static Analysis and CPS Conversion for Safe, Portable, and Efficient Coroutines},
author = {Gabriel Kerneis and Charlie Shepherd and Stefan Hajnoczi},
journal= {arXiv preprint arXiv:1310.3404},
year = {2013}
}
备注
12 pages