管道和套接字——是"消息传递"还是"共享内存"?

3

好的,这是一个愚蠢的问题...

管道、FIFO和套接字是共享内存还是消息传递..?

一开始我认为它们是共享内存,因为管道使用read()和write(),但现在我完全困惑了。从技术上讲,“消息”存储在内核的地址空间中,所以它是一条消息还是存储内存?我有一个操作系统导论的考试要在几个小时后进行,我只需要搞清楚这个问题。提前感谢您的帮助!

2个回答

6

消息传递是指在发送方和接收方之间进行交互的通信方式,例如套接字。虽然可以使用共享内存来实现,但通信模式仍然是消息传递。


+1:存在或不存在"共享缓冲区"完全无关紧要——这只是实现的细节。FIFO(先进先出)确实可以在没有共享缓冲区的情况下工作——它可能会很慢,但是它可以工作。另一方面,共享内存不能在没有共享内存的情况下工作。共享内存不是一个实现细节,而是提供的功能。 - S.Lott

0

这是消息传递。您指定一个缓冲区来写入套接字缓冲区,并且可以使用getTxAvailable()或其他方法事先了解它有多少可用空间。它并不真正是共享内存,因为它执行缓冲区传输操作以帮助封装套接字。如果您谈论的是客户端到服务器端的套接字,那也是消息传递。类似于Java直接缓冲区或文件映射内存的东西才是共享内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接