我将开展一个项目,其中一个实时进程应从一台 Ubuntu 机器迁移到另一台机器(在同构环境中),因此在此之前我应该了解哪些事情。一切都将从头开始实施,那么我应该使用哪种编程语言?
答案1
您正在寻找的答案值得一整个专业研究团队来寻找……这方面的要求实在太多了。AskUbuntu 可能不是正确的地方。
需要注意的事项包括:进程内存、线程状态、显卡占用的内存、打开的文件描述符、内核套接字(Internet/UNIX)状态、其他 IPC 通道、任何打开的设备文件的内核状态、内存映射、环境、如果进程处于系统调用中间(例如等待某个操作发生时),则整个内核空间内存、进程内存的属性(例如不执行位)以及许多其他属性(可能比我已经列出的多两倍)。
由于其中大多数需要内核和设备驱动程序补丁,因此您需要的语言是 C 和 ASM。
一个尝试做到这一点的项目称为 LinuxPMI,您可能需要研究一下它。
迁移流程的替代方法:
- 暂停到磁盘,并使用外部系统将交换分区和整个磁盘复制到另一个系统
- 在虚拟机中托管该进程,并让其根文件系统成为基本只读系统映像和空白映像的联合(即 UnionFS 或 AuFS),该空白映像将填充系统所做的任何更改;然后暂停虚拟机,并复制较小的映像
- 从头开始实现整个单进程虚拟机,实现完整的 i686 指令集,并为所需的每个系统和库调用提供包装器和钩子