バロース B5000:革新的なスタックマシンアーキテクチャ
バロース B5000は、1961年に
バロース社が発表した大型コンピュータであり、その革新的なアーキテクチャは、当時のコンピュータ業界に大きな影響を与えました。ロバート・S・バートン率いるチームによって設計されたこのマシンは、当時としては非常に先進的なものであり、その影響は後継のシステムや他社のコンピュータにも見られます。
設計思想
当時の
バロースは、大型、中型、小型システムでそれぞれ異なるアーキテクチャを採用するという戦略を取っていました。B5000は大型システムとして、
スタックマシン型の命令セットを採用し、命令の密度を高めるとともに、48ビットのデータワード長を採用しました。また、
高水準言語である
ALGOL 60に最適化されており、コンパイラの単純化と高速化を実現しました。
B5000の特徴
B5000は、以下のような特徴を持つ画期的なコンピュータでした。
スタックマシンアーキテクチャ: 0オペランド命令セットを採用し、すべてのコードが自動的にリエントラントになるように設計されました。
データ駆動型タグ付き/記述子ベースアーキテクチャ: データにタグを付与することで、データ型やアクセス権限を管理し、セキュリティと信頼性を向上させました。
高水準言語指向: ハードウェアはソフトウェアの要求仕様に基づいて設計され、高水準プログラミング言語をサポートするように作られました。
アセンブリ言語なし: システム全体が
ALGOLの拡張版で記述され、プログラマはレジスタに直接アクセスする必要がほとんどありませんでした。ただし、機械語に1対1対応するESPOLという言語も存在しました。
単純化された命令セット: スタックアーキテクチャの採用により、命令セットが簡略化され、コンパイラの設計が容易になりました。
高度なオペレーティングシステム (MCP): 高度な
オペレーティングシステムであるMaster Control Program(MCP)が、システムの基盤として提供されました。
マスタースレーブ型マルチプロセッシング: 初期のモデルはマスタースレーブ型でしたが、後に対称型マルチプロセッシング(SMP)に対応しました。
仮想記憶: 世界初の仮想記憶の商用化を実現し、大規模なプログラムの実行を可能にしました。
強力な文字列操作機能: 文字列操作を効率的に行うための専用命令が用意されていました。
先進的な開発および評価手法: 問題の早期検出のために、先進的な開発および評価手法が採用されました。
革新的なシステム設計
B5000の設計で特筆すべき点は、ソフトウェアのニーズを考慮してアーキテクチャと命令セットが設計されたという点です。当時の慣習では、プロセッサとその命令セットは設計が完了してからソフトウェア開発者に渡されるのが一般的でしたが、B5000ではそのプロセスが逆転されました。このアプローチは、ソフトウェア開発の効率化と高品質化に大きく貢献しました。
言語サポート
B5000は、当時登場したばかりのFORTRANや
COBOLではなく、より進んだ
高水準言語である
ALGOL-60をベースとしたElliott
ALGOLをサポートしました。
ALGOLは、
バッカス・ナウア記法を用いて設計された非常にきれいな文法を持つ言語であり、
Pascal、
C言語、Simula、
Ada、Eiffelなど、その後の多くの
プログラミング言語のルーツとなっています。B5000の
ALGOLコンパイラは非常に高速であり、そのワンパスコンパイラは、初期のコンピュータのメモリ制約を克服し、コンパイル時間を大幅に短縮しました。
B6500への進化
B5000のアーキテクチャは、後継のB6500に受け継がれました。B6500では、命令語長が可変になり、データワード長が51ビットに拡張されました。また、
マスタースレーブ型
マルチプロセッシングから対称型
マルチプロセッシング(SMP)に移行するなど、アーキテクチャが大幅に刷新されました。B6500のアーキテクチャは、現在も
ユニシスのClearPath Libraファミリに受け継がれており、B6700からサポートしているMCP
オペレーティングシステムがほぼそのまま動作しています。
B8500の開発と中止
B5000をベースとして、軍用コンピュータD825の設計を統合しようとして、B8500が開発されました。B8500は集積回路や磁気薄膜メモリを採用し、ワード長は48ビット、
スタックマシンであり、B5500のような識別子を採用していましたが、互換性はありませんでした。ハードウェアの信頼性が低く、完全なシステムが納入されることはなく、1970年以降にプロジェクトは中止となりました。
B5000の歴史
B5000は、
バロース初の大型システムであり、
トランジスタで構成された第2世代コンピュータでした。その後、B5500、B6500、B5700、B6700、B7700、B6800、B7800、
バロースAシリーズと、アーキテクチャをほぼそのままに、25年にわたって新たな技術で実装されてきました。
バロースがスペリーを買収して
ユニシスになっても、
CMOSの
ASICであるMCPを使った新機種が投入されました。2005年に発表されたClearPath Libra 590は、MCP
CMOSプロセッサと同時にIntel
Xeonプロセッサを搭載でき、エミュレーションでも
バロース大型システムを実行可能となっています。
B5000のアーキテクチャは、
ALGOLスタックアーキテクチャを基本としています。
ALGOLは、システム記述言語として使用され、B5000は
ALGOLを意識して設計されました。また、強力な
文字列操作命令により、高速なコンパイラの開発が可能となりました。B5000上の
ALGOLは拡張版であり、強力な
文字列操作命令を持つ一方で、仮引数の型指定が不要であるなどの
ALGOL本来の一部の要素は排除されています。
ESPOLとNEWP
B5000の
[オペレーティングシステム]であるMCPは、当初
ALGOLを拡張したESPOLという言語で記述されていましたが、その後NEWPという言語に置き換えられました。NEWPは、
ALGOLを拡張した言語であり、ESPOLよりもセキュリティを強化しています。危険のある構文要素は、明示的に使用することを示さない限り使うことができないため、複数レベルの保護機構を提供します。
DCALGOLとメッセージ制御システム (MCS)
OSとユーザープログラムの中間には
ミドルウェアが存在し、それはDC
ALGOLという言語で記述されます。DC
ALGOLは、OSおよびプロセス間のメッセージ交換に使われ、ネットワークからメッセージを受け取り、特定のプロセスやMCSにディスパッチします。MCSは、複数のユーザーセッションを単一のMCS
スタックで制御し、負荷バランス制御もMCSレベルで行われます。MCSは、外部コプロセッサTCPと連携し、今日のパケットと同様のメッセージで通信します。
DM
ALGOLは、DMSII
データベース向けに拡張された
ALGOLです。DM
ALGOLは、
データベース記述ファイルからDMSII
データベースソフトウェアをコンパイルする言語であり、
データベースを利用する側は普通の
ALGOLや
COBOLを使用できます。DM
ALGOLの最大の機能は、テーブルやインデックスを操作するコードを生成するプリプロセッシング機構です。
スタックアーキテクチャの詳細
B5000は、
スタックマシンであり、配列以外のデータはすべて
スタック上に配置されます。
スタック操作は効率を重視して最適化され、
マルチタスクも効率化されています。コンテキストスイッチはMVSTという一つの命令で実行でき、各
スタックがプロセスに対応します。
スタックの先頭2ワードはレジスタ(レジスタAとB)に配置され、ほとんどの命令はこの2ワードを使って実行されます。Dレジスタは各
スタックフレームの開始地点を指し、プロシージャ呼び出しに応じて自動的に更新されます。Dレジスタを使用することで、外側のグローバルな環境にもローカル変数と同様にアクセスできます。
プログラムとスタックのマッピング
プログラムの実行は、
スタックフレームという形で管理されます。
スタックフレームは、実行中の環境の語彙レベルに対応しており、静的な入れ子構造を持ちます。プロシージャの実行には、normal、call、process、runの4種類があり、それぞれ異なる特性を持ちます。特にprocessは、非同期タスクとしてプロシージャを呼び出し、別の
スタックで処理をできるようにします。
スタック構造の利点として、プログラムが異常終了したときに
スタックのダンプを取得することで、問題を正確に見つけ出すことができる点が挙げられます。また、
スタックアーキテクチャでは、プログラムは必然的に再帰可能となります。B5000では、FORTRANのような再帰不可能な言語でさえ再帰的に実行できました。
タグベースのアーキテクチャ
B5000は、タグベースのアーキテクチャを採用しており、各ワードにビットを付加して、そのワードがコードなのかデータなのかを示していました。この機構は、セキュリティ機構の一種であり、コードの破壊を防ぎ、完全なリエントラント性を実現しました。B6500では、48ビットワードに3ビットのタグが追加され、タグの種類によってデータの種類やアクセス権限が区別されました。
セグメンテーション
B5000シリーズでは、それぞれのプログラムがProgram Reference Table (PRT)というセグメント情報テーブルを持ち、PRT内の情報を利用してメモリへのアクセスを行います。これにより、メモリの保護と効率的な利用を実現していました。
マルチプロセッサ
B5000シリーズは、マルチプロセッサ構成もサポートしていました。高速なバスで相互接続された複数のプロセッサが連携して動作することで、システムの処理能力を向上させていました。
B5000の影響
B5000は、その後のコンピュータ技術に大きな影響を与えました。Forth言語の設計者であるチャールズ・ムーアは、B5500の
スタックアーキテクチャに影響を受け、Forth言語の設計にその概念を取り入れました。また、ソビエト連邦のメインフレームおよび
スーパーコンピュータElbrusシリーズは、B5000の影響を受けて
スタックアーキテクチャとタグ付きメモリを採用しました。さらに、HP 3000システムやタンデムコンピューターズのNonStopシステムなど、多くのコンピュータシステムがB5000の設計思想を受け継いでいます。
アラン・ケイは、B5000のデータ駆動型タグ付きアーキテクチャに影響され、オブジェクト指向プログラミングやSmalltalkに関する考察を深めました。
まとめ
バロース B5000は、1960年代のコンピュータ技術における画期的な成果であり、その先進的な設計は、その後のコンピュータアーキテクチャや
プログラミング言語に大きな影響を与えました。
スタックマシンアーキテクチャ、タグ付きメモリ、
高水準言語指向など、B5000が実現した多くのイノベーションは、今日のコンピュータシステムにおいても重要な概念となっています。