#AP 試験対策まとめ

応用情報技術者試験に関する自分用のシケプリみたいなもんです。*随時更新

f:id:harutech:20190211155131j:plain


基礎理論

正規分布
±1σ : 68%, ±2σ : 95%
待ち行列モデル
M/M/1モデルが主に出る。定義は左から順に到着率 T_r/サービス時間 T_p/窓口の数で、到着率はポアソン分布、サービス時間は指数分布に従う。
1. 利用率ρは単位時間に来る人の平均/単位時間に捌ける人の平均 = 1人を捌くのに必要な時間( T_p)/1人が来る時間の間隔( T_r)と覚える方がよい?
2. 平均待ち時間 =  ρ/(1-ρ) * 平均サービス時間( T_p)
3. 平均応答時間 = 平均待ち時間 + 平均サービス時間 (単純に待った時間とサービスを受ける時間の和)
情報量
ある事象がどれくらい起こりにくいかを表す尺度 選択情報量はある事象が起こる確率をPとしたとき、 -log_2{P}で定義される。
平均情報量(エントロピー)
 ∑(選択情報量*P_i) この平均情報量が圧縮の限界値になる。
ハフマン符号
符号の構成はwikiを参照。

    ハフマン符号 - Wikipedia

BNF記法
だいたいこんな感じ、再帰になっていると覚えてればOKf:id:harutech:20190211203640p:plain
パリティ
1bitの誤りを検出できるようにするためにbit列の最後にパリティビットと呼ばれるものを付加する。bit列の1の数の和が(奇数/偶数)になるようにパリティビットを付与するのを(奇数/偶数)パリティという。
垂直・水平パリティ
bit列に対して上下と左右のパリティを作ることで1bitの誤りを検出して、訂正することができる。イメージとしては以下の画像の通り。
f:id:harutech:20190211205132g:plain
ハミング符号
データにいくつかの冗長ビットを付加して、1bitの誤りを検出して、訂正できる仕組み。問題はこんな感じ f:id:harutech:20190212213353j:plain
答えは エ
CRC
連続する誤りを検出するための仕組み。送信側と受信側は送るデータと受信するデータをある多項式で割り、その余りが送信側から送られてきたものと、受信側で出したものが一致すればOKというもの。よくわからん。
標本化, 量子化, 符号化
  • 標本化 : 一定間隔でデータを取得すること (ex. 音のサンプリングレート 44.1kHz)
  • 量子化 : 標本化で得られたデータをデジタルデータにすること
  • 符号化 : 量子化で得られたデータを二進数に変換すること

   計算問題は単位(バイトとビット)に注意

標本化定理
デジタル信号からアナログ信号に復元するには戻したいアナログ信号の周波数の2倍サンプリング周波数が必要。
制御システム
  • センサ : 動きや温度などを計測するための機構のこと。ジャイロセンサなどがある。
  • アクチュエータ : 機械・機構を物理的に動かすための機構。
ダイクストラの基本3構造
順次、選択(if)、繰り返し(forやwhile)のこと。フローチャートでは四角形→順次、ひし形→選択、角をとった四角形→繰り返しとなっている。
シノニム
ハッシュにおける衝突のこと。
プログラム構造
  • 再使用可能(リユーザブル)プログラム : プログラムを終了させた後に再度起動可能なプログラム 逆に再使用が不可能なプログラムとは再起動しないと動かないプログラム。
  • 再入可能プログラム(リエントラント) : プログラムが使用中でも再度入ってもう一つ起動させることができるプログラム。すなわち、プログラムごとに変数領域を持つ。必ず再使用可能。
  • 再起(リカーシブ)プログラム : 自分を呼び出すことが可能なプログラム。必ず再入可能。
  • 再配置可能(リロケータブル)プログラム : メモリ位置を相対位置で記述しているプログラムはメモリ上で再配置可能。OSなど以外は大抵再配置可能;
プログラム言語の種類
機械語アセンブリ言語高級言語(COBOLFORTRANなど)、構造化言語(CやPascal)、オブジェクト指向言語(C++,Java)などがある。
ガーベジコレクション
参照されなくなったオブジェクトを自動で解放する機能
その他の言語分類
手続き型(C)、関数型(Lisp)、論理型言語(Prolog)、スクリプト言語(JavaScript等)などがある。
スクリプト言語
ソースコードコンパイルして動かすのではなく、1行1行を処理していく言語(PythonJavaScript, Perl, Ruby, PHP)。 ブラウザ上で動くスクリプト言語としてはJavaScriptJScriptがあり、HTML文では実行できない動的な処理が可能になる。
ECMAScript
JavaScriptJscriptの共通部分をまとめて標準化したもの。
共通言語基盤 (CLI)
プログラム言語やコンピュータアーキテクチャなどに依存しない環境を定義したもの。一度コンパイルすれば他のプラットフォーム上でも動作する。.NET FrameworkJavaが当てはまる。
Ajax
AjaxWebブラウザ上で非同期通死因を行い、通信結果によってページの一部を書き換える手法。
データ定義言語 (DDL)
コンピュータのデータを定義するための言語や言語要素。XMLのデータを定義するDTDや、データベース言語SQLの一部のSQL-DDLはデータ定義言語の一例。
マークアップ言語
文章を構造化するための言語 コンピューターに何が重要なのか、という情報を伝えるための言語(HTML、XHTMLCSSなど)
  • HTML(Hyper Text Markup Language) : Webページを作成するために開発された言語、ハイパーテキストと呼ばれる他のページへのリンクを埋め込むことができるテキストを使用する。音声、映像、画像も埋め込める。最新規格はHTML5
  • XHTML : HTMLをXMLの分布で定義しなおしたもの。より厳密さが増している。
  • CSS : 文章のスタイルを記述するために出来た言語で、HTMLやXHTMLの要素をどのように表示するかを定義する、文章の構造体裁を分離させるという理念のもと、文章の構造はHTMLで、体裁はCSSで記述する。
XML(Extensible Markup Language)
特定の用途に限らず、汎用的に使うことができる拡張可能なマークアップ言語、文章構造の定義はDTDで行う。XML文書の正統性の水準は2つある。
  • 整形式XML文書(well-formed XML Document): XMLデータを記述するための文法に従ったXML文書。DTDでの定義は無視してよい。
  • 妥当なXML文書(valid XML Document) : DTDでの定義に適合したXML文書。整形式XML文書でもある。
XMLにかかわるあれこれ
  • XSLT : XML文書を変換するために使われる。
  • XLink : XML文書同士のリンクを設定するためのもの。
  • SVG : XML形式で円や直線などの図形オブジェクトを記述するもの。
  • SAML : ユーザーの認証情報をXML形式で表現する仕様。

コンピュータシステム

コンピュータ構成要素

プログラム内蔵方式
現代の計算機はプログラムを記憶装置に内蔵している。フォイノイマン式コンピュータ。
命令を実行するまでの流れ
記憶装置などから命令の取り出し→制御装置で命令を解読→記憶装置などからデータを取り出す→命令の実行→結果を記憶装置などに格納 以上を繰り返す。
プロセッサを高速化する手法
  • パイプライン : 1個ずつ動作をずらして実行する。パイプラインハザードと呼ばれるエラーのようなものが起こることがある。こんなイメージ f:id:harutech:20190214013247g:plain
  • スーパスカラスーパーパイプライン : こんな感じf:id:harutech:20190214015658g:plain
  • VLIW(Very Long Instruction Word) :

その実行ユニットが並列的に一度に実行できる、ロード・ストア・演算・分岐などの命令の複数個から成る、かなり長い命令語によってー単位の命令が構成されており、それをそのまま実行ユニットに投入する(各命令をatom、まとまったものをmoleculeなどと呼ぶこともある)。
VLIW - Wikipedia

   こんな感じ
f:id:harutech:20190214020046p:plain

マルチプロセッサ
  • 密結合マルチプロセッサ : 複数のプロセッサがメモリを共有するもの。一つに見えるプロセッサの中に複数のプロセッサを搭載したマルチコアプロセッサという形態が主流。
  • 疎結合マルチプロセッサ : 複数のプロセッサがそれぞれのメモリを持っている。複数のサーバーを連携して1つのシステムとするクラスタシステムがその一種。
プロセッサの性能指標
  • MIPS(Million Instructions Per Second) : 1秒間に何百万個の命令が実行できるかを表す。分岐がほとんどないプログラムを動かしたときの数値なので実際の性能とは異なる。
  • FLOPS(Floating-point Operations Per Second) : 1秒間に難解浮動小数点演算が出来るかを表してもの。スパコンやゲームの性能の指標になる。
割り込み
実行中のプログラムを中断して別の処理を行うこと。割り込みは2種類存在する。
  • 内部割込み : 実行しているプログラム内部からの割り込み。更に以下の種類がある。
    • プログラム割り込み : 0除算やオーバーフローなどが起こった時に発生する。
    • SVC割り込み : プログラムがOSに処理を依頼するときに行われる。
    • ページフォールト : 仮想記憶管理において存在しないページにアクセスするときに行われる。
  • 外部割込み : 主にハードウェアからの割り込みなのでハードウェア割り込みともいう。以下の種類がある。
    • タイマ割込み : タイマから行われる。
    • 機械チェック割込み : ハードウェアの以上が検出された時に行われる。
    • 入出力割込み : キーボードなどの入出力装置から行われる。
    • コンソール割込み : コンソールからスイッチが行われた時に発生する。
エンディアン
複数バイトのデータをメモリに格納するときの順番の方式、バイトオーダともいう。以下の2種類がある。
  • ビッグエンディアン : データを上位バイトから順番に並べる。
  • トルエンディアン : データを下位バイトから順番に並べる。
主記憶装置
主記憶装置には2種類存在し、RAM(読み書き自由)とROM(読み出し専用)が存在する。
  • RAM : 電源を切るとデータが失われてしまう。→揮発性メモリ。またRAMには以下の2種類が存在する。
    • DRAM(Dynamic RAM) : 一定時間たつとデータが消えてしまう。安価で製造でき、大容量で、メモリとして主に使われる。
    • SRAM : 電源を切らない限りデータを保持する。リフレッシュが不要で、高速で、低消費電力で、キャッシュメモリとして使われる。
  • ROM : 基本的に読み出し専用だが、書き込み、追記可能なものもある。電力がなくてもデータを保持できるので不揮発性メモリともいう。以下の2種類が存在する。
    • マスクROM : 書き換えが不可能。
    • PROM : 書き込み可能。代表例はフラッシュメモリ相変化メモリ
キャッシュメモリ
プロセッサとメモリの性能差を埋めるために用いられる。SRAMが用いられる。アドレス管理を効率的に行い、処理を高速にするためにデータの格納方法や更新方式に様々なアーキテクチャがある。その効果はヒット率(後述)によって変わる。
  • ダイレクトマップ方式 : メモリアドレスから一意にキャッシュメモリの格納場所が決まるが、当然キャッシュメモリの格納場所はメモリアドレスの数に比べ少ないので、衝突が発生しヒット率が下がる。
  • フルアソシアティブ方式 : アドレスによる振り分けを行わず、キャッシュメモリの空いているブロックならどこでも使える方式。キャッシュメモリがいっぱいになるまで衝突は起こらないが、データの使用時にすべてのブロックを走査する必要があるので時間がかかる。連想メモリを用いている。
  • セットアソシアティブ方式 : 上記2つの方式を組み合わせたような方式。キャッシュメモリをグループ分けし、そのグループ内なら対応するアドレスはどこでもそのブロックを使用可能という方式。連想メモリを用いている。
キャッシュメモリのデータ更新方式
キャッシュメモリのデータを更新した場合、それをメモリに反映させる必要があるが、そのアクセスには時間がかかるので以下の2種類の更新方式が存在する。
  • ライトスルー方式 : プロセッサがキャッシュに書きこむと同時にその内容をメモリに転送する方式。効率は悪いが、コヒーレンシ(データの一貫性)は保たれる。
  • ライトバック方式 : プロセッサがキャッシュに書き込んでもすぐには転送しない方式。特定の条件(データが追い出されるとき)でのみメモリに書き込む。効率は良くなるが、コヒーレンシが保たれないことがある。
ヒット率
プロセッサがキャッシュメモリを通じてメモリとやり取りするとき、データがキャッシュメモリ上にある確率のことをヒット率という。ヒット率が分かると実行アクセス時間を計算できる。
実効アクセス時間 = キャッシュメモリへのアクセス時間 * ヒット率 + メモリへのアクセス時間 * (1-ヒット率)
要はヒットしたらキャッシュメモリ、ヒットしなかったらメモリへアクセスという期待値を求める式。
メモリインタリーブ
主記憶を複数のバンクに分けて、CPUからのアクセス要求を並列的に処理できるようにすること。
記憶領域の管理方式
以下の2種類が存在する。
  • ファーストフィット方式 : 空き領域をアドレス下位から見ていって最初に見つけたところに割り当てる方式。
  • ベストフィット方式 : 空き領域のうち、要求された大きさを満たす最小のものを割り当て方式。
バス
コンピュータ内部でデータをやり取りするための伝達路のこと。以下の2種類が存在する。現在では(干渉の関係から)シリアルバスの方が主流になっている。
  • シリアルバス : 伝達路が1本で、データを1ビットごとに順番に送る。
  • パラレルバス : 複数ビットをひと固まりにして複数本の伝送路で送るバスのこと。
  • 代表的なバス : 代表的なバスは以下の5つが存在する。
  • USB (Universal Serial Bus) : さすがに知ってる。
  • IEEE 1394 : AV機器とコンピュータを接続する規格。アップルが提唱したFireWireを標準化したもの。ソニーはiLINKと呼んでいる。
  • ATA : ハードディスクをコンピュータと接続する規格。パラレルバスである。
  • シリアルATA(SATA) : ATAをシリアルバスにして高速化したもの。最近の主流。
  • bluetooth : 近距離無線通信規格の一つ。さすがにね。
入出力制御の方式
入出力制御は普通はCPUを通して行うが、それだけでは効率が悪いのでそれ以外の入出力制御の方式が存在する。
  • DMA(Direct Memory Access)制御方式 : DMAコントローラを用いてメモリと入出力装置間やメモリとメモリ間のデータ転送をCPUを通さず行う。
  • チャネル制御方式 : チャネル装置を用いてCPUを通さずデータ転送を行う。DMAはCPUの支持で処理を行うが、チャネル装置は独自に動作する。
ディスプレイの種類
ディスプレイの種類には以下のようなものが存在する。
  • CRTディスプレイ : ブラウン管工房
  • STN液晶ディスプレイ : 単純マトリクス方式を採用したディスプレイ。
  • TFT液晶ディスプレイ : 薄型トランジスタを用い、アクティブマトリクス方式を採用したディスプレイ。
  • 有機ELディスプレイ : 有機発光素子を利用したディスプレイ。低電圧で高い輝度を得られる。
  • プラズマディスプレイ : プラズマを用いたディスプレイ。応答速度が速く、大型化も容易だが、消費電力が大きい。

システム構成要素

システムの構成の基本
システムの構成の基本に、2台のコンピュータをつなげるデュアルシステムデュプレックスシステムが存在する。 3台以上でもこのシステムが基盤となる。
  • デュアルシステム : 2つのシステムを用意して、同じ処理を走らせ、結果を比較する方式。片方がダメになっても動き、また結果を比較するので信頼性が高い。
  • デュプレックスシステム : 2つのシステムを用意するが、普段は片方だけ稼働させてもう片方は待機させておく、このとき稼働させるシステムを主系といい、待機させる方を従系という。デュプレックスシステムはさらに3つのスタンバイ方式がある。
    • ホットスタンバイ : 従系のシステムを常に稼働可能な状態で待機させておくことを指す。呼称が起こった時に自動で従系に切り替えて処理を継続することをフェールオーバという。
    • ウォームスタンバイ : サーバーは立ち上がっているものの、アプリケーションは稼働していないか、別の作業を行っている状態で待機させておくことを指す。すぐには従系に切り替え出来ない。
    • コールドスタンバイ : 従系を起動させないで機器の用意だけはしておくことを指す。切り替えに最も時間がかかる。
クライアントサーバシステム
クライアントとサーバでそれぞれ役割分担して協力して処理を行うシステム。3層のクライアントサーバシステムではその役割を次の3つに分けている。
ストアドプロシージャ
データベースさんに対する「あれやれ、これやれ」の命令を1つにまとめて保存したもので、戻り値のないもの。
RAID
複数台のハードディスクを接続して全体で1つの記憶装置として扱う仕組み。信頼性や性能が上がる。
  • RAID0 : 複数台のディスクにデータを分散することで高速化を行う。このことをストライピングという。性能は上がるが信頼性は下がる。
  • RAID1 : 複数台のディスクに同時に同じデータを書き込む。要はどちらかが死んでも大丈夫なようにする。信頼性が上がる。
  • RAID0+1, RAID1+0 : RAID0とRAID1を並列に組み合わせたもの。最低でも4台ディスクが必要。
  • RAID3, RAID4 : ディスクのうち1台を誤り訂正用のパリティディスクにし、誤りがあったら訂正する。パリティディスクには偶数パリティを計算したものを格納する。これをビットごとに行うのがRAID3ブロックごとにまとめて行うのがRAID4
  • RAID5 : RAID3,4ではパリティを一つのディスクに集中させていたが、RAID5ではパリティをブロックごとに分散し、通常時にもすべてのディスクを使うようにしている。RAID3,4よりほとんどこちらが用いられる。
  • RAID6 : 2台同時に壊れた時に対応するために、冗長データを2種類作成することで2台が同時に壊れても支障がないようにRAID3,4を発展させたのがRAID6
信頼性設計の手法
システム全体の信頼性摂家における手法は以下のようなものがある。
  • フォールトトレランス(fault tolerance(寛容)) : システムの一部に障害が起こっても全体でカバーして機能停止を防ぐ。
  • フォールトアボイダンス : 個々の機器の障害が起こる確率を下げて全体として信頼性を上げる手法。
  • フェールセーフ : システムに障害が発生したとき、安全側に成業する方法

技術要素

開発技術

プロジェクトマネジメント

システム戦略

経営戦略

企業と法務