Hypervisor操作系统间的通信技术

本文介绍了UnixDomainSocket作为高效IPC机制,其速度超过TCPSocket,常用于同一主机进程间通信。共享内存则是最快的IPC形式,允许多进程直接读写同一内存区域。RPC(远程过程调用)则简化了多进程间通信的复杂性,提供了一种通用框架。此外,还提到了传统的管道、套接字等IPC技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Unix Domain Socket

Socket API原本是为网络通信设计的,但后来在Socket的框架上发展出一种IPC机制,就是Unix Domain Socket。Unix Domain Socket也提供面向流和面向数据两种API接口,类似TCP/UDP。虽然普通的TCP Socket也可用于同一台主机的进程间通信(通过loopback地址127.0.0.1),但Unix Domain Socket在同一台主机上的传输速度是TCP Socket的两倍,这是因为Unix Domain Socket不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程复制到另一个进程,所以速度更快。

Unix Domain Socket用于IPC通信的具体编程方式与普通的TCP Socket编程方式没太大差别,性能又高,还容易从单机通信扩展为多主机间的通信,所以这种方式逐步替代了管道的方式。

2. 共享内存

以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。

采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的复制。对于像管道和套接字这种方式,需要在内核和用户空间进行4次数据复制,而共享内存只需复制两次数据:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时始终保持共享区域,直到通信完毕为止,这样,数据的内容一直保存在共享内存中,并没有写回文件。共享内存中的内容往往是在解除映射时才写回文件的。因此采用共享内存通信方式的效率是非常高的。

3. RPC

RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的一种多进程间的通信机制。不同于复杂的Socket通信方式,RPC的初心是设计一套远程通信通用框架,这个框架能自动处理通信协议,对象序列化,网络传输等复杂细节,并且希望开发者使用这个框架以后,调用一个远程机器上的接口代码与以本地方法调用的代码“开起来没什么区别”,从而大大减小分布式系统的开发难度,使得不懂网络编程的程序员也能比较容易地开发分布式系统。

RPC最初由Sun公司提出,即Sun RPC,后来也成为IETF国际标准,至今仍然重要的NFS协议就是最早的基于RPC的一个重要案例。

为了将一个传统程序改写成RPC程序,我们要在程序里加入另外一些代码,这个过程叫作stub过程。我们可以想象一个传统程序,它的一个进程被转移到一个远程机器中,在客户端及服务端分别有一个stub模块实现了远程过程调用所需要的通信功能,比如参数及调用结果的序列化功能,并通过网络完成远程传输,因为Stub与原来的Server使用了同样的接口,因此增加这些Stub代码不需要更改原来Client端的调用逻辑,也不要求更改服务端Server的逻辑代码,这个过程如下图所示:

4. IPC

从严格意义上来说,一个系统有多个独立的进程组成,而且进程之间有数据交互的逻辑,那么不管这几个进程是否部署在一个主机上,这样的系统都可以叫分布式系统。IPC(Inter-Process Communication)就是为了解决单主机上多进程之间的通信问题而诞生的一种古老技术。由于进程与操作系统是密切相关的,因此操作系统的不同会导致IPC的具体实现也各有不同,但不管是Windows系统还是Linux系统,都支持一下几种进程间的通信技术。

  • 管道(Pipe)及有名管道(Named pipe):管道可用于具有亲缘关系进程间的通信,有名管道客服了管道没有名字的限制,因此,除了有管道所具有的功能,他还允许无亲缘关系进程间的通信。由于管道存在只能承载无格式字节流及缓冲区大小受限等缺点,使用管道进行IPC通信的做法已经不太普遍。
  • 套接字(Socket):起初是有Unix系统的BSD分支开发出来的,现在Linux和Windows系统都支持Socket,Socket如果用于本地进程间通信,则要比普通的TCP/IP快很多,这也是一种比较通用的进程间通信方式。
  • 共享内存:将文件映射到内存中,多个进程通过共享文件的方式使得多个进程可以访问同一块内存空间,这是最快的可用IPC形式。

5. 高通HAB

HAB 是用于用户空间和内核空间通讯的驱动程序或服务组件,在HOST和Gest VM之间进行共享内存数据交互;用于Hypervisor双系统间通信。

5.1 框架:

 

6. DPDK Vhost-user 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村里小码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值