当前位置: 技术问答>linux和unix
如何使用有名管道或者共享内存技术实现虚拟机与主机之间的通信?
来源: 互联网 发布时间:2016-09-02
本文导语: 如何使用有名管道或者共享内存技术实现虚拟机与主机之间的通信? 本机实验环境ubuntu 10.04,用kvm搭建一个虚拟机。 我实验了下 在主机中建立管道 mkfifo /tmp/tmpfifo 然后发送一个东西 echo "host">/tmp/tmpfifo 另外弄个...
如何使用有名管道或者共享内存技术实现虚拟机与主机之间的通信?
本机实验环境ubuntu 10.04,用kvm搭建一个虚拟机。
我实验了下
在主机中建立管道 mkfifo /tmp/tmpfifo
然后发送一个东西 echo "host">/tmp/tmpfifo
另外弄个窗口读取他 cat /tmp/tmpfifo
可以正常显示 host 说明管道正常
然后在虚拟机器上直接输入 cat /tmp/tmpfifo 显示没有这个管道
建立 mkfifo /tmp/tmpfifo之后,在主机 echo "host">/tmp/tmpfifo
重新虚拟机上cat /tmp/tmpfifo一直等待,说明管道没有通过来
我分析如下:虚拟机不知道自己跑在虚拟的硬件上,所以也无法访问模拟硬件之外的内存空间,所以无法与主机上的有名管道交互。不知道是这样吗?
本机实验环境ubuntu 10.04,用kvm搭建一个虚拟机。
我实验了下
在主机中建立管道 mkfifo /tmp/tmpfifo
然后发送一个东西 echo "host">/tmp/tmpfifo
另外弄个窗口读取他 cat /tmp/tmpfifo
可以正常显示 host 说明管道正常
然后在虚拟机器上直接输入 cat /tmp/tmpfifo 显示没有这个管道
建立 mkfifo /tmp/tmpfifo之后,在主机 echo "host">/tmp/tmpfifo
重新虚拟机上cat /tmp/tmpfifo一直等待,说明管道没有通过来
我分析如下:虚拟机不知道自己跑在虚拟的硬件上,所以也无法访问模拟硬件之外的内存空间,所以无法与主机上的有名管道交互。不知道是这样吗?
|
管道(包括命名管道)或者共享内存所创建出来的数据结构(inode以及inode里面的i_pipe或者是shm_ids中的一个入口点)在宿主机自己的内核空间中.而KVM启动的虚拟机是在一个进程中运行的(线程数视VCPU个数而定),这个虚拟机创建出来的管道或者共享内存数据结构是在这个进程所分配的内存中,两者的数据结构不是同一块内存,也就是说彼此都不了解对方,自然是不起作用的。
|
虚拟机,看字面意思就是说虚拟出来的一台机器,当然没法共用一个管道啊。
你就把虚拟机当做一台单独的机器理解好了。
你就把虚拟机当做一台单独的机器理解好了。