データパス設計
データパスをコピーして、赤ペンでたどる。
実際にコピーして、赤ペンでデータパスをなぞるとよい。
--
CPUバス数の決定
--
CPUの制御
・CPUのデータパスを操作して、命令の解釈・実行を実現
制御対象
- ALU 操作の種類(+. -)
- メモリ 書き込み、読み出し
- レジスタ 書き込み
- MUX セレクタ
- バス OE(Output Enable)
・制御への入力
- 現在のステート
- 命令
- 算術フラグ
- 分岐条件
制御の実現は?
・ハードワイヤード制御
CPUのデータパスを組み合わせ論理回路とステートマシンの組み合わせで操作
高速に動作する
ex.
- 30入力、40出力
- 直接設計は困難
- ステート, 滅入れ実行のフェーズ、命令のopcode
--
ハードワイヤード制御の実現方法
全体を一つのステートマシンにするのは難しい場合
・ステートマシンの直交分解 : これが普通
- 排他的に動く分割されたステートマシンに分割する
- フェーズと命令しゅのグループごとに直行か可能
- 出力はサブステートマシンからの出力の論理和(or)
-- orをとっているが、1つしかステートはactiveでなく、さらに排他的であるためそれだけが現在の状態として扱われる。
[F-state] -> [D-state] -> [R-state] -> ([Add] [Sub] .. [Ret]) : Ex State -> [W State] -> [F State] -> ...
直交性:上の1つのステートだけがアクティブになっている。
--
命令の数が非常に大きい場合、ハードワイヤード制御では難しい
少しでも失敗すると、変更が難しい
--
ひとつひとつの要素は簡単だが、
あわせると難しい
--
マイクロプログラム制御
論理回路の代わりに、入力をアドレスに接続したメモリで代用
ex.
30入力、40出力
1G entry, 5byte幅のメモリ (5GB)
問題
ステートの数はそんなに多くは必要ない(1000-2000)
ほとんどのメモリは使われないということになる。無駄。
メモリは遅い。
理想化した水平マイクロプログラム制御(上)
水平マイクロプログラム
ステートの数があまりいらないということに着目して、
メモリの中にぎっちりつめる
マイクロプログラムカウンタを用意して、
アドレスをプログラムカウンタの値に写像する。
命令レジスタ -> アドレス選択 -> マイクロプログラムカウンタ -> マイクロプラグメモリ
| 4bit | 6bit opcode |
Fetch
Decode
Read
Ex op
op2
op3
..
多重条件分岐
| next | | ->
| next | | ->
...
[ big multiplexer ]
- unconditioned
- opcode
- flag
- 割り込み
マイクロプログラムメモリから得るものは、
制御信号と次のアドレス
マイクロプログラムメモリの揚力
400 - 500 K bit
マイクロ命令長 : 20 - 120 bit
総量は命令設計の複雑さで決まる
--
マイクロプログラム方式の変形
・命令幅圧縮
- フィールド分割
- 可変フィールド分割
- マイクロゴ組み合わせの最適化コーディング
- マイクロ命令ステップ数を最小にする最適化
- 垂直マイクロプログラムとの協会は不明確
--
IBM360
マイクロ命令語 60bit
--
垂直マイクロプログラム方式
マイクロ命令幅の更なる縮小
ex.
HP2100
さらに小さいマイクロ命令計算機で外側の計算機を実現する
--
ユニバーサルインタプリタ
16bitで中間言語をつくる
--
CPUアーキテクチャの実例研究 6/17
(PP 4枚)
- 基本アーキテクチャの図を見せる
- バス構成を見せる
- パイプラインの構造は ..
- データパスは何々
- 変わった命令は何々
- 図ベースで行う のがよさそう
- 最後にプログラム実行
--
割り込みの目的
・アーキテクチャの拡張
機能のソフトウェア・ハードウェア強調による実現
割り込み処理時間による速度低下→割り込み処理の高速化機構
ex. システムコール、浮動小数点例外、ページフォルト、ブレークポイント
・保護機能の実現
特権レベルの乱用に対する保護
命令実行と平行したハードウェアによる違反検出
精密な設計によるセキュリティ・ホールの回避→メモリ保護機能
ex. MMUトラップ、特権命令実行例外、システムコール
・非同期自称との同期
ハードウェアに夜サブルーチン呼び出し
実時間制約を満たすための優先度処理の実現→優先度機構
(割り込み間に優先順位がある)
ex. 外部割り込み、タイマー、リセット、マシンチェック
--
割り込みの実現
割り込みの要因
- マシンチェック
-- 電源以上、メモリエラー、演算エラー
- リセット
- 外部割り込み
- タイマー
- バスエラー
- ページ・フォールト
- MMU割り込み
-- メモリ保護エラー、ページ変換エラー、page aliasing検出、ミスアラインメント
-- Segmentation Fault : ページ変換できません!
- 未定義命令の実行
- 命令特権レベルエラー
-- ユーザモードでの特権命令実行
割り込みの実現
小数点演算トラップ
整数演算トラップ
ブレークポイント
--
命令実行と割り込みタイミング
今実行している命令がどのような運命をたどるか。
・完了
割り込み要因発生時に実行している依命例の実行が完了したのち、次命令実行がかいしされる前に割り込みが発生する。。
割り込みからの復帰後は、次命令から実行を再会する
- 外部割り込み、システムコール
・中止
割り込み要因発生時に実行している命令の実行を中止し、
該当命令実行が開始される直前の状態で割り込みが発生する。
割り込みからの復帰後は、該当め入れからオン実行を再会する
- ページフォルト、MMUチェック
・中断
割り込み要因が発生すると、直ちに命令実行を中断し、割り込み動作を開始する。
割り込みから、該当命令部分に復帰し内が、する場合には該当命令または次命令から命令実行を再会する。
- リセット
--
非同期割り込み(外部割り込み)
FDREW FDR(割り込み!)EW 完了してから割り込みシーケンスを行う
-> xxx .. xxx (割り込みシーケンス)
-> FDREW
同期割り込み
FDREW FDR(割り込み) 完了する前に、ただちにシーケンスを行う
--
割り込み優先度
・優先度、割り込みマスクの必要性
- 割り込み未処理の相互排他
- 不必要な割り込みの抑制
- リアルタイム性の確保
- デッドロックの抑止
- Unmaskable Interrupt は必要(リセット)
・リアルタイムスケジューリング
- 静的スケジューリング
- 動的スケジューリング
--
割り込みシーケンス
割り込み要因の検出
実行中命令の完了、中断または中止を松
割り込み用咽頭に基づき割り込みベクトルを作成
実行中命令の情報を退避、格納
割り込み要因情報を退避、格納
プロセッサモードを特権モードに変える、新しいPSWのセット
優先度の低い割り込みの禁止
割り込みベクトルへ分岐し、ハンドラを機能
以上をハードウェアまたはマイクロプログラムで実現
割り込みは難しい
実装するときは覚悟すること
--
割り込みハンドラと割り込みからの復帰
・割り込みハンドラ
割り込みマスクの設定
プロセッサ状態のソフトウェアによる退避
割り込み要因の詳細な解析
デバイス等動作の起動
OSへの要求キュー操作等必要なソフトウェア実行
割り込み復帰の準備(PCの操作、退避されたPSWの変更)プロセッサ状態の回復
割り込みからの復帰命令実行
・復帰命令
元の命令実行のための状態復帰
特権モードを元に戻す
実行再開
--
割り込み実現の困難さ
・可変長命令
- 命令境界のソフトウェアによる検出
- 実行途中での割り込み(メモリへの変更と中など)
- 非常に長い命令中でのページフォルト
・状態の退避、格納と復帰の命令オーバーヘッド
- レジスタ、PSW
- 仮想記憶実現に必要な情報
- システムレジスタ
cf. 昔のintelマシンは割り込みが遅かった。
・セキュリティの確保
- 保護システム雪景との関連
- 特権命令設計
- 現在のCPUセキュリティは設計の完全性に依存している
-- 非常に微妙。完全性は難しい
--
割り込みへのアーキテクチャ支援
・命令長
固定長命令、固定長オペランドとしてすべてを簡素化
ろーどストア命令の分離による要因の簡略化
・状態の退避、格納と復帰の命令オーバーヘッド
CPUの複数コンテキスト
複数プロセス混在を許す仮想記憶方式
SMT
・セキュリティの確保
メモリ補語に帰着させる保護法式
仮想計算機システム
--
計算のこうs