操作系统中的RPC是什么?

28 Apr 2025 | 7 分钟阅读

远程过程调用(Remote Procedure Call, RPC)是一种用于构建分布式、客户端-服务器应用程序的强大技术。它也被称为函数调用或子程序调用。远程过程调用是指计算机程序调用发生在不同地址空间的某个过程(过程的代码与本地过程调用相同),而无需程序员显式地说明远程交互的细节。程序员编写的代码与子程序是本地的还是远程的,基本上是相同的。这是一种通过请求-响应消息传递系统实现的客户端-服务器交互形式。

What is RPC in Operating System

RPC 模型暗示了**位置透明性**,即调用过程在很大程度上是相同的,无论是本地的还是远程的。通常情况下,它们并非完全相同,以便可以区分本地调用和远程调用。远程调用通常比本地调用慢几个数量级且可靠性较低,因此区分它们很重要。

RPC 是一种进程间通信 (IPC) 的形式,因为不同的进程有不同的地址空间。即使物理地址空间相同,它们在同一台主机上也有不同的虚拟地址空间。而如果它们在不同的主机上,物理地址空间就不同。

如何进行远程过程调用

调用环境被挂起,过程参数被传输到将要执行该过程的环境中,然后在该环境中执行该过程。

What is RPC in Operating System

当过程完成并产生结果后,它会被传回调用环境,然后在该环境中恢复执行,就像从常规过程调用返回一样。

注意:RPC 特别适合客户端-服务器(例如,查询-响应)交互,其中控制流在调用方和被调用方之间交替。从概念上讲,客户端和服务器不是同时执行的;相反,执行线程从调用方跳转到被调用方,然后再跳回来。

RPC 类型

在操作系统中,远程过程调用(RPC)有三种类型,例如:

What is RPC in Operating System

1. 回调 RPC (Callback RPC)

这种类型的 RPC 可以在参与过程之间实现 P2P(点对点)范式。它帮助一个过程同时充当客户端和服务器。回调 RPC 具有以下功能,例如:

  • 远程处理交互式应用程序问题。
  • 为服务器提供客户端句柄。
  • 回调会使客户端进程等待。
  • 管理回调死锁。
  • 它促进了参与过程之间的点对点范式。

2. 广播 RPC (Broadcast RPC)

广播 RPC 是客户端将请求广播到网络,由所有具有处理该请求的方法的服务器进行处理。广播 RPC 具有以下功能,例如:

  • 允许指定客户端的请求消息需要被广播。
  • 可以声明广播端口。
  • 它有助于减轻物理网络的负载。

3. 批处理模式 RPC (Batch-mode RPC)

批处理模式 RPC 有助于在客户端将 RPC 请求排队、分离到传输缓冲区中,然后一次性将它们通过网络发送到服务器。批处理模式 RPC 具有以下功能,例如:

  • 通过一次性将请求发送到服务器来最小化发送请求所涉及的开销。
  • 这种 RPC 协议仅适用于需要较低调用率的应用程序。
  • 需要可靠的传输协议。

RPC 有什么作用?

当使用 RPC 框架的程序语句被编译成可执行程序时,编译后的代码中会包含一个存根(stub),该存根代表远程过程代码。

当程序运行时并发出过程调用时,存根会接收请求并将其转发到本地计算机中的客户端运行时程序。第一次调用客户端存根时,它会联系名称服务器以确定服务器所在的传输地址。

客户端运行时程序知道如何寻址远程计算机和服务器应用程序,并通过网络发送请求远程过程的消息。类似地,服务器也包含一个运行时程序和存根,它们与远程过程本身接口,并且响应-请求协议以相同的方式返回。

RPC 的特点

在操作系统中,远程过程调用(RPC)具有以下特点,例如:

  • RPC 向用户隐藏了消息传递过程的复杂性。
  • RPC 只使用 OSI 模型的一些特定层,例如传输层。
  • 客户端可以使用更高级的语言与服务器通信。
  • RPC 适用于本地环境和远程环境。
  • RPC 程序用简单的代码编写,程序员容易理解。
  • 操作系统可以轻松处理 RPC 涉及的进程和线程。
  • 操作系统向用户隐藏了 RPC 的抽象。

RPC 如何工作?

当调用远程过程时,调用环境被挂起,过程参数被传输到将要执行该过程的环境中,然后在该环境中执行该过程。

当过程完成时,结果会被传回调用环境,然后在该环境中恢复执行,就像从常规过程调用返回一样。

What is RPC in Operating System

远程过程调用(RPC)在操作系统中按以下步骤工作:

步骤 1:客户端、客户端存根和 RPC 运行时在客户端机器上执行。

步骤 2:客户端以通常的方式传递参数来启动客户端存根进程。过程参数的打包称为*封送 (marshalling)*。客户端存根存储在客户端自己的地址空间内,它还会请求本地 RPC 运行时将消息发送回服务器存根。

步骤 3:在此阶段,用户可以通过进行常规的本地过程调用来访问 RPC。RPC 运行时负责管理网络在客户端和服务器之间的消息传输,还负责重传、确认、路由和加密等工作。

步骤 4:服务器过程完成后,返回到服务器存根,服务器存根将返回值打包(封送)到消息中。然后服务器存根将消息发送回传输层。

步骤 5:在此步骤中,传输层将结果消息发送回客户端传输层,客户端传输层再将其消息发送回客户端存根。

步骤 6:在此阶段,客户端存根解封(unpack)结果包中的返回参数,执行过程返回到调用者。

远程过程调用(RPC)的问题

在操作系统中,远程过程调用(RPC)面临一些必须解决的问题,例如:

What is RPC in Operating System

1. RPC 运行时

RPC 运行时系统是一组例程和服务库,负责处理 RPC 机制底层的网络通信。在 RPC 调用过程中,客户端和服务器端的运行时系统代码负责绑定、使用适当的协议建立通信、在客户端和服务器之间传递调用数据以及处理通信错误。

2. 存根

存根的作用是为程序员编写的应用程序代码提供透明性。

  • 在客户端:存根负责处理客户端本地过程调用与运行时系统之间的接口,进行数据的封送和解封,调用 RPC 运行时协议,并在请求时执行一些绑定步骤。
  • 在服务器端:存根在运行时系统和服务器执行的本地管理器过程之间提供类似的接口。

3. 绑定

客户端如何知道要调用谁以及服务 resides 何处?

最灵活的解决方案是使用动态绑定,并在首次进行 RPC 时在运行时查找服务器。第一次调用客户端存根时,它会联系名称服务器以确定服务器所在的传输地址。绑定包含两个部分:

  • 命名:提供服务的服务器会为其导出接口。导出接口就是将其注册到系统中,以便客户端可以使用。
  • 定位:客户端在通信开始之前必须导入(导出)的接口。

4. 与 RPC 相关的调用语义

它主要分为以下几种选择:

  • 重试请求消息:当服务器发生故障或接收方未收到消息时,是否重试发送请求消息。
  • 重复过滤:移除重复的服务器请求。
  • 结果重传:在不重新执行服务器端操作的情况下重发丢失的消息。

RPC 的特性

以下是远程过程调用 (RPC) 的基本特性:

  • 被调用的过程位于另一个进程中,该进程很可能位于另一台机器上。
  • 进程不共享地址空间。
  • 参数仅通过值传递。
  • RPC 在服务器进程的环境中执行。
  • 它不提供对调用过程环境的访问。

RPC 的优点

以下是 RPC 的一些优点或好处,例如:

  • RPC 方法通过使用高级语言中的常规过程调用,帮助客户端与服务器进行通信。
  • RPC 方法基于本地过程调用模型,但过程最有可能在不同的进程中执行,通常是不同的计算机。
  • RPC 支持过程和线程导向模型。
  • RPC 将内部消息传递机制对用户隐藏。
  • 重写和重新开发代码所需的努力最少。
  • 远程过程调用可用于分布式环境和本地环境。
  • 它承诺了许多协议层以提高性能。
  • RPC 提供抽象。例如,网络通信的消息传递性质对用户保持隐藏。
  • RPC 允许应用程序不仅在本地环境中使用,还在分布式环境中使用。
  • 通过 RPC 代码,重写和重新开发的努力被最小化。
  • RPC 支持面向过程和面向线程的模型。

RPC 的缺点

以下是使用 RPC 的一些缺点或不足之处,例如:

  • 远程过程调用仅通过值传递参数,不允许传递指针值。
  • 远程过程调用的时间和(返回)时间(即开销)可能显著低于本地过程。
  • 该机制极易发生故障,因为它涉及通信系统、另一台机器和另一个进程。
  • RPC 的概念可以以不同的方式实现,因此它无法标准化。
  • RPC 在硬件架构方面没有提供灵活性,因为它主要是基于交互的。
  • 由于远程过程调用,进程的成本增加。