146
先先先先先先先先先先 II

先端ソフトウェア工学 II

  • Upload
    opa

  • View
    40

  • Download
    0

Embed Size (px)

DESCRIPTION

先端ソフトウェア工学 II. 組込みシステムとは?. 組込みシステムの例 携帯電話 ゲーム機 ディジタル家電 車載機器 各種制御機器 etc 定義 厳密な定義があるわけではなく、製品に組込まれている汎用ではないディジタルシステムのことを言う。. 組込みシステムの歴史. 従来 電子回路で実現(もっと古くは機械式制御) プログラマビリティはあまりない 近年 マイクロコントローラ(マイコン)を用いたシステム構築 プログラマブルだが高度な処理は不可能 最近 高性能プロセッサを用いたシステム構築 高度な 信号処理を用いた複雑な処理の実現. - PowerPoint PPT Presentation

Citation preview

Page 1: 先端ソフトウェア工学 II

先端ソフトウェア工学 II

Page 2: 先端ソフトウェア工学 II

組込みシステムとは? 組込みシステムの例

携帯電話 ゲーム機 ディジタル家電 車載機器 各種制御機器 etc

定義 厳密な定義があるわけではなく、製品に組

込まれている汎用ではないディジタルシステムのことを言う。

Page 3: 先端ソフトウェア工学 II

組込みシステムの歴史 従来

電子回路で実現(もっと古くは機械式制御)

プログラマビリティはあまりない 近年

マイクロコントローラ(マイコン)を用いたシステム構築

プログラマブルだが高度な処理は不可能 最近

高性能プロセッサを用いたシステム構築 高度な信号処理を用いた複雑な処理の実現

PIC,AVR,H8,78K

SH,ARM,MIPS,PPC,Atom,Core2

Page 4: 先端ソフトウェア工学 II

アナログ制御

ガバナ

オペアンプ(積分回路 ,NECEL )

従来

出力

フィードバック制御系

基準入力要素

制御器 アクチュエータ

制御対象

フィードバック要素

調節部 操作部

目標値

検出部

外乱

-+

主フィードバック量

操作量制御信号動作信号

基準入力

制御装置

Page 5: 先端ソフトウェア工学 II

ディジタル制御

ディジタル演算器

D/A アクチュエータ

制御対象

A/D

目標値

外乱

出力

検出器

ディジタル制御系

ディジタル制御器

マイクロコントローラ・マイクロプロセッサの利用

Page 6: 先端ソフトウェア工学 II

マイコン・プロセッサの発達

近年 最近マイコン (H8/3052B, ルネサス )

高性能組込みプロセッサ (AM3517,TI)

Page 7: 先端ソフトウェア工学 II

組込みマルチコアプロセッサ

MP211,NEC

ARM11MPCore,ARM

ION,NVIDIA

Page 8: 先端ソフトウェア工学 II

コンフィギュラブルプロセッサ

FPGA (Field Programmable Gate Array): プログラマブルなロジックデバイス

PSoC (Programmable System-on-Chip): プロセッサ+プログラマブルアナログ回路

Xilinx FPGACypress PSoC

Page 9: 先端ソフトウェア工学 II

組込みシステムの一般的な構成

プロセッサ : ソフトウェアを実行。制御の中心。

メインメモリ : ソフトウェア実行時の主記憶。 DRAM あるいは SRAM で構成。

2 次記憶装置 : 主としてプログラムの保存に利用。電源を切っても記憶を保持。フラッシュやディスク。

周辺機器 : 画像処理 HW 、音声処理HW 、ネットワーク IF 等の様々な演算・処理デバイス。

各種 I/O: ディスプレイ、タッチパネル、キーボード等の入出力。

プロセッサ

メインメモリ

2 次記憶装置

周辺機器

各種 I/O

バス

Page 10: 先端ソフトウェア工学 II

組込み用システムボードの例

Armadillo-500 FX(Atmark Techno, Inc.) CPU: ARM1136JF-S OS: Linux2.6

Page 11: 先端ソフトウェア工学 II

組込みシステムの動作 電源投入 ( パワーオンリセット ) 自己診断 ブートローダ起動 OS 起動 アプリケーション起動

プロセッサ

メインメモリ

2 次記憶装置

周辺機器

各種 I/O

バス

Page 12: 先端ソフトウェア工学 II

自己診断 POST (Power On Self Test): 電源投

入時に実行されるシステムのテスト。プロセッサ、メモリ、周辺機器等の故障の有無を調べる。

BIST (Built in Self Test): プロセッサ、周辺機器等にあらかじめ組み込まれているテスト。システムによっては、 POST の際に BIST の機能を利用して故障の有無を調べる。

Page 13: 先端ソフトウェア工学 II

ブートローダ (boot loader)

オペレーティングシステムを起動する準備をするソフトウェアプログラム。IPL(Initial Program Loader) 、ブートストラップローダ (bootstrap loader)とも呼ばれる。

主な機能 プロセッサの初期化 メモリ設定 周辺デバイス初期化 プログラムのロードおよび実行

Page 14: 先端ソフトウェア工学 II

様々なブートローダ Redboot:eCos(Embedded

Configurable Operating System)ベースのブートローダ。 http://sources.redhat.com/redboot

LILO:LInux LOder 。 x86 Linux で良く使われていたブートローダ。

GRUB:GRand Unified Bootloader 。GNU の開発した高機能なブートローダ。最近、 x86 Linux で良く利用されている。

Page 15: 先端ソフトウェア工学 II

Redboot eCos の HAL (Hardware

Abstraction Layer) に基づく、信頼性が高く、コンパクトで、設定しやすく、移植性の高い組み込み向けブートローダ

Page 16: 先端ソフトウェア工学 II

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

( OS:Operating System )とは? :ハードウェア、メモリ等の計算機資源を管理し、アプリケーションプログラムに対するインターフェースを提供するソフトウェア。

組込み向け OS eCos ITRON VxWorks WindowsCE

Page 17: 先端ソフトウェア工学 II

PC における Linux の起動手順

BIOS  (ROM  ブートローダ )

ディスクブートローダ( GRUB )

Linux カーネル

初期化部

BIOS 部

ブートローダ部

Stage1

Stage1.5

Stage2

setup.S

head.S

main.c

CPU をリアルモードに設定し初期化開始

POST によるデバイス等の初期化ブートメディアを選択しブートローダに飛ぶ

Stage1.5 を見つけ制御を渡す

ファイルシステムを読む準備をしStage2 に移行Grub の本体を起動

ディスク、デバイス等の初期化およびプロテクトモードへの移行圧縮カーネルイメージの展開、ページテーブル初期化

割り込みテーブル初期化   システム時間初期化      コンソール初期化       仮想ファイルシステム初期化 etc

Page 18: 先端ソフトウェア工学 II

BIOS とは Basic Input

Output System ハードウェアデバイ

スとの抽象度の高いソフトウェアインターフェース

代表例 VGA BIOS SCSI BIOS ACPI BIOS

Page 19: 先端ソフトウェア工学 II

x86 プロセッサの動作モード

リアルモード 8086互換モード 実アドレス 20 ビットのアドレス空間にアクセス可能

( 1M バイト) プロテクトモード

32 ビットリニアアクセス空間 仮想記憶の提供 アクセス制御の実現

セグメント毎の読み取り・書き込み・実行の設定

ユーザ・システム・カーネルの区別

Page 20: 先端ソフトウェア工学 II

ソフトウェアの階層構造 演算を実行するハードウェアをソフト

ウェアで階層的に抽象化

アプリケーションソフトウェア

システムソフトウェア

ハードウェア

ユーザが利用するソフトウェア

オペレーティングシステム、コンパイラ等

Page 21: 先端ソフトウェア工学 II

具体例 (Android)

Page 22: 先端ソフトウェア工学 II

ハードウェアへのアクセス OS がない場合

仕様 :0100 が 0 なら LED消灯、 1 なら点灯。リセット値は 0 。 

プロセッサ

メインメモリ

LED

0

0000

00ff0100

メインメモリ

LED

Page 23: 先端ソフトウェア工学 II

ハードウェアへのアクセス OS がない場合

直接 0100番地を読み書き 

プロセッサ

メインメモリ

LED

1

0000

00ff0100

メインメモリ

LED点灯

int * led;led=(int *) LED_ADDR;*led=1;

Page 24: 先端ソフトウェア工学 II

ハードウェアへのアクセス OS がない場合

直接 0100番地を読み書き 

プロセッサ

メインメモリ

LED

0

0000

00ff0100

メインメモリ

LED

int * led;led=(int *) LED_ADDR;*led=0;

消灯

Page 25: 先端ソフトウェア工学 II

カーネル空間

ハードウェアへのアクセス OS がある場合

デバイスの存在するアドレス空間がカーネルによって管理される 

プロセッサ

メインメモリ

LED

ユーザ空間

0

0000

00ff0100

メインメモリ

LED

int * led;led=(int *) LED_ADDR;*led=1;

OS がこのアクセスを許可しない

Page 26: 先端ソフトウェア工学 II

カーネル空間

ハードウェアへのアクセス OS がある場合

解 1:root 権限で動かす。 

プロセッサ

メインメモリ

LED

ユーザ空間

0

0000

00ff0100

メインメモリ

LED

Page 27: 先端ソフトウェア工学 II

カーネル空間

ハードウェアへのアクセス OS がある場合

解 1:root 権限で動かす。 

プロセッサ

メインメモリ

LED

ユーザ空間

1

0000

00ff0100

メインメモリ

LED

int * led;led=(int *) LED_ADDR;*led=1;

root権限だとアクセス可

点灯

Page 28: 先端ソフトウェア工学 II

カーネル空間

ハードウェアへのアクセス OS がある場合

OS が無い場合と同様にアクセス可能だが、デバイスへのアクセスを要求するすべてのプロセスに root権限が必要となり問題。 プロセッサ

メインメモリ

LED

ユーザ空間

1

0000

00ff0100

メインメモリ

LED点灯

Page 29: 先端ソフトウェア工学 II

カーネル空間

ハードウェアへのアクセス OS がある場合

解 2: デバイスドライバによってカーネル管理下のデバイスにアクセス

プロセッサ

メインメモリ

LED

ユーザ空間

0

0000

00ff0100

メインメモリ

LED

ドライバ

int fd;fd=open(“led”,O_RDWR);write(fd,1);

write() read()

Page 30: 先端ソフトウェア工学 II

カーネル空間

ハードウェアへのアクセス OS がある場合

解 2: デバイスドライバによってカーネル管理下のデバイスにアクセス

プロセッサ

メインメモリ

LED

ユーザ空間

1

0000

00ff0100

メインメモリ

LED

ドライバ

int fd;fd=open(“led”,O_RDWR);write(fd,1);

点灯

注 1: 実際には、アドレス変換を伴う場合が殆どであり、こんなに単純ではない。注 2:write の正しい使い方は man を参照。

Page 31: 先端ソフトウェア工学 II

まとめ 組込みシステムの歴史

プロセッサの発達 組込みシステムの構成と動作

ブートローダ 起動手順の概要

ソフトウェアの階層構造 ハードウェアへのアクセス例

Page 32: 先端ソフトウェア工学 II

プロセッサの仕組み

Page 33: 先端ソフトウェア工学 II

参考書 コンピュータの構成と設計 ~ ハードウ

エアとソフトウエアのインタフェース 第 3版 (上 ) (単行本 ) デイビッド・A. パターソン (著 ), ジョン・L. ヘネシー (著 ), David A. Patterson (原著 ), John L. Hennessy (原著 ), 成田 光彰 (翻訳 )

Page 34: 先端ソフトウェア工学 II

プロセッサとは? 演算処理装置のこと。一般には、メモ

リ上に保持された命令を実行する。 CPU や MPU とほぼ同義。 CPU:Central Processing Unit の略。 中央処理装置。

MPU:Micro Processing Unit の略。半導体製品として 1 チップであるかその流れをくんでいる処理装置に対して使う。 CPU より広義。

Page 35: 先端ソフトウェア工学 II

計算機の歴史 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

Page 36: 先端ソフトウェア工学 II

Von Neumann Machine 広く使われているプロセッサのモデル。

Memory

ControlUnit

Arithmetic Logic UnitAccumulat

or Output

Input

計算能力は Turing Machine と等価

Page 37: 先端ソフトウェア工学 II

そもそも計算って何?(補足あるいは復習 )

Page 38: 先端ソフトウェア工学 II

コンピュータとその抽象化 ディジタルコンピュータ

パーソナルコンピュータ 携帯電話 ゲーム メインフレーム スーパーコンピュータ

コンピュータでできることは?コンピュータの本質って何?種類による違いは?

抽象的な計算機(コンピュータと同じ意味)を定義することによって、計算機の本質を明らかにする

Page 39: 先端ソフトウェア工学 II

計算の例 以下の計算を例として考える

3と4の和を求める 3+4= 7

与えられた0と1からなる文字列が 01 の繰り返しか否かを判定する

01101100011  →  × 0101010101  → ○

任意の 0以上の整数 n に対し、与えられた 0 と 1 からなる文字列が    という形式であるか否かを判定する

nn10

Page 40: 先端ソフトウェア工学 II

計算機による解法 組み合わせ回路 :3+4のような加算

は組み合わせ回路 * である加算器で実現可能

* 組み合わせ回路 : 現在の入力のみによって出力が定まる回路。詳細は論理回路の項目にて

100011

+111

3→0114→100

2進数表現2進数による加算

100

011111

加算器による計算

Page 41: 先端ソフトウェア工学 II

計算機による解法 有限オートマトン : 有限状態機械とも

呼ばれ、有限個の状態を持つ数学的なモデル。

1q 2q

3q

0

101

0,101 の連続を受理する有限オートマトン

終了状態

状態

Page 42: 先端ソフトウェア工学 II

計算機による解法 任意の自然数 n に対し、与えられた 0 と 1

からなる文字列が    という形式で表現できるか否かを判定する 有限オートマトンを使ってみる

入力 n の数に合わせて状態の数を増やしたい

有限オートマトンでは実現できない。計算の途中結果を保持する機構が必要

nn10

Page 43: 先端ソフトウェア工学 II

プッシュダウンオートマトン

有限オートマトンにプッシュ /ポップによるアクセスが可能なスタックを付加。

制御部

( 有限オートマトン )プッシュ /ポップ スタック

入力

Page 44: 先端ソフトウェア工学 II

プッシュダウンオートマトン

   の受理nn10

1q

4q

2q

3q

$, 0,0

0,1

0,1

,$cba , : 入力から a を読む時、スタックの先頭にある

b を c に置き換える。 b が ε (空列)の場合、 c をスタックに積むのみであり、 c が ε の場合スタックから b を読みだすのみである。

Page 45: 先端ソフトウェア工学 II

Turing 機械 有限オートマトンやプッシュダウン

オートマトンよりも能力の高い計算モデル Turing 機械はテープに対し書き込みと読

み出しのどちらも可能 読み書きヘッドは左右のどちらにも動く テープは無限長 Turing 機械は拒否や受理に対応する特別

な状態に入るとすぐに停止する制御部

・・・

Turing 機械

Page 46: 先端ソフトウェア工学 II

計算能力の関係

有限オートマトン プッシュ

ダウンオートマトン

Turing機械

Page 47: 先端ソフトウェア工学 II

有限オートマトンの形式的定義

定義 : 有限オートマトン (finite automaton) は 5個組           である。   は状態と呼ばれる有限集合   はアルファベットと呼ばれる有限集合             は遷移関数       は開始状態       は受理状態の集合

),,,,( 0 FqQ Q

QQ :Qq 0QF

Page 48: 先端ソフトウェア工学 II

プッシュダウンオートマトンの形式的な定義

プッシュダウンオートマトンは 6個組       である。ここで、       は全て有限集合であり、   は状態の集合   は入力アルファベット   はスタックアルファベット   は遷移関数   は開始状態   は受理状態の集合とする。

),,,,,( 0 FqQ FQ ,,,

Q

QF

Q: )( QP0q

Page 49: 先端ソフトウェア工学 II

Turing 機械の形式的な定義 Turing 機械は 7個組          

       である。ただし、    は全て有限集合であり、以下の通りである。   は状態の集合   は特別な空白文字 を含まない入力アルファ⊔

ベット  は   かつ    であるようなテープアル⊔

ファベット                   は遷移関数

     は開始状態        は受理状態        は          であるよう

な拒否状態

),,,,,,( rejectaccept0 qqqQ ,,Q

Q

}RL,{: QQ

Qq 0Qq accept

Qq reject rejectaccept qq

Page 50: 先端ソフトウェア工学 II

計算理論の参考文献 計算理論の基礎 ,Michael Sipser 著 ,   ISBN:4-320-02948-8

計算モデル論入門 - チューリング機械からラムダ計算へ -,井田哲雄・浜名誠著 ,   ISBN:4-7819-1135-8

Page 51: 先端ソフトウェア工学 II

Von Neumann Machine 広く使われているプロセッサのモデル。

Memory

ControlUnit

Arithmetic Logic UnitAccumulat

or Output

Input

Page 52: 先端ソフトウェア工学 II

Memory ビット列を保存する記憶

装置。アドレスでビット列の場所を指定し、その値がビット列。

ロード、ストアと呼ばれる操作によってメモリアクセスを行う。 ロード : メモリから値を読む

ストア : メモリに値を書き込む

メモリの例 (8 ビット )

0123456789 00000000

000000010000001000000011000001000000010100000110000001110000100000001001

Page 53: 先端ソフトウェア工学 II

ALU および Control Unit ALU (Arithmetic Logic Unit)

算術論理演算装置。演算結果を一時的に保存する累算器を含んでいる。

Control Unit 命令の解釈および実行を行う。

Page 54: 先端ソフトウェア工学 II

命令の実行 右図の例を考える。

0番地の命令から実行 0

123456789 00000001

0000001000000000000000000000000000000000000000007番地にストア

8番地を加算9番地をロード

ControlUnit

ALU

Memory

accumulator

Page 55: 先端ソフトウェア工学 II

命令の実行 右図の例を考える。

9番地をロード0123456789 00000001

0000001000000000000000000000000000000000000000007番地にストア

8番地を加算9番地をロード

ControlUnit

ALU

Memory

accumulator

Page 56: 先端ソフトウェア工学 II

命令の実行 右図の例を考える。

9番地をロード0123456789 00000001

0000001000000000000000000000000000000000000000007番地にストア

8番地を加算9番地をロード

ControlUnit

ALU

Memory

accumulator

Page 57: 先端ソフトウェア工学 II

命令の実行 右図の例を考える。

9番地をロード0123456789 00000001

0000001000000000000000000000000000000000000000007番地にストア

8番地を加算9番地をロード

ControlUnit

ALU00000001

Memory

accumulator

Page 58: 先端ソフトウェア工学 II

命令の実行 右図の例を考える。

1番地の命令をロード (正しくはフェッチ )

0123456789 00000001

0000001000000000000000000000000000000000000000007番地にストア

8番地を加算9番地をロード

ControlUnit

ALU00000001

Memory

accumulator

Page 59: 先端ソフトウェア工学 II

命令の実行 右図の例を考える。

8番地を加算0123456789 00000001

0000001000000000000000000000000000000000000000007番地にストア

8番地を加算9番地をロード

ControlUnit

ALU00000001

Memory

accumulator

Page 60: 先端ソフトウェア工学 II

命令の実行 右図の例を考える。

8番地を加算0123456789 00000001

0000001000000000000000000000000000000000000000007番地にストア

8番地を加算9番地をロード

ControlUnit

ALU00000011

Memory

accumulator

00000001+00000010=00000011

Page 61: 先端ソフトウェア工学 II

命令の実行 右図の例を考える。

3番地の命令を実行0123456789 00000001

0000001000000000000000000000000000000000000000007番地にストア

8番地を加算9番地をロード

ControlUnit

ALU00000011

Memory

accumulator

Page 62: 先端ソフトウェア工学 II

命令の実行 右図の例を考える。

3番地の命令を実行0123456789 00000001

0000001000000000000000000000000000000000000000007番地にストア

8番地を加算9番地をロード

ControlUnit

ALU00000011

Memory

accumulator

Page 63: 先端ソフトウェア工学 II

命令の実行 右図の例を考える。

3番地の命令を実行0123456789 00000001

0000001000000011000000000000000000000000000000007番地にストア

8番地を加算9番地をロード

ControlUnit

ALU00000011

Memory

accumulator

Page 64: 先端ソフトウェア工学 II

近代的なプロセッサの基本構造

PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15汎用レジスタが増えた程度で基本は同じ

Page 65: 先端ソフトウェア工学 II

命令の種類 ロード / ストア命令

メモリとレジスタのアクセス 算術演算命令

+、ー、*、 ÷ 等の演算 論理演算命令

and 、 or 、 xor 等の演算 分岐命令

プログラムカウンタの書き換えによる制御の変更

Page 66: 先端ソフトウェア工学 II

プロセッサの基本的な動作

Page 67: 先端ソフトウェア工学 II

リセット

0

0

0

0

0

0

0

00PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

Page 68: 先端ソフトウェア工学 II

0番地の命令のフェッチ

0

0

0

0

0

0

0

00PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

注 : 一般にはリセット時に飛ぶアドレスが 0番地とは限らない

Page 69: 先端ソフトウェア工学 II

命令実行 &PC インクリメント

0

0

0

0

0

0

0

01PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

Page 70: 先端ソフトウェア工学 II

命令実行 &PC インクリメント

0

0

0

0

0

0

0

02PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

Page 71: 先端ソフトウェア工学 II

分岐命令

Page 72: 先端ソフトウェア工学 II

命令実行 &PC インクリメント

0

0

0

0

0

0

0

03PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

Page 73: 先端ソフトウェア工学 II

命令実行 &PC インクリメント

0

0

0

0

0

0

0

04PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

Page 74: 先端ソフトウェア工学 II

分岐命令

0

0

0

0

0

0

0

04PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

命令 :PC に 0 を代入

Page 75: 先端ソフトウェア工学 II

分岐命令

0

0

0

0

0

0

0

00PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

PC に 0 を代入

Page 76: 先端ソフトウェア工学 II

0番地の命令のフェッチ

0

0

0

0

0

0

0

00PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

Page 77: 先端ソフトウェア工学 II

ロード命令

Page 78: 先端ソフトウェア工学 II

ロード命令

0

0

0

0

0

0

0

01PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

Page 79: 先端ソフトウェア工学 II

ロード命令

0

0

0

0

0

0

0

01PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

命令 :r0 に 16番地のデータをロード

Page 80: 先端ソフトウェア工学 II

ロード命令

1

0

0

0

0

0

0

0

01PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

命令 :r0 に 16番地のデータをロード

Page 81: 先端ソフトウェア工学 II

ロード命令

1

0

0

0

0

0

0

01PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

Page 82: 先端ソフトウェア工学 II

命令実行 &PC インクリメント

1

0

0

0

0

0

0

02PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

Page 83: 先端ソフトウェア工学 II

命令実行 &PC インクリメント

1

0

0

0

0

0

0

03PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

Page 84: 先端ソフトウェア工学 II

ロード命令

2

1

0

0

0

0

0

0

03PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

命令 :r1 に 17番地のデータをロード

Page 85: 先端ソフトウェア工学 II

ロード命令

1

2

0

0

0

0

0

01PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

Page 86: 先端ソフトウェア工学 II

算術演算命令

Page 87: 先端ソフトウェア工学 II

命令実行 &PC インクリメント

1

2

0

0

0

0

0

04PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

Page 88: 先端ソフトウェア工学 II

命令実行 &PC インクリメント

1

2

0

0

0

0

0

04PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

命令 :r2 に r0 と r1 を加えて代入

Page 89: 先端ソフトウェア工学 II

命令実行 &PC インクリメント

1

2

0

0

0

0

0

04PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

命令 :r2 に r0 と r1 を加えて代入

Page 90: 先端ソフトウェア工学 II

命令実行 &PC インクリメント

1

2

3

0

0

0

0

04PC命令デコーダ

メモリ

メモリバス

r0

r1

r2

r3

r4

r5

r6

r7

ALU

演算処理

制御処理

0

7

15

Page 91: 先端ソフトウェア工学 II

プロセッサ内での命令の表現

Page 92: 先端ソフトウェア工学 II

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

Page 93: 先端ソフトウェア工学 II

R形式命令 op:命令の種類を表現。オペコード

( opcode )と呼ばれる。 rs:第一ソースオペランドレジスタ。

$s0 、 $s1 、…、 $s7 rt:第二ソースオペランドレジスタ。

$t0 、 $t1 、… $t7 rd: ディスティネーションレジスタ。 shamt: シフト量。 funct: ある op で表現される命令の機

能の区別をする表現。機能コードと呼ばれる。

op rs rt rd shamt funct

Page 94: 先端ソフトウェア工学 II

I形式命令 op:命令の種類を表現。オペコード

( opcode )と呼ばれる。 rs: ソースオペランドレジスタ。

$s0 、 $s1 、…、 $s7 rt: オペランドレジスタ。

$t0 、 $t1 、… $t7 (ロード命令の場合はディスティネーション)

op rs rt constant or address

Page 95: 先端ソフトウェア工学 II

命令の例 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

Page 96: 先端ソフトウェア工学 II

命令の例 j PC=(((PC+4)&f0000000)|(a<<2))  J 形式

000010aaaaaaaaaaaaaaaaaaaaaaaaaa jal PC=(((PC+4)&f0000000)|(a<<2)), $ra=PC+8 J 形式

000011aaaaaaaaaaaaaaaaaaaaaaaaaa

Page 97: 先端ソフトウェア工学 II

命令セットの種類 CISC (Complex Instruction Set

Computer): 複雑な命令セット。一般に命令長は可変で、多くの形式がある。 IA-32(x86)

RISC (Reduced Instruction Set Computer): 2-3 の形式をもった固定長命令セット。 SPARC(Scalable Processor

ARChitecture) MIPS ARM(Advanced Risc Machine)

Page 98: 先端ソフトウェア工学 II

プロセッサ内での数値の表現

2進数で表現 1   ->   1 3   ->   11 11   -> 1011

一般に n bit の場合

n

i

iix

1

12

123 xxxxx in

負の数をどう表現するのか?

符号なし( unsigned )

Page 99: 先端ソフトウェア工学 II

負の数の表現 2 の補数 : n ビットの数 a があると

すると、以下で定義されるのが 2 の補数。

an 12具体例

0011   -> 10000 – 00011 = 01101簡単な求め方

0011 1100 1101

2 の補数

最上位ビットは無視

全ビット反転 1 を加える

Page 100: 先端ソフトウェア工学 II

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

Page 101: 先端ソフトウェア工学 II

加算器の実現例

4 ビットの整数 A (A3A2A1A0) と B (B3B2B1B0) の加算を考える。和はS(S3S2S1S0) とする。

全加算器全加算器全加算器全加算器

B0B1B2B3 A0A1A2A3

C0 S0C1 S1C2 S2C3 S3

0

全加算器 : 入力 A,B および桁上げ入力 C から A+B+C を計算し、加算結果および桁上げ出力を出力する加算器

Page 102: 先端ソフトウェア工学 II

全加算器の動作

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

全加算器の真理値表

Page 103: 先端ソフトウェア工学 II

全加算器の構成例

ABC

S

Cout

Page 104: 先端ソフトウェア工学 II

加算器の構成例

ABC S

Cout

ABC S

Cout

ABC S

Cout

ABC S

Cout

Page 105: 先端ソフトウェア工学 II

加算器の実現例

4 ビットの整数 A (A3A2A1A0) と B (B3B2B1B0) の加算を考える。和はS(S3S2S1S0) とする。

全加算器全加算器全加算器全加算器

B0B1B2B3 A0A1A2A3

C0 S0C1 S1C2 S2C3 S3

0

全加算器 : 入力 A,B および桁上げ入力 C から A+B+C を計算し、加算結果および桁上げ出力を出力する加算器

Page 106: 先端ソフトウェア工学 II

加算器の実現例

4 ビットの整数 A (A3A2A1A0) と B (B3B2B1B0) の加算を考える。和はS(S3S2S1S0) とする。

全加算器全加算器全加算器全加算器

B0B1B2B3 A0A1A2A3

C0 S0C1 S1C2 S2C3 S3

1

全加算器 : 入力 A,B および桁上げ入力 C から A+B+C を計算し、加算結果および桁上げ出力を出力する加算器

S=A-B

加算器と減算器が同じ構成で

実現可能

Page 107: 先端ソフトウェア工学 II

その他の演算 乗算 除算 論理演算

参考書参照

Page 108: 先端ソフトウェア工学 II

実数の表現ー浮動小数点表現 小数の例

アボガドロ数  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 ( 基数 ) ( 指数 )

Page 109: 先端ソフトウェア工学 II

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

浮動小数点数の演算は参考書参照

Page 110: 先端ソフトウェア工学 II

プロセッサでの命令実行手順

命令フェッチ (IF) 主記憶からの命令の取得

命令デコード (ID) 命令の解釈

命令実行 (EX) 命令の実行

メモリアクセス (MA) 主記憶へのアクセス

ライトバック (WB) レジスタへのアクセス

Page 111: 先端ソフトウェア工学 II

プロセッサの処理サイクル シングルサイクル方式

1 サイクルで IF から WB までのすべてを実行

最も処理時間を要する命令の速度以上に高速に動作させることはできない(全ての命令が 1 サイクルで動作する必要があるから)

マルチサイクル方式 1つの命令を複数のサイクルで実行

IF ID EX MA

WB

Page 112: 先端ソフトウェア工学 II

パイプライン処理 スループットを向上させる。

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

実現するには様々な工夫が必要

Page 113: 先端ソフトウェア工学 II

パイプライン処理の障害 パイプライン・ハザード

構造ハザード : 実行される命令の組み合わせにハードウェアが対応できないために発生するハザード

データ・ハザード :他の命令が終了するのを待つ必要がある場合に発生するハザード

制御ハザード : ある命令の実行に関する判断に実行中の他の命令の結果が必要な場合に発生するハザード

Page 114: 先端ソフトウェア工学 II

構造ハザード

IF ID EX MA

WBIF ID EX MA

WBIF ID EX MA

WBIF ID EX MA

WB

PC

Memory

Instructiondecoder

Instructionregister

ALU

Registers

CPU

Page 115: 先端ソフトウェア工学 II

構造ハザード

IF ID EX MA

WBIF ID EX MA

WBIF ID EX MA

WBIF ID EX MA

WB

PC

Memory

Instructiondecoder

Instructionregister

ALU

Registers

CPU

Page 116: 先端ソフトウェア工学 II

構造ハザード

IF ID EX MA

WBIF ID EX MA

WBIF ID EX MA

WBIF ID EX MA

WB

PC

Memory

Instructiondecoder

Instructionregister

ALU

Registers

CPU

Page 117: 先端ソフトウェア工学 II

構造ハザード

IF ID EX MA

WBIF ID EX MA

WBIF ID EX MA

WBIF ID EX MA

WB

PC

Memory

Instructiondecoder

Instructionregister

ALU

Registers

CPU

Page 118: 先端ソフトウェア工学 II

構造ハザード

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競合

Page 119: 先端ソフトウェア工学 II

構造ハザード

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: ストールさせる

Page 120: 先端ソフトウェア工学 II

構造ハザード

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: ストールさせる

Page 121: 先端ソフトウェア工学 II

構造ハザード

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:命令メモリとデータメモリを分ける

Page 122: 先端ソフトウェア工学 II

構造ハザード

IF ID EX MA

WBIF ID EX MA

WBIF ID EX MA

WBIF ID EX MA

WB

PC

命令メモリ

Instructiondecoder

Instructionregister

ALU

Registers

CPU 回避策 2:命令メモリとデータメモリを分ける

データメモリ

ハーバードアーキテクチャ

Page 123: 先端ソフトウェア工学 II

データ・ハザード

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

Page 124: 先端ソフトウェア工学 II

データ・ハザード

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

Page 125: 先端ソフトウェア工学 II

データ・ハザード

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

Page 126: 先端ソフトウェア工学 II

データ・ハザード

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

Page 127: 先端ソフトウェア工学 II

データ・ハザード

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 サイクル無駄

Page 128: 先端ソフトウェア工学 II

データ・ハザード

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

回避策 : フォワーディング

Page 129: 先端ソフトウェア工学 II

データ・ハザード

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 に送る

Page 130: 先端ソフトウェア工学 II

データ・ハザード

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

Page 131: 先端ソフトウェア工学 II

制御ハザード

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

Page 132: 先端ソフトウェア工学 II

制御ハザード

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

Page 133: 先端ソフトウェア工学 II

制御ハザード

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

Page 134: 先端ソフトウェア工学 II

制御ハザード

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

Page 135: 先端ソフトウェア工学 II

制御ハザード 制御ハザードの回避法その 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ストール

ストールのサイクル数はアーキテクチャ依存

Page 136: 先端ソフトウェア工学 II

制御ハザード 制御ハザードの回避法その 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 において分岐先アドレスを計算できるアーキテクチャの場合

Page 137: 先端ソフトウェア工学 II

制御ハザード

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: 分岐予測

常に分岐が不成立と予測

Page 138: 先端ソフトウェア工学 II

制御ハザード

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: 分岐予測

常に分岐が不成立と予測

Page 139: 先端ソフトウェア工学 II

制御ハザード

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: 分岐予測

常に分岐が不成立と予測

Page 140: 先端ソフトウェア工学 II

制御ハザード 制御ハザードの回避法その 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 という。

Page 141: 先端ソフトウェア工学 II

制御ハザード

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

Page 142: 先端ソフトウェア工学 II

制御ハザードの回避法その 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

Page 143: 先端ソフトウェア工学 II

制御ハザードの回避法その 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

確定したアドレスの命令を実行

Page 144: 先端ソフトウェア工学 II

割込みと例外 MIPS

割込み : プロセッサ外部で発生する予期せぬ事象

例外 : プロセッサ内で発生する予期せぬ事象

PowerPC 割込み :異常な事象の発生 例外 : 制御の流れの変化

IA-32: すべて割込み

Page 145: 先端ソフトウェア工学 II

例外への対処法 (MIPS) 例外の例

未定義命令の実行 算術オーバーフロー

対処法 OS への制御の移行

EPC(Exception Program Counter) に問題命令のアドレスを退避

例外理由の通知 Cause レジスタに原因を記録 ベクタ割り込みの利用

Page 146: 先端ソフトウェア工学 II

おわり