CISC の極み Intel iAPX 432 の紹介

>100 Views

April 21, 25

スライド概要

1981年に発表されたIntel iAPX 432というCPUを紹介します。非常に複雑・多機能なCPUです。自作CPUの機能を考える際に、この資料が影響を与えられればいいなと思います。

profile-image

サイボウズ・ラボ株式会社で教育向けのOSやCPU、コンパイラなどの研究開発をしています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

CISCの極み Intel iAPX 432の紹介 第5回 自作CPUを語る会 2025/04/12 @uchan_nos 1 / 24

2.

▌目次 iAPX 432 とは システム構成と Multibus 2 階層のアドレス変換 機械語の構造 オブジェクト保護 2 / 24

3.

▌iAPX 432を調べた理由 何かのきっかけでWikipediaの記事を読んだ https://ja.wikipedia.org/wiki/Intel_iAPX_432 x86に親しんだ身からすると、かなり奇抜な設計に思えた BuntanPCプロジェクトの参考になりそうだと思い、調査開始 「コンピュータ再設計プロジェクト」 積極的に「変な設計」を試してみたい 3 / 24

4.

▌iAPX 432 の概要 Intel Advanced Processor architecture 1981 年に発表 32 ビット、8MHz 2 年前に発表された MC68000 も 32 ビット 8MHz 1982 年に発表された Intel 80286 は 16 ビット 8MHz 1985 年に発表された Intel 80386 は 32 ビット 12MHz(?) メモリ管理やマルチタスクをハードウェアサポート 3 チップ構成 43201: 命令のフェッチとデコード 43202: マイクロコードの実行とメモリアドレス生成 43203: iAPX 432 と I/O デバイス間の通信とデータ転送 4 / 24

5.

▌iAPX 432 の特徴 スタックマシン型の命令実行 RAM にオペランドスタックを配置 汎用レジスタは無い 命令長はビット単位の可変長 1 命令の長さは 6 ビット~300 ビット超 命令セグメントは 16 ビットアドレス = 8KB が上限 徹底した間接アドレッシング プログラマが生のアドレスを指定することが無い(指定できない) すべてのメモリアクセスはアクセス記述子を使う 非常に高度な命令がある プロセス間でメッセージを送受信するための命令(SEND/RECEIVE) 型定義に基づきインスタンスを生成する命令(CREATE_TYPED_OBJ) 5 / 24

6.

▌iAPX 432 は遅い 実行時間の比較(単位はミリ秒) プロセッサ 検索 ふるい パズル Acker iAPX 432 (8MHz) 4.4 978 45700 47800 80286 (8MHz) 1.4 168 9138 2218 検索:長さ 120 の文字列から長さ 15 の部分文字列を探す ふるい:素数を探索する(エラストテネスの篩) パズル:bin packing 問題(アイテムを詰め切れる最小の容器数を求める問題) Acker:Ackermann(3, 6) を計算 BuntanPC でも計測を試みたがプログラムが暴走してしまった。おそらく再帰が深すぎた。比 較にちょうど良いと思ったんだけど。 6 / 24

7.

▌目次 iAPX 432 とは システム構成と Multibus 2 階層のアドレス変換 機械語の構造 オブジェクト保護 7 / 24

8.

▌iAPX 432 のシステム構成 GDP (General Data Processor) マイクロ命令バス μI 0 〜μI 15 43201 43202 命令デコーダ / IS 0 〜IS 6 マイクロ命令実⾏装置 マイクロ命令シーケンサ ACD 0 〜ACD 15 ACD 0 メモリ 〜ACD 15 Processor packet bus ACD 0 〜ACD 15 43203 Interface Processor AD 0 〜AD 15 Multibus メモリ Attached processor 8086 など I/O デバイス I/O デバイス 8 / 24

9.

▌I/O と Attached processor メモリ GDP General Data Processor Processor packet bus IP Interface Processor Multibus は産業用システムで使用されるコンピ ュータバスの規格 インテルによって開発され、IEEE 765 バス規格とし メモリ て採用 故障に強く、複雑な(大きな)装置も作れ、重要な 業界標準 マルチバス - Wikipedia Multibus Attached processor 8086 など IP はシステムメモリと Multibus ローカルメモリ 間でデータを転送する I/O Dev I/O Dev 実際の I/O 処理は Attached processor が担当 9 / 24

10.

▌目次 iAPX 432 とは システム構成と Multibus 2 階層のアドレス変換 機械語の構造 オブジェクト保護 10 / 24

11.

▌2 階層のアドレス変換 31 20 Access Directory Descriptor Index 16 15 4 AD (Access Descriptor) は 2 つのインデ ックスを持つ 0 Segment Index Object Table Directory Storage Descriptor 2 階層ページングと類似 それぞれ 12 ビット = 4096 個を指せる Object Table Object Descriptor Data Part Access Part Storage/Object descriptor は物理アドレ スを持つ 1つのメモリ領域(オブジェクト)を指す Object Descriptor は高々1つ アドレス空間は 12+12+16=40 ビット 11 / 24

12.

▌オブジェクト 上位アドレス (値が⼤きい⽅向) Data Part Access Descriptor はここを指す 下位アドレス (0⽅向) Access Part 8 4 byte offset 0 0 1 AD index 2 Access Part が ないオブジェクト が ないオブジェクト Data Part Access Part Data Part iAPX 432 のオブジェクトはすべて Data Part と Access Part を持つ どちらかのサイズが 0 のこともある Data Part はデータ本体 Access Part は AD が並ぶ それぞれの Part は最大 64KB 12 / 24

13.

▌システムオブジェクト:Domain object 1 つのモジュール≒プロセスを表現 モジュール:プロシージャ群+データ Domain Object Fault/Trace instruction object AD は、例 外発生時に実行する命令列を格納したオ ブジェクトを指す Public data variables Private data variables Fault instruction object AD Trace instruction object AD Instruction object AD Instruction object AD Data constants AD Domain-local object AD … iAPX 432 が規定 コンパイラが規定 その他の AD はコンパイラが独自に生成 1 つのプロシージャにつき 1 つ以上の Instruction object が対応 1 つの Instruction object には 8KB までの命 令を格納できる 8KB 以上のプロシージャは複数の Instruction object で表現 13 / 24

14.

▌システムオブジェクト:Instruction object 1 つのプロシージャを表現 Instruction Object Instructions byte offset 8 Local Constants DAI 6 Initial Operand Stack Pointer 4 Context Access Part Length 2 Context Data Part Length 0 Instructions は命令のビット列 このビット列はハフマン符号化(頻度に基づ く圧縮)されている Local Constants DAI は定数が格納された セグメントを指す なんと 432 の命令は 即値を持てない! メモリ領域に定数を置いておき、命令には DAI: Domain Access Index Domain object AD の を 指すインデックス 「定数の場所を示す情報」を含める ビット単位でアドレッシングするので最 大 64K bits = 8KB 14 / 24

15.

▌スカラ値の参照だけでもメモリアクセスが多発 Scalar data reference 7 or 16 bits Access selection X XX 00 2 ビットで Env 0~3 を選択 参照モード番号 2/6 ビットでその Env 内の AD を選択 モード オフセットのビット幅 Access selection モード のとき Access selection = 0/1 2 or 6 bits XX … 〜 Env 0 3 AD index スカラ値を得るだけで 4 回のメ モリ読み込みが必要: Context object Environment 0 AD Global constants AD Context message AD 引数 Current domain AD Environment 2 AD Environment 3 AD Calling context AD … る AD(32 ビット値)を読む ii. AD が持つ 2 つのインデックスで Local constants AD Environment 1 AD i. Env と AD index により指定され Domain object 2 段階のアドレス変換を行う iii. そのアドレスにオフセットを加え た場所を読む 15 / 24

16.

▌目次 iAPX 432 とは システム構成と Multibus 2 階層のアドレス変換 機械語の構造 オブジェクト保護 16 / 24

17.

▌機械語の構造 MSB 次の命令 Opcode Reference Format LSB Class 前の命令 それぞれ可変長のビット列 Class がオペランド数とそれぞれのサイズを決定 Format が参照とオペランドの対応を決定 Referece が読み書きするデータの場所を決定 オペランド数 オペランドサイズ Class 0 none 000110 1 byte 010110 1 double-byte 0000 … … … よく使うクラスは 短いビット列 17 / 24

18.

▌Format が参照とオペランドの対応を決定 オペランド数 オペランド1 オペランド2 オペランド3 明示的参照 Format 0 0 none 1 data ref 1 1 0 1 stack 0 1 2 data ref 1 data ref 2 2 00 2 data ref 1 data ref 1 1 10 2 data ref 1 stack 1 01 2 stack data ref 1 1 011 2 stack stack 0 111 3 data ref 1 data ref 2 data ref 3 3 0000 3 … … … … … 18 / 24

19.

▌目次 iAPX 432 とは システム構成と Multibus 2 階層のアドレス変換 機械語の構造 オブジェクト保護 19 / 24

20.

▌2 つの保護の仕組み 1. Refinement あるオブジェクトの公開部分だけを見せるビュー ドメインに含まれる特定のプロシージャだけ公開する、というようなことが 可能 CREATE REFINEMENT という命令がある 2. 制限と拡大(restriction and amplification) 普段はオブジェクトへのアクセスを制限し、必要な場合に権限を拡大する RESTRICT RIGHTS / AMPLIFY RIGHTS という命令がある 20 / 24

21.

▌Refinement 元となる オブジェクト Refinement オブジェクト Refinement オブジェクトは元となるオブジ ェクトの一部を切り取ったビュー 切り取る場所はオフセットと長さで決まる 複数の非連続な場所は指定できない 使用例 Refinement descriptor AP l ength Level DP offset Byp dir index AP offset X Obj type プロシージャの引数だけにアクセス可能な Refinement を介して引数を渡す Domain の一部のプロシージャのみを公開する DP length Byp seg index XX 10 21 / 24

22.

▌引数のための Refinement 呼び出し元Context object 呼ばれた側Context object Operand stack Operand stack パラメタデータ空間 プロセッサ定義フィールド パラメタデータ空間 プロセッサ定義フィールド Environment 0 AD Global constants AD 1 Context message AD 2 他のプロセッサ定義ADs Calling context AD Refinement descriptor 引数は独立したメモリ 領域ではなく Context object の一部に置く Environment 0 AD Global constants AD 1 Context message AD 2 他のプロセッサ定義ADs 8 Calling context AD 他のプロセッサ定義ADs パラメタアクセス空間 他のプロセッサ定義ADs パラメタアクセス空間 … … 8 引数領域を指す Refinement を作成 Refinement を指すよう に呼ばれる側の Context message AD を設定 Calling context AD は Read/Write 権限を持た ず、Return 権限を持つ 22 / 24

23.

▌ドメインの Refinement Domain object Refinement の 元のDomain object Domain object は複数のプロシージャ や変数を持つ Public variables Refinement により外部モジュールに 対する可視性を制御できる Public vars Private variables Public ADs Fault instruction object AD Trace instruction object AD な操作とデータ を指すADs Publicな操作とデータ を指すADs Private 呼び出された公開プロシージャからは 全てのプロシージャと変数が見える Refinement を介して CALL が実行され た場合でも、元の Domain object を指 す AD が Context object に設定されるた め 23 / 24

24.

▌参考文献 iAPX 43201 iAPX 43202 VLSI General Data Processor (GDP のデータシート) Intel (1981) iAPX432 General Data Processor Architecture Reference Manual Intel (1981) Capability-Based Computer Systems の “Chapter 9: The Intel iAPX 432” Henry M. Levy (1984) Intel iAPX 432 - Computer Science 460 - Final Project David King, Liang Zhou, Jon Bryson, David Dickson (1999) http://www.brouhaha.com/~eric/retrocomputing/intel/iapx432/cs460/ 24 / 24