Presentation is loading. Please wait.

Presentation is loading. Please wait.

勉強会その1    2016/4/25 10 8分35秒 コンピュータアーキテクチャとは? コンピュータの構成 命令の実行.

Similar presentations


Presentation on theme: "勉強会その1    2016/4/25 10 8分35秒 コンピュータアーキテクチャとは? コンピュータの構成 命令の実行."— Presentation transcript:

1 勉強会その1    2016/4/25 10 8分35秒 コンピュータアーキテクチャとは? コンピュータの構成 命令の実行

2 コンピュータアーキテクチャとは? コンピュータ? 自動計算機→命令を与えれば自動で計算を行う機械 サーバ ラップトップPC デジカメ
 コンピュータアーキテクチャとは? コンピュータ? 自動計算機→命令を与えれば自動で計算を行う機械 サーバ ラップトップPC デジカメ デスクトップPC タブレット ゲーム機

3 コンピュータアーキテクチャとは? アーキテクチャ? もともとは建築の用語 要すると どのような構成要素で出来ているか
 コンピュータアーキテクチャとは? アーキテクチャ? もともとは建築の用語 要すると どのような構成要素で出来ているか どのような仕組みになっているか

4 コンピュータの構成要素 自分のPCの構成を見てみましょう コントロールパネル→システムとセキュリティ→システム フォルダ画面→PC OS
 コンピュータの構成要素 自分のPCの構成を見てみましょう コントロールパネル→システムとセキュリティ→システム OS プロセッサ メモリ フォルダ画面→PC ディスク ドライブ

5 ビット?バイト?ギガバイト? データの基本単位 とてもややこしい話 1Mbps (bit per second) = ? 1,000kbps
 ビット?バイト?ギガバイト? データの基本単位 1bit = 0 or 1, 2bit = 00 or 01 or 10 or 11 1bと小文字bで略す 1byte = 8bit (ex ) → 0~255まで表現できる 1Bと大文字Bで略す とてもややこしい話 情報量の単位 1K = 1,024 ( K = ) 1M = 1,024K ( K = ) 1G = 1,024M ( K = ) 1T = 1,024G ( K = ) 国際単位系(SI)の単位 1k = 1,000 ( K = ) 1M = 1,000k ( K = ) 1G = 1,000M ( K = ) 1T = 1,000G ( K = ) 1Ki(kibi) 1Mi(mibi) 1Gi(gibi) 1Ti(tibi) 1Mbps (bit per second) = ? 1,000kbps

6 コンピュータの構成要素 実際に見てみましょう ネットワークアダプタ メインメモリ プロセッサ USB※1 モジュール GPU※2
 コンピュータの構成要素 実際に見てみましょう ネットワークアダプタ メインメモリ プロセッサ USB※1 モジュール GPU※2 DVDドライブ マザーボード ※1 Universal Serial Bus の略 ※2 Graphic Processing Unit の略 電源ユニット ハードディスクドライブ

7 コンピュータの構成要素 自分のPCの構成を見てみましょう コントロールパネル→システムとセキュリティ→システム フォルダ画面→PC OS
 コンピュータの構成要素 自分のPCの構成を見てみましょう コントロールパネル→システムとセキュリティ→システム OS プロセッサ メモリ フォルダ画面→PC ディスク ドライブ

8 コンピュータの構成要素 ハードウェア ソフトウェア 物理的実体を持つ機械部品 CPU, メモリ, マウスなど
 コンピュータの構成要素 ハードウェア 物理的実体を持つ機械部品 CPU, メモリ, マウスなど ソフトウェア ハードウェアを動かすためのプログラムやデータの集 まり。物理的実体を持たない部分 OS, アプリケーションなど

9 演算・制御装置 (プロセッサ) Central Processing Unit
 ハードウェアの構成 コンピュータの構造(5大装置) 演算・制御装置 (プロセッサ) Central Processing Unit 入力装置 (マウス)(キーボード) 主記憶装置 (メモリ) 出力装置 (ディスプレイ) 補助記憶装置 (ハードディスク)

10 プロセッサCPU(Central Processing Unit)
 演算装置・制御装置 プロセッサCPU(Central Processing Unit) 命令の実行(データの処理)を行う コンピュータ全体の性能や消費電力を左右する ダイとは? シリコンウエハー上には数十個の半導体が作られる。そこから一枚に切り離した半導体チップをダイと呼ぶ コアとは? 実際に処理を行うところ キャッシュとは? メモリよりも更に小規模だが高速な読み書きが可能 [ Intel Core i Haswellのダイ]

11 主記憶装置 メモリ 日本語にすると主記憶装置 以下のデータを格納
 主記憶装置 メモリ DRAMチップ 日本語にすると主記憶装置 以下のデータを格納 一部のプログラム プログラムが必要とするデータ DRAM(Dynamic Random Access Memory)が一般的 コンデンサに電荷を蓄える・蓄えないで0と1を表現 揮発性 → 電源を切るとすべてのデータが失われる 揮発性メモリ SRAM(Static Random Access Memory) 回路のループにより0と1を表現 DRAMよりも高速だが小容量かつ高価 キャッシュ等に用いられる

12 補助記憶装置 ディスク 大容量&不揮発性のメモリ すべてのデータを格納
 補助記憶装置 ディスク 大容量&不揮発性のメモリ 現在は数TBですら一般的 電源を切ってもデータが失われない すべてのデータを格納 プログラムそのものや実行に必要なデータは,ディスクから メインメモリに移して使用 HDD(Hard Disc Drive)やSSD(Solid State Drive)

13 記憶装置の種類と役割 記憶装置の階層構造 レジスタ アクセス 速度 バイト オーダ CPU内 キャッシュ ~ns B 1ns~ メモリ
 記憶装置の種類と役割 記憶装置の階層構造 バイト オーダ アクセス 速度 CPU内 レジスタ キャッシュ メモリ ディスク B ~ns KB~MB 1ns~ GB 100ns~ TB ms~

14 命令とプログラム言語、機械語 プログラム言語 機械語 よく耳にするC言語とかJavaとか 高水準言語(高級言語)と呼ばれる
 命令とプログラム言語、機械語 プログラム言語 よく耳にするC言語とかJavaとか 高水準言語(高級言語)と呼ばれる 人が理解しやすい命令シーケンス プロセッサは理解できない 変換が必要(コンパイル) 機械語 プロセッサの理解できる命令シーケンス 0と1による2進数の数値列

15 プログラムの変換 プログラム言語→アセンブリ言語→機械語 高水準言語 メモリ 命令 コンパイル 低水準言語 アセンブル
 プログラムの変換 プログラム言語→アセンブリ言語→機械語 高水準言語 メモリ lw $4, 0($1) 命令 lw $5, 4($1) add $2, $4, $5 コンパイル 低水準言語 アセンブル

16 命令とデータの格納 プログラム内蔵方式 ノイマン型アーキテクチャ ハーバード型アーキテクチャ
 命令とデータの格納 プログラム内蔵方式 ノイマン型アーキテクチャ ハーバード型アーキテクチャ メモリ メモリ lw $4, 0($1) 共用バス lw $4, 0($1) 命令バス lw $5, 4($1) lw $5, 4($1) add $2, $4, $5 add $2, $4, $5 命令 データ メモリ データバス Data 1 Data 1 Data 2 Data 2 命令とデータを同一メモリに格納 作りが単純 命令とデータのアクセス競合により フォンノイマンボトルネックが顕著 命令とデータを別々のメモリに格納 作りは複雑 遅延(latency)の隠ぺいが可能 現在はノイマン型にハーバードを取り入れたハイブリッド型

17 命令の格納 アドレスとプログラムカウンタ データとアドレス 命令のアドレス プログラムカウンタ(PC) データ: 物 (ex. 電通大)
 命令の格納 アドレスとプログラムカウンタ データとアドレス データ: 物 (ex. 電通大) アドレス: 場所 (ex. 調布市調布ヶ丘1-5-1) 命令のアドレス プログラム内蔵方式では 命令もメモリに格納 命令にもアドレスが存在 プログラムカウンタ(PC) プロセッサ内にある小さなメモリ 実行する命令のアドレスを示す プロセッサはPCにしたがって命令をメモリから取得 アドレス メモリ プロセッサ add $t1, $s1, $s2 add $t1, $s1, $s2 PC 8 4 4 add $t2, $s3, $s4 add $t2, $s3, $s4 8 sub $s0, $t2, $t3 sub $s0, $t2, $t3 64 100 68 10 72 500

18 プログラムの変換 プログラム言語→アセンブリ言語→機械語 高水準言語 メモリ 命令 コンパイル 低水準言語 アセンブル
 プログラムの変換 プログラム言語→アセンブリ言語→機械語 高水準言語 メモリ lw $4, 0($1) 命令 lw $5, 4($1) add $2, $4, $5 コンパイル 低水準言語 アセンブル

19 CPUと命令セットアーキテクチャ 命令セットアーキテクチャ CPUによってできる命令が違う(機械語も異なる)
さまざまな命令セットアーキテクチャが存在 例: x86, MIPS, ARM, POWER, SPARC, など

20 命令セットアーキテクチャの例 MIPS命令セットアーキテクチャ 主に組み込みシステムで使われていた 特徴
 命令セットアーキテクチャの例 MIPS命令セットアーキテクチャ 主に組み込みシステムで使われていた 例: ルータやプリンタ,NINTENDO64, PS, PS2 など 特徴 命令長を 32 ビットに統一 32 本の汎用レジスタと32 本の浮動小数点レジスタ レジスタの幅は 32 ビット(のちに 64 ビット)

21 命令の実行 レジスタとは レジスタ 命令の実行とレジスタ プログラムの基本構造 プロセッサ内にある高速&小容量のメモリ
 命令の実行 レジスタとは メモリ プロセッサ PC レジスタ プロセッサ内にある高速&小容量のメモリ データを一時的に格納する場所 同時に格納できるデータは高々 64個程 命令の実行とレジスタ ほとんどの命令はレジスタに対して処理を行う メモリ上のデータに対する処理は低速なため プログラムの基本構造 メモリ上のデータの値をレジスタにコピー レジスタの値を使って演算を繰り返す 結果が入ったレジスタの値をメモリに書き戻す レジスタ lw $s1, 0($t0) lw $s2, 4($t0) lw $s3, 8($t0) lw $s4, 16($t0) add $t1, $s1, $s2 add $t2, $s3, $s4 sub $s0, $t1, $t2 sw $s0, 16($t0) レジスタ

22 命令とプログラム 命令の基本構造 オペコード オペランド 処理の種類 例: add, sub, lw ,swなど 処理の対象
 命令とプログラム 命令の基本構造 オペコード 処理の種類 例: add, sub, lw ,swなど オペランド 処理の対象 例: $s0, 0($t0), 100 など オペランドの数は オペコードによって異なる オペコード オペランド lw $s1, 0($t0) lw $s2, 4($t0) lw $s3, 8($t0) lw $s4, 16($t0) add $t1, $s1, $s2 add $t2, $s3, $s4 sub $s0, $t1, $t2 sw $s0, 16($t0)

23 MIPS のアドレシングモード アドレシングモード MIPS のアドレシングモード オペランドの解釈方法 命令によって異なる
即値アドレシング 命令中に指定された定数をオペランドとする (例: addi $t1, $s0, 66) レジスタアドレシング レジスタをオペランドとする (例: sub $t1, $s0, $s3) ベース相対アドレシング 命令中の定数とレジスタの和によってオペランドのアドレスを表す (例: lw $s2, 4($t0)) PC相対アドレシング 命令中の定数と PC の和によってメモリアドレスを表す (例: beq $s1, $s2, 100) 疑似直接アドレシング 命令中の 26 ビットと PC の上位ビットを連結したものを分岐アドレスとする (例: j 10000)

24 プログラムの実行例(分岐を含まない場合)
アドレス メモリ プロセッサ $s1 = M [ ] $s2 = M [ ] lw $s1, 0($t0) lw $s1, 0($t0) 実行中 の命令 PC 4 4 lw $s2, 4($t0) lw $s2, 4($t0) 8 lw $s3, 8($t0) lw $s3, 8($t0) レジスタ 12 lw $s4, 16($t0) lw $s4, 16($t0) 16 add $t1, $s1, $s2 add $t1, $s1, $s2 20 8 ($t0) add $t2, $s3, $s4 add $t2, $s3, $s4 1024 24 9 ($t1) sub $s0, $t1, $t2 sub $s0, $t1, $t2 28 10 ($t2) sw $s0, 16($t0) sw $s0, 20($t0) 16 ($s0) 17 ($s1) 1024 100 100 18 ($s2) 1028 10 10 19 ($s3) 1032 42 42 20 ($s4) 1036 3 3 1040

25 プログラムの実行例(分岐を含まない場合)
$t1 = $s1 + $s2 $t2 = $s3 + $s4 アドレス メモリ プロセッサ $s0 = $t1 - $t2 lw $s1, 0($t0) lw $s1, 0($t0) 実行中 の命令 PC 16 24 12 20 lw $s4, 16($t0) 4 lw $s2, 4($t0) lw $s2, 4($t0) 8 lw $s3, 8($t0) lw $s3, 8($t0) レジスタ 12 lw $s4, 16($t0) lw $s4, 16($t0) 16 add $t1, $s1, $s2 add $t1, $s1, $s2 20 8 ($t0) add $t2, $s3, $s4 add $t2, $s3, $s4 1024 24 9 ($t1) sub $s0, $t1, $t2 sub $s0, $t1, $t2 110 28 10 ($t2) sw $s0, 20($t0) sw $s0, 16($t0) 45 16 ($s0) 65 17 ($s1) 100 1024 100 100 18 ($s2) 10 1028 10 10 19 ($s3) 42 1032 42 42 20 ($s4) 3 1036 3 3 1040

26 プログラムの実行例(分岐を含まない場合)
アドレス メモリ プロセッサ M [ ] = $s0 lw $s1, 0($t0) lw $s1, 0($t0) 実行中 の命令 PC 24 28 sub $s0, $t1, $t2 4 lw $s2, 4($t0) lw $s2, 4($t0) 8 lw $s3, 8($t0) lw $s3, 8($t0) レジスタ 12 lw $s4, 16($t0) lw $s4, 16($t0) 16 add $t1, $s1, $s2 add $t1, $s1, $s2 20 8 ($t0) add $t2, $s3, $s4 add $t2, $s3, $s4 1024 24 9 ($t1) sub $s0, $t1, $t2 sub $s0, $t1, $t2 110 28 10 ($t2) sw $s0, 16($t0) sw $s0, 16 ($t0) 45 16 ($s0) 65 65 17 ($s1) 100 1024 100 100 18 ($s2) 10 1028 10 10 19 ($s3) 42 1032 42 42 20 ($s4) 3 1036 3 3 1040

27 プログラムの実行例(分岐を含む場合) アドレス メモリ プロセッサ $s2 = $s2 + 1 実行中 の命令 PC 12 4 8 4 8
if ($s1 == $s2) go to 20; $s2 = $s2 + 1 lw $s1, 0($t0) lw $s1, 0($t0) 実行中 の命令 PC 12 4 8 lw $s2, 4($t0) 4 lw $s2, 4($t0) lw $s2, 4($t0) 8 beq $s1, $s2, 20 beq $s1, $s2, 20 レジスタ 12 addi $s2, $s2, 1 addi $s2, $s2, 1 16 j 8 j 8 20 8 ($t0) 1024 9 ($t1) 10 ($t2) 16 ($s0) 17 ($s1) 2 1024 2 2 18 ($s2) 1 1028 19 ($s3) 20 ($s4)

28 プログラムの実行例(分岐を含む場合) go to 8 アドレス メモリ プロセッサ 実行中 の命令 PC 8 12 16 4 8 レジスタ
if ($s1 == $s2) go to 20; lw $s1, 0($t0) lw $s1, 0($t0) 実行中 の命令 PC 8 12 16 addi $s2, $s2, 1 4 lw $s2, 4($t0) lw $s2, 4($t0) 8 beq $s1, $s2, 20 beq $s1, $s2, 20 レジスタ 12 addi $s2, $s2, 1 addi $s2, $s2, 1 16 j 8 j 8 20 8 ($t0) 1024 9 ($t1) 10 ($t2) 16 ($s0) 17 ($s1) 2 1024 2 2 18 ($s2) 1 1028 19 ($s3) 20 ($s4)

29 プログラムの実行例(分岐を含む場合) アドレス メモリ プロセッサ 実行中 の命令 PC 8 4 16 20 4 8 レジスタ 12 16
if ($s1 == $s2) go to 20; lw $s1, 0($t0) lw $s1, 0($t0) 実行中 の命令 PC 8 4 16 20 j 8 4 lw $s2, 4($t0) lw $s2, 4($t0) 8 beq $s1, $s2, 20 beq $s1, $s2, 20 レジスタ 12 addi $s1, $s1, 1 addi $s2, $s2, 1 16 j 8 j 8 20 8 ($t0) 1024 9 ($t1) 10 ($t2) 16 ($s0) 17 ($s1) 2 1024 2 2 18 ($s2) 2 1028 19 ($s3) 20 ($s4)

30 メモリ領域 命令・データとメモリアドレスの関係 システムソフトウェアが管理 いくつかのセグメントに分けて管理 頻繁にアクセスするアドレス
予約済み システムソフトウェアが管理 いくつかのセグメントに分けて管理 テキスト(プログラム)領域: 命令を格納 静的データ領域: 静的データを格納 ヒープ領域: 動的データを格納 スタック領域: 関数呼び出し時にレジスタや         戻りアドレスを格納 頻繁にアクセスするアドレス 静的データセグメントの末尾,スタックの先頭など レジスタ($gp, $sp)に常に保持しておく ことによってメモリアクセスを高速化 PC テキスト (プログラム) 静的データ $gp ヒープ $sp スタック

31 MIPS のレジスタ規約 名前 レジスタ番号 用途 関数呼び出し時に退避するか $zero 定数 0 が常に格納されているレジスタ
定数 0 が常に格納されているレジスタ 該当しない $v0-$v1 2-3 結果および式の評価のための値 しない $a0-$a3 4-7 引数 $t0-$t7 8-15 一時 $s0-$s7 16-23 退避 する $t8-$t9 24-25 予備の一時 $gp 28 グローバルポインタ $sp 29 スタックポインタ $fp 30 フレームポインタ‡ $ra 31 戻りアドレス † 26-27番の汎用レジスタは OS のカーネルが使用するために予約されている ‡ フレームポインタ: スタック内の最も最近のフレーム領域の末尾を指すポインタ.   フレーム領域とは1回の関数呼び出しによって退避されたデータを格納した領域.

32 整列化制約とエンディアン 整列化制約 エンディアン 32 ビット(1ワード)のデータ(命令)を 4 の倍数のアドレスに配置
例: 0, 4, 8, …, 1024, 1028, … データへのアクセスを容易にするため エンディアン ワード内のデータの並び順 ビッグエンディアン: 最上位バイトが最小アドレスの位置 リトルエンディアン: 最上位バイトが最大アドレスの位置 命令セットアーキテクチャによって異なる ビッグエンディアン: MIPS, SPARC など リトルエンディアン: x86, ARM など メモリ 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 メモリ 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 lw $s1, 0($t0) lw $s2, 4($t0) lw $s3, 8($t0) lw $s4, 16($t0) add $t1, $s1, $s2 add $t2, $s3, $s4 sub $s0, $t1, $t2 sw $s0, 20($t0) sw $s0, 16($t0) 整列化 ビッグエンディアン 2048 0A 0B 2049 2050 0C 0D 2051 0A0B0C0D 0D 2048 0C 2049 0B 2050 0A 2051 リトルエンディアン

33 x86, i386 x86-64 (x64) その他の命令セットアーキテクチャ
Intel 8086, Intel 80186, Intel 80286, Intel 80386… Intelの命令セット。PC やサーバ用途の大多数のプロセッサが採用 x86は16bitから始まり32bit拡張(これがi386)、64bit拡張(IA-64…普及せず) 主な特徴 命令長が命令によって異なる 汎用レジスタが少ない(8本) 1命令で複雑な処理が可能 例: メモリから読み込んだ値にレジスタの値を加算し,    結果をメモリに格納 x86-64 (x64) x64はAMD社の開発した、x86の命令セットを64bitに拡張したもの


Download ppt "勉強会その1    2016/4/25 10 8分35秒 コンピュータアーキテクチャとは? コンピュータの構成 命令の実行."

Similar presentations


Ads by Google