コンシスw04 相互排除と同期
テスト
ビューア設定
[Enter]で回答、[Shift + Enter]で改行します。キーボードショートカットテスト結果は全て回答すると保存されます。
-
並行プロセスにおいて、なぜ「同期」や「相互排除」が必要なのか?
複数のプロセスが、ファイルやメモリ領域、プリンタなどの「共有資源」に同時にアクセスしようとすると、データの破壊や意図しない結果を招く可能性があるからである 。これを防ぐために、あるプロセスが資源を使っている間は、他のプロセスを待たせる「相互排除」が必要となる 。
-
際どい領域(クリティカルセクション)」とは何か?
各プロセス内で、共有資源にアクセスするプログラム部分のことである 。この領域への同時アクセスを防ぐことが、相互排除の目的である 。
-
「プロセス間の同期」とは、どのような状況で必要になるか?
あるプロセスの処理が、他のプロセスの処理結果に依存する場合に必要となる 。例えば、生産者・消費者問題において、消費者は生産者が生産物をバッファに入れるまで待つ必要がある 。
-
「割り込み禁止」によって相互排除を実現する方法とその問題点を述べよ
際どい領域に入る際に割り込みを禁止し、出る際に許可することで、プロセスの切り替えを防ぎ、相互排除を実現する 。しかし、この方法は利用できる状況が限られ、複雑な処理には向かないという問題点がある 。
-
ロック変数を用いた相互排除には、どのような問題点があるか?
きわどい領域を使用中は1,未使用なら0となる変数を導入する。
ロック変数の値を確認してから値を変更するまでの間に、別のプロセスが割り込んでくる可能性があることである 。これにより、複数のプロセスが同時に際どい領域に入ってしまう可能性がある 。
-
セマフォとは何か?その基本的な2つの操作を説明せよ。
Dijkstraによって考案された、相互排除と同期のための仕組みである 。整数型のセマフォ変数に対し、以下の2つの不可分な操作を行う 。
Down (P) 操作: セマフォ変数の値を1減らす。もし値が0なら、プロセスはスリープ(待機)する 。
Up (V) 操作: セマフォ変数の値を1増やす。もし待機中のプロセスがあれば、そのうちの1つを起床させる 。
-
バイナリセマフォによる相互排除の例
-
計数セマフォを使うときはどんな時?
カウントを必要とするとき。
ex)生産者と消費者がいる場合。生産者はカウントを+1,消費者はカウントを-1する。カウントが0のときは消費者はプロセスを実行できない
-
計数セマフォによる相互排除の例
-
「モニタ」とは何か?セマフォに対する利点は何か?
共有資源とそれに対する操作手続きを一体化した、高水準な同期プリミティブである 。プログラマは際どい領域の処理をモニタ内の手続きとして定義するだけでよく、ロックやアンロックの操作を直接記述する必要がないため、Down/Up操作の順序を間違えるといったセマフォの欠点を解消できる 。
-