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

时间:2017-01-25 05:42:53

标签: linux-kernel virtual-machine ipc virtualization hypervisor

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

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

IPC可以通过以下方式实现

  
      
  1. 信号
  2.   
  3. Anonymous Pipes
  4.   
  5. 命名管道或FIFO
  6.   
  7. SysV消息队列
  8.   
  9. POSIX消息队列
  10.   
  11. SysV共享内存
  12.   
  13. POSIX共享内存
  14.   
  15. SysV信号量
  16.   
  17. POSIX信号量
  18.   
  19. FUTEX锁定
  20.   
  21. 使用mmap的文件支持和匿名共享内存
  22.   
  23. UNIX域套接字
  24.   
  25. Netlink Sockets
  26.   
  27. 网络套接字
  28.   
  29. inotify的
  30.   
  31. FUSE子系统
  32.   
  33. D-Bus子系统
  34.   

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

有没有一种方法可以使用1到10之间的任何方法(包括1和10),可以用于在具有虚拟化的相同硬件上运行的两个OS之间的IPC

1 个答案:

答案 0 :(得分:1)

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