4、进程间的通信是如何实现的?

  进程通信,是指进程之间的信息交换(信息量少则一个状态或数值,多者则是成千上万个字节)。因此,对于用信号量进行的进程间的互斥和同步,由于其所交换的信息量少而被归结为低级通信。

  所谓高级进程通信指:用户可以利用操作系统所提供的一组通信命令传送大量数据的一种通信方式。操作系统隐藏了进程通信的实现细节。或者说,通信过程对用户是透明的。

  高级通信机制可归结为三大类:

  (1)共享存储器系统(存储器中划分的共享存储区);实际操作中对应的是“剪贴板”(剪贴板实际上是系统维护管理的一块内存区域)的通信方式,比如举例如下:word进程按下ctrl+c,在ppt进程按下ctrl+v,即完成了word进程和ppt进程之间的通信,复制时将数据放入到剪贴板,粘贴时从剪贴板中取出数据,然后显示在ppt窗口上。

  (2)消息传递系统(进程间的数据交换以消息(message)为单位,当今流行的微内核操作系统中,微内核与服务器之间的通信,无一例外地都采用了消息传递机制。应用举例:邮槽(MailSlot)是基于广播通信体系设计出来的,它采用无连接的不可靠的数据传输。邮槽是一种单向通信机制,创建邮槽的服务器进程读取数据,打开邮槽的客户机进程写入数据。

  (3)管道通信系统(管道即:连接读写进程以实现他们之间通信的共享文件(pipe文件,类似先进先出的队列,由一个进程写,另一进程读))。实际操作中,管道分为:匿名管道、命名管道。匿名管道是一个未命名的、单向管道,通过父进程和一个子进程之间传输数据。匿名管道只能实现本地机器上两个进程之间的通信,而不能实现跨网络的通信。命名管道不仅可以在本机上实现两个进程间的通信,还可以跨网络实现两个进程间的通信。

 

 

同一机器两个进程间通信

跨网络通信

剪贴板Clipboard

可以

不可以

匿名管道Pipe

可以

不可以

命名管道(点对点单一通信,数据量可较大)Namedpipe

可以

可以

邮槽(一对多,数据量较小,424字节以下)Mailslot

可以

可以

 5、线程同步

根据用户模式及内核模式下的同步方式的不同,分类及对比如下:

 

?

内核对象/

非内核对象

含义

缺点

适用

关键代码段(临界区)CriticalSection

非内核对象,工作在用户方式下,为用户模式对象

从程序代码的角度来控制线程的并发性

1.因为在等待进入关键代码段时无法设定超时值,所以其很容易进入死锁状态。2.不能跨进程使用。

单个进程中线程间的同步(同步速度快)

事件对象Event

内核对象

所有内核对象中基本的。

速度较慢(相比用户模式实现线程同步)

多个进程间的各个线程间实现同步

互斥对象Mutex

内核对象

代表对一个资源的独占式访问

信号量

Semaphore

内核对象

使用计数器来控制程序对一个共享资源的访问