応用情報技術者試験 コンピュータシステム編

#コンピュータ構成要素

##プロセッサ
演算とほかの装置の制御を行う。シングルプロセッサ、デュアル(マルチ)プロセッサ、デュアルコアプロセッサなどがある。
>クロック周波数(Hz):処理能力の速さ。1秒間に発生するクロック数。
>CPI:1命令を実行するのに必要なクロック数。
>コア:CPUの中核部分。
>命令ミックス:命令の出現確立とCPIを合わせて計算した平均CPI。

###プロセッサの種類
* CPU:中央処理演算装置。データ演算とほかの装置の制御を行う。
* GPU:画像描画に特化したプロセッサ。並列に処理できる。
* DSP(デジタルシグナルプロセッサ):デジタル信号処理に特化している。
* FPU(浮動小数点装置):浮動小数点演算に特化している。
* GPGPU:グラフィック処理以外に用いる並列処理可能なGPU。
* AIチップ:AI処理専用で機械学習を高速に行うことができる。

###プロセッサの分類
* SSID:単一のプロセッサが単一の命令を実行し、単一のデータを扱う。
* SIMD:単一の制御ユニットが複数の処理ユニットを扱い、複数のデータを扱う。
* MIMD:複数のプロセッサで複数のデータを扱う。

###プロセッサの構成要素
* ALU(算術論理演算子):算術演算、論理演算をする。
* PC(プログラムカウンタ):現在実中の命令、次の命令が格納されたアドレスを保持する。
* IR(命令レジスタ):命令そのものを格納する。
* GR(汎用レジスタ):演算対象、アドレス情報の格納など様々な用途で用いる。
* MAR(メモリアドレスレジスタ):取り込むデータのアドレスを記憶する装置。
* MDR(メモリデータレジスタ):メモリから読み書きするデータを格納する。
* スタックポインタ:メモリ領域で最も最近参照された位置のアドレスを記憶する。
* FR(フラグレジスタ):演算結果の正負の情報を格納する。
* アキュームレータ:一時的な演算結果を格納する。

###アーキテクチャ
* RISC:縮小命令セットコンピュータ。単純命令で構成し、高速に処理する。
* CISC:複雑命令セットコンピュータ。複雑命令を単純化にして処理。

###命令種類
* 算術演算命令:四則演算を行う。
* 論理演算命令:ビットごとの論理演算を行う。
* 転送命令:レジスタの参照先を別のメモリに書き換える。
* 比較命令:数値の比較を行う。
* 分岐命令:プログラムの流れを変更する。
* シフト命令:論理シフト、算術シフトする。
* 入出力命令:機器から値を入出力する。

###オペランドフェッチ
メモリの有効アドレスに格納されたデータをプロセッサに取り込む。
>ビックエンディアン:データの上位バイトから順にメモリに並べる。
>リトルエンディアン:データの下位バイトから順にメモリに並べる。

###割り込み
プロセスを実行中に別プロセスに処理が切り替わること。
>PSW:プログラムの状態を記憶する領域。
>外部割込み:プロセッサ以外の入出力装置による割込み。
>>入出力割込み:入出力動作の終了時に発生する割込み。
タイマ割込み:一定の時間経過後に別プロセスが割り込む処理。
異常割込み:機械的な異常による処理の停止。
外部信号割込み:コンソールからの入力時に発生する割込み。

>内部割込み:プロセッサ内部の要因による割込み。
>>SVC割込み:OS機能をプログラムが利用する際に発生する割込み。
プログラム割込み:プログラムのエラーによる割込み。

###高速化技術
* 命令パイプライン:命令を並列に並べることで高速化する技術。
* スーパーパイプライン:命令パイプラインのステージをより細分化しパイプラインの深さを上げる技術。
* スーパースカラ:命令パイプラインを複数に分けて、プロセッサを分けて多重化して実行する技術。
* VLIM:同時に実行できる複数の命令をまとめて長形式命令を作成して、同時に演算する方式。

###ハザード
命令パイプラインで発生する問題で、依存関係で停止すること。
>データハザード:直前の処理結果が必要な場合に待ちになること。
構造ハザード:同じハードウェア資源を使わなければいけない場合に待ちになること。
制御ハザード:条件分岐の場合、パイプラインでは条件の評価を待たずに条件の中の処理をパイプラインに投入するが、条件を評価した結果、別の分岐を実行することになる。この場合、パイプラインに投入した処理を破棄して、正しい分岐の処理を投入する。
疎結合マルチプロセッサシステム:通信回線で接続する。
密結合マルチプロセッサシステム:単一のOSで制御する。

##メモリ

> メモリサイクルタイム：一度の処理でメモリの読み書きをする最小時間。
バス幅：CPU、メモリ間で一度で転送できるデータ量。

###メモリの種類
* 主記憶装置:高速メモリ。揮発性メモリ。コンピュータが処理する際に一時保存してアクセスする。
* 補助記憶装置：低速メモリ。不揮発性メモリ。
* キャッシュメモリ：CPU内部に存在する高速メモリ。不揮発性メモリ。頻繁にアクセスするデータを配置。
* 仮想メモリ：主記憶装置の容量がたりない場合、補助記憶装置の一部を主記憶装置の様に扱かうこと。

>スワップイン：補助記憶装置の内容を主記憶装置に読み込むこと。
スワップアウト：主記憶装置の内容を補助記憶装置に読み込むこと。

* 相変化メモリ：カルコゲナイドガラスの性質、結晶状態の低抵抗、非結晶状態の高抵抗の抵抗差を利用して記録するメモリ。

###メモリの分類
* RAM：主記憶装置で用いられるメモリ。揮発性。
* DRAM：価格が安く、容量が大きい、速度が遅い、リフレッシュが必要。
* SRAM：価格が高く、容量が小さい、速度が速い、リフレッシュが不要。キャッシュメモリに用いる。
* ROM：不揮発性。
* EEPROM：電気（電圧）でデータの消去、書き換えができる。不揮発性。
* ECCメモリ：２ビットの誤りを検出し、１ビットの誤りを訂正できる。

###キャッシュメモリ
局所参照性(ループ処理等の一時的に何度も参照される)に用いられる。

主記憶アクセス時間：Tm
キャッシュメモリアクセス時間：Tc
キャッシュメモリヒット確率：r

```
実行アクセス時間 = (1 - r) * Tm + r * Tc
```

###キャッシュ制御方式
* ライトスルー方式:キャッシュメモリを更新する際に主記憶のデータも更新する。処理速度は遅い。
* ライトバック方式:キャッシュメモリのみを更新した状態を維持し、容量が少なくなるタイミングで主記憶のデータを反映する。コヒーレンスを保つ制御が必要。処理速度は速い。

###メモリインタリーブ
メモリを複数のバンクに分けて、各バンクに対して並列にアクセスして高速化する技術。

##バス・入出力デバイス・入出力装置
* アドレスバス：メモリ上のアドレスを電送するためのバス。一つの信号線で送れる情報は1ビット。
* システムバス：内部で各装置間を結ぶ伝送路で、CPUと他の装置を接続する。
* デバイスドライバ：SWとHWの繋ぐ役割でHWを制御する。

###入出力制御方式
* プログラム制御：プログラムが直接制御する方式で、プロセッサ経由で行う。
* DMA制御：DMAコントローラーが間に立って、プロセッサと独立した制御する。
* チャネル制御：入出力専用のプロセッサを設ける方式。

###入出力インタフェース
>シリアルバス：データ少しずつ運ぶ。長距離向き。
パラレルバス：一度にたくさんのデータを運ぶ。短距離向き。

* USB：ホットプラグ対応。シリアル方式。
>USB2.0：半二重通信、最大５００mA、転送速度４８０Mbps、ピン5本
USB3.0：全二重通信、最大9００mA、転送速度5Gbps、ピン9本(後方互換性)

* IEEE1394：伝送速度がUSBより高い。シリアル方式。
* HDMI：映像、音声をディスプレイに送る。シリアル方式。
* DVI：ディスプレイ接続のデジタルタイプ。シリアル方式。
* DISPLAY PORT：DVIの後継規格。HDCP(著作権保護技術)対応。
* PCMCIA：PCカードに接続する規格。パラレル方式。
* SCSI：外付けHDD、プリンタの接続に利用。パラレル方式。
* IDE：内臓HDD、CDROMへの接続に利用。パラレル方式。

###ワイヤレスインタフェース
* Bluetooth:2.4GHzの電波を使う。１００mほどの距離で通信できる。
* IrDA:赤外線を使ってデータを転送。近距離用。
* RFID:ID情報を埋め込んだRFタグから電磁界や電波などを用いた近距離の無線通信によってやりとりする。
* NFC:機器に近づけるだけでデータを転送する。
* Zigbee:IoTなどのセンサーで用いることを目的とした近距離無線通信規格。低消費電力。

###補助記憶装置
* 磁気ディスク：円盤に磁気の力でデータの読み書きをする。
* 光ディスク：円盤にレーザー光をあてて、データの読み込みをする。
* 半導体メモリ：半導体素子によって構成されており、電気の力でデータの読み書きをする。

>ストライピング：データを複数のHDDに分けて書き込んで、時間を短くする。
ミラーリング：複数のディスクに同じデータを書き込む。
デフラグメンテーション：ディスク内のデータを削除すると空きができる（フラグメンテーション）。これを綺麗な状態に並び替えること。

###ディスプレイ
* CRTディスプレイ：電子ビームが衝突した発光で表示。ブラウン管。
* 液晶ディスプレイ：電圧で光の透過性が変化する性質を利用して表現。
* 有機ELディスプレイ：電圧をかけると発光する有機化合物用いる。
* プラズマディスプレイ：放電により生じる紫外線を利用する。

>dpi(dots per inch):ドット密度のことで、1インチの中にドットをどれだけ表現できるか。

###タッチパネル方式
* 静電式：パネルに電界が形成され、微弱な電流を検知する。
* 感圧式：タッチ時の圧力を検知。
* マトリックススイッチ：基盤上に配列された電極スイッチを抑えることで電気が流れる。
* 赤外線方式：赤外線ビームが遮られて起こる赤外線反射の変化を捉える。
* 抵抗膜方式：抵抗膜に電圧を加え、抵抗値の変化を捉えて位置を検出する。

###３D技術
* プロジェクトマッピング：3DCGデータを立体物に投影する技術。
* 3Dプリンター：3DCGデータを用いて、実物を造形する。
* 3Dスキャナー：立体物の形状を探知して、3DCGデータにする。

#システム構成要素

##システム構成
* 集中処理：一台のホストコンピュータが処理。
* 分散処理：複数のコンピュータが処理。
* クライアントサーバー：サービスを提供するサーバーと、利用するクライアントに役割を分ける。
* ピアツーピア：全てのコンピュータが対等な関係でお互いのデータを利用する。
* クラスタシステム：複数のコンピュータを連携させて、１つの高性能コンピュータとして利用する。
* グリッドコンピューティング：クラスタシステムの中でも数100と特に規模の大きい物。
* NAS：LANに接続している記憶装置で、複数のコンピュータからデータを共有しているファイルサーバー。
* SAN：補助記憶装置を接続する高速のネットワーク。LANを利用しないため、帯域負荷を減らせれる。
* シンクライアント：サーバに接続するだけの最低限の機能のみを持った低価格コンピュータでサーバに接続して利用。

###レプリケーション
データの複製を別サーバに同期する仕組み。災害発生時に迅速にDBを復旧するため。

>リアルタイム処理：要求された処理をリアルタイムで行う処理。
バッチ処理：データを一括して処理する。
対話型処理：ユーザーにデータ入力を要求し対話しながら進めていく方式。

###３層クライアント/サーバ
プレゼンテーション層、ファンクション層、データ層からなる。

###Web3層構成
Webサーバ、アプリケーションサーバ、データベースサーバからなる。

###仮想化
1台のサーバ上に複数のOSを立ち上げること。HW資源を削減できる。

###シンプロビジョニング
複数人の利用者が仮想サーバを利用し、仮想ディスクを共有している物理ディスクから割り当てる技術。

###ライブマイグレーション
仮想サーバを停止せずに物理サーバから他のサーバに移し替えて元のサーバを保守点検すること。

###ホスト型/ハイパバイザ型
* ホスト型：OS上に仮想化SWを入れて仮想マシンを起動する。
* ハイパバイザ型：HW上に仮想マシンを稼働させるハイパバイザを直接インストールする。オーバヘッドが少ない。

###RAID
複数のHDDを仮想的に1台のHDDと認識、表示、冗長性を持たせる技術。
* RAID0：ストライピング。複数のディスクに分散して書き込み高速化をはかる。
* RAID1：ミラーリング。同データを2つのディスクに書き込んで障害生を高める。
* RAID2：RAID0でストライピング保存し、エラー修正用のハミング符号を記録する。
* RAID3：RAID0でストライピング保存し、エラー修正用のパリティビットを複数の専用ドライブに分割し記録する。
* RAID4：RAID3の改良版で、ビット単位からブロック単位で分割する方式。
* RAID5：RAID2、RAID3、RAID4とは違い、エラー修正用データを保存するディスクに分けて保存。
* RAID6：RAID5の改良版で、エラー修正用データを二重保存する。

##システム評価指標

###システム性能評価
* ターンアラウンドタイム：処理要求を入力してから結果の出力が完了するまでの時間。
* レスポンスタイム：処理要求の入力が終わってから結果の出力が完了するまでの時間。
* スループット：単位時間あたりに実行される処理量。
* ベンチマークテスト：実際の負荷状況の処理速度を計測し、処理性能改善を目的としたテスト。
* ボトルネック：処理速度が低い時の原因。
* キャパシティプランニング：現在のシステム性能、応答時間を調査して、長期的に監視し、将来も含めて性能を維持できるように改善すること。
* モニタリング：システム性能を改善する為のデータを得ること。

```
ターンアラウンドタイム = レスポンスタイム + データ転送時間
```

###スケールアップ/スケールアウト
* スケールアップ：CPU、メモリなどサーバそのもののスペックをあげること。
* スケールアウト：サーバの台数を増やして性能を高めること。並列処理を高める場合に向いてる。

###システムの信頼性評価
* 稼動率：全運転時間に対するシステムが動作している時間の割合。
* 故障率：全運転時間に対するシステムが動作していない時間の割合。
* MTBF(平均故障間隔)：故障して復旧してから、次の故障までの平均時間。稼動している平均時間。
* MTTR(平均修復時間)：故障の修理にかかる平均時間。

```math
稼動率 = \frac{MTBF}{MTBF + MTTR}\
```

###直列/並列システム稼動率
```
直列システム稼動率 = 装置Aの稼動率 * 装置Bの稼動率

並列システム稼動率 = 1 - (1 - 装置Aの稼動率) * (1 - 装置Bの稼動率)
```

###システムの信頼性の設計
* デュアルシステム：同じシステムを二系統を用意し、常に同じ処理を行う方式。相互に照会、比較する。
* デュプレックスシステム：片方で処理を行って、もう片方は待機させておく。

>ホットスタンバイ：待機中のシステムを稼動させ、すぐに切り替える方式。
コールドスタンバイ：待機中のシステムに準備だけさせて障害発生時に起動して処理を切り替える方式。

* フェールセーフ：障害発生時に、被害を最小限にし安全性を重視して対策すること。
* フェールソフト：障害発生時に、故障部分だけ切り離して、正常な部分は稼動させること。システム稼動重視。
* フールプルーフ：ユーザーが誤った動作をしても、誤動作して故障することのないようにすること。
* フォールトトレランス：システムを二重化(並列化)して、障害が発生しても継続稼動するようにすること。
* フォールトアボイダンス：システムに高性能な部品を使用したりして、なるべく故障しないようにすること。
* フォールトマスキング：故障発生時に、その影響が誤りとなって外部に出ないようにすること。
* バスタブ曲線：機械導入からの時間経過と故障頻度を表した曲線。

###システムのクラスター構成
複数のサーバを統合してシステム全体の性能、信頼性を向上させること。

* アクティブ・スタンバイクラスタ：稼働系が停止すると待機系が起動して実行する。
* 負荷分散クラスタ：両方が稼働系としてサービスを実行する。

###システムの経済性評価
* 初期コスト：システムの初期開発に必要なコスト。
* 運用コスト：システムの運用に必要なコスト。
* TCO：システムの導入から運用、保守、ユーザーの教育までを含む総コスト。

#ソフトウェア

##オペレーティングシステム

###OSの起動
* BIOS：起動するOSを選択して、OSをメモリに読み込む。
* マルチブート：複数のOSをインストールして選択して起動するようにすること。

###OSの役割
ユーザーの管理、ハードウェアの資源管理、タスク管理、ファイル管理、周辺機器の管理

###カーネル
OSはカーネルとそれ以外に分けることができ、OSの中核を担う。

* モノリシックカーネル：様々な機能をカーネルに持たせる。
* マイクロカーネル：プロセス管理等最小限の機能をカーネルに持たせる。

###メモリ管理
* フラグメンテーション(断片化)：書き込み・消去を繰り返していくと、連続した大きな空き領域が少なくなる。
* コンパクション：フラグメンテーションを一つにまとめて空き領域を確保する。

####空きメモリ領域確保アルゴリズム
* ファーストフィット：一番最初に見つかった空き領域を確保する。
* ベストフィット：必要な最小の領域を確保する。
* オーバレイ：プログラムを分割して、その時に必要な分の容量をメモリに読み込んで実行する処理。

###仮想メモリ
* ページング：仮想メモリを使用する際のメモリ管理方式。ページという単位でHDD上にメモリ領域を確保する。
* ページフォールト：実行時に必要な領域が主記憶上に存在しないこと。
* ページイン：仮想メモリからメモリにページをロードすること。
* ページアウト：主記憶にあるページを仮想メモリに移すこと。
* ページリプレースメント：ページイン、ページアウトのこと。
* デマンドページング：ページフォルト発生時、仮想メモリからメモリを読み込む。
* プリページング：ページフォルト発生前に、必要な容量を予測しておいてページインする。

####ページ置き換えアルゴリズム
ページアウトするページを選択するアルゴリズム。
* FIFO：最も長い間主記憶に存在するページ。
* LIFO：最後に読み込んだページ。
* LRU：最後に参照されてから経過時間が一番長いページ。
* LFU：最も使用頻度の少ないページ。

>スラッシング：プログラムの多重度が増加して、ページの置き換えが多発しシステムの処理効率が低下すること。

###プロセスの状態遷移
* 実行状態：CPUが稼働しプロセスが実行されている状態。
* 実行可能状態：プロセッサがあれば、すぐにプロセスを実行できる状態。
* 待ち状態：実行可能状態に移るための事象発生を待っている状態。
* ディスパッチ：実行可能状態のプロセスにプロセッサを割り当て実行状態に移すこと。
* プリエンプティブ：実行中のプロセスからプロセッサを強制的に取り上げ、実行可能状態のプロセスに渡すこと。
* ノンプリエンプティブ：実行中のプロセスがプロセッサを解放するのを待ち、別のプロセスに割り当てる。

###スケジューリング方式
実行可能状態のプロセス待ち行列の形成、ディスパッチの方式。

* ラウンドロビン方式：各タスクに一定のCPU使用時間(タイムクォンタム)を渡し、時間を超えた場合は列の最後に回して実行可能状態に移る。
* 優先度順方式：各タスクに優先度を設定し優先度に合わせて待ち行列を生成。

>動的優先順制御：優先度の低いプロセスも処理できるように、一定時間たった場合に優先度をあげる処理のこと。

* 到着順方式：各タスクの到着順に、待ち行列を生成し、先頭からプロセッサを割り当てる。
* SJF方式：短い時間で処理が終了する順に待ち行列を生成する。
* 多重待ち行列方式：ラウンドロビン方式と優先度順方式を組み合わせる。
* フィードバック待ち行列方式：ラウンドロビン方式と優先度順方式を組み合わせる。タイムクォンタムを使い切ったタスクの優先度を下げる。

###プロセスの排他制御
複数プロセスが同時並行に実行される場合、資源の競合を解消するための制御。
プロセスがアクセスしている際に別のプロセスのアクセスをブロックする。
>共有ロック：自プロセスと他プロセスが参照することができるが書き込むことができないロック。
占有ロック：自プロセスだけが参照と書き込みができるようにするロック。
クリティカルセクション：他の処理がアクセスすると処理ができないため、ロックをかけなければいけない部分。

###デッドロック
複数のプロセスが互いにロックしたリソースを待つことになり、処理が進まなくなる状態。
>待ちグラフ：各プロセスが矢印で指しているプロセスを待っている状態。デッドロックを発見する。

###同期制御
複数のプロセスが動作している環境では、各プロセス間で同期を取って処理すること。
>イベントフラグ方式：各プロセスの状態を表すビット列を待つ。

###セマフォシステム
* セマフォ：資源の残量を表す変数。
* P操作：クリティカルセクションに入る前に行い、セマフォから1を引く。値が負になった場合、プロセスを待ち行列に入れる。
* V操作：クリティカルセクションから出る際に行い、セマフォに1を加える。増加前の値が負の場合、待ち行列の先頭プロセスを待ち行列から外して、実行可能状態にする。

##ミドルウェア

###API
SWの一部機能を外部に公開して、他のSWと共有して利用できるようにすること。

###コンポーネントウェア
* Java Beans：Java言語で開発されたコンポーネントを組み合わせて、アプリケーションを開発する。
* ActiveX：動的コンテンツを再生するための技術。
* CORBA：オブジェクト同士がメッセージを交換することができる。

###開発フレームワーク
アプリケーションソフトウェアの標準構造の実装に使われるクラスやライブラリの集まり。

>Hadoop：ペタバイト級の大容量のデータを分散で処理するソフトウェア。

##ファイルシステム

###ディレクトリの階層構造
* ルートディレクトリ：階層構造の一番上のディレクトリ。
* カレントディレクトリ：ユーザーが現在作業しているディレクトリ。
* 絶対パス：ルートディレクトリからのパス
* 相対パス：カレントディレクトリからのパス

###バックアップの方式
* フルバックアップ：毎回全てのファイルのバックアップを取る方式。
* 差分バックアップ：定期的にフルバックアップを行い、フルバックアップ以降の変更のあった全てのファイルを記録する方式。
* 増分バックアップ：定期的にフルバックアップを行い、前回の増分バックアップ以降に変更にあったファイルを記録する方式。

##開発ツール
* パーサ：ソースコードの構文解析を行う。
* コードオーディタ：コードが基準や規約に合致しているのか確認するツール。
* トレーサ：プログラムが実行した経路を追跡、確認するツール。
* インスペクタ：プログラム実行時にデータの内容を表示するツール。デバック時に用いる。
* プロファイラ：性能解析ツール。
* アサーションチェッカ：論理式を埋め込んでプログラムの正当性を検証すること。
* シミュレータ：仮想的にモデル作成し、模擬的に試験をするソフトウェア。
* 静的コード解析：プログラムを実行しない状態でプログラムをチェックするツール。
* テストガバレージ分析：プログラム実行時に、実行されている部分とされていない部分を見て品質を確認する。(ガバレッジモニター)
* 静的テストツール：プログラムを実行しない状態で、プログラムの誤りを検出する。
* 動的テストツール：プログラムを実行した状態で、プログラムの誤りを検出する。

###言語処理ツール
* コンパイラ：ソースコードを機械語に翻訳する。
* リンカ：コンパイルされたモジュールと外部モジュールを結合して、1つのロードモジュールを作成する。
* ローダ：ロードモジュールを主記憶にロードする。
* インタプリタ：高水準言語で書かれたプログラムを一行ずつ解釈して実行する。
* クロスコンパイラ：異なる命令形式のコンピュータで動作できるプログラムを作成すること。
* コンバータ：別の言語のソースコードに変換するプログラム。

##オープンソースソフトウェア

###OSSのライセンス種類
* GPLライセンス：GPLライセンスのソフトウェアを改変した物もGPLライセンス。ソースコードの公開必須。
* BSDライセンス：改変した場合のソースコードは非公開で良い。
* LGPLライセンス：動的リンクしたプログラムは非公開で配布可能。
* MPLライセンス：静的リンクするプログラムも非公開で配布可能。
* Apacheライセンス：再配布に当たって告知することが必要。
* デュアルライセンス：1つのソフトウェアを2つ以上のライセンスの元で配布する。

#ハードウェア

##論理回路
* 論理積(ANDゲート)：両方1が入力された場合のみ1が出力。
* 否定論理積(NANDゲート)：両方1の場合にのみ0が出力。
* 否定(NOTゲート)：0が入力されれば1を、1が入力されれば0を出力。
* 論理和(ORゲート)：両方0の場合のみ0が出力。片方でも1が入力されれば1。 
* 否定論理和(NORゲート)：両方0の場合にのみ1が出力。
* 排他的論理和(XORゲート)：2つの入力値が同じであれば0、違っていれば1。

##論理で成立する法則
* 交換則：論理演算される2つのデータの順序を入れ替えても，演算結果は変らないということ。
* 結合則：演算する順番を変えても結果は変わらないということ。
* 分配則：カッコの外にある演算をカッコ内のデータに分配して作用させること。
* ド・モルガン則：AND演算とOR演算を相互に変換すること。

##フリップフロップ
キャッシュメモリに用いられる回路。NANDゲートの出力を入力にフィードバックする。
>1と1の入力はされないようにする必要がある。

##組み込みシステムの半導体製品
* LSI：特に集積度の高い集積回路のこと。
* システムLSI：複数の機能を1つのLSIチップに集約したLSI。チップの意味を持つ。
* SoC：必要とされる様々な機能を1つのLSIチップに集約したLSI。概念の意味を持つ。
* SiP：複数のLSIチップを1つのパッケージにした半導体製品。
* DSP：デジタル信号をリアルタイムで高速に処理するプロセッサ。
* FPGA：製造後に購入者、設計者がプログラムにより構成を設定できる集積回路。
* チャタリング：スイッチを一回押した際に、機械的な振動で複数回ON/OFFが短時間で繰り返される現象。
* アクチュエータ：電気信号を力学的運動に変えて、機械を物理的に動かす出力装置。

##A/D、D/A変換器、分解能
* A/D変換器：アナログ信号をデジタル信号に変換する。
* 分解能(ビット1あたりのアナログ入力値)：A/D変換器が識別できる最小値。
* D/A変換器：デジタル信号をアナログ信号に変換する。

```math
分解能 = 計測できる最大値 / 2^{ビット数}\\
デジタル値(2進数) = 入力電圧 / 分解能\\
アナログ値 = デジタル値 * 分解能
```

##ワンチップマイコン
入出力機器、メモリなどを一つのICチップに埋め込んだもの。
* クロックジェネレータ：ワンチップマイコンに内臓されたクロック信号を生成させるための回路。
* PLL：周波数をN倍にして出力する装置。
* 分配器：周波数を1/N倍にして出力する装置。
* クロックゲーティング：クロックジェネレータで必要な時にだけ、電流を流してクロックを供給する技術。
* リーク電流：電子回路の内部で本来電流の流れない絶縁箇所から電流が漏れる現象。
* パワーゲーティング：動作する必要がない、回路への電源供給を遮断することで、消費電力を防ぎ、リーク電流を防ぐ技術。
* RTC：コンピュータ、マイコンに内臓された電源で動作する時計。
* WDT：マイコンのプログラムが何らかの原因で暴走しないか監視する。

##IoT
パソコン以外の様々な機器がインターネットに接続される仕組みの事。

* 軽量プロトコル：IoTで利用される送受信できるデータ量が少なくてもすむプロトコル。
* CoAP：1対1の通信。ヘッダサイズ4バイト。非同期通信をサポート。
* MQTT：1対多の通信。ヘッダサイズ最小2バイト。ネットワークの不安定な場所や性能の低いデバイスでも動作する。
* LPWA：低電力、広範囲をカバーするネットワーク。
* IEEE802.11ah：LPWAに対応した無線LANの規格。
* エネルギーハーベスティング：周囲の環境からエネルギーを採取して電力に変換する。