令和6年度 春期 応用情報技術者試験 午前 問8

テクノロジハードウェア

この問題は2024(R6)春 応用情報技術者 午前に出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

同一メモリ空間で,転送元の開始アドレス,転送先の開始アドレス,方向フラグ及び転送語数をパラメータとして指定することによって,データをブロック転送できる機能をもつCPUがある。図のようにアドレス1001から1004のデータをアドレス1003から1006に転送するとき,指定するパラメータとして適切なものはどれか。ここで,転送は開始アドレスから1語ずつ行われ,方向フラグに0を指定するとアドレスの昇順に,1を指定するとアドレスの降順に転送を行うものとする。

実行前と実行後のメモリアドレスの状態を示す図
図の説明テキスト

「実行前」と「実行後」のメモリアドレスの状態を示す図。左側に「実行前」としてアドレス1000から1007までのメモリ領域が示され、右側に「実行後」として同じくアドレス1000から1007までの領域が示されている。実行前のアドレス1001から実行後のアドレス1003へ、1002から1004へ、1003から1005へ、1004から1006へ、それぞれデータの転送を示す右向きの矢印が引かれている。

解答・解説を読む

正解: 選択肢

正解の根拠

今回の問題では、転送元の領域(アドレス 100110041001 \sim 1004)と転送先の領域(アドレス 100310061003 \sim 1006)が、一部(アドレス 1003100310041004)で 重複 しています。
このように領域が重なっている場合、転送順序を誤ると未転送のデータが上書きされてしまい、データが破壊される現象が起きます。

もし、アドレスの昇順(方向フラグを0)で転送しようとした場合、以下の順序で処理が進みます。

  1. 10011001 のデータを 10031003 に転送(この時点で本来 10031003 にあったデータが失われます)
  2. 10021002 のデータを 10041004 に転送(この時点で本来 10041004 にあったデータが失われます)
  3. 10031003 のデータを 10051005 に転送(手順1で書き換えられた 10011001 のデータが転送されてしまいます)
  4. 10041004 のデータを 10061006 に転送(手順2で書き換えられた 10021002 のデータが転送されてしまいます)

これを防ぐためには、アドレスの降順(大きい方から順に)転送を行う必要があります(方向フラグ:1)。
降順での処理は以下のようになります。

  1. 10041004 のデータを 10061006 に転送
  2. 10031003 のデータを 10051005 に転送
  3. 10021002 のデータを 10041004 に転送
  4. 10011001 のデータを 10031003 に転送
    このように、元のデータを破壊することなく正しくブロック転送が完了します。

したがって、指定するパラメータは以下のようになります。

  • 転送元の開始アドレス: 一番大きい 1004
  • 転送先の開始アドレス: 一番大きい 1006
  • 方向フラグ: 降順を示す 1
  • 転送語数: データ数の 4

各選択肢の解説

  • : 方向フラグ0(昇順)を指定しているため、前述のとおり未転送であるアドレス 1003100310041004 のデータが転送前に上書きされ、正しく転送できません。
  • : 方向フラグ1(降順)を指定していますが、開始アドレスが 1001100110031003 に設定されているため、アドレスが小さくなる方向(1001,1000,999,9981001, 1000, 999, 998)へ転送されてしまい、目的のデータを転送できません。
  • : 方向フラグ0(昇順)を指定していますが、開始アドレスが 1004100410061006 に設定されているため、アドレスが大きくなる方向(1004,1005,1006,10071004, 1005, 1006, 1007)へ転送されてしまい誤りです。
  • : 正解です。降順の処理で適切な開始アドレスと転送語数が指定されており、データを破壊することなく転送できます。