目的
アウトプットによる自分の理解の促進。
情報共有。
内容
エンベデッドシステムの構成
エンベデッドシステム(組込みシステム)とは、特定の機能を実現するためのシステムに組み込まれるコンピュータシステムである。
専用のHWを持つが、構成要素は一般のコンピュータと同様で、五大装置(制御、演算、記憶、入力、出力装置)を持つ。
プロセッサの種類
CPU
制御装置と演算装置を集積したプロセッサ。
フェッチ(メモリからプログラムを読み取り)、デコード(解析)、実行、ストア(結果をメモリに書き込む)の命令サイクルを繰り返すことで複雑な処理を行う。
DSP
音声・画像処理やディジタルフィルタ演算を高速に実行できるように設計されたプロセッサ。
固定小数点型と浮動小数点型があり、後者の方が回路規模は大きくなる。
GPU
動画再生や3Dグラフィックのレンダリングを高速に実行できるように設計されたプロセッサ。
GPUをグラフィック以外の用途で利用することをGPGPU(General Purpose -)と呼ぶ。
CPUアーキテクチャ
名称 | 内容 | 実例 |
---|---|---|
SISD | 1命令で1データを処理 | |
SIMD | 1命令で複数データを処理 | 画像処理など |
MISD | 複数命令で1データを処理 | 実施例は多くない |
MIMD | 複数命令で複数データを処理 | 汎用PC |
また、プロセッサ設計上の考え方としてCISCとRISCがある。
名称 | 内容 | 命令長 |
---|---|---|
CISC | 複雑な命令をたくさん持つ | 可変 |
RISC | 単純な命令を小数持つ | 固定 |
マルチプロセッサシステム
1つのシステムで複数のCPUを動作させることで処理能力の向上を図る。
マルチプロセッサ(複数のプロセッサ)
密結合は、複数のプロセッサでメモリを共有し、単一OSで制御される構成。
疎結合は、複数のプロセッサがメモリを共有せず、それぞれ独立したOSで制御される構成。各プロセッサ間のデータやりとりは主に通信によって行う。
マルチコアプロセッサ(プロセッサの中に複数のコア)
コアがすべて同じ種類のプロセッサをホモジニアスマルチコアと呼ぶ。
異なる種類のコアを組み合わせるプロセッサをヘテロジニアスマルチコアと呼ぶ。
I/Oアクセス方式
メモリマップドI/O方式
入出力装置とメモリが同じアドレス空間にいる。
I/O空間にアクセスするプログラムをCで記述する場合、コンパイラによる最適化を防止するためにvolatile修飾子をつける。
(参考:https://uquest.tktk.co.jp/embedded/learning/lecture13.html)
I/OマップドI/O方式
入出力装置をメモリが別のアドレス空間にいる。
アクセス信号線(Read, Write)を分けておく必要がある。
割込み
割込みの種類
外部割込みは、CPU以外から要因が発生した割込み。入出力IFからの割込みなどが代表的。
内部割込みは、CPU自体で発生した割込み。0除算、オーバーフロー、書き込み禁止領域への書き込み、割込み命令による割込みなどが代表的。
割込みオーバーヘッド
割込み時にはレジスタの退避や復旧などの前後処理が必要となる。
これらにかかる時間を割込みオーバーヘッドという。
NMI (Non-Maskable Interrupt)
ソフトウェアによって割込みの禁止をできない割込み。
システムに致命的な問題が発生した場合の割込みである。
ウォッチドッグタイマのタイムアウトや電源電圧低下によるシステム強制シャットダウン時などで起こりうる。
多重割込み
同時に割込みが発生すること。優先順位に基づいて処理が行われる。
多重割込みが許可されていないシステムでは、実行中の割込みの処理を待ってからあとから発生した割込みが実行される。
多重割込みが許可されているシステムでは、実行中の割込み処理Aをいったん中断して後から発生した割込みBが実行される。割込みBの処理が終了した後、処理Aを再開する。
高速化技術
パイプライン制御
プロセッサの処理を、フェッチ、デコード、実行、ストアなど複数の処理に分けて並列に実行することを特徴とする高速化手法。
処理ステージの数をパイプラインの深さ、処理時間をピッチと呼ぶ。
スーパーパイプライン
前述したパイプラインの処理ステージをさらに細分化したもの。
スーパースカラ
パイプラインを複数用意し、同時に複数の命令を実行できるようにしたもの。
プログラム中に前後の命令の影響を受けずに実行できる命令があるとき、HWでこれを検出し、複数のパイプラインに処理を割り振って実行させることで高速化を実現する。
パイプラインハザード
パイプラインの流れを阻害する要因。以下の3つがある。
- データハザードは、直前の命令の実行結果を次の命令が使用するため、直前の命令の実行を待つ必要がある場合のハザード。
- 構造ハザードは、複数の命令がCPU内部資源(算術演算器など)を同時に利用しようとしたために発生するハザード。
- 制御ハザードは、条件分岐の条件の確定を待つことで次にフェッチすべき命令のアドレスが確定するのが遅くなることによるハザード。
制御ハザードの対策として次のものがある。
- 遅延分岐は、先に分岐先の命令を実行してから分岐処理を行うこと。
- アウトオブオーダー実行は、プログラムに書かれた順番と変えて実行すること。
- 分岐予測と投機的実行は、過去に実行された分岐の履歴をもとに、分岐確立の高い方を予測して選択する方法。
気になったことメモ
- なぜPCはMIMDなのか
- マルチプロセッサとマルチコアプロセッサの位置づけがよく分からなくなってきた。この2つは両立するもの?(マルチコアプロセッサをマルチプロセッサで使うことが可能か)
- 多重割込みで割込みの割込みの割込み…というふうに多重になった場合に、退避しておく領域がなくならないか