恐竜本3,4章練習問題を解きました。問題は著者のサイトにあるものです。
3.1 Using the program shown in Figure 3.30, explain what the output will be at Line A.
自身の回答:5。
解答:5
3.2 Including the initial parent process, how many processes are created by the program shown in Figure 3.31?
自身の回答:3.31が見つけられず…
解答:8プロセスが作られる。
3.3 Original versions of Apple’s mobile iOS operating system provided no means of concurrent processing. Discuss three major complications that concurrent processing adds to an operating system.
自身の回答:スケジューリングが必要となり、コンテキストスイッチを実装する必要がある。プロセス間でメモリ領域を分離する必要がある。ハードウェアリソースの競合を防ぐため同期処理を実装する必要がある。
解答:後で埋める(←いつ埋めるんだ)
3.4 The Sun UltraSPARC processor has multiple register sets. Describe what happens when a context switch occurs if the new context is already loaded into one of the register sets. What happens if the new context is in memory rather than in a register set and all the register sets are in
use?
自身の回答:レジスタセットに新しいコンテキストが入っていればCPUからのアクセス速度が非常に高いためコンテキストスイッチのオーバーヘッドを極小に抑えることができる。
メモリにコンテキストが乗っているならその逆となる。
解答:CPUの現在のレジスタセットポインタが新たなコンテキストを含むセットを指すよう切り替えられるが、それにはほとんど時間がかからない。もしコンテキストがメモリ上にあるなら、レジスタ中にあるコンテキストの1つが選ばれてメモリに送られなければならず、新たなコンテキストはメモリからセットに読み込まれなければならない。このプロセスはどのように置き換えの犠牲者を選ぶかに依存して、1セットのレジスタを持つシステムより少し時間がかかる。
3.5 When a process creates a new process using the fork() operation, which of the following state is shared between the parent process and the child process?
a. Stack
b. Heap
c. Shared memory segments
自身の回答:b
解答:共有メモリセグメントだけが親プロセスと新たにフォークされた子プロセスの間で共有される。スタックとヒープのコピーが新たに作られたプロセスに作成される。
3.6 With respect to the RPC mechanism, consider the “exactly once” semantic. Does the algorithm for implementing this semantic execute correctly even if the ACK message back to the client is lost due to a network problem? Describe the sequence of messages and discuss whether
“exactly once” is still preserved.
自身の回答:ACKがクライアントに返らないのでクライアントは同じメッセージを再送する。メッセージにシーケンス番号があればリモート側は同じメッセージに対してはACKを返せば良い。そのためACKがロストしてもexactly onceは実現できる。
解答:exactly onceセマンティクスはリモートプロシージャがちょうど1回実行されることを確約する。これを確約する一般的なアルゴリズムは受領通知とタイムスタンプ(もしくはサーバーが重複メッセージを識別できるように何らかのインクリメンタルなカウンター)を組み合わせる。一般的な戦略はクライアントがRPCをサーバーにタイムスタンプとともに送ることである。クライアントはタイムアウトクロックもスタートさせる。クライアントは2つの出来事のうち1つが起こるのを待つ。(1)サーバーからリモートプロシージャが実行されたことを示すACKを受け取る(2)タイムアウトする。もしクライアントがタイム・アウトしたらサーバーはリモートプロシージャを実行できなかったと仮定し、クライアントはRPCを再度実行し、時間的に後となるタイムスタンプを送る。クライアントは2つの理由のうち1つでACKを受け取れないかもしれない(1)もともとのRPCがサーバーに受信されなかった(2)RPCは正しく受信され実行されたがサーバーのACKが失われた。(1)の状況ではACKの使用がサーバーが究極的にRPCを受信して実行することを可能にする。状況(2)ではサーバーは重複するRPCを受信し、それが重複であることを識別してそのRPCを再度実行しないようにする。RPCが実行されたことをクライアントに教えるためサーバーが二回目のACKをクライアントに返さなければならないということを書き添えることは重要である。
3.7 Assume that a distributed system is susceptible to server failure. What mechanisms would be required to guarantee the “exactly once” semantics for execution of RPCs?
自身の回答:呼び出しに番号をつけて同じ呼び出しが判別できるようにする。
解答:サーバーは安定したストレージで何のRPC操作が受信されたか、それらがうまく実行されたか否か、それら操作に紐づく結果を記録するべきである。サーバークラッシュが起きRPCメッセージを受信したら、サーバーはRPCが過去に実行されたかどうかを確認しRPCが実行のexactly onceセマンティクスを保証することができる。
4.1 Provide three programming examples in which multithreading provides better performance than a single-threaded solution.
自身の回答:
・複数のI/Oが同時に必要になるタスク Webサーバ
・並列化可能な計算を行うタスク 機械学習
・画面描画と計算を同時に行う GUIアプリケーション
解答:
a. それぞれのリクエストに別々のスレッドでサービスするWebサーバ
b. 異なる行列の部分が並列で計算される行列積のような並列化されたアプリケーション
c. あるスレッドがユーザーインプットをモニターするのに使われ、別のスレッドが動作中のアプリケーションを表現し3詰めのスレッドがパフォーマンスをモニターするデバッガーのようなインタラクティブなGUIプログラム。
4.2 What are two differences between user-level threads and kernel-level threads? Under what circumstances is one type better than the other?
自身の回答:
解答:
a. ユーザーレベルスレッドはカーネルには認識されないがカーネルはカーネルスレッドを認識する。
b. M:1もしくはM:Nマッピングを使うシステムではユーザースレッドはスレッドライブラリにスケジュールされ、カーネルはカーネルスレッドをスケジュールする。
c. カーネルスレッドはプロセスと関連付けられる必要はないがすべてのユーザースレッドはプロセスに属する。カーネルスレッドはカーネルデータ構造を用いて表現されなければならないので一般的にユーザースレッドより維持するコストが高い。
4.3 Describe the actions taken by a kernel to context-switch between kernel-level threads.
自身の回答:タイマー割り込み→割り込みベクタから割り込みハンドラ呼び出し→レジスタ内容のメモリへの退避→プロセス状態をwaitingに変更→プロセスキューの後ろにPCBを移動→プロセスキューの先頭のPCBをrunningに変更→読み込みレジスタ内容の復元→実行
解答:カーネルスレッド間のコンテキストスイッチはスイッチアウトされる予定のスレッドのCPUレジスタを保存し新たにスケジュールされる予定のスレッドのCPUレジスタが復元されることを要求する。(ユーザープロセスのコンテキストスイッチを答えてしまった…)
4.4 What resources are used when a thread is created? How do they differ from those used when a process is created?
自身の回答:スタック用のメモリが確保される。オープン中のファイルディスクリプタ等はプロセス全体で共有されるのがプロセス作成との違いとなる。
解答:スレッドはプロセスより小さいためスレッド作成は典型的にはプロセス作成より少ないリソースを使う。プロセス作成には比較的大きなデータ構造であるPCBの割当を必要とする。PCBはメモリーマップ、オープン中のファイルのリスト、環境変数を含む。メモリーマップの割当と管理は典型的には最も時間がかかる活動となる。ユーザーもしくはカーネルスレッドを作成することはレジスタセットやスタック、優先度を保持する小さなデータ構造を割り当てることを含む。
4.5 Assume that an operating system maps user-level threads to the kernel using the many-to-many model and that the mapping is done through LWPs. Furthermore, the system allows developers to create real-time threads for use in real-time systems. Is it necessary to bind a real-time
thread to an LWP? Explain.
自身の回答:時間制限が厳密に決まったシステムに於けるスレッドはすべて時間制限を守らなければならない。そのためreal-time threadをLWPにバインドする必要がある。
解答:バインドする必要がある。タイミングはリアルタイムアプリケーションにとって重要である。もしあるスレッドがリアルタイムとマークされていてLWPにバインドされていなければそのスレッドは実行前にLWPにアタッチされることを待たなければならないかもしれない。あるリアルタイムスレッドが実行されていて次にブロックされる場合を考える。リアルタイムスレッドがブロックされている間、アタッチされていたLWPは別のスレッドに割り当てられる。リアルタイムスレッドが再度実行される時それはまずLWPにアタッチされるのをまず待たなければならない。LWPをリアルタイムスレッドにバインドすることでそのスレッドがスケジュールされてから最小の遅延で実行されることを確実にできる。
コメント