技術士第一次試験 専門科目情報工学部門 R04

問題 10 / 35

出典: 令和4年度技術士第一次試験問題[専門科目情報工学部門] III-10

オペレーティングシステム上で、NN 個の要素を持つバッファ(有限バッファ)を介して、複数の生産者と消費者が同期をとるプログラムを考える(生産者・消費者問題)。以下の PP 命令、VV 命令による計数セマフォを用いる。計数セマフォ ss は整数を値にとり、事象の発生を待つプロセスを登録するための待ち行列を QsQ_s とする。

P(s)P(s) if s>0s \gt 0 then
  ss1s \leftarrow s - 1
else
  PP 命令を実行したプロセスを QsQ_s に入れる
fi;
V(s)V(s) if QsQ_s が空でない then
  QsQ_s からプロセス1つを取り出して実行可能にする
else
  ss+1s \leftarrow s + 1
fi;

生産者・消費者問題のプログラムで用いる計数セマフォ aa(生産者の相互排除)、bb(消費者の相互排除)、eeff(「情報」の入ったバッファを制御する)を用意し、e=0e = 0f=Nf = N に初期化する。なお、buffer[]buffer[]NN 個の要素を持つバッファとし、iijj は各々生産者が情報を入れる位置を示す値と、消費者が情報を取り出す位置を示す値を格納する。

生産者 消費者
repeat
  次の「情報」を生成する;
  ;
  P(a)P(a);
  buffer[i]buffer[i] に情報を入れる;
  i(i+1)modNi \leftarrow (i + 1) \bmod N;
  V(a)V(a);
  ;
until false;
repeat
  ;
  P(b)P(b);
  buffer[j]buffer[j] から情報を取り出す;
  j(j+1)modNj \leftarrow (j + 1) \bmod N;
  V(b)V(b);
  ;
  情報を処理する;
until false;

空欄 ア〜エ に入る値の組合せとして、最も適切なものはどれか。

問題画像
ア:P(e), イ:V(e), ウ:P(f), エ:V(f)
ア:P(f), イ:V(f), ウ:P(e), エ:V(e)
ア:P(e), イ:V(f), ウ:P(f), エ:V(e)
ア:P(f), イ:V(e), ウ:P(e), エ:V(f)
ア:P(e), イ:V(f), ウ:P(e), エ:V(f)

当サイトでは、ユーザー体験の向上を目的としてCookieを使用しています。サイトの利用を継続することで、Cookieの使用に同意したものとみなされます。