2011-04-13 94 views
1

我正在研究操作系统(Silberscatz,Galvin等人)。我的编程经验仅限于编程文本或算法文本中偶尔编写的练习题。换句话说,我没有适当的应用程序编程或系统编程经验。我认为我的下面的问题是缺乏上述经验的结果,因此缺乏背景。共享内存IPC机制与API /系统调用调用的区别

我特别研究IPC机制。在阅读有关共享内存(SM)时,我无法想象使用SM进行通信的真实场景。在我的linux(ubuntu)机器上(使用小型shell脚本中的'ipcs')上的相同SM段的进程的检查被上传here

大部分应用程序共享似乎与X deamon共享。据我所知,X是负责给我我的GUI的过程。我感到这些应用程序(主要是保留在我的任务栏上的applet)与X共享关于需要改变其外观和显示值的数据。这是一个合理的推论吗?

如果是这样, 我的问题是,我的应用程序通过共享内存段与'X'通信与我的应用程序调用'X'提供的某些API并与'X'通信需要刷新他们的外表? 差异我的意思是,为什么不使用后面的方法?

是不是觉得如何用户进程和内核沟通?应用程序在需要时调用系统调用,比如读取文件,通过系统调用的参数传递文件名和其他相关信息?

而且你能提供给我的日常使用的应用程序,其使用共享内存和消息传递通信的例子吗?

编辑 我已经提出了更清晰的问题。我已经格式化编辑的零件要大胆

回答

1

不同的是,与API你作为一个开发人员可能无法获得什么这些功能里面发生的事情,所以内存不一定会共享。

共享存储器是大多的内存向这两个应用可以写入和读取的特定区域。这个过程要求对内存的访问是同步的,所以事情不会被破坏。

使用别人的API并不意味着你与他们共享内存,这个过程只会做你问,也许返回操作你的结果,但是,这并不一定通过共享内存去。尽管它可以,但它依赖于一如既往。

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

+0

我编辑我的问题,使我的问题更加清晰。我知道函数调用和共享内存的区别。我想知道为什么后来这里更受欢迎。 – 2011-04-13 07:15:17

1

首先,由于X服务器只是另一个用户空间的过程中,不能使用操作系统的系统调用机制。即使通过API完成通信,如果它位于用户空间进程之间,那么在该API后面会有一些进程间通信(IPC)机制。这可能是共享内存,套接字或其他。当大量的数据涉及

通常共享存储器被使用。也许有很多数据需要多个进程访问,而且每个进程拥有自己的副本会浪费内存。或需要大量的数据的过程中,如果它是被流传输,在时间一个字节,通过另一IPC机制这将是慢之间传送。

对于图形,它是不寻常的一个程序,以保持包含图像的像素图,窗口,或甚至整个屏幕,然后需要定期复制到屏幕的缓冲器。有时候速度非常快,每秒30次以上。我怀疑这就是为什么X尽可能使用共享内存的原因。