Upload
galvin-randolph
View
30
Download
1
Embed Size (px)
DESCRIPTION
ハードウェア. デジタル回路. 組み合わせ回路 状態を持たないデジタル回路 Mビットの入力に対して Nビットの出力を与える関数(ブール関数) ビット --- 0または1 順序回路 状態(メモリ)を持つデジタル回路 クロックに同期して状態を遷移させる。 Kビットの状態を持ち、 Mビットの入力に対してNビットを出力. 組み合わせ回路. Nビットの入力. Mビットの出力. 順序回路. Mビットの出力. Nビットの入力. 組み合わせ回路. Kビットの前状態. Kビットの次状態. Kビットの メモリ. 実際にはメモリと 組み合わせ回路は - PowerPoint PPT Presentation
Citation preview
ハードウェア
デジタル回路• 組み合わせ回路
– 状態を持たないデジタル回路– Mビットの入力に対して
Nビットの出力を与える関数(ブール関数)• ビット --- 0または1
• 順序回路– 状態(メモリ)を持つデジタル回路– クロックに同期して状態を遷移させる。– Kビットの状態を持ち、
Mビットの入力に対してNビットを出力
組み合わせ回路
Nビッ
ト
の入力
Mビッ
ト
の出力
順序回路
Nビッ
ト
の入力
Mビッ
ト
の出力
Kビットのメモリ
組み合わせ回路
クロック
Kビッ
ト
の前状態
Kビッ
ト
の次状態
実際にはメモリと組み合わせ回路は混在している。
MOSトランジスタ
P基盤
N N
ソースゲート
ドレイン金属
酸化膜
N基盤
PP
ドレインゲート
ソース
S D
G
S D
G
NMOS PMOS
MetalOxideSemiconductor
P基盤
N N
N基盤
PP
+
+ー
- ----
+ +++
+
ー
ー+
電子 ホール
MOSトランジスタNMOS PMOS
CMOS
S D
G
D S
G
NMOS PMOS
ー
IN
OUT
インバータ
ComplementaryMOS
+
CMOS
S D
G
D S
G
NMOS PMOS
ー
+
ー電子
+
CMOS
S D
G
D S
G
NMOS PMOS
ー
ー
+ ホール
+
CMOSによるNANDゲート
A
B
+
-
Y
PMOS
NMO
S
A B Y+ + -
+ - +
- + +
- - +
A
B
Y
真理値表
+…1ー…0
組み合わせ回路
• 任意の組み合わせ回路は、原理的には、NANDゲートを組み合わせて構成できる。– エンコーダ・デコーダ– アダー– マルチプレクサ
• ただし、様々な制限がある。– 一つのゲートの出力数(ファン・アウト)は
制限される。(入力数はファン・インという。)
– ゲートの入力と出力の間には時間遅れがある。
SRフリップフロップS
R
Q
Q
S R Q Q禁止 禁止 禁止 禁止0 1 1 01 0 0 11 1 記憶 記憶
同期型SRフリップフロップ
S
R
Q
Q
Clock
クロック
• 順序回路はクロックに同期して動いている。• 例えば、
– クロックが1のときに入力や前状態を読み込み、クロックが0のときに一斉に次状態へ遷移する。
0
1
エッジトリガのフリップフロップ
Clock
D
Q
Q
D Q
QCLK
Q
Clock
D
順序回路
• 結局、コンピュータは巨大な順序回路である。
• 特に、CPUは順序回路– クロックに従って、メモリから命令を読み出し、
それを組み合わせ回路によってデコードし、その結果に従って計算し、レジスタへの書き込みなどを行う。
– CPU内の様々なレジスタがCPUの状態を構成する。
順序回路(再び)
Nビッ
ト
の入力
Mビッ
ト
の出力
Kビットのメモリ
組み合わせ回路
クロック
Kビッ
ト
の前状態
Kビッ
ト
の次状態
実際にはメモリと組み合わせ回路は混在している。
DRAM
DRAMでは、コンデンサの電荷によってデータを記憶し、MOSで読み書きする。一定時間内に、リフレッシュ(読んだデータをそのまま書く)しなければデータが失われる。
ワード線
ビット線
DynamicRandomAccessMemory
コンピュータ・アーキテクチャ
コンピュータアーキテクチャ• コンピュータの構成法• 電子部品をどのように組み合わせて、
コンピュータのハードウェアを構成するか。
• 特に、 CPU ( Central Processing Unit )の構成法と機械語命令の設計
• しかし、ソフトウェア– オペレーティングシス– 言語処理系
と独立には語れない。
計算機の基本アーキテクチャ
CPU
データメモリ
プログラムメモリ
入出力装置
CPU
メモリ
入出力装置
データ
プログラム
ハーバードアーキテクチャ フォンノイマンアーキテクチャ
Self Modifying Code は不可能インデクスレジスタの使用
Self Modifying Code を実現自己修飾によるプログラム構造の実現
平木
命令
命令
命令命令
メモリ
レジスタシステムレジスタ
条件分岐T F
命令実行の基本形態
命令命令命令
データ
R0R1R2
平木
計算機の内部基本構成
プログラムカウンタメモリ
命令
命令レジスタ
演算器(群)+- ×÷
制御回路
入出力機器
メモリバ
ス
データ
CPU
IOブリッジ
レジスタ
平木
機械語命令• 入力オペランド(メモリ、レジスタ)の指定 (通常、2個
以下)– オペランドのアドレス(の一部)– アドレシングモード– 即値– アドレス修飾(インデクス等)
• オペランドに対する操作(演算器の指定等)• 暗黙オペランドに対する操作• 出力オペランド(メモリ、レジスタ)の指定 (通常1個)• オペランド指定方式の指示• 次に実行する命令(アドレス)の 決定
– 次命令 番地– 無条件に分岐– 条件分岐(分岐条件の指定と、分岐先の指定)
ハードウェアの持つ全能力の操作指定
平木
命令形式• オペランドメモリ、レジスタ、システムレジスタ、
即値、スタック、キュー• 命令長
– 固定長 データ基本長 = 命令長ならば、即値に問題– 可変長 パイプライン設計の困難、命令シーケンス
• オペランド数– 4 入力1、入力2、出力、次アドレス– 3 入力1、入力2、出力 + 分岐命令– 2 入力1、入出力2 + 分岐命令、 MOV 命令– 1 入出力 + アキュムレータ + 分岐命令– 0 オペランドはスタックトップ (スタック計算
機)
平木
メモリのアドレス付け• バイトアドレス → アラインメント問題• ワードアドレス → 文字列の扱い
• 均一アドレス → 命令オーバーヘッド小• セグメント拡張アドレス → アドレス指定幅小
• 多彩なアドレシングモード – アドレス計算に要する命令数の減少– クリーンなコードの生成
平木
X86概説
阿倍
Intel X86 プロセッサ• Intel 32 ビット CPU: 386, 486, Pentium, ... の総称
– 8086 ( 16 ビット)の拡張(仮想記憶、メモリ保護、タスク管理)
• CISC アーキテクチャ– 豊富なアドレッシングモードと命令– 命令のエンコーディングは可変長で複雑
• 貧弱でくせのあるレジスタ群– 汎用的に使えるレジスタは 6 個– レジスタアロケーションはシビア
• 最も多く使われている CPU– ソフト面の互換性を保った高速化の企業努力
• 386 – 8086 のコードが実行可能 (仮想 86 モード)• 486 – 整数演算のパイプライン化、内臓浮動小数点ユニット• Pentium – 予測分岐、スーパースカラ• Pentium Pro – 命令を単純な命令列に変換、内部的に RISC
阿倍
動作モード
Virtual 8086
ProtectedReal
リアルモード 保護モード
Reset
• 古い OS 用– MS-DOS 等– メモリ保護なし– 16 ビットアドレス空
間
• 現代的 OS 用– Windows, Linux, ...– メモリ保護、仮想記
憶– 32 ビットアドレス空間
阿倍
保護モードで不可能なこと
• 書き込み禁止セグメントへの書き込み• 読み取り禁止コードセグメントの覗き• コードセグメントの変更(自己改変コー
ド)• データセグメントの内容を命令として実行• セグメント以外の領域へのアクセス• コード、データセグメントをスタックにす
る
阿倍
内部構成(80386)
BusInterface
CodePrefetch
InstructionDecoder32 bits
Data Bus
Address Bus
real address real address
PagingUnit
SegmentUnit
ExecutionUnit
linear address
阿倍
レジスタ群
GDTR
IDTR
LDTR
TR
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
CS
SS
DS
ES
FS
GS
DR0
DR1
DR2
DR3
DR4
DR5
DR6
DR7
CR0
CR1
CR2
CR3
EFLAGS
EIP
汎用レジスタ
セグメントレジスタ
フラグレジスタ
命令ポインタシステムアドレスレジスタ
デバッグレジスタ
コントロールレジスタ
ユーザプログラムが使用
OS が使用
CS
SS
DS
ES
FS
GS
ディスクリプタレジスタ
阿倍
汎用レジスタの詳細
EAX
EBX
ECX
EDX
ESI
EDI
EBP
ESP
AX
BX
CX
DX
SI
DI
BP
SP
AX
BX
CX
DX
AH AL
BH BL
CH CL
DH DL
31 15 0 15 07
16ビットサブレジスタ
8ビットサブレジスタ
ESP はスタックポインタ、 EBP はフレームポインタとして使われる。
阿倍
セグメント(1)• プログラムを種類別にまとめた、連続するメモリ
– テキストセグメント - プログラムのコード• 通常書き込み禁止
– データセグメント - プログラムが参照するデータ• さらに初期値の有無、書込み禁止属性等で細分
– スタックセグメント - スタック• セグメントのサイズは一定ではない
– 仮想記憶機構におけるページの概念とは対照的• X86 はセグメントとページの両方をサポート
– それぞれ Segment Unit 、 Paging Unit が処理– 両方にメモリ保護の概念がある(矛盾したら厳しい方)– 8086 との互換性のため(やむなく)サポートされた
が、 386 では拡張され、すぐれたメモリ保護機能を提供
阿倍
セグメント(2)
Segment
Register
Offset
( 16 bits )
Segment
Register
Offset
( 32 bits )
8086 / 80386 (リアルモード)
80386 (保護モード)
SegmentUnit
<< 4(* 16)
++
Real address (20 bits) Linear address (32 bits)
(20 bits) (32 bits)
Descripter Table •address•size•properties
(16 bits) (16 bits)
阿倍
X86 命令形式の概要• データ移動
– mov? src, dst ( ? はデータ型 b,w,l 等の修飾)– src, dst の一方のみメモリオペランド可
• 算術演算– add? src, dst ( dst += src ) という2オペランド命令– src, dst の一方のみメモリオペランド可
• 分岐– 比較命令 cmp? src1, src2 により src2 – src1 の結果をフ
ラグレジスタに記録し、– 条件分岐 j? dst ( je (==), jne (!=), jl (<), 等)で結果に
より分岐– src1, src2 の一方のみメモリオペランド可
阿倍
データ移動の例 int i, j, *p, v[10]; char c, s[10];
● i = 123; j = i;movl $123,imovl i,%eaxmovl %eax,j
● j = *p;movl p,%eaxmovl (%eax),%ebx ; EBX = *(int*)EAXmovl %ebx,j
● j = *(p+1);movl p,%eaxmovl 4(%eax),%ebx ; EBX = *(int*)(4 + EAX)movl %ebx,j
● j = v[i];movl i,%eaxmovl v(,%eax,4),%ebx ; EBX = *(int*)((int)v + EAX * 4)movl %ebx,j
● c = s[i+j*8];movl i,%eaxmovl j,%ebxmovb s(%eax,%ebx,8),%cl ; CL = *(char*)((int)s + EAX + EBX * 8)movb %cl,c
阿倍
間接アドレッシングのまとめ
• disp(basereg,indexreg,index)– * (Type * )(disp + basereg + indexreg * index)
– disp はリンカが解決できる定数式– index は 1, 2, 4, 8 のいずれか
• index の省略は 1 他の省略は 0– (basereg,indexreg,index)
– (basereg,indexreg)
– (,indexreg,index)
– (basereg)
阿倍
算術演算の例 int i, j, k, v[10]; unsigned int l, m, n;
● i = j+k;movl j,%eaxaddl k,%eax ; EAX += kmovl %eax,i
● v[i] += j;movl i,%eaxmovl j,%ebxaddl %ebx,v(,%eax,4) ; *(int*)((int)v + EAX * 4) += EBX
● v[i]++;movl i,%eaxincl v(,%eax,4) ; *(int*)((int)v + EAX * 4) ++
● i = j / k;movl j,%eaxcdq ; EAX を「 64 bit レジスタ」 EDX:EAX に符号拡張idivl k ; 符号付の EDX:EAX /= k 、商 =EAX 剰余=EDXmovl %eax,i
● l = m % n;movl m,%eax ; EAX をmovl $0,%edx ; EDX:EAX にゼロ拡張divl n ; 符号なしの EDX:EAX /= n 、商 =EAX 剰余=EDXmovl %edx, l
阿倍
分岐の例
int i, j;
● goto L1;jmp L1 ; 無条件ジャンプ
● if (i < j) goto L2; L2:
movl i,%eaxcmpl j,%eax ; EAX(i) と j の比較をフラグに記録jl L2 ; 符号付比較で「<」なら L2 へジャンプ
● 条件ジャンプ命令のまとめ
je ==jne !=
符号付比較 符号なし比較jl < jb <jle <= jbe <=jg > ja >jge >= jae >=
阿倍
関数呼び出し規約
• ESP をスタックポインタとして使用• EBP をフレームポインタとして使用• 引数を右から順にスタックにプッシュ• 関数を呼び出す• 呼ばれた関数は EBP,EDI,ESI,EBX を破壊して
はならない ( Callee Save Registers )• 戻り値を EAX に入れ、呼び出し側に戻る• 最後に呼び出し側がスタックを(引数分)戻す
阿倍
フレームの構造
local
variables
saved EBP
saved EDI
saved ESI
saved EBX
return addr
incoming
arguments
caller’s frame
ESP
EBP
Callee Save レジスタのセーブエリア
呼び出し側がプッシュした戻り番地
呼び出し側がプッシュした関数引数EBP からの正のオフセットでアクセス
EBP からの負のオフセットでアクセス
阿倍
コーリングシーケンスint bar(int x){int i=x; return i;}
int i;
saved EBP
saved EDI
return addr
int x = 123;
foo’s frame
foo:
pushl $1 ; 引数をプッシュ
call bar ; 戻り番地をプッシュし
; bar へジャンプ
addl $4,%esp ; スタックを戻す
ret
bar:
pushl %edi ; EDI をプッシュ
pushl %ebp ; EBP をプッシュ
movl %esp,%ebp ; フレームを確保
subl $4,%esp ; i のアロケート
movl 12(%ebp),%edi ; EDI = x
movl %edi,-4(%ebp) ; i = EDI
movl -4(%ebp),%eax ; EAX = i
movl %ebp,%esp ; i を破棄
popl %ebp ; EBP をポップ
popl %edi ; EDI をポップ
ret ; ポップした戻り番地へジャンプ
int foo(){return bar(1);}
bar’s frame
EBP+12
EBP
ESP
阿倍
命令エンコーディング(1)
prefix 0 - 1 命令全体の修飾address size 0 - 1 0x67 があれば 16 なければ 32 ビッ
トoperand size 0 - 1 0x66 があれば 16 なければ 32 ビッ
トsegment override 0 - 1 デフォルト以外のセグメントの指定opcode 1 - 2 命令コードmod-reg-r/m 0 - 1 アドレッシングモードを定めるscaled index base byte (SIB)
0 - 1 ベースレジスタ、インデックスレジスタ、スケーリング値(* 1 、* 2 、* 4 、* 8 )
displacement 0 - 4 アドレス(オフセット)immediate 0 - 4 即値
バイト数
フィールド名 目的
阿倍
命令エンコーディング(2)
movl (%ebx), %edx => 8B13
opcode=8B mod-reg-r/m=13(00 010 011)
addl %eax, %ecx => 03C8
opcode=03 mod-reg-r/m=C8(11 001 000)
addl (%ebx, %ecx, 4), %eax => 03048B
opcode=03 mod-reg-r/m=04(00 000 100) SIB=8B(10 001 011)
SIB あり
阿倍
命令実行の基本フェーズ• 命令フェッチ( F or IF )
– PCに従い、メモリから命令読み出しIRに入れる
• 命令デコード(D)– IRにある命令を解釈し、
以下の動作を決定する
• オペランド読み出し(R)– 命令に従い、レジスタ等のオペランド
を読み出す
• 実行(E or EX)– 演算器、メモリアクセスなどを用いて
命令の動作を実現する
• オペランド書き込み(W)
I
D
R
E
WPC: Program CounterIR: Instruction Register (萩谷)
平木
CPU の内部構造平木
マイクロプログラム 平木
仮想記憶とアドレス変換• ユーザのアドレスを物理的なメモリと分離
– 論理アドレスから物理アドレスへの変換• ディスクをユーザの記憶空間の一部として利用• メモリの保護等の属性の利用• ユーザ内、ユーザ間のメモリの共有
未使用
平木
MMU:MemoryManagementUnit (萩谷)
アドレス変換方式• ページング
– メモリ空間を固定サイズ(ページ)に分割– ページ毎に論理ページアドレスと物理ページアドレスを写像– PMT (Page Mapping Table) の使用
• セグメンテーション– メモリ空間を、ユーザが規定する可変サイズ(セグメント)
に分割
– セグメント毎に論理アドレスと物理アドレスを写像
• ページ化したセグメント方式– メモリは固定したページサイズで分割– ページの集合体をセグメントとして扱う– 多くのプロセッサで実現
• 多段の変換テーブルによる、効率の良い変換表の実現
平木
アドレス変換• Page Mapping Table による変換• 各エントリには物理アドレス、属性(保護等)
プロセスのページ表ポインタ
オフセット論理ページ番号
属性
物理ページ番号
メモリ
VI
V
平木
割込みとポーリング• 例:デバイスからの入力
– (仮定) Ready Flag, Data
ともにメモリ空間の一部として見える• ポーリング
– 命令で、 Ready Flag をレジスタに読み込み、条件分岐で入力を検出
• Busy Waiting Load と 条件分岐でループ• プログラム中の各所に検出個所を分散させることも可能• 大きな命令オーバーヘッド (他の仕事が出来ない場合も)
• 割込み ポーリングをする専用ハードウェア– 毎クロック、 Ready Flag を監視– Ready になると、 CPU に通知して入力動作を起動
• 入出力における割込みは、– レスポンスを良くする– 命令オーバーヘッドを少なくする– プログラム要素を分離する
ために有益
CPU
Memory
Ready Flag
Data
入力デバイス
平木