ソフトウェアプロセスの排他制御に関する次の記述を読んで,設問1~3に答えよ。複数のプロセスが,共有するデータ(以下,共有データという)を書き換える処理を,並行して実行する場合がある。このようにプロセス間でデータを共有する方法の一つとして,プロセス間で共有するメモリ(以下,共有メモリという)に共有データを格納する方法がある。共有メモリを使用して並行に処理を実行する場合を考える。対して計算処理をする場合を,図1に示す。読み込んだ値を用いて計算する。実行する場合を考える。プロセスp1:yの値を2だけ増加させる。プロセスp2:yの値を1だけ減少させる。取り得ない値を,解答群の中から選べ。なるケース]以下のように、プロセスp1の更新をプロセスp2の結果で上書きする順番で処理が行われたときにこの値になります。なるケース]ありません。なるケース]以下のように、プロセスp1とプロセスp2の処理が(排他制御をしたように)順次行われたときにこの値になります。なるケース]以下のように、プロセスp2の更新をプロセスp1の結果で上書きする順番で処理が行われたときにこの値になります。入れる正しい答えを,解答群の中から選べ。プロセスの排他制御の仕組みとして,共有データがいずれかのプロセスに確保されている状態(以下,確保状態という)又はどのプロセスにも確保されていない状態(以下,解放状態という)のいずれかの状態をもつ同期変数を使用する方法を考える。用いて排他制御する場合を,図2に示す。図2において,同期変数の状態を変更する関数lとuがあり,同期変数を引数で指定する。各プロセスは,共有データを排他制御して計算処理をする場合,関数lの呼出し,計算処理,関数uの呼出しの順番で処理を実行する。関数lの操作内容はa処理であり,関数uの操作内容はb処理である。ここで,"同期変数の状態を調べて,変更する処理"は中断のない処理として実行されるものとする。プロセスが待ちの状態になったら,CPUは別のプロセスに割り付けられるものとする。する」処理は「ア」と「イ」です。この2つの処理は「ア」が確保状態になるまで待つのに対し、「イ」では既に確保状態であれば何もしないという点が異なります。「イ」の方式では場合によっては資源をロックしないまま計算処理が行われてしまうので、排他制御になりません。したがって関数lの適切な処理方式は「ア」です。関数uは共有データの更新後に呼ばれるので、行うべきは資源の解放処理になります。する」処理は「オ」のみなので、これが正解となります。「カ」にも「解放状態になるまで待ち...」という記述がありますが、ロックをかけているのは自プロセスなので自身が明示的に解放しない限り自然と解放状態になることはありません。したがって関数uの適切な処理は「オ」です。用いて排他制御する場合を考える。y1,y2の確保と解放を行う順序によってはデッドロックが発生する可能性がある。デッドロックが発生する可能性のあるプロセスp2の操作の順序を,解答群の中から選べ。解答選択欄-アイウエ正解・解説を表示するウ解説デッドロックとは、共有資源を使用する2つ以上のプロセスが、互いに相手プロセスの必要とする資源を排他的に使用していて、互いのプロセスが相手の使用している資源の解放を待っている状態です。デッドロックが発生するとプロセスは永遠に待ち状態になってしまうためプロセスの続行ができなくなってしまいます。デッドロックの発生は、2つのプロセスで互いに使用する資源の占有順序が反対であるときに起こる可能性があります。プロセスp1は「y1→y2」の順で資源を占有するので、これとは逆の「y2→y1」の順である「ウ」「エ」が対象となりますが、「エ」は2つの資源を同時に占有することがないのでデッドロックが起こることはありません。したがって「ウ」が正解です。具体的には2つのプロセスが次のように資源を占有した場合にデッドロックが発生します。