View
40
Download
0
Category
Preview:
DESCRIPTION
先端ソフトウェア工学 II. 組込みシステムとは?. 組込みシステムの例 携帯電話 ゲーム機 ディジタル家電 車載機器 各種制御機器 etc 定義 厳密な定義があるわけではなく、製品に組込まれている汎用ではないディジタルシステムのことを言う。. 組込みシステムの歴史. 従来 電子回路で実現(もっと古くは機械式制御) プログラマビリティはあまりない 近年 マイクロコントローラ(マイコン)を用いたシステム構築 プログラマブルだが高度な処理は不可能 最近 高性能プロセッサを用いたシステム構築 高度な 信号処理を用いた複雑な処理の実現. - PowerPoint PPT Presentation
Citation preview
先端ソフトウェア工学 II
組込みシステムとは? 組込みシステムの例
携帯電話 ゲーム機 ディジタル家電 車載機器 各種制御機器 etc
定義 厳密な定義があるわけではなく、製品に組
込まれている汎用ではないディジタルシステムのことを言う。
組込みシステムの歴史 従来
電子回路で実現(もっと古くは機械式制御)
プログラマビリティはあまりない 近年
マイクロコントローラ(マイコン)を用いたシステム構築
プログラマブルだが高度な処理は不可能 最近
高性能プロセッサを用いたシステム構築 高度な信号処理を用いた複雑な処理の実現
PIC,AVR,H8,78K
SH,ARM,MIPS,PPC,Atom,Core2
アナログ制御
ガバナ
オペアンプ(積分回路 ,NECEL )
従来
出力
フィードバック制御系
基準入力要素
制御器 アクチュエータ
制御対象
フィードバック要素
調節部 操作部
目標値
検出部
外乱
-+
主フィードバック量
操作量制御信号動作信号
基準入力
制御装置
ディジタル制御
ディジタル演算器
D/A アクチュエータ
制御対象
A/D
目標値
外乱
出力
検出器
ディジタル制御系
ディジタル制御器
マイクロコントローラ・マイクロプロセッサの利用
マイコン・プロセッサの発達
近年 最近マイコン (H8/3052B, ルネサス )
高性能組込みプロセッサ (AM3517,TI)
組込みマルチコアプロセッサ
MP211,NEC
ARM11MPCore,ARM
ION,NVIDIA
コンフィギュラブルプロセッサ
FPGA (Field Programmable Gate Array): プログラマブルなロジックデバイス
PSoC (Programmable System-on-Chip): プロセッサ+プログラマブルアナログ回路
Xilinx FPGACypress PSoC
組込みシステムの一般的な構成
プロセッサ : ソフトウェアを実行。制御の中心。
メインメモリ : ソフトウェア実行時の主記憶。 DRAM あるいは SRAM で構成。
2 次記憶装置 : 主としてプログラムの保存に利用。電源を切っても記憶を保持。フラッシュやディスク。
周辺機器 : 画像処理 HW 、音声処理HW 、ネットワーク IF 等の様々な演算・処理デバイス。
各種 I/O: ディスプレイ、タッチパネル、キーボード等の入出力。
プロセッサ
メインメモリ
2 次記憶装置
周辺機器
各種 I/O
バス
組込み用システムボードの例
Armadillo-500 FX(Atmark Techno, Inc.) CPU: ARM1136JF-S OS: Linux2.6
組込みシステムの動作 電源投入 ( パワーオンリセット ) 自己診断 ブートローダ起動 OS 起動 アプリケーション起動
プロセッサ
メインメモリ
2 次記憶装置
周辺機器
各種 I/O
バス
自己診断 POST (Power On Self Test): 電源投
入時に実行されるシステムのテスト。プロセッサ、メモリ、周辺機器等の故障の有無を調べる。
BIST (Built in Self Test): プロセッサ、周辺機器等にあらかじめ組み込まれているテスト。システムによっては、 POST の際に BIST の機能を利用して故障の有無を調べる。
ブートローダ (boot loader)
オペレーティングシステムを起動する準備をするソフトウェアプログラム。IPL(Initial Program Loader) 、ブートストラップローダ (bootstrap loader)とも呼ばれる。
主な機能 プロセッサの初期化 メモリ設定 周辺デバイス初期化 プログラムのロードおよび実行
様々なブートローダ Redboot:eCos(Embedded
Configurable Operating System)ベースのブートローダ。 http://sources.redhat.com/redboot
LILO:LInux LOder 。 x86 Linux で良く使われていたブートローダ。
GRUB:GRand Unified Bootloader 。GNU の開発した高機能なブートローダ。最近、 x86 Linux で良く利用されている。
Redboot eCos の HAL (Hardware
Abstraction Layer) に基づく、信頼性が高く、コンパクトで、設定しやすく、移植性の高い組み込み向けブートローダ
オペレーティングシステム オペレーティングシステム
( OS:Operating System )とは? :ハードウェア、メモリ等の計算機資源を管理し、アプリケーションプログラムに対するインターフェースを提供するソフトウェア。
組込み向け OS eCos ITRON VxWorks WindowsCE
PC における Linux の起動手順
BIOS (ROM ブートローダ )
ディスクブートローダ( GRUB )
Linux カーネル
初期化部
BIOS 部
ブートローダ部
Stage1
Stage1.5
Stage2
setup.S
head.S
main.c
CPU をリアルモードに設定し初期化開始
POST によるデバイス等の初期化ブートメディアを選択しブートローダに飛ぶ
Stage1.5 を見つけ制御を渡す
ファイルシステムを読む準備をしStage2 に移行Grub の本体を起動
ディスク、デバイス等の初期化およびプロテクトモードへの移行圧縮カーネルイメージの展開、ページテーブル初期化
割り込みテーブル初期化 システム時間初期化 コンソール初期化 仮想ファイルシステム初期化 etc
BIOS とは Basic Input
Output System ハードウェアデバイ
スとの抽象度の高いソフトウェアインターフェース
代表例 VGA BIOS SCSI BIOS ACPI BIOS
x86 プロセッサの動作モード
リアルモード 8086互換モード 実アドレス 20 ビットのアドレス空間にアクセス可能
( 1M バイト) プロテクトモード
32 ビットリニアアクセス空間 仮想記憶の提供 アクセス制御の実現
セグメント毎の読み取り・書き込み・実行の設定
ユーザ・システム・カーネルの区別
ソフトウェアの階層構造 演算を実行するハードウェアをソフト
ウェアで階層的に抽象化
アプリケーションソフトウェア
システムソフトウェア
ハードウェア
ユーザが利用するソフトウェア
オペレーティングシステム、コンパイラ等
具体例 (Android)
ハードウェアへのアクセス OS がない場合
仕様 :0100 が 0 なら LED消灯、 1 なら点灯。リセット値は 0 。
プロセッサ
メインメモリ
LED
0
0000
00ff0100
メインメモリ
LED
ハードウェアへのアクセス OS がない場合
直接 0100番地を読み書き
プロセッサ
メインメモリ
LED
1
0000
00ff0100
メインメモリ
LED点灯
int * led;led=(int *) LED_ADDR;*led=1;
ハードウェアへのアクセス OS がない場合
直接 0100番地を読み書き
プロセッサ
メインメモリ
LED
0
0000
00ff0100
メインメモリ
LED
int * led;led=(int *) LED_ADDR;*led=0;
消灯
カーネル空間
ハードウェアへのアクセス OS がある場合
デバイスの存在するアドレス空間がカーネルによって管理される
プロセッサ
メインメモリ
LED
ユーザ空間
0
0000
00ff0100
メインメモリ
LED
int * led;led=(int *) LED_ADDR;*led=1;
OS がこのアクセスを許可しない
カーネル空間
ハードウェアへのアクセス OS がある場合
解 1:root 権限で動かす。
プロセッサ
メインメモリ
LED
ユーザ空間
0
0000
00ff0100
メインメモリ
LED
カーネル空間
ハードウェアへのアクセス OS がある場合
解 1:root 権限で動かす。
プロセッサ
メインメモリ
LED
ユーザ空間
1
0000
00ff0100
メインメモリ
LED
int * led;led=(int *) LED_ADDR;*led=1;
root権限だとアクセス可
点灯
カーネル空間
ハードウェアへのアクセス OS がある場合
OS が無い場合と同様にアクセス可能だが、デバイスへのアクセスを要求するすべてのプロセスに root権限が必要となり問題。 プロセッサ
メインメモリ
LED
ユーザ空間
1
0000
00ff0100
メインメモリ
LED点灯
カーネル空間
ハードウェアへのアクセス OS がある場合
解 2: デバイスドライバによってカーネル管理下のデバイスにアクセス
プロセッサ
メインメモリ
LED
ユーザ空間
0
0000
00ff0100
メインメモリ
LED
ドライバ
int fd;fd=open(“led”,O_RDWR);write(fd,1);
write() read()
カーネル空間
ハードウェアへのアクセス OS がある場合
解 2: デバイスドライバによってカーネル管理下のデバイスにアクセス
プロセッサ
メインメモリ
LED
ユーザ空間
1
0000
00ff0100
メインメモリ
LED
ドライバ
int fd;fd=open(“led”,O_RDWR);write(fd,1);
点灯
注 1: 実際には、アドレス変換を伴う場合が殆どであり、こんなに単純ではない。注 2:write の正しい使い方は man を参照。
まとめ 組込みシステムの歴史
プロセッサの発達 組込みシステムの構成と動作
ブートローダ 起動手順の概要
ソフトウェアの階層構造 ハードウェアへのアクセス例
プロセッサの仕組み
参考書 コンピュータの構成と設計 ~ ハードウ
エアとソフトウエアのインタフェース 第 3版 (上 ) (単行本 ) デイビッド・A. パターソン (著 ), ジョン・L. ヘネシー (著 ), David A. Patterson (原著 ), John L. Hennessy (原著 ), 成田 光彰 (翻訳 )
プロセッサとは? 演算処理装置のこと。一般には、メモ
リ上に保持された命令を実行する。 CPU や MPU とほぼ同義。 CPU:Central Processing Unit の略。 中央処理装置。
MPU:Micro Processing Unit の略。半導体製品として 1 チップであるかその流れをくんでいる処理装置に対して使う。 CPU より広義。
計算機の歴史 ENIAC:Presper Eckert 、
John Mauchly らによって開発。配線を入れ替えることによってプログラムを行う。内部は 10進表現。
EDVAC: Presper Eckert 、 John Mauchly らによって開発。 ENIACと異なり、内部 2進表現。データだけでなく命令もメモリに保存。
Stored program
First Draft of a Report on the EDVAC. JOHN VON NEUMANNhttp://cva.stanford.edu/classes/cs99s/papers/vonneumann-firstdraftedvac.pdf
Von Neumann Machine 広く使われているプロセッサのモデル。
Memory
ControlUnit
Arithmetic Logic UnitAccumulat
or Output
Input
計算能力は Turing Machine と等価
そもそも計算って何?(補足あるいは復習 )
コンピュータとその抽象化 ディジタルコンピュータ
パーソナルコンピュータ 携帯電話 ゲーム メインフレーム スーパーコンピュータ
コンピュータでできることは?コンピュータの本質って何?種類による違いは?
抽象的な計算機(コンピュータと同じ意味)を定義することによって、計算機の本質を明らかにする
計算の例 以下の計算を例として考える
3と4の和を求める 3+4= 7
与えられた0と1からなる文字列が 01 の繰り返しか否かを判定する
01101100011 → × 0101010101 → ○
任意の 0以上の整数 n に対し、与えられた 0 と 1 からなる文字列が という形式であるか否かを判定する
nn10
計算機による解法 組み合わせ回路 :3+4のような加算
は組み合わせ回路 * である加算器で実現可能
* 組み合わせ回路 : 現在の入力のみによって出力が定まる回路。詳細は論理回路の項目にて
100011
+111
3→0114→100
2進数表現2進数による加算
100
011111
加算器による計算
計算機による解法 有限オートマトン : 有限状態機械とも
呼ばれ、有限個の状態を持つ数学的なモデル。
1q 2q
3q
0
101
0,101 の連続を受理する有限オートマトン
終了状態
状態
計算機による解法 任意の自然数 n に対し、与えられた 0 と 1
からなる文字列が という形式で表現できるか否かを判定する 有限オートマトンを使ってみる
入力 n の数に合わせて状態の数を増やしたい
有限オートマトンでは実現できない。計算の途中結果を保持する機構が必要
nn10
プッシュダウンオートマトン
有限オートマトンにプッシュ /ポップによるアクセスが可能なスタックを付加。
制御部
( 有限オートマトン )プッシュ /ポップ スタック
入力
プッシュダウンオートマトン
の受理nn10
1q
4q
2q
3q
$, 0,0
0,1
0,1
,$cba , : 入力から a を読む時、スタックの先頭にある
b を c に置き換える。 b が ε (空列)の場合、 c をスタックに積むのみであり、 c が ε の場合スタックから b を読みだすのみである。
Turing 機械 有限オートマトンやプッシュダウン
オートマトンよりも能力の高い計算モデル Turing 機械はテープに対し書き込みと読
み出しのどちらも可能 読み書きヘッドは左右のどちらにも動く テープは無限長 Turing 機械は拒否や受理に対応する特別
な状態に入るとすぐに停止する制御部
・・・
Turing 機械
計算能力の関係
有限オートマトン プッシュ
ダウンオートマトン
Turing機械
有限オートマトンの形式的定義
定義 : 有限オートマトン (finite automaton) は 5個組 である。 は状態と呼ばれる有限集合 はアルファベットと呼ばれる有限集合 は遷移関数 は開始状態 は受理状態の集合
),,,,( 0 FqQ Q
QQ :Qq 0QF
プッシュダウンオートマトンの形式的な定義
プッシュダウンオートマトンは 6個組 である。ここで、 は全て有限集合であり、 は状態の集合 は入力アルファベット はスタックアルファベット は遷移関数 は開始状態 は受理状態の集合とする。
),,,,,( 0 FqQ FQ ,,,
Q
QF
Q: )( QP0q
Turing 機械の形式的な定義 Turing 機械は 7個組
である。ただし、 は全て有限集合であり、以下の通りである。 は状態の集合 は特別な空白文字 を含まない入力アルファ⊔
ベット は かつ であるようなテープアル⊔
ファベット は遷移関数
は開始状態 は受理状態 は であるよう
な拒否状態
),,,,,,( rejectaccept0 qqqQ ,,Q
Q
}RL,{: QQ
Qq 0Qq accept
Qq reject rejectaccept qq
計算理論の参考文献 計算理論の基礎 ,Michael Sipser 著 , ISBN:4-320-02948-8
計算モデル論入門 - チューリング機械からラムダ計算へ -,井田哲雄・浜名誠著 , ISBN:4-7819-1135-8
Von Neumann Machine 広く使われているプロセッサのモデル。
Memory
ControlUnit
Arithmetic Logic UnitAccumulat
or Output
Input
Memory ビット列を保存する記憶
装置。アドレスでビット列の場所を指定し、その値がビット列。
ロード、ストアと呼ばれる操作によってメモリアクセスを行う。 ロード : メモリから値を読む
ストア : メモリに値を書き込む
メモリの例 (8 ビット )
0123456789 00000000
000000010000001000000011000001000000010100000110000001110000100000001001
ALU および Control Unit ALU (Arithmetic Logic Unit)
算術論理演算装置。演算結果を一時的に保存する累算器を含んでいる。
Control Unit 命令の解釈および実行を行う。
命令の実行 右図の例を考える。
0番地の命令から実行 0
123456789 00000001
0000001000000000000000000000000000000000000000007番地にストア
8番地を加算9番地をロード
ControlUnit
ALU
Memory
accumulator
命令の実行 右図の例を考える。
9番地をロード0123456789 00000001
0000001000000000000000000000000000000000000000007番地にストア
8番地を加算9番地をロード
ControlUnit
ALU
Memory
accumulator
命令の実行 右図の例を考える。
9番地をロード0123456789 00000001
0000001000000000000000000000000000000000000000007番地にストア
8番地を加算9番地をロード
ControlUnit
ALU
Memory
accumulator
命令の実行 右図の例を考える。
9番地をロード0123456789 00000001
0000001000000000000000000000000000000000000000007番地にストア
8番地を加算9番地をロード
ControlUnit
ALU00000001
Memory
accumulator
命令の実行 右図の例を考える。
1番地の命令をロード (正しくはフェッチ )
0123456789 00000001
0000001000000000000000000000000000000000000000007番地にストア
8番地を加算9番地をロード
ControlUnit
ALU00000001
Memory
accumulator
命令の実行 右図の例を考える。
8番地を加算0123456789 00000001
0000001000000000000000000000000000000000000000007番地にストア
8番地を加算9番地をロード
ControlUnit
ALU00000001
Memory
accumulator
命令の実行 右図の例を考える。
8番地を加算0123456789 00000001
0000001000000000000000000000000000000000000000007番地にストア
8番地を加算9番地をロード
ControlUnit
ALU00000011
Memory
accumulator
00000001+00000010=00000011
命令の実行 右図の例を考える。
3番地の命令を実行0123456789 00000001
0000001000000000000000000000000000000000000000007番地にストア
8番地を加算9番地をロード
ControlUnit
ALU00000011
Memory
accumulator
命令の実行 右図の例を考える。
3番地の命令を実行0123456789 00000001
0000001000000000000000000000000000000000000000007番地にストア
8番地を加算9番地をロード
ControlUnit
ALU00000011
Memory
accumulator
命令の実行 右図の例を考える。
3番地の命令を実行0123456789 00000001
0000001000000011000000000000000000000000000000007番地にストア
8番地を加算9番地をロード
ControlUnit
ALU00000011
Memory
accumulator
近代的なプロセッサの基本構造
PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15汎用レジスタが増えた程度で基本は同じ
命令の種類 ロード / ストア命令
メモリとレジスタのアクセス 算術演算命令
+、ー、*、 ÷ 等の演算 論理演算命令
and 、 or 、 xor 等の演算 分岐命令
プログラムカウンタの書き換えによる制御の変更
プロセッサの基本的な動作
リセット
0
0
0
0
0
0
0
00PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
0番地の命令のフェッチ
0
0
0
0
0
0
0
00PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
注 : 一般にはリセット時に飛ぶアドレスが 0番地とは限らない
命令実行 &PC インクリメント
0
0
0
0
0
0
0
01PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
命令実行 &PC インクリメント
0
0
0
0
0
0
0
02PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
分岐命令
命令実行 &PC インクリメント
0
0
0
0
0
0
0
03PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
命令実行 &PC インクリメント
0
0
0
0
0
0
0
04PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
分岐命令
0
0
0
0
0
0
0
04PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
命令 :PC に 0 を代入
分岐命令
0
0
0
0
0
0
0
00PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
PC に 0 を代入
0番地の命令のフェッチ
0
0
0
0
0
0
0
00PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
ロード命令
ロード命令
0
0
0
0
0
0
0
01PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
ロード命令
0
0
0
0
0
0
0
01PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
命令 :r0 に 16番地のデータをロード
ロード命令
1
0
0
0
0
0
0
0
01PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
命令 :r0 に 16番地のデータをロード
ロード命令
1
0
0
0
0
0
0
01PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
命令実行 &PC インクリメント
1
0
0
0
0
0
0
02PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
命令実行 &PC インクリメント
1
0
0
0
0
0
0
03PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
ロード命令
2
1
0
0
0
0
0
0
03PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
命令 :r1 に 17番地のデータをロード
ロード命令
1
2
0
0
0
0
0
01PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
算術演算命令
命令実行 &PC インクリメント
1
2
0
0
0
0
0
04PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
命令実行 &PC インクリメント
1
2
0
0
0
0
0
04PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
命令 :r2 に r0 と r1 を加えて代入
命令実行 &PC インクリメント
1
2
0
0
0
0
0
04PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
命令 :r2 に r0 と r1 を加えて代入
命令実行 &PC インクリメント
1
2
3
0
0
0
0
04PC命令デコーダ
メモリ
メモリバス
r0
r1
r2
r3
r4
r5
r6
r7
ALU
演算処理
制御処理
0
7
15
プロセッサ内での命令の表現
MIPS(Microprocessor without Interlocked Pipeline Stages) の場合
マシンコード
MIPS の命令形式 R形式 : レジスタ用
I形式 : 即値およびデータ転送用
J形式 : 無条件分岐命令
000000
10001 10010 01000 000000
100000
op rs rt rd shamt funct
op rs rt constant or address
op address
R形式命令 op:命令の種類を表現。オペコード
( opcode )と呼ばれる。 rs:第一ソースオペランドレジスタ。
$s0 、 $s1 、…、 $s7 rt:第二ソースオペランドレジスタ。
$t0 、 $t1 、… $t7 rd: ディスティネーションレジスタ。 shamt: シフト量。 funct: ある op で表現される命令の機
能の区別をする表現。機能コードと呼ばれる。
op rs rt rd shamt funct
I形式命令 op:命令の種類を表現。オペコード
( opcode )と呼ばれる。 rs: ソースオペランドレジスタ。
$s0 、 $s1 、…、 $s7 rt: オペランドレジスタ。
$t0 、 $t1 、… $t7 (ロード命令の場合はディスティネーション)
op rs rt constant or address
命令の例 add $d=$s+$t R 形式000000ssssstttttddddd-----100000 sub $d=$s-$t R 形式000000ssssstttttddddd-----100010 addi $d=$s+c (signed) I 形式001000ssssstttttcccccccccccccccc lw $t=memory[$s+a] I 形式100011ssssstttttaaaaaaaaaaaaaaaa sw memory[$s+a]=$t I 形式101011ssssstttttaaaaaaaaaaaaaaaa
命令の例 j PC=(((PC+4)&f0000000)|(a<<2)) J 形式
000010aaaaaaaaaaaaaaaaaaaaaaaaaa jal PC=(((PC+4)&f0000000)|(a<<2)), $ra=PC+8 J 形式
000011aaaaaaaaaaaaaaaaaaaaaaaaaa
命令セットの種類 CISC (Complex Instruction Set
Computer): 複雑な命令セット。一般に命令長は可変で、多くの形式がある。 IA-32(x86)
RISC (Reduced Instruction Set Computer): 2-3 の形式をもった固定長命令セット。 SPARC(Scalable Processor
ARChitecture) MIPS ARM(Advanced Risc Machine)
プロセッサ内での数値の表現
2進数で表現 1 -> 1 3 -> 11 11 -> 1011
一般に n bit の場合
n
i
iix
1
12
123 xxxxx in
負の数をどう表現するのか?
符号なし( unsigned )
負の数の表現 2 の補数 : n ビットの数 a があると
すると、以下で定義されるのが 2 の補数。
an 12具体例
0011 -> 10000 – 00011 = 01101簡単な求め方
0011 1100 1101
2 の補数
最上位ビットは無視
全ビット反転 1 を加える
2 の補数を用いた加減算 4+3=7
4-3=1
3-4=-1
01000011+011101000011-0001
4+(-3)=1 01001101+
10001
00110100-1111
3+(-4)=-1 00111100+1111
加算器の実現例
4 ビットの整数 A (A3A2A1A0) と B (B3B2B1B0) の加算を考える。和はS(S3S2S1S0) とする。
全加算器全加算器全加算器全加算器
B0B1B2B3 A0A1A2A3
C0 S0C1 S1C2 S2C3 S3
0
全加算器 : 入力 A,B および桁上げ入力 C から A+B+C を計算し、加算結果および桁上げ出力を出力する加算器
全加算器の動作
A B C S Cout
0 0 0 0 00 0 1 1 00 1 1 0 10 1 0 1 01 1 0 0 11 1 1 1 11 0 1 0 11 0 0 1 0
全加算器の真理値表
全加算器の構成例
ABC
S
Cout
加算器の構成例
ABC S
Cout
ABC S
Cout
ABC S
Cout
ABC S
Cout
加算器の実現例
4 ビットの整数 A (A3A2A1A0) と B (B3B2B1B0) の加算を考える。和はS(S3S2S1S0) とする。
全加算器全加算器全加算器全加算器
B0B1B2B3 A0A1A2A3
C0 S0C1 S1C2 S2C3 S3
0
全加算器 : 入力 A,B および桁上げ入力 C から A+B+C を計算し、加算結果および桁上げ出力を出力する加算器
加算器の実現例
4 ビットの整数 A (A3A2A1A0) と B (B3B2B1B0) の加算を考える。和はS(S3S2S1S0) とする。
全加算器全加算器全加算器全加算器
B0B1B2B3 A0A1A2A3
C0 S0C1 S1C2 S2C3 S3
1
全加算器 : 入力 A,B および桁上げ入力 C から A+B+C を計算し、加算結果および桁上げ出力を出力する加算器
S=A-B
加算器と減算器が同じ構成で
実現可能
その他の演算 乗算 除算 論理演算
参考書参照
実数の表現ー浮動小数点表現 小数の例
アボガドロ数 6.02214179 x 1023
プランク定数 6.62606896 x 10-34
2進小数 0.12=1.02 x 2-1
0.012=1.02 x 2-2
一般的な浮動小数点表現 :(仮数 ) x ( 基数 ) ( 指数 )
IEEE754浮動小数点規格 IEEE754浮動小数点表現
例 :1.0 x 2-1
(-1)S x (1+仮数 ) x 2 ( 指数 -127)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0S 指数 仮数
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 00 01111110 00000000000000000000000
浮動小数点数の演算は参考書参照
プロセッサでの命令実行手順
命令フェッチ (IF) 主記憶からの命令の取得
命令デコード (ID) 命令の解釈
命令実行 (EX) 命令の実行
メモリアクセス (MA) 主記憶へのアクセス
ライトバック (WB) レジスタへのアクセス
プロセッサの処理サイクル シングルサイクル方式
1 サイクルで IF から WB までのすべてを実行
最も処理時間を要する命令の速度以上に高速に動作させることはできない(全ての命令が 1 サイクルで動作する必要があるから)
マルチサイクル方式 1つの命令を複数のサイクルで実行
IF ID EX MA
WB
パイプライン処理 スループットを向上させる。
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
IF ID EX MA
WB IF ID EX M
AWB
IF ID EX MA
WB
実現するには様々な工夫が必要
パイプライン処理の障害 パイプライン・ハザード
構造ハザード : 実行される命令の組み合わせにハードウェアが対応できないために発生するハザード
データ・ハザード :他の命令が終了するのを待つ必要がある場合に発生するハザード
制御ハザード : ある命令の実行に関する判断に実行中の他の命令の結果が必要な場合に発生するハザード
構造ハザード
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
構造ハザード
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
構造ハザード
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
構造ハザード
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
構造ハザード
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
MAIF競合
構造ハザード
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WBIF ID EX M
AWB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU 回避策 1: ストールさせる
構造ハザード
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WBIF ID EX M
AWB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU 回避策 1: ストールさせる
構造ハザード
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
MAIF競合
回避策 2:命令メモリとデータメモリを分ける
構造ハザード
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
PC
命令メモリ
Instructiondecoder
Instructionregister
ALU
Registers
CPU 回避策 2:命令メモリとデータメモリを分ける
データメモリ
ハーバードアーキテクチャ
データ・ハザード
IF ID EX MA
WBIF ID EX MA
WB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
add $s0,$t0,$t1($s0=$t0+$t1)sub $t2,$s0,$t3($t2=$s0-$t3)
Registers5
0
4 3 2 1
0 0 0 0t0 t1 t2 t3 t4
s0 s1 s2 s3 s4
データ・ハザード
IF ID EX MA
WBIF ID EX MA
WB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
add $s0,$t0,$t1($s0=$t0+$t1)sub $t2,$s0,$t3($t2=$s0-$t3)
$s0=$t0+$t1
Registers5
0
4 3 2 1
0 0 0 0t0 t1 t2 t3 t4
s0 s1 s2 s3 s4
データ・ハザード
IF ID EX MA
WBIF ID EX MA
WB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
add $s0,$t0,$t1($s0=$t0+$t1)sub $t2,$s0,$t3($t2=$s0-$t3)
$s0=$t0+$t1
Registers5
0
4 3 2 1
0 0 0 0t0 t1 t2 t3 t4
s0 s1 s2 s3 s4
$t2=$s0-$t3
データ・ハザード
IF ID EX MA
WBIF ID EX MA
WB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
add $s0,$t0,$t1($s0=$t0+$t1)sub $t2,$s0,$t3($t2=$s0-$t3)
$s0=$t0+$t1
Registers5
0
4 3 2 1
0 0 0 0t0 t1 t2 t3 t4
s0 s1 s2 s3 s4
$t2=$s0-$t3-2=0-2
データ・ハザード
IF ID EX MA
WBIF ID EX M
AWB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
add $s0,$t0,$t1($s0=$t0+$t1)sub $t2,$s0,$t3($t2=$s0-$t3)
$s0=$t0+$t1
Registers5
0
4 3 2 1
0 0 0 0t0 t1 t2 t3 t4
s0 s1 s2 s3 s4
ストールで待つ :3 サイクル無駄
データ・ハザード
IF ID EX MA
WBIF ID EX MA
WB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
add $s0,$t0,$t1($s0=$t0+$t1)sub $t2,$s0,$t3($t2=$s0-$t3)
$s0=$t0+$t1
Registers5
0
4 3 2 1
0 0 0 0t0 t1 t2 t3 t4
s0 s1 s2 s3 s4
回避策 : フォワーディング
データ・ハザード
IF ID EX MA
WBIF ID EX MA
WB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
add $s0,$t0,$t1($s0=$t0+$t1)sub $t2,$s0,$t3($t2=$s0-$t3)
$s0=$t0+$t1
Registers5
0
4 3 2 1
0 0 0 0t0 t1 t2 t3 t4
s0 s1 s2 s3 s4
回避策 : フォワーディング
結果を ALU に送る
データ・ハザード
IF ID EX MA
WBIF ID EX MA
WB
PC
Memory
Instructiondecoder
Instructionregister
ALU
Registers
CPU
add $s0,$t0,$t1($s0=$t0+$t1)sub $t2,$s0,$t3($t2=$s0-$t3)
$s0=$t0+$t1
Registers5
0
4 3 2 1
0 0 0 0t0 t1 t2 t3 t4
s0 s1 s2 s3 s4
回避策 : フォワーディング
結果を ALU に送る
$t2=9-$t37=9-2
制御ハザード
add $s0,$t0,$t1($s0=$t0+$t1)beq $s1,$s2, 40(if($s1==$s2){goto 40})or $s3,$s4,$t2($s3=$s4|$t2)
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
分岐命令を含む命令列
PC:10Instructiondecoder
Instructionregister
ALU
Registers
CPU
制御ハザード
add $s0,$t0,$t1($s0=$t0+$t1)beq $s1,$s2, 40(if($s1==$s2){goto 40})or $s3,$s4,$t2($s3=$s4|$t2)
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
分岐命令を含む命令列
PC:Instructiondecoder
Instructionregister
ALU
Registers
CPU
制御ハザード
add $s0,$t0,$t1($s0=$t0+$t1)beq $s1,$s2, 40(if($s1==$s2){goto 40})or $s3,$s4,$t2($s3=$s4|$t2)
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
分岐命令を含む命令列
PC:11Instructiondecoder
Instructionregister
ALU
Registers
CPU
制御ハザード
add $s0,$t0,$t1($s0=$t0+$t1)beq $s1,$s2, 40(if($s1==$s2){goto 40})or $s3,$s4,$t2($s3=$s4|$t2)
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
分岐命令を含む命令列
PC:12Instructiondecoder
Instructionregister
ALU
Registers
CPU
後続命令のアドレスは分岐条件に依存
成立 :PC=40不成立 :PC=12
制御ハザード 制御ハザードの回避法その 1: ストール
add $s0,$t0,$t1($s0=$t0+$t1)beq $s1,$s2, 40(if($s1==$s2){goto 40})or $s3,$s4,$t2($s3=$s4|$t2)
IF ID EX MA
WBIF ID EX MA
WBIF ID EX M
AWBストール
ストールのサイクル数はアーキテクチャ依存
制御ハザード 制御ハザードの回避法その 1: ストール
add $s0,$t0,$t1($s0=$t0+$t1)beq $s1,$s2, 40(if($s1==$s2){goto 40})or $s3,$s4,$t2($s3=$s4|$t2)
IF ID EX MA
WBIF ID EX MA
WBIF ID EX M
AWB
ストール
ID において分岐先アドレスを計算できるアーキテクチャの場合
制御ハザード
add $s0,$t0,$t1($s0=$t0+$t1)beq $s1,$s2, 40(if($s1==$s2){goto 40})or $s3,$s4,$t2($s3=$s4|$t2)
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
PC:10Instructiondecoder
Instructionregister
ALU
Registers
CPU
制御ハザードの回避法その 2: 分岐予測
常に分岐が不成立と予測
制御ハザード
add $s0,$t0,$t1($s0=$t0+$t1)beq $s1,$s2, 40(if($s1==$s2){goto 40})or $s3,$s4,$t2($s3=$s4|$t2)
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
PC:11Instructiondecoder
Instructionregister
ALU
Registers
CPU
制御ハザードの回避法その 2: 分岐予測
常に分岐が不成立と予測
制御ハザード
add $s0,$t0,$t1($s0=$t0+$t1)beq $s1,$s2, 40(if($s1==$s2){goto 40})or $s3,$s4,$t2($s3=$s4|$t2)
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
PC:12Instructiondecoder
Instructionregister
ALU
Registers
CPU
制御ハザードの回避法その 2: 分岐予測
常に分岐が不成立と予測
制御ハザード 制御ハザードの回避法その 2: 分岐予測
add $s0,$t0,$t1($s0=$t0+$t1)beq $s1,$s2, 40(if($s1==$s2){goto 40})or $s3,$s4,$t2($s3=$s4|$t2)
IF ID EX MA
WBIF ID EX MA
WBIF ID EX M
AWBストール
PC:40Instructiondecoder
Instructionregister
ALU
Registers
CPU分岐が成立、つまり予測が外れた場合実際には過去の履歴に基づく分
岐予測が行われる。分岐予測に用 い る 分岐先 バ ッ ファをBranch Target Buffer という。
制御ハザード
add $s0,$t0,$t1($s0=$t0+$t1)beq $s1,$s2, 40(if($s1==$s2){goto 40})挿入された命令or $s3,$s4,$t2($s3=$s4|$t2)
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
PC:11Instructiondecoder
Instructionregister
ALU
Registers
CPU
制御ハザードの回避法その 3:遅延分岐
依存関係のない命令を挿入
IF ID EX MA
WB
制御ハザードの回避法その 3:遅延分岐
制御ハザード
add $s0,$t0,$t1($s0=$t0+$t1)beq $s1,$s2, 40(if($s1==$s2){goto 40})挿入された命令or $s3,$s4,$t2($s3=$s4|$t2)
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
PC:12Instructiondecoder
Instructionregister
ALU
Registers
CPU
依存関係のない命令を挿入
IF ID EX MA
WB
制御ハザードの回避法その 3:遅延分岐
制御ハザード
add $s0,$t0,$t1($s0=$t0+$t1)beq $s1,$s2, 40(if($s1==$s2){goto 40})挿入された命令or $s3,$s4,$t2($s3=$s4|$t2)
IF ID EX MA
WBIF ID EX MA
WBIF ID EX MA
WB
PC:13or40Instructiondecoder
Instructionregister
ALU
Registers
CPU
依存関係のない命令を挿入
IF ID EX MA
WB
確定したアドレスの命令を実行
割込みと例外 MIPS
割込み : プロセッサ外部で発生する予期せぬ事象
例外 : プロセッサ内で発生する予期せぬ事象
PowerPC 割込み :異常な事象の発生 例外 : 制御の流れの変化
IA-32: すべて割込み
例外への対処法 (MIPS) 例外の例
未定義命令の実行 算術オーバーフロー
対処法 OS への制御の移行
EPC(Exception Program Counter) に問題命令のアドレスを退避
例外理由の通知 Cause レジスタに原因を記録 ベクタ割り込みの利用
おわり
Recommended