在单个管理程序虚拟机上的两个不同操作系统上运行的两个进程之间的 IPC

Posted

技术标签:

【中文标题】在单个管理程序虚拟机上的两个不同操作系统上运行的两个进程之间的 IPC【英文标题】:IPC between two process running on two different OS on single hypervisor virtualized machine 【发布时间】:2017-06-10 04:46:51 【问题描述】:

是否有任何已知方法可以在运行在同一硬件上并由 XEN 虚拟化的两个操作系统之间进行进程间通信。

我知道我可以使用远程方法调用 (RMI/RPC) 来在网络上进行进程通信,我也绝对可以在这里进行。

IPC可以通过以下方式实现

    信号 匿名管道 命名管道或 FIFO SysV 消息队列 POSIX 消息队列 SysV 共享内存 POSIX 共享内存 SysV 信号量 POSIX 信号量 FUTEX 锁 使用 mmap 的文件支持和匿名共享内存 UNIX 域套接字 Netlink 套接字 网络套接字 通知 FUSE 子系统 D-Bus 子系统

我认为可以使用其中的 12 到 16 个,因为它允许基于网络和文件的通知和通信协议。

有没有一种方法可以让我使用 1 到 10(含)之间的任何一种方法,可用于在同一硬件上运行的两个操作系统之间的 IPC,并使用虚拟化

【问题讨论】:

【参考方案1】:

前 1-10 看起来像是紧紧地粘在一个操作系统中的 ipc 上,并不是设计用于机器对机器的 ipc。也许其中一些可以使用网络作为传输,但在这种情况下,最好使用网络本身。 如果你试图找到几乎零配置的东西,你可以在 kvm 上使用 vsock 或在 hyper-v 上使用 hyper-v 套接字。这是套接字 api,无需其他网络堆栈并使用其自己的基于 guid 的地址空间即可工作。但是它们并不常用,并且在某些情况下使用起来可能会出现问题。例如 hyper-v 套接字只能在 centos-rhel 上正常工作,而 vsock 在机器对机器通信方面可能会遇到一些问题。还有一个好消息,xen 看起来支持 vsock https://xenbits.xen.org/people/dvrabel/inter-domain-comms-C.pdf。

【讨论】:

以上是关于在单个管理程序虚拟机上的两个不同操作系统上运行的两个进程之间的 IPC的主要内容,如果未能解决你的问题,请参考以下文章

ArcGIS不能在虚拟机上运行是什么意思

Qt UDpsocket 在同一台计算机上工作,但不在同一网络上的两台计算机上工作

虚拟机上的附加 VIP

虚拟化的两种常见架构

《Windows 系统管理》

安装部署ESXi