平成23年度 秋期 応用情報技術者試験 問1−20 解答編




このページは

応用情報

(応用情報技術者試験)

解答と解説のページです。

問題だけで勉強したい方は目次へ戻ってください



問1 xは、0以上65,536未満の整数である。xを16ビットの2進数で表現して上位6ビットと下位8ビットを入れ替える。得られたビット列を2進数とみなしたとき、その値をxを用いた式で表したものはどれか。ここで、a div bはaをbで割った商の整数部分を、a mod bはaをbで割った余りを表す。また、式の中の数値は10進法で表している。
(x div 256)+(x mod 256)
(x div 256)+(x mod 256)×256
(x div 256)×256+(x mod 256)
(x div 256)×256+(x mod 256)×256
解答
解説 まず、特定の値を基数のべき乗で割る、余りをとることの意味を考えます。まず、10進数の12345を100(=102)で割ると商の部分は123、100で余りをとると45を取り出すことができます。つまり、基数のべき乗の桁数で割るとそこより上の値を、余りをとると下の値を取り出すことができます。

2進数xを256(=28)で割ると、9桁以上を取り出すことができます。また、2進数xを256で余りをとると、8桁以下をとりだすことができます。
上位8ビットを下位8ビットとして作成することは、単純に256で割ると作ることが出ます。下位8ビットを上位8ビットとして作成するためには、256で余りをとった後に、桁を上げるために、8ビットシフトをする(256倍する)ことで作成することができます。あとは、これを加算すれば、上位8ビットと下位8ビットを入れ替えることができます。

問2 式A+B×Cの逆ポーランド表記法による表現として、適切なものはどれか。
+×CBA
×+ABC
ABC×+
CBA+×
解答
解説 逆ポーランド記法とは、後置表記法とも呼ばれ、演算子を対象の後ろに記述する手法です。スタックを使うことで実現でき、括弧が不要なのでコンパイラなどで利用されています。

優先度の高い部分から順に逆ポーランド記法に変換して行きます。

まず、×を後ろに動かします。
A+BC×
つぎに、+を後ろに動かします。
ABC×+となります。

問3 符号長7ビット、情報ビット数4ビットのハミング符号による誤り訂正の方法を、次のとおりとする。

画像(問3)を表示できません


受信した符号語が1000101であった場合、誤り訂正後の符号語はどれか。
1000001
1000101
1001101
1010101
解答
解説 ひとつづつ計算していきます。

0=(1+0+1+1)%2=1
1=(0+0+0+1)%2=1
2=(0+1+0+1)%2=0

となり、i=1+2+0で3ビット目が誤っているので、1010101が正解となります。なお、modのことを法、110の誤り検出ベクトルをシンドロームと言ったりもします。

問4 サンプリング周波数40kHz、量子化ビット数16ビットでA/D変換したモノラル音声の1秒間のデータ量は、何kバイトとなるか。ここで、1kバイトは1,000バイトとする。
20
40
80
640
解答
解説 アナログデータ(時間も振幅も連続)をディジタルデータに変換するためには、標本化→量子化→符号化という作業を行います。各作業を簡単に以下にまとめます。

標本化:時間を離散化する。(一般的には最大周波数の2倍で行います)
量子化:振幅を離散化する。
符号化:量子化したデータを特定の符号に対応付けする。

符号化と量子化は、多くのサンプリングポイントを取ることで、よりオリジナルに近いデータを作り出すことができます(データ量は多くなります)

それでは計算していきます。
サンプリング周波数が40kHz(=40,000Hz)×量子化ビット数16ビット=40k×2バイト=80バイト/秒となります。

問5 自然数をキーとするデータを、ハッシュ表を用いて管理する。キーxのハッシュ関数h(x)を

h(x)=x mod n

とすると、キーaとbが衝突する条件はどれか。ここで、nはハッシュ表の大きさであり、x mod nはxをnで割った余りを表す。
a+bがnの倍数
a−bがnの倍数
nがa+bの倍数
nがa−bの倍数
解答
解説 まず、実際に値を入れて計算してみたハッシュの例を下に示します。

ハッシュ

ハッシュのイメージがつかめたところで計算に移ります。

上の図からもわかるように、二つの値の差がnの倍数であれば衝突が起こることがわかります。

なお、整数論においては、『mod n』のことを『nを法とする』などといいます。

問6 ヒープソートの説明として、適切なものはどれか。
ある間隔おきに取り出した要素から成る部分列をそれぞれ整列し、更に間隔を詰めて同様の操作を行い、間隔が1になるまでこれを繰り返す。
中間的な基準値を決めて、それよりも大きな値を集めた区分と、小さな値を集めた区分に要素を振り分ける。次に、それぞれの区分の中で同様な処理を繰り返す。
隣り合う要素を比較して、大小の順が逆であれば、それらの要素を入れ替えるという操作を繰り返す。
未整列の部分を順序木にし、そこから最小値を取り出して整列済の部分に移す。この操作を繰り返して、未整列の部分を縮めていく。
解答
解説 代表的な整列法を下にまとめます。

挿入ソート:既に整列済みのデータ列の正しい位置に、データを追加する操作を繰り返していく
選択ソート:データ中の最小値を求め、次にそれを除いた部分の中から最小値を求める。この操作を繰り返していく
バブルソート:隣り合ったデータの比較と入替えを繰り返すことによって、小さな値のデータを次第に端の方に移していく
クイックソート:適当な基準値を選び、それより小さな値のグループと大きな値のグループにグループを分割する。この操作を繰り返していく
シェルソート:ある一定間隔おきに取り出した要素から成る部分列をそれぞれ整列し,更に間隔を詰めて同様の操作を行い,間隔が1になるまでこれを繰り返す
ヒープソート:未整列の部分を順序木に構成し、そこから最大値又は最小値を取り除いて既整列の部分に移す。これらの操作を繰り返して、未整列部分を縮めていく

選択肢アは、シェルソートの説明です。
選択肢イは、クイックソートの説明です。
選択肢ウは、バブルソートの説明です。

問7 n個の正の整数x1,x2,・・・xnが並んだ線形リストを[x1,x2,・・・xn]で表し、空リストは[]で表す。次のように再帰的に定義される関数func(L)をL=[1,3,2]を実引数として呼び出したとき、print文によって表示される数字はどれか。ここで、プログラム中の=は等号、:=は代入を表す。

画像(問7)を表示できません
123
133
223
233
解答
解説 順番に追いかけていきます。

L=[1,3,2]として、1回目のfunc(L)を実行する。
L=[]ではないので、下へ
A=1
B=Func([3,2])

 L=[3,2]として、2回目のFunc(L)を実行する。
 L=[]ではないので、下へ
 A=3
 B=Func([2])

  L=[2]として、3回目のFunc(L)を実行する。
  L=[]ではないので、下へ
  A=2
  B=Func([])

   L=[]として、4回目のFunc(L)を実行する。
   L=[]なので、0を返す。

  3回目のBは0が代入される。
  C=max(2,0)で2が代入される
  2が表示される。

 2回目のBには2が代入される
 C=max(3,2)で3が代入される
 3が表示される

1回目のBには3が代入される
C=max(1,3)で3が代入される
3が表示される。

よって、233となります。なお、このプログラムは配列を後ろから比較しながら最大のものを順次表示しています。



問8 データが昇順にソートされた配列X[i](i=0,1,・・・,n−1)を2分探索する。流れ図のaに入るものとして、適切なものはどれか。ここで、流れ図の中の割り算は小数点以下を切り捨てるものとする。

画像(問8)を表示できません
left < right
left ≦ right
left+1 < right
left+1 ≦ right
解答
解説 2分探索とは、ソートされているデータに対して、中間値と目的とを比較することで、大きいグループと小さいグループに分け、1回の検索で探索範囲を半分にしていく探索法です。オーダはlog2nです。

ループの継続条件の左側(sch=−1)は値がまだ見つかっていないことを意味しています。そして、右側には検索対象の配列の左端と右端の関係が入ります。leftは0からn−1に向かって、rightはn−1から0に向かって変化していきます。よってこの関係が続く限り処理を続けますので、left>rightになると終了することになります。つまり、left≦rightの限りループを続けます。=の場合も同じ要素を指しているので検索は行います。

問9 CPUのパイプライン処理を有効に機能させるプログラミング方法はどれか。
CASE文を多くする。
関数の個数をできるだけ多くする。
分岐命令を少なくする。
メモリアクセス命令を少なくする。
解答
解説 まず、パイプラインの例を下に示します。

パイプラインを表示できません

なお、分かれた段階の個数をパイプラインの深さといい、1つの段階にかかる時間をパイプラインピッチといいます。

見てわかるとおり、パイプラインは、きれいに各段階が1つずつずれているのが理想的ですが、実際はこのようにきれいにはなりません。それは、依存関係や分岐命令によって、順番どおりに処理できない場合が生じるからです。逆に言えば、依存関係や分岐命令を極力減らすことでパイプラインを効果的に利用することができるといえます。

依存関係や分岐命令などによってパイプラインの順番どおりに処理されないような状況をパイプラインハザードといいます。

問10 メモリインタリーブの説明として、適切なものはどれか。
新しい情報をキャッシュメモリに取り出すとき、キャッシュ上では不要になった情報を主記憶に書き込む。
主記憶のアクセス時間と磁気ディスクのアクセス時間とのギャップを補う。
主記憶の更新と同時にキャッシュメモリの更新を行う。
主記憶を幾つかの区画に分割し、連続したメモリへのアクセスを高速化する。
解答
解説 メモリインタリーブとは、複数のバンクと呼ばれる単位に分けておくことで、高速にアクセスできます。アクセス幅が1の場合は3語分、アクセス幅が2の場合は6語分に同時にアクセスできます。

メモリインタリーブ

問11 プロセッサにデータを読み込むときにキャッシュメモリにヒットしなかった場合、キャッシュメモリ制御装置が行う動作はどれか。
キャッシュメモリから所要のデータをブロック転送し、磁気ディスクに書き込む。
磁気ディスクから所要のデータをブロック転送し、キャッシュメモリに読み込む。
主記憶から所要のデータをブロック転送し、キャッシュメモリに読み込む。
ディスクキャッシュから所要のデータをブロック転送し、主記憶に読み込む。
解答
解説 キャッシュメモリは、主記憶装置(=メインメモリ)とCPUとの処理能力の速度の差を埋めるために用いられるメモリです。メインメモリは、まずキャッシュメモリにデータを探しに行き、そのデータがある場合はキャッシュメモリから、ない場合はメインメモリからデータを読み出します。よって、存在しない確率 ×メインメモリの読み込み速度+存在する確率×キャッシュメモリの読み込み速度となります。

データがキャッシュにない場合には、主記憶装置から該当のデータがあるブロックをキャッシュメモリに読み出してからロードを行います。これは、一度呼ばれたデータは再び呼び込まれる可能性が高いという局所性に基づくものです。

問12 プロセッサと複数のメモリとを図のように接続した組込みシステムがある。16進数で表記したアドレス2F0番地を読み出したとき、データを出力するメモリはどれか。ここで、デコーダは右の表のとおりに信号出力を行うものとし、データバスなどの信号線は省略している。

画像(問12)を表示できません
メモリ1
メモリ2
メモリ3
メモリ4
解答
解説 まず、16進数の3桁が1桁目=A0〜A3、2桁目=A4〜A7、3桁目がA8、A9に対応しています。つまりアドレス2F0はA9〜A0に「10 1111 0000」のように対応します。次にA9=P=1、A8=Q=0となっています。

右の対応表で見ると、対応を見ると
=1
=0
=1
=1
となっています。

A、B、C、Dがそれぞれメモリ1、メモリ2、メモリ3、メモリ4に接続されています。
現在Bだけが、0なので、メモリ2のデータをアクセスするということが分かります。

CSとは一般的にチップセレクトの略で、入力の切り替え用の信号として利用されることが多いです。

問13 DMAの説明として、適切なものはどれか。
CPUが磁気ディスクと主記憶とのデータの受渡しを行う転送方式である。
主記憶の入出力専用アドレス空間に入出力装置のレジスタを割り当てる方式である。
専用の制御回路が入出力装置や主記憶などの間のデータ転送を行う方式である。
複数の命令の実行ステージを部分的にオーバーラップさせて同時に処理し、全体としての処理時間を短くする方式である。
解答
解説 DMA(Direct Memory Access)とは、CPUを介さず、メモリ間、メモリとI/Oデバイス間で直接データを転送することで、DMAコントローラは、DMAを制御するものをいいます。CPUの指示を待つ時間等を高速化でき、アクセス速度の向上につながります。

問14 RPC(Remote Procedure Call)に関する記述として、適切なものはどれか。
同じOSのコンピュータ間でだけ手続呼出しが可能となる。
手続呼出しは、ドライバと呼ばれる手続群をファイルに格納して、それを他のコンピュータに転送することによって実現している。
同一プログラム言語を用いたときだけ、他のコンピュータの手続呼出しが可能となる。
他のコンピュータが提供する手続を、あたかも同一のコンピュータにある手続であるかのように呼び出すことができる。
解答
解説 RPC(Remote Procedure Call:リモートプロシージャコール:遠隔手続き呼びし)とは、別のアドレス空間からあたかも同一システムで動作しているかのように、リモート上の関数などを実行可能にする技術のことです。基本的に言語やOSに依存しません。XMLとHTTPを利用したXML−RPCという形式もあります。

問15 現用系と予備系の両方をもつシステムに障害が発生したときの運用に関する記述のうち、ホットスタンバイ方式の説明として、適切なものはどれか。
現用系と同じ業務システムを最初から予備系でも起動しておき、現用系に障害が発生したときは、予備系に自動的に切り替える。
現用系と予備系という区別をせずに、両方を並列運用する。どちらかの系に障害が発生した場合は、それを切り離し、残りの系だけで運用を継続する。
予備系には、通常は他の処理を行わせるが、現用系に障害が発生したときはその処理を中断し、業務システムを起動する。
予備系は、OSは立ち上げているが業務システムを全く起動していない状態で待機させる。現用系に障害が発生した時点で、予備系に切り替え、業務システムを起動する。
解答
解説 代表的な冗長化構造についてまとめます。

デュアルシステムは:2台が同時に稼働していて結果を照合するシステム
ホットスタンバイシステム:2台を同時に稼働させておくが、一方は待機状態にしておくシステム
コールドスタンバイシステム:メインが故障したときにもう1台が代わりに処理を行うシステム
シンプレックスシステムは:1台のみの単純なシステム。故障するとお終いです。

稼働率の比較はデュアルシステム > ホットスタンバイシステム > コールドスタンバイシステム > シンプレクスシステムとなります。
なお、ホットスタンバイとコールドスタンバイの差は、一方が故障してから切り替えるまでのスピードの差によります。

問16 キャパシティプランニングの活動サイクルは、モニタリング、分析、チューニング、実装から成る。このうちチューニングを説明したものはどれか。
CPU,メモリ、ストレージといったハードウェアの使用率を最適化するために、測定周期や報告時期を計画する。
既存システムのパフォーマンスを基準として、業務負荷予測から将来においてシステムに必要なものと必要となる時期を計画する。
既存システムのパフォーマンスを最適化するために、変更箇所の検討や変更策を決定する。
新規業務の業務負荷予測の精度を高めるために、既存業務の業務負荷を測定し、傾向を分析する。
解答
解説 キャパシティプランニングとは、要求される機能から性能や容量を見積もる工程をいいます。その中でチューニングとは、調節の意味で最適化のために修正を行うことをいいます。

選択肢アは、モニタリングの説明です。
選択肢イは、実装の説明です。
選択肢エは、分析の説明です。

問17 ジョブの多重度が1で、到着順にジョブが実行されるシステムにおいて、表に示す状態のジョブA〜Cを処理するとき、ジョブCが到着してから実行が終了するまでのターンアラウンドタイムは何秒か。ここで、OSのオーバヘッドは考慮しないものとする。

画像(問17)を表示できません
11
12
13
14
解答
解説 到着順とは、その名の通りジョブが到着した順に処理が行われ、優先度や処理時間などは考慮されません。ジョブの状態は以下のようになります。赤が処理中、青が待機中を表しています。

画像(問17kai)を表示できません

ジョブCは、時刻3に到着し時刻14に終了するので、14−3で11秒かかるといえます。

問18 MTBFがx時間、MTTRがy時間のシステムがある。使用条件が変わったので、MTBF、MTTRがともに従来の1.5倍になった。新しい使用条件での稼働率はどうなるか。
x、yの値によって変化するが、従来の稼働率よりは大きい値になる。
従来の稼働率と同じ値になる。
従来の稼働率の1.5倍になる。
従来の稼働率の2/3倍になる。
解答
解説 まず、稼働率は、MTBF/(MTBF+MTTR)によって計算されます。これが両方とも1.5倍されるので、1.5×MTBF/(1.5×MTBF+1.5×MTTR)両辺が1.5で打ち消されるので、MTBF/(MTBF+MTTR)となり、もとの稼働率と同じになります。

問19 タスクのディスパッチの説明として、適切なものはどれか。
あるタスクの実行中に、別のタスクに切り替え、かつ実行権を渡すこと
各タスクの実行順序を決定すること
タスクの内部状態、置かれた状況、与えられた条件など、タスクの実行に必要な各種情報のこと
複数のタスクを同時に実行しているかのように見せかけた状態のこと
解答
解説 ディスパッチとは、あるタスクを実行しているときに、入出力命令の実行によってCPUが遊休(アイドル)状態になると、ほかのタスクにCPUを割り当てることで、これを行う機構をディスパッチャといいます。

選択肢イは、スケジュールの説明です。
選択肢ウは、コンテキストの説明です。
選択肢エは、マルチタスクの説明です。

問20 三つの資源X〜Zを占有して処理を行う四つのプロセスA〜Dがある。各プロセスは処理の進行に伴い、表中の数値の順に資源を占有し、実行終了時に三つの資源を一括して解放する。プロセスAとデッドロックを起こす可能性のあるプロセスはどれか。

画像(問20)を表示できません
B,C,D
C,D
Cだけ
Dだけ
解答
解説 データ更新中にデータを参照しようとすると、更新が失敗したり正しいデータが参照できなかったりします。よって、更新処理が完了するまで参照を待たせます。これを占有ロックといいます。また、データを読み出す場合に、書き換えられないようにかけるロックを共有ロックといいます。そして、ロックを互いにかけたまま処理が進まなくなる場合もあり、これをデッドロックといいます。デッドロックの例を下に示します。

デッドロックを表示できません

それでは解答を考えます。

まず、プロセスAは、X→Y→Zの順に資源を確保します。
プロセスBは、プロセスAと同じ順番に資源を確保するので、デッドロックは発生しません。
プロセスCは、Z→X→Yの順に資源を確保するので、プロセスAがXを確保しプロセスBがZを確保すると、プロセスAがYを確保した時点でデッドロックとなります。
プロセスDは、Z→Y→Xの順に資源を確保するので、プロセスAがXを確保しプロセスBがYを確保するとデッドロックとなります(YとZでも発生する可能性があります)

プロセスが一括で資源を解放するところに注意してください。