リムナンテスは愉快な気分

徒然なるままに、言語、数学、音楽、プログラミング、時々人生についての記事を書きます

「分散システム 原理とパラダイム 第2版」第3章解答

英語版の解答の翻訳

ソース:https://www.distributed-systems.net/my-data/ds2/ds-solutions.pdf

google翻訳そのままの箇所は訳がクソです。あしからず。

 

第3章

 

1. Q:この問題では、単一スレッドのサーバーとマルチスレッドのサーバーを使用して、読み取り値を比較します。必要なデータがあると仮定して15ミリ秒で作業を要求し、ディスパッチし、残りの必要な処理を行います。 メインメモリのキャッシュ。時間の3分の1の場合のように、ディスクの動作が必要な場合、スレッドがスリープしている間に追加の75ミリ秒が必要です。 Howmanyrequests / secはサーバがifitがシングルスレッドであるかどうかを処理できますか? マルチスレッドの場合は?

A:シングルスレッドの場合、キャッシュヒットは15msec、キャッシュはmissestake90msecです。 加重平均は2/3¥15 + 1/3¥90です。平均要求は40ミリ秒、サーバーは毎秒25回です。 マルチスレッドサーバーの場合、ディスクを待機するすべてのサーバーが重複しているため、すべての要求が15ミリ秒になり、サーバーは1秒あたり66個の2/3要求を処理できます。

 

2. Q:サーバープロセスのスレッド数を制限するのは難しいですか?

A:はい、2回限りです。第1に、スレッドには独自のスタックを設定するためのメモリが必要です。したがって、多くのスレッドを持つとサーバが正常に動作するにはあまりにも多くのメモリを消費する可能性があります。さらに重大な理由は、オペレーティングシステムにとって、独立したスレッドは混乱したmannerで動作する傾向があります。相対的に安定した作業セットであり、結果として人為的な欠陥、したがってI / Oが生じる。多くのスレッドを持つと、ページのスラッシングに起因するパフォーマンスの低下につながります。すべてがメモリに格納されている場合でも、混沌としたパターンに従ってメモリがアクセスされることは容易にわかります。シングルスレッドの場合と比較してパフォーマンスが低下することがあります.

 

3. Q:本文では、マルチスレッド・サーバーを説明し、シングルスレッド・サーバーとアーンド・ステート・マシン・サーバーよりも理由があることを示しています。シングルスレッド・サーバーがより良いかもしれないという状況がありますか?

A:はい。 サーバが完全にCPUバインドされている場合、複数スレッドを持つ必要はありません。 それは不必要な複雑さを追加するだけかもしれません。例として、100万人がいるエリアの電話番号案内番号を考えてみましょう。 各(名前、電話番号)レコードが、例えば、64文字である場合、エンティティ・データベースは64メガバイトを要し、サーバの記憶装置に容易に保持して高速検索を提供することができる

 

4. Q:1つのスレッドだけを軽量プロセスに静的に関連付けることは良いことではありません。 Whynot?

A:そのような関連付けは、カーネルレベルスレッドのみを持つことに効果的に減少し、スレッドをスレッドに持つパフォーマンスの多くが失われてしまうことを意味します。

 

5. Q:プロセスごとに1つの軽量プロセスしか持たないことも、あまり良い考えではありません。 Whynot?

A:このスキームでは、ユーザーレベルのスレツドのみを効果的に使用できます。つまり、ブロックされたシステムコールがプロセス全体をブロックすることになります。

 

6. Q:実行可能なスレッドがあるように、マンチェスター級のプロセスを持つ単純なスキームを記述してください.

A:単一のLWPで開始し、実行可能なスレッドを選択させます。 arunnableスレッドが見つかった場合、LWPは別のLWPを作成して、実行するべき別のスレッドを探します。実行可能なスレッドが見つからない場合、LWPはそれ自体を破棄します。

 

7. Q:Xは、ユーザーの端末をサーバーのホストとして指定し、アプリケーションはクライアントとして指定します。

A:はい、ちょっと混乱しているように見えるかもしれませんが。全体的な考え方は、サーバーがハードウェアを制御し、アプリケーションがそのハードウェアを操作する要求を送信できることです。この観点から、X Windowserverは実際にはユーザーのマシン上に存在し、アプリケーションがクライアントとして機能する

 

8. Q:Xプロトコルにはスケーラビリティの問題があります。これらの問題はどのように取り組まれたのですか?

A:本質的には2つの問題があります。第1に、数値的なスケーラビリティは、あまりにも多くの帯域幅が必要であるという意味では問題がある。圧縮技法を使用することにより、帯域幅を大幅に削減することができます。第2に、アプリケーションとしてのスケーラビリティ問題が存在し、ディスプレイは一般にあまりにも多くの同期を必要とする。ディスプレイの効果的な状態がアプリケーション側で維持されるキャッシュ技術を使用することにより、アプリケーションがローカルキャッシュを検査してディスプレイの状態を調べることができるので、多くの同期化トラバースを避けることができます。

 

9. Q:プロキシは、テキストで説明されているように、レプリカごとに複製透過性をサポートできます。

A:はい:レプリケートされたオブジェクトを考慮して、別の(複製されていない)オブジェクトBを挿入することができます.Breillの呼び出しは、各レプリカによって実行されます。ただし、Bは通常1回のみ呼び出されます。このような複製された呼び出しを処理する特別な手段が必要です。

 

10. Q:プロセスを起動して並行サーバーを構築すると、マルチスレッドサーバーに比べていくつかの利点と欠点があります。いくつか言及する.

A:重要な利点は、別々のプロセスが互いに独立して保護されていることであり、完全に独立したスーパーサービスの場合と同様に必要であることが判明する可能性がある。一方、プロセススポンニングは、マルチスレッドサーバーを使用するときに節約できる比較的コストのかかる操作です。また、プロセスが通信する必要がある場合、スレッドを使用することは、カーネルが通信を実装することを避けることができます。

 

11. Q:基盤となるオペレーティングシステムへのトランスポートレベルインターフェイスとしてソケットを使用して、複数のプロトコルをサポートするマルチスレッドサーバーの設計をスケッチします。

A:単純な設計では、着信転送メッセージ(TPDUs)を待機するスレッドが1つあります。各TPDUのヘッダーに高レベルプロトコルを識別する数が含まれていると仮定すると、トレッドペイロードを取得してそのプロトコルのモジュールに渡すことができます。そのような各モジュールには、このペイロードを待つセパレータ・スレッドがあり、着信要求として扱います。要求を処理した後、応答メッセージがTに渡され、次にTがトランスポートレベルメッセージをラップして、それを適切な宛先に送信する

 

12. Q:アプリケーションがウインドウマンを迂回して画面を完全に台無しにするのはなぜですか?

A:ウインドウシステムを含むウインドウシステムをすべてのウインドウ操作が実行されるような方法で実行するマイクロカーネルのアプローチを使用します。カーネルを通過する必要があります。事実、これはクライアント/サーバーモデルを1台のコンピュータに転送する本質です。

 

13. Q:クライアントとのTCP / IP接続をステートフルまたはステートレスに保守するサーバーはありますか?

A:サーバーがそのクライアント上に他の情報を保持していないと仮定すると、サーバーはステートレスであると主張します。問題はサーバではなく、サーバ上のトランスポート層がクライアント上で状態を維持することです。ローカルのオペレーティングシステムが追跡していることは、原則としてサーバーにとって懸念されていません。

 

14. Q:クライアントIPアドレスが最近アクセスしたWebページにマップされているテーブルを管理するWebサーバーを想像してみてください。クライアントがサーバーに接続すると、サーバーはテーブル内のクライアントを検索し、見つかった場合は、そのページを返します。

A:これはステートレスサーバーであると強く主張することができます。ステートレスなデザインで重要なのは、クライアント上のサーバーによって情報が保持されているかどうかではなく、その情報が正しいかどうかを判断することです。この例では、何らかの理由でテーブルが失われた場合、何も起こらなかったかのように、クライアントとサーバーは適切に対話できます。ステートフルな設計では、このような相互作用は、サーバが可能性のある障害から回復した後にのみ可能です。

 

15. Q:遠隔のマシン上で子プロセスをフォークできるようにすることで、強力なOSの可動性をサポートすることができます。

A:フォークすることは、親の完全なイメージが子供にコピーされていることを意味します。つまり、電話をかけた直後に子が続行されるということです。ターゲットのプラットフォームは、親が実行中です。最初のステップでは、ターゲットオペレーティングシステムの予約リソースを取得し、newchildプロセス用の適切なプロセスとメモリマップを作成します。これが行われた後、親のイメージ(メモリ内)をコピーして、その子をアクティブにすることができます。 (ここではいくつかの重要な細部を無視していることは明らかです。)

 

16. Q:図3-0では、ターゲットプロセスでマイグレーションされたコードを再現することで、強いモビリティを組み合わせることはできないことが示唆されています。反例を与える:

A:スレッドの移行によって強力なモビリティが発生した場合、移行されたスレッドがターゲットプロセスのコンテキストで実行される可能性があります。

 

17. Q:現在実行中のマシン上でローカルに使用可能なåleFへのアクセスが必要なprocessPを考えてみましょう。システム全体の参照がどのように実装されているのですか?

A:最も簡単な解決策は、別のプロセスを作成することです.Fのためのリモート依頼を処理します.Processは、以前と同じインターフェースを提供します。プロキシの形式。効果的に、processQは、サーバとして動作します。

 

18. Q:TCPハンドオフの場合のTCPパケットの詳細と、さまざまなヘッダー内の送信元および宛先アドレスに関する情報を詳しく説明してください.

A:これはさまざまな方法がありますが、フロントエンドに3ウェイハンドシェイクを行い、そこから前方のパケットを選択されたサーバに転送します。このサーバは、送信元アドレスがフロントエンドのものに対応するTCP PDUを送信します。これに代わるものは、最初のパケットトーザーではありません。しかし、この場合、フロントエンドはループ内に留まり続けます。このスキームの利点は、選択されたサーバーが、årstシナリオのようにフロントエンドからこの情報を取得する代わりに、必要なTCP状態(使用するシーケンス番号など)を構築することです。