text: 计算机操作系统(二)
  操作系统隐藏了进程通信的实现细节，通信过程对用户是透明的，减少了通信程序编制上的复杂性。
  随着OS的发展，用于进程之间实现通信的机制也在发展，并已由早期的低级进程通信机制发展为能传送大量数据的高级通信工具机制。
  共享存储器系统(Shared-Memory System)，相互通信的进程共享某些数据结构或共享存储区，进程之间能够通过这些空间进行通信。
  基于共享存储区的通信方式，为了传输大量数据，在存储器中划出了一块共享存储区，诸进程可通过对共享存储区中数据的读或写来实现通信。
  消息传递系统(Message passing system，当前应用最为广泛的一种进程间的通信机制。
  当今最为流行的微内核操作系统中，微内核与服务器之间的通信，无一例外地采用了消息传递机制。
  管道通信，所谓“管道”指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件，又名pipe文件。
  为了协调双方的通信，管道机制必须提供三方面的协调能力:
  1)互斥，即当一个进程正在对pipe执行读/写操作时，其它进程必须等待。
  2)同步，指当写(输入)进程把一定数量的数据写入pipe，便去睡眠等待，直到读(输出)进程取走数据后，再把它唤醒。
  3)确定对方是否存在，只有确定了对方已存在时，才能进行通信。
  消息传递的实现方式:直接通信方式、间接通信方式。
  直接通信方式，指发送进程利用OS所提供的发送命令，直接把消息发送给目标进程。
  在某些情况下，接收进程可与多个发送进程通信，因此不可能事先指定发送进程。
  如提供打印服务的进程，对于这样的应用，在接收进程接收消息的原语中，表示源进程的参数，也是完成通信后的返回值，接受原语表示为Receive(id，message).
  利用信箱即可实现实时通信，又可实现非实时通信。
  1)信箱的创建和撤消，进程可利用信箱创建原语来建立一个新信箱。
  当进程不需要读信箱时，可用信箱撤消原语将之撤消。
  2)消息的发送和接收，当进程之间要利用信箱进行通信时，必须使用共享信箱，并利用通信原语通信。
  Send(mailbox，message)将一个消息发送到指定信箱。
  信箱可由操作系统创建，也可由用户进程创建，创建者是信箱的拥有者。
  由此可分为三类:
  2)公用信箱，由操作系统创建，并提供给系统中的所有核准进程使用。
  3)共享信箱，由某进程创建，在创建时或创建后指明它是可共享的，同时须指出共享进程(用户)的名字。
  利用信箱通信，发送进程和接收进程之间存在以下四种关系:
  2)多对一关系，允许提供服务的进程与多个用户进程之间进行交互，也称为客户/服务器交互(clien/server interaction)。
  3)一对多关系，允许一个发送进程与多个接收进程进行交互，使发送进程可用广播方式向接收者(多个)发送消息。
  4)多对多关系，允许建立一个公用信箱，让多个进程都能向信箱中投递消息，也可从信箱中取走属于自己的消息。
  消息传递系统实现中的若干问题:通信链路、消息的格式、进程同步方式。
  在单机和计算机网络环境下，高级进程通信广泛采用消息传递系统。
  为使在发送进程和接收进程之间能进行通信，必须在两者之间建立一条通信链路(communication link)。
  根据通信链路的连接方式，又可把通信链路分为两类:
  根据通信方式的不同，又可把链路分成两种:
  还可根据通信链路容量的不同而把链路分成两类:一是无容量通信链路，在这种通信链路上没有缓冲区，因而不能暂存任何消息。
  在消息传递系统中所传递的消息，必须具有一定的消息格式。
  在某些OS中，消息采用比较短的定长消息格式，这便减少了对消息的处理和存储开销。
  系统无论在处理还是存储变长消息时，都可能会付出更多的开销，但这方便了用户。
  在进程之间进行通信时，同样需要有进程同步机制，以使诸进程间能协调通信。
  由此，我们可得出以下三种情况:
  1)发送进程阻塞，接收进程阻塞。
  2)发送进程不阻塞，接收进程阻塞。
  3)发送进程和接收进程均不阻塞。
  消息缓冲队列通信机制首先由Hansan提出，后被广泛应用于本地进程之间的通信中。