Windows提供了对多操作环境或者子系统(subsystems)的支持。

Windows的消息传递机制称为先进的本地过程调用(advanced Local Procedure call)(ALPC),被用于在同一机器上的进程通信。这非常类似于被广泛使用的RPC机制,但它是针对Windows优化的。

和Mach一样,Windows也使用端口对象在两个进程之间来建立并保持连接。

Windows使用两种类型的端口:

  • 连接端口(connection ports)
  • 通信端口(communication ports.)

服务器进程发布对所有进程可见的连接端口(connection ports)对象。

  1. 当客户端需要来自子系统的服务时,它会为服务器的连接端口(connection ports)对象打开一个句柄
  2. 并向该端口发送一个连接请求。
  3. 然后,服务器创建一个隧道(channel)并向客户端返回一个句柄。该通道由一对私有通信端口(communication ports.)组成:一个用于客户机-->服务器的消息,另一个用于服务器->客户端的消息。此外,通信隧道(channel)支持回调机制,当客户端和服务器期望得到应答时,允许他们接受连接
  4. 客户端和服务器使用相应的端口句柄以发送消息或回调,并等待应答

当创建ALPC通道时,通常将选择下列三个消息传递技术之一:

  • 对于小消息(最多256字节),端口的消息队列用作中间存储,消息从一个进程复制到另一个进程。

  • 较大的消息必须通过一个区域对象(section object)传递,该对象是与隧道(channel)相关联的共享内存区域。

  • 当数据量太大而不能放入一个区域对象(section object)时,可以使用一个API,该API允许服务器进程直接读取和写入客户机的地址空间。

当它设置信道时,客户机必须确定它是否要发送大信息。

如果客户端确定要发送大型消息,则需要创建一个区域对象(section object)。类似地,如果服务器确定应答的消息很大,它将创建一个区域对象(section object)。可以使用区域对象(section object)用于发送一个小消息,其中包含关于区域对象(section object)的指针和大小信息。这种方法比上面列出的第一个方法更复杂,但是它避免了数据复制。在Windows中,高级本地过程调用的结构如下:

需要注意的是,Windows中的ALPC设施不是Windows API的一部分,因此应用程序编程人员不可见。相反,应用程序可以使用Windows API调用标准的远程过程调用。当在同一系统上的进程上调用RPC时,RPC是通过ALPC间接处理的。此外,许多内核服务使用ALPC与客户端进程通信。

results matching ""

    No results matching ""