logo

オペレーティング システムの RPC とは何ですか?

リモート プロシージャ コール (RPC) は、クライアント サーバー ベースの分散アプリケーションを構築するための強力な手法です。関数呼び出しまたはサブルーチン呼び出しとも呼ばれます。リモート プロシージャ コールとは、プログラマがリモート インタラクションの詳細を明示的に指定することなく、コンピュータ プログラムがローカル プロシージャ コールとしてコーディングされたプロシージャを別のアドレス空間で実行させることです。プログラマは、サブルーチンが実行プログラムに対してローカルであってもリモートであっても、基本的に同じコードを作成します。これは、要求と応答のメッセージ パッシング システムを介して実装されるクライアントとサーバーの対話形式です。

オペレーティング システムにおける RPC とは何ですか

RPC モデルの意味するところは、 位置の透明性 ローカルでもリモートでも、呼び出し手順はほぼ同じです。通常、これらは同一ではないため、ローカル呼び出しとリモート呼び出しを区別できます。リモート呼び出しは通常、ローカル呼び出しよりも桁違いに遅く、信頼性も低いため、区別することが重要です。

RPC は、プロセス間通信 (IPC) の一種であり、プロセスが異なればアドレス空間も異なります。物理アドレス空間は同じであっても、同じホスト マシン上に異なる仮想アドレス空間があります。一方、異なるホスト上にある場合は、物理アドレス空間も異なります。

リモート プロシージャ コールを行う方法

呼び出し環境は一時停止され、プロシージャのパラメータがネットワークを介してプロシージャが実行される環境に転送され、そこでプロシージャが実行されます。

オペレーティング システムにおける RPC とは何ですか

プロシージャが終了して結果が生成されると、プロシージャは呼び出し環境に戻され、通常のプロシージャ呼び出しから戻ったかのように実行が再開されます。

注: RPC は、呼び出し元と呼び出し先の間で制御の流れが交互に行われる、クライアントとサーバー (クエリと応答など) の対話に特に適しています。概念的には、クライアントとサーバーは同時に実行されません。代わりに、実行スレッドは呼び出し元から呼び出し先にジャンプし、その後再び戻ります。

RPC の種類

オペレーティング システムには、次の 3 種類のリモート プロシージャ コール (RPC) があります。

オペレーティング システムにおける RPC とは何ですか

1. コールバック RPC

このタイプの RPC では、参加しているプロセス間の P2P パラダイムが可能になります。これは、プロセスがクライアント サービスとサーバー サービスの両方になるのに役立ちます。コールバック RPC には次のような機能があります。

ランダムな順序のSQL
  • 対話型アプリケーションの問題をリモートで処理します。
  • クライアントハンドルを備えたサーバーを提供します。
  • コールバックによりクライアントプロセスが待たされます。
  • コールバックのデッドロックを管理します。
  • これにより、参加するプロセス間のピアツーピア パラダイムが促進されます。

2. ブロードキャスト RPC

ブロードキャスト RPC は、ネットワーク上でクライアントのリクエストをブロードキャストし、そのリクエストを処理するメソッドを使用してすべてのサーバーによって処理されます。ブロードキャスト RPC には次のような機能があります。

  • クライアントの要求メッセージをブロードキャストする必要があることを指定できます。
  • ブロードキャストポートを宣言できます。
  • 物理ネットワークの負荷を軽減するのに役立ちます。

3. バッチモード RPC

バッチ モード RPC は、クライアント側の送信バッファ内で RPC 要求をキューに入れて分離し、ネットワーク上で 1 つのバッチとしてサーバーに送信するのに役立ちます。バッチモード RPC には次のような機能があります。

  • リクエストを 1 つのバッチとしてネットワーク経由でサーバーに送信することで、リクエストの送信に伴うオーバーヘッドを最小限に抑えます。
  • このタイプの RPC プロトコルは、より低い呼び出しレートを必要とするアプリケーションでのみ効率的です。
  • 信頼性の高い伝送プロトコルが必要です。

RPCって何をするの?

RPC フレームワークを使用するプログラム ステートメントが実行可能プログラムにコンパイルされると、リモート プロシージャ コードを表すスタブがコンパイルされたコードに含まれます。

プログラムが実行され、プロシージャ呼び出しが発行されると、スタブは要求を受信し、ローカル コンピューターのクライアント ランタイム プログラムに転送します。クライアント スタブは、初めて呼び出されるときに、ネーム サーバーに接続して、サーバーが存在するトランスポート アドレスを決定します。

クライアント ランタイム プログラムは、リモート コンピュータとサーバー アプリケーションのアドレス指定方法を認識し、リモート プロシージャを要求するメッセージをネットワーク経由で送信します。同様に、サーバーには、リモート プロシージャ自体とインターフェイスするランタイム プログラムとスタブが含まれており、応答要求プロトコルも同様に返されます。

マークダウン取り消し線

RPCの特徴

オペレーティング システムのリモート プロシージャ コール (RPC) には次のような機能があります。

  • RPC は、メッセージ受け渡しプロセスの複雑さをユーザーから隠します。
  • RPC は、トランスポート層などの OSI モデルの特定の層のみを使用します。
  • クライアントは、高水準言語を使用してサーバーと通信できます。
  • RPC は、ローカル環境とリモート環境の両方で適切に機能します。
  • RPC のプログラムはシンプルなコードで書かれており、プログラマにとっては容易に理解できます。
  • オペレーティング システムは、RPC に関連するプロセスとスレッドを簡単に処理できます。
  • オペレーティング システムは、RPC の抽象化をユーザーから隠します。

RPC はどのように機能するのでしょうか?

リモート プロシージャ コールが呼び出されると、呼び出し環境は一時停止され、プロシージャのパラメータがネットワークを介してプロシージャが実行される環境に転送され、その環境でプロシージャが実行されます。

プロシージャが終了すると、結果は呼び出し環境に転送され、通常のプロシージャ呼び出しから戻ったかのように実行が再開されます。

オペレーティング システムにおける RPC とは何ですか

リモート プロシージャ コール (RPC) は、オペレーティング システムの次の手順で機能します。

ステップ1: クライアント、クライアント スタブ、および RPC ランタイムはクライアント マシン上で実行されます。

ステップ2: クライアントは、通常の方法でパラメータを渡すことによってクライアント スタブ プロセスを開始します。プロシージャパラメータのパッキングはと呼ばれます マーシャリング 。クライアント スタブはクライアント自身のアドレス空間内に格納し、またローカル RPC ランタイムにサーバー スタブに送り返すように要求します。

ステップ 3: この段階では、ユーザーは通常のローカル プロシージャ コールを行うことで RPC にアクセスできます。 RPC ランタイムは、クライアントとサーバー間のネットワーク間のメッセージの送信を管理し、再送信、確認応答、ルーティング、および暗号化のジョブも実行します。

ステップ 4: サーバー プロシージャが完了すると、サーバー スタブに戻り、戻り値がメッセージにパック (マーシャリング) されます。次に、サーバー スタブはメッセージをトランスポート層に送り返します。

ステップ5: このステップでは、トランスポート層は結果メッセージをクライアント トランスポート層に送り返し、クライアント トランスポート層はメッセージをクライアント スタブに返します。

配列リストとリンクリスト

ステップ6: この段階では、クライアント スタブが結果のパケット内の戻りパラメータをデマーシャリング (アンパック) し、実行プロセスが呼び出し元に戻ります。

リモート プロシージャ コール (RPC) の問題

オペレーティング システムでは、リモート プロシージャ コールまたは RPC は、次のような解決しなければならない問題に直面していました。

オペレーティング システムにおける RPC とは何ですか

1. RPC ランタイム

RPC ランタイム システムは、RPC メカニズムの基礎となるネットワーク通信を処理するルーチンとサービスのライブラリです。 RPC 呼び出しの過程で、クライアント側とサーバー側のランタイム システム コードはバインディングを処理し、適切なプロトコルを介した通信を確立し、クライアントとサーバーの間で呼び出しデータを渡し、通信エラーを処理します。

2. スタブ

スタブの機能は、プログラマが作成したアプリケーション コードに透明性を提供することです。

    クライアント側:スタブは、クライアントのローカル プロシージャ コールとランタイム システムの間のインターフェイスを処理し、データのマーシャリングとアンマーシャリング、RPC ランタイム プロトコルの呼び出し、および要求に応じてバインド ステップの一部を実行します。サーバー側:スタブは、ランタイム システムとサーバーによって実行されるローカル マネージャー プロシージャとの間に同様のインターフェイスを提供します。

3. バインディング

クライアントは、誰に電話すればよいのか、サービスがどこにあるのかをどのようにして知るのでしょうか?

最も柔軟な解決策は、動的バインディングを使用し、RPC が最初に行われる実行時にサーバーを検索することです。クライアント スタブが初めて呼び出されるとき、ネーム サーバーに接続して、サーバーが存在するトランスポート アドレスを決定します。バインディングは 2 つの部分で構成されます。

    私たちは:提供するサービスを持つサーバーは、そのサービスのインターフェイスをエクスポートします。インターフェイスをエクスポートすると、インターフェイスがシステムに登録され、クライアントが使用できるようになります。場所を特定する:クライアントは、通信を開始する前に、(エクスポートされた) インターフェイスをインポートする必要があります。

4. RPC に関連する呼び出しセマンティクス

ABSCコード

主に以下の選択肢に分かれますが、

    再試行リクエストメッセージ:サーバーに障害が発生した場合、または受信者がメッセージを受信しなかった場合に、リクエスト メッセージの送信を再試行するかどうか。重複フィルタリング:重複したサーバーリクエストを削除します。結果の再送信:サーバー側で操作を再実行せずに、失われたメッセージを再送信します。

RPCの特徴

リモート プロシージャ コールの基本的な特徴は次のとおりです。

  • 呼び出されたプロシージャは別のプロセス内にあり、別のマシンに存在する可能性があります。
  • プロセスはアドレス空間を共有しません。
  • パラメータは値によってのみ渡されます。
  • RPC はサーバー プロセスの環境内で実行されます。
  • 呼び出し側プロシージャの環境へのアクセスは提供されません。

RPC の利点

RPC の利点は次のとおりです。

  • RPC メソッドは、高級言語でのプロシージャ コールを従来どおり使用して、クライアントがサーバーと通信するのに役立ちます。
  • RPC メソッドはローカル プロシージャ コールに基づいてモデル化されていますが、プロシージャは別のプロセス、通常は別のコンピュータで実行される可能性が最も高くなります。
  • RPC はプロセス指向モデルとスレッド指向モデルをサポートします。
  • RPC は、内部メッセージ受け渡しメカニズムをユーザーから隠蔽します。
  • コードの書き直しと再開発に必要な労力は最小限で済みます。
  • リモート プロシージャ コールは、配布およびローカル環境に使用できます。
  • パフォーマンスを向上させるためにプロトコル層の多くをコミットします。
  • RPC は抽象化を提供します。たとえば、ネットワーク通信のメッセージ パッシングの性質はユーザーには隠されたままです。
  • RPC を使用すると、ローカル環境だけでなく分散環境でもアプリケーションを使用できます。
  • RPC コードを使用すると、書き直しや再開発の労力が最小限に抑えられます。
  • RPC でサポートされるプロセス指向モデルとスレッド指向モデル。

RPCのデメリット

RPC を使用する場合のいくつかの欠点を次に示します。

  • リモート プロシージャ コールは値とポインタ値のみによってパラメータを渡しますが、これは許可されていません。
  • リモート プロシージャの呼び出し (および戻り) 時間 (つまり、オーバーヘッド) は、ローカル プロシージャよりも大幅に短縮できます。
  • このメカニズムには通信システム、別のマシン、別のプロセスが関与するため、障害に対して非常に脆弱です。
  • RPC の概念はさまざまな方法で実装できますが、これは標準ではありません。
  • RPC は主に対話ベースであるため、ハードウェア アーキテクチャの RPC には柔軟性がありません。
  • リモート プロシージャ コールによりプロセスのコストが増加します。