第 2 章 コンピュータシステムアーキテクチャの基本概念
2.1 命令セット構造の分類
-
さまざまな命令セット構造を区別する主な要素
- CPU にオペランドを保存するために使用されるストレージ ユニットのタイプ
- スタック
- アキュムレータ
- 総合レジスターバンク
- CPU にオペランドを保存するために使用されるストレージ ユニットのタイプ
-
命令セットの構造を3種類に分ける
- スタック構造
- アキュムレータの構造
- 汎用レジスタの構造
- オペランドのさまざまな情報源によると、オペランドはさらに次のように分類できます。
- レジスタメモリ構造 (RM 構造) (オペランドはメモリから取得可能)
- レジスターレジスター構造 (RR 構造): すべてのオペランドは汎用レジスターバンクからのものです
- ロードストア構造: ロード命令とストア命令のみがメモリにアクセスできます。
- オペランドのさまざまな情報源によると、オペランドはさらに次のように分類できます。
-
命令セット構造のタイプが異なると、オペランドの位置と数、およびオペランドの与え方 (明示的または暗黙的) も異なります。
- 明示的に指定: 命令ワードのオペランド フィールドによって指定されます。
- オペランドフィールドの数
- アドレッシングモード
- 暗黙的に指定: 事前に合意されたストレージユニットを使用します
- スタックの一番上
- アキュムレータ
- 特定のレジスタ
- 特定のストレージユニット
- 明示的に指定: 命令ワードのオペランド フィールドによって指定されます。
-
汎用レジスタの構造
- 最新の命令セット アーキテクチャの主流
- 柔軟性とパフォーマンスの向上という点で明らかな利点
- レジスタはメモリよりも高速にアクセスされます。
- コンパイラがレジスタを割り当てて使用する方が簡単かつ効率的です。
- レジスタは変数を格納するために使用できます。
- メモリへのアクセスを減らし、プログラムの実行を高速化します (レジスタはメモリよりも高速なため)。
- レジスタは (メモリ アドレスと比較して) より少ないアドレス ビットでアドレス指定されるため、プログラムのオブジェクト コードのサイズが効果的に削減されます。
-
ALU命令のオペランドの2つの特徴に応じて、汎用レジスタ命令セットの構造はさらに細分化されます。
-
ALU命令のオペランド数
- 3つのオペランドを持つ命令
- 2 つのソース オペランド、1 つのデスティネーション オペランド
- 2つのオペランドを持つ命令
- オペランドの 1 つがソース オペランドと宛先オペランドの両方です
- 3つのオペランドを持つ命令
-
ALU 命令内のメモリ オペランドの数
- 0 ~ 3 のいずれかを指定できます。0 はメモリ オペランドがないことを意味します
-
-
ALU 命令のオペランドの数とメモリ オペランドの数の一般的な組み合わせ
ALU 命令内のメモリ オペランドの数 ALU 命令のオペランドの最大数 構造タイプ マシンインスタンス 0 3 RR MIPS、SPARC、Alpha、PowerPC、ARM 1 2 RM IBM 360/370、インテル 80x86、モトローラ 68000 1 3 RM IBM 360/370 2 2 んん VAX 3 3 んん VAX -
汎用レジスタ型命令セットの構造はさらに次の 3 種類に分類されます。
- レジスターレジスタータイプ(RRタイプ)
- レジスタメモリタイプ(RMタイプ)
- メモリメモリタイプ(MMタイプ)
-
3つの汎用レジスタ型命令セット構造のメリットとデメリット [表中の(m,n)はmメモリを示す
メモリオペランド]
命令セットの構造タイプ アドバンテージ 欠点がある レジスタ - レジスタの種類 (0、3) 命令語長は固定、命令構造はシンプル、コード生成モデルはシンプル、各命令の実行クロックサイクル数は類似 命令内にメモリオペランドを含む命令セット構造と比較して、命令数が多く、オブジェクトコードが十分にコンパクトではないため、プログラムが占有するスペースが比較的大きくなります レジスタメモリタイプ(1、2) メモリ オペランドは、最初にロード命令でロードしなくても、ALU 命令で直接参照できます。命令のエンコードが容易で、オブジェクトコードが比較的コンパクト 命令内の 2 つのオペランドは対称ではありません。1 つの命令でレジスタ オペランドとメモリ オペランドの両方をエンコードすると、1 つの命令で表現できるレジスタの数が制限される場合があります。命令の実行クロック数はオペランドのソース(レジスタまたはメモリ)によって大きく異なります。 メモリ - メモリタイプ (2,2) または (3,3) オブジェクト コードは最もコンパクトで、変数を保持するためのレジスタを設定する必要がありません。 命令の語長は、特に 3 オペランド命令では大きく異なります。そして、各命令によって実行される作業は大きく異なります。メモリに頻繁にアクセスすると、メモリがボトルネックになる可能性があります。このタイプの命令セット アーキテクチャは現在使用されていません
2.2 アドレッシングモード
-
命令セット構造はアクセスするデータのアドレスをどのように決定するのでしょうか?
-
現在の命令セット構造で使用されている一部のオペランド アドレッシング モード
- ←: 代入演算
- メモリ:記憶
- Regs: レジスタセット
- 角括弧: 内容を示します
- Mem[ ]: メモリの内容
- Regs[ ]: レジスタの内容
- Mem[Regs[R1]]: レジスタ R1 の内容によってアドレス指定されるメモリ ユニットの内容
-
複数のアドレッシング モードを使用すると、プログラム命令の数を大幅に減らすことができますが、コンピュータ実装の複雑さと命令の CPI が増加する可能性があります。
-
イミディエイト アドレッシング モードとオフセット アドレッシング モードが最も頻繁に使用されます。
-
オフセットの値の範囲
- プログラムは広範囲に分散されたオフセット サイズを使用します
- オフセットが小さい場合も大きい場合も、どちらも大きく影響します。
-
即時アドレッシングモード
-
ロード命令と ALU 命令の約 1/4 は即時データ アドレッシングを使用します
-
最も一般的に使用されるのは、小さい即値です。
-
場合によっては、より大きな即値も使用されます (主にアドレス計算用)。
-
命令セット構造の設計では、少なくとも即値データのサイズを 8 ~ 16 ビットに設定する必要があります。
-
VAX マシン (32 ビット即値をサポート) でも同様の統計が行われ、その結果は、即値の 20% ~ 25% が 16 ビットを超えていることを示しています。
-
2.3 命令セット構造の機能設計
-
命令セットアーキテクチャの機能設計
- ソフトウェアとハードウェアの機能の割り当てを決定します。それは、どの基本機能をハードウェアで実現すべきか、どの機能をソフトウェアで実現するのがより適しているかを判断することである。
-
どの基本機能をハードウェアで実装するかを決定する際には、速度、コスト、柔軟性の 3 つの要素が主に考慮されます。
-
ハードウェア実装の特徴
- 高速、高コスト、柔軟性が低い
-
ソフトウェア実装の特徴
- 遅い、安い、柔軟
-
-
命令セットの基本要件
-
完全性、規則性、高効率、互換性
-
完全性: 限られた利用可能なメモリ空間内で解決可能な問題については、計算をプログラミングするときに命令セットによって提供される命令で十分です。
-
規則性:主に対称性と均一性を含む
- 対称性: 命令セットに関連する記憶装置の使用、オペコードの設定などが対称的です。
- 均一性: さまざまなオペランド タイプ、語長、演算タイプ、およびデータ ストレージ ユニットに対する命令の設定を指し、同等に扱われる必要があります。
-
高効率:命令の実行速度が速く、使用頻度が高い。
-
互換性:
- 同じシリーズのマシンでは、アドレス指定モードやデータ表現を含む命令システムは基本的に変更されません。
- 命令を適切に増やしたり、アドレッシングモードを増やしたり、データ表現を増やしたりすることは可能ですが、既存の命令を減らすことはできません。
-
-
命令セット構造を設計する場合、2 つの異なる設計戦略があります。
- CISC (複雑命令セットコンピュータ)
- 命令の高機能化によりハードウェアで実現される機能が増え、命令数も増加しています。
- RISC (縮小命令セットコンピュータ)
- 命令セットを可能な限り単純化します。命令の数が少ないだけでなく、命令の機能も比較的単純です。
- CISC (複雑命令セットコンピュータ)
2.3.1 CISC命令セット構造の機能設計
-
CISC 組織が追求する目標
- 命令機能を強化し、プログラム内の命令数を削減して、パフォーマンス向上の目的を達成します。
-
強化されたコマンド機能は主に次の点から始まります。
-
ターゲットプログラムの命令機能を強化
-
演算命令の機能強化
-
データ転送命令の機能強化
-
プログラム制御命令の機能強化
-
-
命令セットを改善するための高級言語向けの実装の最適化 (高級言語と機械語間のセマンティックギャップを狭める)
- 高級言語と一般的な機械語との間の意味上のギャップは非常に大きいため、高級言語プログラムのコンパイルにいくつかの問題が生じます。
- コンパイラ自体はより複雑です。
- コンパイルによって生成されたオブジェクト コードは、適切な最適化を達成することが困難です。
- 高級言語とコンパイラのサポートの強化
- 高級言語と一般的な機械語との間の意味上のギャップは非常に大きいため、高級言語プログラムのコンパイルにいくつかの問題が生じます。
-
OS 指向の最適化により、改善された命令セットが実装されます。
-
オペレーティング システムとコンピュータ システムの構造は密接に関係しており、オペレーティング システムの実現はシステム構造のサポートに大きく依存します。
-
命令セットは主に次のオペレーティング システムをサポートします。
- プロセッサの動作状態とアクセスモードの切り替え。
- プロセス管理と切り替え。
- ストレージ管理と情報保護。
- プロセスの同期と相互排他、セマフォ管理など
-
OSをサポートする命令の中には、一般のユーザープログラムでは使用できない特権命令もあります。
-
-
2.3.2 RISC 命令セット構造の機能設計
-
CISC 命令セット構造に存在する問題
- 各種命令の使用頻度は大きく異なります
- 統計によると、頻繁に使用される命令は 20% のみで、実行時間の 80% を占めますが、残りの 80% の命令は実行時間の 20% でのみ使用されます。
- 頻繁に使用されるコマンドは、最も単純なコマンドでもあります。
- 命令セットは膨大で、命令の数も多く、多くの命令の機能は非常に複雑であるため、コントローラーのハードウェアは非常に複雑になります。原因となる問題:
- 大量のチップ面積を占有し(CPU チップの総面積の半分以上を占めるなど)、VLSI 設計に大きな困難を引き起こします。
- 開発時間とコストが増加し、設計エラーが発生しやすくなります。
- 多くの命令が複雑な動作をするため、CPI値は比較的大きく、実行速度は遅くなります。これらの複雑な命令を使用すると、プログラム全体の実行時間が長くなる可能性があります。
- 命令の機能が複雑なため規則性が悪く、パイプライン技術を使用してパフォーマンスを向上させるのには適していません。
- 各種命令の使用頻度は大きく異なります
-
RISC マシン設計の原則
- 命令の数は少なく、簡単です。頻繁に使用される命令のみを選択し、これに基づいて最も有用な命令をいくつか追加します。
- シンプルで統一された命令フォーマットを採用し、アドレッシングモードを短縮し、命令語長は32ビットまたは64ビットです。
- 命令の実行は 1 つのマシン サイクルで行われます。(パイプライン機構を使用)
- ロードストア構造を採用: ロード命令とストア命令のみがメモリにアクセスでき、他の命令の操作はレジスタ間で実行されます。
- ほとんどの命令は、ハードワイヤード ロジックを使用して実装されます。
- 高級言語プログラム用に最適化されたコードを生成する最適化コンパイラーの役割を強調します。
- パイプラインを最大限に活用してパフォーマンスを向上させます。
-
RISC思想の本質
- CPIの削減はRISC思想の本質である
- プログラム実行時間:Time=IC・CPI・T
-
同様の問題のプログラム長: RISC は CISC より 30% ~ 40% 長い
-
CPI: RISC は CISC の 2 ~ 10 分の 1 です
-
RISC の速度は CISC の約 3 倍、重要なのは RISC の CPI が小さいことです
-
2.3.3 制御コマンド
-
制御命令は、制御の流れを変更するために使用されます。
-
ジャンプ: 制御フローを無条件に変更する命令をジャンプ命令と呼びます。
-
分岐: 制御命令が条件に応じて制御フローを変更する場合、それは分岐命令と呼ばれます。
-
-
制御の流れを変更する可能性のある命令
-
ブランチ
-
ジャンプ
-
プロシージャコール
-
プロセスリターン
-
-
制御コマンドの使用頻度
- 制御の流れを変える命令の多くは分岐命令(条件付き転送)です。
-
分岐条件を表現するためによく使用される 3 つの方法とその長所と短所
名前 分岐条件の検出方法 アドバンテージ 欠点がある コンディションコード (CC) ALU 演算によって設定されたいくつかの特殊ビット (つまり CC) を検出します 分岐条件を自由に設定可能 コンディションコードは追加された状態です。また、条件コードが分岐命令に正常に送信されることを保証する必要があるため、命令の実行順序も制限されます。 コンディションレジスタ 比較命令は比較結果を任意のレジスタに書き込み、テスト時にレジスタをチェックします。 単純 レジスタを占有します 比較して分岐する 比較演算は分岐命令の一部であり、通常、この種の比較には特定の制限が適用されます。 分岐は (2 つの命令ではなく) 1 つの命令で実装できます。 パイプライン方式を使用すると、この命令の演算が多すぎて 1 拍で完了できない場合があります -
転送先アドレスの表現
- 最も一般的な方法: PC 相対アドレス指定
- 命令にはオフセットが設けられており、プログラムカウンタ(PC)の値にオフセットを加算することでターゲットアドレスが得られます。
- アドバンテージ
- ターゲットアドレスを表すために必要なビット数を効果的に削減します。
- 位置に依存しません (コードは実行のためにメイン メモリのどこにでもロードできます)。
- キー: オフセット フィールドの長さを決定します。
- シミュレーションの結果、4 ~ 8 ビットのオフセット フィールド (命令ワード単位) を採用することで、ほとんどの制御命令の転送ターゲット アドレスを表現できることがわかりました。
- 最も一般的な方法: PC 相対アドレス指定
-
プロシージャの呼び出しと戻り
- 制御フローの変更に加えて、マシンの状態、または少なくともリターン アドレス (専用リンク レジスタまたはスタック上のいずれか) を保存する必要がある場合があります。
- 以前は、一部の命令セット アーキテクチャは、多くのレジスタの内容を保存するための特殊な保存メカニズムを提供していました。
- 新しい命令セット アーキテクチャでは、コンパイラがレジスタの内容を保存または復元するためのロードおよびストア命令を生成する必要があります。
2.4 オペランドの型とサイズ
-
データ表現: コンピュータ ハードウェアによって直接認識され、命令セットによって直接呼び出すことができるデータ型。
- すべてのデータ型の中で最も一般的に使用され、比較的シンプルで、ハードウェアでの実装が比較的簡単です。
-
データ構造: ソフトウェアによって処理および実装されるさまざまなデータ タイプ。
- 研究: これらのデータ型の論理構造と物理構造の関係を調べ、対応するアルゴリズムを提供します。
-
システムアーキテクトが解決すべき問題: データ表現をどのように決定するか? (ソフトウェアとハードウェアの妥協)
-
オペランドの型を表す方法は 2 つあります
- オペランドのタイプは、命令内のオペコードによって指定されます。
- 識別子を使用したデータ表現。データにはマークが付けられ、オペランドのタイプはデータ自体によって指定されます。
- 利点: 命令セットの簡素化、ハードウェアによる整合性チェックと型変換の自動実装、機械語と高級言語間の意味論的なギャップの縮小、コンパイラの簡素化など。
- 短所: 実行中に識別子を動的に検出する必要があるため、動的オーバーヘッドが比較的大きいため、このスキームを使用するマシンはまれです。
-
オペランド サイズ: オペランドのビット数またはバイト数。
-
主なサイズ: バイト (8 ビット)、ハーフワード (16 ビット)、ワード (32 ビット)、ダブルワード (64 ビット)
-
文字: ASCII コードで表され、サイズは 1 バイトです。、
-
整数: 2 の補数表記で表され、そのサイズはバイト、ハーフワード、またはシングル ワードになります。
-
浮動小数点オペランド:単精度浮動小数点数(1ワード)、倍精度浮動小数点数(ダブルワード)。一般的にIEEE 754浮動小数点規格を採用
-
10 進オペランド型
- 圧縮 10 進数または 2 進化 10 進数 (BCD コード): 4 ビットのバイナリ コードは 0 ~ 9 の数値を表すために使用され、2 つの 10 進数が 1 バイトに結合されて格納されます。
- 非パック 10 進数: 10 進数を文字列として直接表します。
-
2.5 命令フォーマットの設計
-
命令は 2 つの部分で構成されます: オペコード、アドレス コード
-
命令フォーマットの設計:命令語のエンコード方式を決定する
- オペコード フィールドとアドレス コード フィールドのエンコードと表現が含まれます。
-
オペコードのエンコーディングは比較的シンプルで直感的です
- ハフマン符号化方式
- オペコードの平均ビット数は削減されますが、得られるコードは可変長かつ不規則であり、ハードウェア処理には適していません。
- 固定長オペコード
- オペコードのデコード速度を保証します。
- ハフマン符号化方式
-
オペコードの 3 つのエンコード方法:
-
固定長、ハフマン符号化、拡張符号化
-
オペコードエンコーディングを最適化する目的: プログラムのストレージスペースを節約する
-
ハフマンオペコードの主な欠点は次のとおりです。
-
オペコードの長さが非常に不規則であり、ハードウェアによるデコードが困難です
-
アドレスコードと合わせて固定長命令を構成するのが難しい
-
-
拡張符号化方式:固定長オペコードとハフマン符号化方式を組み合わせた符号化方式
-
-
アドレッシングモードを表現する 2 つの方法
- アドレッシング モードはオペコード内でエンコードされ、オペコードは対応する操作のアドレッシング モードを記述します。
- 適切: プロセッサはロードストア構造を採用しており、アドレッシング方法はわずかです。
- 対応するオペランドのアドレッシング モードを表す特別なアドレス記述子を設定します。
- 以下に適しています: 複数のアドレッシング モードと複数のオペランドを持つ命令を備えたプロセッサ。
- アドレッシング モードはオペコード内でエンコードされ、オペコードは対応する操作のアドレッシング モードを記述します。
-
考慮事項
- マシン内のレジスタ数とアドレッシング モードの数が平均命令ワード長に及ぼす影響と、それらがオブジェクト コード サイズに及ぼす影響。
- 設計された命令フォーマットは、ハードウェア処理、特にパイプライン実装に便利です。
- 命令ワード長は、任意のビット数ではなく、バイト (8 ビット) の整数倍である必要があります。
-
命令セットの 3 つのエンコード形式
-
可変長符号化形式、固定長符号化形式、混合符号化形式
-
可変長エンコード形式
- このエンコード形式は、命令セットにさまざまなアドレッシング モードと操作がある場合に最適です。
- 利点: オブジェクト コードを表すために最小限のバイナリ ビットを使用します。
- 短所: 各命令のワード長と実行時間は大きく異なる場合があります。
-
固定長エンコード形式
- 演算タイプとアドレッシングモードをオペコードにエンコードします。
- このエンコード形式は、アドレッシング モードや操作の種類がほとんどない場合に非常に適しています。
- デコードの複雑さを効果的に軽減し、デコードの速度を向上させることができます。
- ほとんどの RISC 命令セットはこのエンコード形式を使用します。
-
ハイブリッドエンコーディング形式
- いくつかの固定命令語長が利用可能です。
- オブジェクトコードの長さを短縮するだけでなく、デコードの複雑さも軽減するという目標を達成するために。
-
2.6 MIPS 命令セットの構造
2.6.1 MIPS レジスタ
-
32 個の 64 ビット汎用レジスタ (GPR)
- R0、R1、…、R31
- 整数レジスタとも呼ばれます
- R0 の値は常に 0 です
-
32 個の 64 ビット浮動小数点レジスタ (FPR)
- F0、F1、…、F31
- 32 個の単精度浮動小数点数 (32 ビット) を格納するために使用されます。また、32 個の倍精度浮動小数点数 (64 ビット) を格納するために使用することもできます。
- 単精度浮動小数点数 (32 ビット) を格納する場合、FPR の半分だけが使用され、残りの半分は役に立ちません。
-
いくつかの特殊レジスタ
- 汎用レジスタとデータを交換できます。
- たとえば、浮動小数点ステータス レジスタは、浮動小数点演算の結果に関する情報を保持するために使用されます。
2.6.2 MIPS データ表現
- MIPSデータ表現
- 整数
- バイト(8ビット) ハーフワード(16ビット)
- ワード (32 ビット) ダブルワード (64 ビット)
- 浮動小数点数
- 単精度浮動小数点数(32ビット) 倍精度浮動小数点数(64ビット)
- 整数
- バイト、ハーフワード、またはワードが 64 ビット レジスタにロードされると、ゼロ拡張または符号拡張されてレジスタの残りの部分が埋められます。ロード後、これらは 64 ビット整数として演算されます。
2.6.3 MIPS データアドレッシングモード
- アドレッシングにはイミディエイトアドレッシングとオフセットアドレッシングの 2 種類しかありません。
- イミディエイトフィールドとオフセットフィールドは両方とも 16 ビットです。
- レジスタ間接アドレッシングは、オフセットとして 0 を使用して実装されます。
- 16 ビットの絶対アドレス指定は、R0 (常に 0) をベース レジスタとして使用することによって実現されます。
- MIPS メモリはバイト単位でアドレス指定可能で、アドレスは 64 ビットです。
- すべてのメモリアクセスは境界に合わせて行う必要があります
2.6.4 MIPS命令フォーマット
-
アドレッシングモードはオペコードにエンコードされます。
-
すべての命令は 32 ビットです
-
オペコードは6ビットを占有します
-
3つのコマンド形式
-
クラス I の指示
- すべてのロードおよびストア命令、イミディエイト命令、分岐命令、レジスタジャンプ命令、レジスタリンクジャンプ命令を含みます。
即値フィールドは 16 ビットで、即値またはオフセットを提供するために使用されます。
-
R命令
- ALU命令、特殊レジスタ読み書き命令、移動命令などを含みます。
-
クラス J の命令
-
ジャンプ命令、ジャンプ&リンク命令、セルフトラップ命令、例外復帰命令などがあります。
-
このタイプの命令では、命令ワードの下位 26 ビットがオフセットであり、PC 値に加算されてジャンプ アドレスが形成されます。
-
2.6.5 MIPSの動作
-
MIPS 命令は 4 つのカテゴリに分類できます
- ロードして保存する
- ALU演算
- 分岐してジャンプする
- 浮動小数点演算
-
記号の意味
- x←ny: y から x に n ビットを転送します
- x, y ← z: z を x と y に転送
-
添え字: フィールド内の特定のビットを示します。
- 命令とデータには、最上位ビットから最下位ビット (つまり、左から右) に連続して番号が付けられます。最上位ビットは 0 番目のビット、2 番目に上位のビットは 1 ビット目、というようになります。
- 添え字には数値または範囲を指定できます。
- 例: Regs[R4]0: レジスタ R4 の符号ビット
- Regs[R4]56...63: R4 の最下位バイト
-
Mem: メインメモリを示します。
- バイトアドレッシングにより、任意の数のバイトを転送できます。
-
上付き文字: フィールドが複製される回数を示すために使用されます。
- 例: 0 32: すべて 0 の 32 ビット フィールド
-
シンボル ##: 2 つのフィールドの連結に使用され、データ送信のどの側にも表示できます。
- 例: R8、R10: 64 ビット レジスタ、その後 Regs[R8]32…63 ←32 (Mem [Regs[R6]]0) 24
- ## メム [Regs[R6]]
- 式の意味は次のとおりです。
- R6 の内容はメモリにアクセスするためのアドレスとして使用され、取得されたバイトは符号ビットに従って 32 ビットに拡張され、R8 の下位 32 ビットと R8 の上位 32 ビットに格納されます (例: Regs[R8) ]0...31) は変更されません。