Operating system 共享内存IPC机制与API/系统调用调用的区别

Operating system 共享内存IPC机制与API/系统调用调用的区别,operating-system,ipc,shared-memory,Operating System,Ipc,Shared Memory,我正在学习操作系统(Silberscatz、Galvin等人)。我的编程经验仅限于偶尔对编程文本或算法文本中给出的练习问题进行编码。换句话说,我没有适当的应用程序编程或系统编程经验。我认为我下面的问题是由于缺乏上述经验,因此缺乏背景 我专门研究IPC机制。在阅读有关共享内存(SM)的文章时,我无法想象进程使用SM进行通信的真实场景。在我的linux(ubuntu)机器上(在一个小shell脚本中使用“ipcs”)上传了对连接到同一SM段的进程的检查 应用程序共享的大部分内容似乎都与X deamo

我正在学习操作系统(Silberscatz、Galvin等人)。我的编程经验仅限于偶尔对编程文本或算法文本中给出的练习问题进行编码。换句话说,我没有适当的应用程序编程或系统编程经验。我认为我下面的问题是由于缺乏上述经验,因此缺乏背景

我专门研究IPC机制。在阅读有关共享内存(SM)的文章时,我无法想象进程使用SM进行通信的真实场景。在我的linux(ubuntu)机器上(在一个小shell脚本中使用“ipcs”)上传了对连接到同一SM段的进程的检查

应用程序共享的大部分内容似乎都与X deamon有关。据我所知,X是负责给我GUI的过程。我推断这些应用程序(大部分是任务栏上的小程序)与X共享关于其外观和显示值需要更改的数据。这是一个合理的推论吗

如果是,, 我的问题是,通过共享内存段与“X”通信的应用程序与调用“X”提供的某些API并与“X”通信需要刷新外观的应用程序之间有什么区别我的意思是,为什么不使用后一种方法?

这不是用户进程和内核通信的方式吗?当应用程序想要(比如说读取文件)通过系统调用的参数传递文件名和其他相关信息时,它调用系统调用

另外,您能给我提供一些常规使用的应用程序的例子,这些应用程序利用共享内存和消息传递进行通信吗

编辑
我已经把问题说得更清楚了。我已将编辑的部分格式化为粗体

不同之处在于,作为开发人员,您可能无法访问这些函数中的内容,因此内存不一定共享

共享内存主要是两个应用程序都可以写入和读取的特定内存区域。这就要求对内存的访问是同步的,这样事情就不会被破坏

使用某人的API并不意味着您与他们共享内存,该过程只会执行您要求的操作,并可能将该操作的结果返回给您,但这不一定通过共享内存。尽管可以,但这要视情况而定,一如既往


我想说,对一个应用程序的偏好取决于特定应用程序的规格、它正在做什么以及它需要共享什么。我可以想象,某种类型的大型数据集将由共享内存共享,但将文件名传递给另一个应用程序可能只需要一个API调用。然而,我认为这在很大程度上取决于需求。

首先,由于X服务器只是另一个用户空间进程,它不能使用操作系统的系统调用机制。即使通信是通过API完成的,如果是在用户空间进程之间,则该API背后也会有一些进程间通信(IPC)机制。可能是共享内存、套接字或其他

通常在涉及大量数据时使用共享内存。可能有很多数据需要多个进程访问,如果每个进程都有自己的副本,那将是对内存的浪费。或者,大量数据需要在进程之间进行通信,如果通过另一个IPC机制进行流式传输(每次传输一个字节),则传输速度会变慢


对于图形,一个程序保存一个包含图像、窗口甚至整个屏幕的像素图的缓冲区并不少见,然后需要定期将其复制到屏幕上。有时速度非常快…每秒30次或更多。我怀疑这就是X在可能的情况下使用共享内存的原因。

我编辑了我的问题,以使我的问题更清楚。我知道函数调用和共享内存之间的区别。我想知道为什么这里更喜欢后者。