通过共享内存的进程间通信与Mach操作系统中使用的消息传递



以下段落来自Abraham Silberschatz第138页的《操作系统概念》,第10版;

消息系统的主要问题通常是由于将消息从发送方的端口复制到接收方的端口而导致的性能不佳端口。马赫信息系统试图通过使用虚拟内存管理技术(第10章(。从本质上讲,马赫图将包含发送方消息的地址空间转换为接收方地址空间因此,消息本身从未被实际复制,因为发送方并且接收器访问相同的存储器。此消息管理技术提供了很大的性能提升,但仅适用于系统内消息。

本节通过Mach OS中的消息传递来解释ipc。然而,我很困惑这与ipc的共享内存模型有何不同,因为在后台,发送方和接收方进程似乎都为ipc共享一段内存。对此进行讨论将非常有帮助。谢谢

然而,我很困惑这与ipc的共享内存模型有何不同,因为在后台,发送方和接收方进程似乎都为ipc共享一段内存。

他们的消息传递在常见情况下确实使用共享内存;然而,共享内存本身是不够的,因为它缺乏与调度器的任何协作。具体地,如果任务需要等待直到消息到达,则调度器被告知"等待";不要给这个任务任何CPU时间,直到/除非消息到达(并且调度器立即切换到另一个任务(";,然后当发送器(通过共享存储器(发送消息时,它还必须告诉调度器";嘿,如果接收器正在等待消息,那么它可以停止等待,并再次获得CPU时间&";。

仅使用纯共享内存(如果没有与调度程序的合作(,您最终会遇到数百个任务不断轮询其所有消息端口,白白浪费了大量CPU时间(并削弱了所有有用工作的性能(。

请注意,使用共享内存进行消息传递还有另一个问题(对于其他类型的IPC使用共享内存(。如果恶意发送者有可能在接收者检查数据是否正常后,但在接收者对数据采取行动之前修改数据;则发送者可以诱骗接收者做接收者不打算允许的事情;你最终会面临重大的安全风险。我不知道Mach是否做了什么来解决这个问题(理论上,内核可以临时修改发送方的虚拟内存,以防止它修改共享内存中的"已发送"数据,直到接收方完全完成数据处理,但这涉及到性能问题,也没有简单的方法来判断接收方是否/何时真正完成数据处理(.

最新更新