総視聴再生時間43万分以上(2017年5月13日現在)の動画で基本情報技術者試験の過去問&キーワード解説!スキマ時間に動画!〜これじょIT〜

PR広告

平成27年度春 基本情報技術者試験 午後 問2 ソフトウェア 設問3

問2 ソフトウェア

言語処理系に関する次の記述を読んで、設問1~3に答えよ。

 言語処理系とは、プログラム言語(以下、言語という)の文法に従って記述された原始プログラムを読み取り、目的とする計算機で実行するための変換をするか、又は逐次解釈しながら実行するためのソフトウェアである。

設問3

次の記述中の【 】に入れる正しい答えを、解答群の中から選べ。

 仮想計算機Vにおけるインタプリタ方式による実行時に、繰り返し実行される処理などの情報(以下、プロファイル情報という)を収集しておき、その内容を解析して、特定の処理の中間コードをプログラムの実行途中で実行形式プログラムに変換し、以後の実行に実行形式プログラムを利用する方法として、図2のような動的コンパイル方式がある。実行形式プログラムを実行途中から利用することによって、以後のプログラムの実行性能の向上が期待できるので、Javaなどの言語処理系で採用されている方式である。

〔図2の説明〕

  • (1) 主プログラムと主プログラムから呼び出される関数Fが中間コードに変換されたプログラムがある。
  • (2) 仮想計算機Vのインタプリタは、中間コードを逐次解釈しながら実行する(図2①)。このとき、関数Fが呼び出される回数をプロファイル情報として収集する(図2②)。
  • (3) 仮想計算機Vは、関数Fが呼び出される都度、プロファイル情報を解析し、関数Fを実行形式プログラムに変換するかどうかを判定する。
  • (4) (3)で変換すると判定した場合、仮想計算機Vは、動的コンパイラを起動して関数Fを実行形式プログラムに変換する(図2③)。
  • (5) (4)で関数Fを変換した後は、関数Fが呼び出されたときには実行形式プログラムが実行される(図2④)。

動的コンパイル方式を適用する場合には、実行時間に加えて動的コンパイラの起動時間やコンパイル時間を考慮する必要がある。図2に示す関数Fを、インタプリタ方式で実行した場合と、動的コンパイル方式で実行した場合の実行時間について考える。ここで、各方式の実行条件は、次の条件に示すとおりである。主プログラムから関数Fの呼出し回数が400回のとき、インタプリタ方式の場合の実行時間は【 b 】秒であり、動的コンパイル方式を適用した場合の実行時間は【 c 】秒である。

〔条件〕

  • 主プログラムの実行時間は考えない。
  • プロファイル情報を収集する時間と、仮想計算機Vから実行形式プログラムを呼び出すのに必要な処理時間は考えない。
  • 関数Fの中間コードは400命令から成り、関数Fが1回呼び出されたときに実行する中間コードの命令数は、2,000命令である。
  • 動的コンパイル方式を適用した場合、関数Fが101回目に呼び出されるときに動的コンパイラが起動され、関数Fの中間コードを実行形式プログラムに変換する。
  • 動的コンパイラの起動時間とコンパイル時間は、実行時間に含める。
  • 動的コンパイラの起動時間は0.1秒とし、コンパイル時間は、中間コード1,000命令当たりで0.1秒とする。
  • インタプリタによる中間コード1命令の実行時間は500ナノ秒とし、中間コード1命令に対応する実行形式プログラムの実行時間は10ナノ秒とする。

b、c に関する解答群

  • 0.106
  • 0.146
  • 0.206
  • 0.246
  • 0.4
  • 0.406

解説

まずはインタプリタ方式の場合の実行時間を求めましょう!必要は下記の通りです

  • 関数Fを400回呼ぶ
  • 関数Fの中間コードは400命令(あまり関係ない?)
  • 関数Fが1回呼ばれると実行する中間コードは2,000命令
  • インタプリタによる中間コード1命令の実行時間は500ナノ秒

インタプリタ方式の場合の実行時間

= 関数Fを呼ぶ回数(400回) × 関数Fが1回当たりに実行する中間コード(2,000命令) × 中間コード1命令の実行時間(500ナノ秒)

= 400 × 2,000 × 500 ナノ秒

= 400,000,000 ナノ秒

= 0.4 秒(ナノ秒=10-9

インタプリタ方式の場合の実行時間は0.4秒(【 b 】=0.4)

【 c 】の解説は間違いです。非常に申し訳ありません...

次に動的コンパイル方式の場合の実行時間を求めましょう!必要は下記の通りです

  • 関数Fを400回呼ぶ
  • 関数Fの中間コードは400命令(あまり関係ない?)
  • 関数Fが1回呼ばれると実行する中間コードは2,000命令
  • 関数Fが101回目に呼び出されるときに動的コンパイラが起動され、関数Fの中間コードを実行形式プログラムに変換(100回目まではインタプリタ方式)
  • 動的コンパイラの起動時間は0.1秒
  • コンパイル時間は、中間コード1,000命令当たりで0.1秒
  • インタプリタによる中間コード1命令の実行時間は500ナノ秒
  • 実行形式プログラムによる中間コード1命令の実行時間は10ナノ秒

関数Fを100回呼ぶまではインタプリタ方式なので、先ほどと同じように...

インタプリタ方式の場合の実行時間

= 関数Fを呼ぶ回数(100回) × 関数Fが1回当たりに実行する中間コード(2,000命令) × 中間コード1命令の実行時間(500ナノ秒)

= 100 × 2,000 × 500 ナノ秒

= 100,000,000 ナノ秒

= 0.1 秒(ナノ秒=10-9

動的コンパイラの起動時間は0.1秒

コンパイル時間は、中間コード1,000命令当たりで0.1秒。関数Fが1回当たりに実行する中間コードは2,000命令なので...0.2秒

実行形式プログラムの実行時間。関数Fはあと300回呼ばれる

= 関数Fを呼ぶ回数(300回) × 関数Fが1回当たりに実行する中間コード(2,000命令) × 中間コード1命令の実行時間(10ナノ秒)

= 300 × 2,000 × 10 ナノ秒

= 6,000,000 ナノ秒

= 0.006 秒(ナノ秒=10-9

動的コンパイラの起動時間(0.1秒) + コンパイル時間(0.2秒) + 実行形式プログラムの実行時間(0.006秒)

= 0.306秒

関数Fを100回インタプリタ方式で呼ぶ場合の実行時間(0.1秒)+関数Fを100回実行形式プログラムで呼ぶ場合の実行時間(0.306秒)

= 0.406秒

動的コンパイル方式の場合の実行時間は0.406秒(【 c 】=0.406)

平成27年度春 基本情報技術者試験午後問2 ソフトウェア 目次

  1. 設問1
  2. 設問2
  3. 設問3

一覧に戻る

タグ: ,,,

PR広告

フェイスブックコメント

平成28年度秋 基本情報技術者試験 午後 テキスト・動画解説

平成28年度秋 基本情報技術者試験 午前 テキスト・動画解説

平成28年度春 基本情報技術者試験 午後 テキスト・動画解説

平成28年度春 基本情報技術者試験 午前 テキスト・動画解説

平成27年度秋 基本情報技術者試験 午後 テキスト・動画解説

平成27年度春 基本情報技術者試験 午後 テキスト・動画解説

平成27年度春 基本情報技術者試験 午前 テキスト・動画解説

平成26年度秋 基本情報技術者試験 午前 テキスト・動画解説

平成26年度春 基本情報技術者試験 午前 テキスト・動画解説