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




このページは

応用情報

(応用情報技術者試験)

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

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




問1 aを正の整数とし、b=a2とする。aを2進数で表現すると、nビットであるとき、bを2進数で表現すると、高々何ビットになるか。
n+1
2n
2
n
解答
解説 まず、2桁と3桁で計算してみます。

  11
 ×11
 −−ー
  11
 11 
−−−−
1001

   111
  ×111
  −−−−
   111
  111 
 111
 −−−−−
110001


2進数におけるn桁の最大値は、すべてが1の状態なので、2n−1となります。
つまり、積の最大は(2n−1)2なので、22n−2・2n+1となり<22nなので、高々2n桁になることがわかります。

問2 画像(問2)を表示できませんと等価な集合はどれか。ここで∪は和数号、∩は積集合、はXの補集合を表す。
∪B)∩(A∪
)∩(A∪B)
∩B)∪(A∩
)∩(A∪B)
解答
解説 この問題はド・モルガンの定理と呼ばれる以下のような変換法則を利用します。

(A+B)
(A・B)

画像(問2)を表示できませんをド・モルガンの定理と分配法則を利用して以下のように変換していきます。

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

よって、選択肢アの式と等価であるといえます。

問3 図は、偶数個の1を含むビット列を受理するオートマトンの状態遷移図であり、二重丸が受理状態を表す。a,bの適切な組合せはどれか。

画像(問3)を表示できません
画像(問3ans)を表示できません
解答
解説 1の個数が偶数か奇数を調べています。偶数と奇数は1が来るたびに入れ替わるので、【a】は1が入ります。0のときは偶数、奇数は変わらないので、【b】には0が入ります

問4 ハミング符号とは、データに冗長ビットを付加して、1ビットの誤りを訂正できるようにしたものである。ここでは、X1,X2,X3,X4の4ビットから成るデータに、3ビットの冗長ビットP3,P2,P1を付加したハミング符号X1233421を考える。

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


ハミング符号1110011には1ビットの誤りが存在する。誤りビットを訂正したハミング符号はどれか。

0110011
1010011
1100011
1110111
解答
解説 それぞれのパリティの式に代入しながら確認します。なお、排他的論理和はEORと表記します。

1 EOR 1 EOR 0 EOR 1 = 1
1 EOR 1 EOR 0 EOR 1 = 1
1 EOR 1 EOR 1 EOR 0 = 1

誤りは1ビットしかなく、かつ1ビット確実にあることが保障されているので、すべての式に影響があるX1が誤りであることがわかります。

問5 探索表の構成法を例とともにa〜cに示す。最も適した探索手法の組合せはどれか。ここで、探索表のコードの空欄は表の空きを示す。

画像(問5)を表示できません
画像(問5ans)を表示できません
解答
解説 まず、3つの探索法についてまとめます。データ量をnとしたときのオーダ(検索時間)もあわせてまとめます。

2分探索:ソートされているデータに対して、中間値と目的とを比較することで、大きいグループと小さいグループに分け、1回の検索で探索範囲を半分にしていく。オーダはlog2
線形探索:上から一つずつ比較していく方法。オーダはn
ハッシュ検索:ハッシュ関数を使って、格納場所を決める方法。ハッシュ値が同じになる衝突(シノニム)などがなければ、1度で検索場所が決まります。オーダは1

つぎに、それぞれの表に適した検索法を考えます。
表a:コードが順番にならんでいる(ソートされている)ので、線形探索よりも2分探索のほうが高速に検索ができるので、2分探索を利用します。
表b:コードに規則性がないが、使用頻度順にならんでいるということは、上にあるものほど発見しやすいので、線形探索を利用します。
表c:ハッシュにより場所を決めているので、同じ関数を利用して求めるのが一番よいので、ハッシュ表探索を利用します。

問6 func(n)は、非負の整数nに対してnの階乗を返す。fanc(n)の再帰的な定義はどれか。
if n=0 then return 0 else return n×fact(n−1)
if n=0 then return 0 else return n×fact(n+1)
if n=0 then return 1 else return n×fact(n−1)
if n=0 then return 1 else return n×fact(n+1)
解答
解説 5の階乗を例に考えます。5の階乗は、5×4の階乗。4の階乗は4×3の階乗のように考えます。(nの階乗をn!と表記します。)

5!=5×4!
4!=4×3!
3!=3×2!
2!=2×1!
1!=1×0!
0!=1

つまり、1ステップは、n×(n−1)!となります。そして、0!は1と定義されています。(0!=0ではどんな階乗でも0となるため)
これを、プログラムの式になおすと、選択肢ウのようになります。

問7 配列Aに対して次の手続を実行して、2≦k≦100である素数kだけを全て出力したい。a,b,cに入るループの初期値、終値、増分として、適切な組合せはどれか。

画像(問7)を表示できません
画像(問7ans)を表示できません
解答
解説 このアルゴリズムをエラトステネスの篩といいます。名前を知らなくても、問題を回答することは可能です。

このアルゴリズムは、3つの部分から構成されています。 1.全てを1で初期化する部分
2.ふるいにかける部分
3.要素が0の要素を表示する部分

エラストテネスの篩では、素数は1とその数でしか割り切れないという性質から、2の倍数を素数の対象から外す、3の倍数を素数の対象から外すというように、値の定数倍を素数の対象から外していくという処理を行います。2番目の篩の外側では、2から10までを順番に処理しています。10は100の平方数で、10は最も大きい約数の候補のため、ここまで調べればすべての素数を探索することができます。

その内側の処理では、特定の値mに対して、その定数倍(k)を順番に候補から消しています。つまりmの次(2m)からmずつ増やしながら100までを調べています。

問8 流れ図に示す処理の動作として、適切なものはどれか。ここで、二重線は並列処理の同期を表す。

画像(問8)を表示できません
ABC又はACBを実行してデッドロックになる。
AB又はACを実行してデッドロックになる。
Aの後にBC又はCB、BC又はCB、・・・と繰り返して実行する。
Aの後にBの無限ループ又はCの無限ループになる。
解答
解説 まず、処理が開始されるとAが実行されます。その後、BかCのどちらかが実行されます。そして、同期線をで他方の処理が終わるのをまちます。よって、BC又はCBが実行されます。これを繰り返して実行してきます。

問9 表に示す命令ミックスによるコンピュータの処理能力は何MIPSか。

画像(問9)を表示できません
11
25
40
90
解答
解説 まず、MIPS(million instructions per second)とは、1秒間に何百万個の命令が実行できるかを表しています。次に、1命令の平均実行時間を求めると10×0.5+50×0.3+50×0.2=5+15+10=30ナノ秒となります。1つの命令が30ナノ秒なので、1秒間に実行できる命令の数は、1/30ナノ秒=1/(30×10-9)≒33×106なので、約33MIPSであるといえます。

問10 CPUのパイプラインハザードのうち、制御ハザードの発生原因として、適切なものはどれか。
キャッシュミス
先行する命令の結果に依存する演算命令
ハードウェア資源の競合
分岐命令
解答
解説 パイプラインとは、下の図のように命令の段階を少しずつずらして行う方式です。なお各段を多重化したスーパースケーラ(スーパスカラ)方式というのもあります。なお、依存関係や分岐命令などによってパイプラインの順番どおりに処理されないような状況をパイプラインハザードといいます。

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


問11 複数のデータに対して1個の命令で同一の操作を同時並列に行う方式で、マルティメディアデータなどを扱うCPUに採用されているものはどれか。
MIMD
MISD
SIMD
SISD
解答
解説 これは、フリンの分類と呼ばれる命令とデータの並列性を基にした分類法です

SISD:(単一命令、単一データ)命令にもデータにも並列性のない逐次的なコンピュータ
SIMD:(単一命令、複数データ)ベクトル演算機やGPU等
MISD:(複数命令、単一データ)命令列が複数あり、それを1 つのデータストリームに適用する形態のコンピュータ。あまり一般的ではない
MIMD:(複数命令、複数データ)複数のプロセッサが同時並行的にそれぞれ異なるデータを異なる命令で処理するコンピュータ

問12 キャッシュの書込み方式には、ライトスルー方式とライトバック方式がある。ライトバック方式を使用する目的として、適切なものはどれか。
キャッシュと主記憶の一貫性(コヒーレンシ)を保ちながら、書込みを行う。
キャッシュミスが発生したときに、キャッシュの内容の主記憶への書き戻しを不要にする。
個々のプロセッサがそれぞれのキャッシュをもつマルチプロセッサシステムにおいて、キャッシュ管理を簡単な回路構成で実現する。
プロセッサから主記憶への書込み頻度を減らす。
解答
解説 キャッシュメモリは、主記憶とCPUのレジスタの速度の差を埋めるために用いられるものです。主記憶とキャッシュのの整合性を保つための書込み手法が以下の2種類です。

ライトスルー:キャッシュメモリ及び主記憶の両方に同時に書き込む。
ライトバック:キャッシュメモリにだけ書き込み、対応する主記憶の更新は、キャッシュメモリからデータが追い出されるときに行う。

これをもとに選択肢を順にみていきます。
選択肢ア:ライトバックは、一時的にキャッシュメモリと主記憶の内容が異なります。
選択肢イ:ライトバックは、キャッシュミスが発生した場合に、主記憶へ書き戻しを行います。
選択肢ウ:ライトバックは、同じ情報をキャッシュメモリと主記憶に書き込むライトスルーと違い管理機構が複雑となります。
選択肢エ:ライトバックは、キャッシュミスが発生しない限り主記憶への書込みはないため、主記憶への書込み頻度を減らすことができます。(正解)

問13 3層クライアントサーバシステムの各層の役割のうち、適切なものはどれか。
データベースアクセス層は、データを加工してプレゼンテーション層に返信する。
ファンクション層は、データベースアクセス層で組み立てられたSQL文を解釈する。
ファンクション層は、データを加工してプレゼンテーション層に返信する。
プレゼンテーション層は、データベースアクセス層にSQL文で問い合わせる。
解答
解説 サーバとはサービスを提供するもので、クライアントとはサービスを依頼する(受け取る)ものです。まず、2層と3層についてまとめます。

2層:サーバとクライアント
3層:プレゼンテーション層・ファンクション層(アプリケーション層)・データベース層

そして、プレゼンテーション層がクライアントに該当する部分で、ファンクション層とデータベース層がサーバに該当する部分になります。

最後に、主な機能は以下のようになります。
プレゼンテーション層:クライアントへのインタフェース部分
ファンクション層:データの加工
データベース層:データへのアクセス

問14 密結合マルチプロセッサの性能が、1台当たりのプロセッサの性能とプロセッサ数の積に等しくならない要因として、最も適切なものはどれか。
主記憶へのアクセスの競合
通信回線を介したプロセッサ間通信
プロセッサのディスパッチ処理
割込み処理
解答
解説 まず、密結合マルチプロセッサと疎結合マルチプロセッサの概要図を以下にまとめます。

密結合マルチプロセッサと疎結合マルチプロセッサを表示できません

密結合マルチプロセッサでは、主記憶を共有するため、必要なデータが競合する可能性があり、他方が待たされることがあります。
これにより、プロセッサ数に完全には比例しない結果となります。

なお、プロセッサ数に比例するような性質をスケーラビリティといいます。

問15 システムの信頼性向上技術に関する記述のうち、適切なものはどれか。
故障が発生したときに、あらかじめ指定されている安全な状態にシステムを保つことを、フェールソフトという。
故障が発生したときに、あらかじめ指定されている縮小した範囲のサービスを提供することを、フォールトマスキングという。
故障が発生したときに、その影響が誤りとなって外部に出ないように訂正することを、フェールセーフという。
故障が発生したときに対処するのではなく、品質管理などを通じてシステム構成要素の信頼性を高めることを、フォールトアボイダンスという。
解答
解説 重要な高信頼システム設計法についてまとめておきます。

フォールトトレラント:障害時に全体が停止するということなく、動作し続けるようなシステムを設計すること。
フォールトアボイダンス:システムの構成要素の信頼性を高め, 元から故障が極力発生しないように設計すること。
フォールトマスキング:障害が発生したときに、その部分を他の機器から隠蔽したり、自律回復するように設計すること。
フェールセーフ:障害が発生した場合、常に安全側に制御・停止すること。
フェールソフト:障害が発生した場合、故障した個所を切り離すなどして、稼動を続けること。
フェールオーバ:障害が発生した場合、ユーザに切り替えを意識させないように、別のシステムに引き継がせること。
フールプルーフ:ユーザが誤った操作をした場合、危険に晒されることがないように、事前に安全策を行うこと。

他の選択肢は以下のようになります。
選択肢アは、フェールセーフの説明です。
選択肢イは、フェールソフトの説明です。
選択肢ウは、フォールトマスキングの説明です。

問16 3台の装置X〜Zを接続したシステムA,Bの稼働率について、適切なものはどれか。ここで、3台の装置の稼働率は、いずれも0より大きく1より小さいものとする。

画像(問16)を表示できません
各装置の稼働率の値によって、AとBの稼働率のどちらが高いかは変化する。
常にAとBの稼働率は等しい。
常にAの稼働率が高い。
常にBの稼働率が高い。
解答
解説 3台の装置X,Y,Zの稼働率をそれぞれx、y、zとして、全体の稼働率を計算し比較して見ます。

A:XとYの並列部×z={1−(1−x)×(1−y)}z
B:1−(1−XとYの直列部)×(1−z)=1−(1−xy)×(1−z)

次に、それぞれを展開して比較しやすいようにします。×は省略します。
A:z−(1−x)(1−y)z=z−(1−x−y+xy)z=z−(z−xz−yz+xyz)=z−z+xz+yz−xyz=xz+yz−xyz
B:1−(1−xy−z+xyz)=1−1+xy+z−xyz=xy+z−xyz

つまり、稼働率の比較は【xz+yz−xyzとxy+z−xyz】を比較すればよいことになります。簡略化するために、両方にxyzを加えてxzを引くと【xzとz】の比較となります。

x、zはともに1より小さいのでxz<z(0.a,0.b<0.a×0.b)となります。(接続的な意味を考えると{xとzの直列}と{z}の稼働率はzのほうが高いという意味です。)よってBの稼働率のほうが常に稼働率は高くなります。

問17 五つのジョブA〜Eに対して、ジョブの多重度が1で、処理時間順方式のスケジューリングを適用した場合、ジョブBのターンアラウンドタイムは何秒か。ここで、OSのオーバヘッド考慮しないものとする。

画像(問17)を表示できません
10
11
解答
解説 処理時間順方式とは、処理に掛かる時間が最も短いと予想されるタスクを優先的に処理する方式です。この方式に従ってタスクを処理すると以下のようになります。

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

タスクBは処理開始から、1秒後に到着し12秒後に終了するため、ターンアラウンドタイムは11秒になるといえます。処理時間順方式は、処理に長い時間が掛かるタスクはずっと待たされてしまうため、ある程度時間が経過すると優先順位を上げる(エイジング)などの仕組みが必要となります。

問18 ページング方式の仮想記憶において、ページフォールト発生時のオーバヘッドによる1命令当たりの平均遅れ時間を求める式はどれか。

【記号の説明】
t:1回当たりのページフォールト処理時間
f:ページフォールト発生率
m;1命令当たりの平均主記憶アクセス回数
t−f×m
t×f×m
t×f÷m
t÷f÷m
解答
解説 ページング方式とは、仮想記憶において、固定長のページという単位で仮想と物理のデータを入れ替えることをいいます。必要とするデータがない場合には、ページフォールトとなりデータを入れ替える必要があります。

ページフォールト時には、主記憶へアクセスし(m)ページフォールト処理(t)を行います。そのため、1命令の平均遅れ時間は、これに発生確率(f)を掛けたt×f×mとなります。

問19 仮想記憶方式におけるプログラムやデータの格納方法に関する記述のうち、適切なものはどれか。
一つのプログラムや一連のデータは、主記憶装置及び補助記憶装置で必ず連続した領域に格納される。
頻繁に参照されるプログラムやデータが主記憶装置に格納されているので、仮想記憶を用いない場合に比べて主記憶の平均アクセス時間が短くなる。
プログラムやデータを補助記憶装置に格納し、必要に応じて主記憶に読み込むので、主記憶の見かけの容量を拡大できる。
ページアウトされたプログラムやデータがシステムの停止後も補助記憶装置に保持されるので、再起動後に主記憶の内容が復元される。
解答
解説 仮想記憶方式とは、主記憶の容量が少なくプログラムが実行できないときなどに利用される技術です。ハードディスクの一部を主記憶のように使うことで、主記憶の見かけ上の容量が増加しますが、実際にはハードディスクを利用するわけですから、アクセス速度は低下します。

問20 メインプログラムを実行した後、メインプログラムの変数X,Yの値は幾つになるか。ここで、仮引数Xは値呼び出し(call by value)、仮引数Yは参照呼出し(call by reference)であるとする。

画像(問20)を表示できません
画像(問20ans)を表示できません
解答
解説 まず、値渡しの場合は、呼び出した関数側の変数(仮引数)へ値がコピーされて利用されるので、呼び出された側で値が書き換えられても呼び出した側の関数には反映されません。参照呼出しの場合は、アドレスが渡るので、呼び出された側で値が書き換えられた場合は、呼び出した側の値も書き換えられます。

add(2,2)がメインプログラムで実行され、X=2+2によりX=4となります。つぎに、Y=4+2によりY=6となります。Xはメイン関数に反映されず、Yだけがメイン関数に反映されるので、Xは2のまま、Yは書き換えられた6となります。