Operating system Mach OS中使用的共享内存与消息传递的进程间通信

Operating system Mach OS中使用的共享内存与消息传递的进程间通信,operating-system,ipc,message-passing,mach,Operating System,Ipc,Message Passing,Mach,以下段落摘自Abraham Silberschatz第138页的《操作系统概念》第10版 消息系统的主要问题通常是由于将消息从发送方的端口复制到接收方的端口而导致性能低下 港口。Mach消息系统试图通过使用 虚拟内存管理技术(第10章)。本质上,马赫图 包含发送方消息到接收方地址的地址空间 空间因此,消息本身从未被实际复制,因为发送者和发送者 和接收器访问相同的内存。这种消息管理技术 提供了很大的性能提升,但仅适用于系统内消息 本节通过Mach OS中的消息传递来解释ipc。然而,我不明白这与i

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

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

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

然而,我不明白这与ipc的共享内存模型有什么不同,因为在引擎盖下,似乎发送方和接收方进程都为ipc共享一段内存

他们的消息传递在普通情况下使用共享内存;然而,仅仅共享内存是不够的,因为它缺乏与调度程序的任何合作。特别是,如果任务需要等待消息到达,则调度程序会被告知“在消息到达之前/除非消息到达,否则不要给此任务任何CPU时间(并且调度程序立即切换到另一个任务)”,然后,当发送方发送消息(通过.shared memory)时,它还必须通知调度程序“嘿,如果接收器正在等待消息,那么它可以停止等待并再次占用CPU时间!“

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


请注意,使用共享内存进行消息传递(以及将共享内存用于其他类型的IPC)还有另一个问题。如果恶意发送者在接收者检查数据是否正常后,但在接收者对该数据采取行动之前,有可能修改数据;那么发送者可以诱使接收者做接收者不允许的事情;最终你会面临重大安全风险。我不知道Mach是否会采取任何措施来修复此问题(理论上,内核可以临时修改发送方的虚拟内存,以防止它修改共享内存中的“已发送”数据,直到接收方完全处理完数据,但这涉及到性能问题,并且无法轻松判断接收方是否/何时真的完全处理完数据).

Hmm。因此,关键区别在于,在消息传递中,内核积极参与通信,而在纯粹的共享内存中,一旦建立了共享内存区域,则由进程来实现同步。因此,通过消息传递的ipc和通过共享内存的ipc并不是相互排斥的概念māl:有趣的是,想象一下,如果内核支持“没有数据的消息”(仅与调度器同步)。Mach消息可以被视为“共享内存(用于数据)+内核支持没有数据的消息”。噢,谢谢。我现在明白了。