バロース B5000
多くの人にとってB5000は上述の通りスタックマシンとして記憶されている。しかし、アーキテクチャ上重要な点として他にタグベースである点と記述子ベースである点がある。
当初のB5000では、各ワードにビットが付属していて、そのワードがコードなのかデータなのかを示していた。これはセキュリティ機構の一種であり、コードの破壊(ハッカーによる不正な書き換えなど)を防ぐ。
コードを書き換えることができないため、B5000では完全なリエントラント性を備えることができる。あるプログラムを何人のユーザーが実行していてもメモリ上にはそのプログラムのコードはひとつしか存在しない。これによってメモリ利用効率が向上する。
後にB6500でこの機能が強化され、48ビットワードに3ビットのタグが付属するように実装された。内部的なデータビットはワードの0番~47番のビットであり、タグは48~50番である。ビット48はリードオンリービットである。つまりタグの値が奇数であればユーザーレベルのプログラムはそのワードに書き込むことができない。コードに使用されるタグは3となっている。以下にタグの値とその機能を列挙する:
内部的には一部機種はワード長が60ビットになっている。
B5000のアーキテクチャはALGOLスタックアーキテクチャである。これ(のメモリレイアウトとプログラムからの使い方)は、PDP-11やMC68000などのリニアなアーキテクチャとも、x86などのセグメント方式のアーキテクチャとも異なる。
ALGOLはシステム記述言語であり、B5000はALGOLを意識して設計された。これが出発点である。他のCOBOLなどの言語もサポートされた。強力な文字列操作命令により、高速なコンパイラの開発が可能となったのである。
B5000上のALGOLは拡張版であり、強力な文字列操作命令を持っているが、ALGOL本来の一部の要素(特に仮引数の型指定が不要という点)が排除されている。また、C言語の #define よりも整然としたDEFINE機構を持っており、プリプロセッサというよりも言語仕様に組み込まれていた。また、EVENT というデータ型が追加されており、プロセス間通信に使われた。また ON FAULT ブロックでプログラムの障害を扱うことができた。
ユーザーレベルのALGOLにはオペレーティングシステム (OS) が必要とするような危険な機能は提供されていない。そのために2つのレベルの言語拡張が用意されている。ESPOLとNEWPはOSおよびOSに密接に関連するソフトウェアの記述用、DCALGOLとDMALGOLはより特殊なシステムソフトウェア用である。
B6500とB7500は、バロースのシステムとしては唯一、今日までアーキテクチャが存続している。B5000がベースとなっているが、アーキテクチャは刷新されている。主な違いは次の通り。
B5000では命令語が12ビット固定だったが、B6500では命令コードは8ビットで命令長は可変である。
B5000はデータワード長が48ビットだったが、B6500では51ビットである(データ形式を示す3ビットのタグが追加されている)。
B5000はマスタースレーブ型だったが、B6500では対称型マルチプロセッシング (SMP) をサポートしている。
B6500はスタックが枝分かれする方式を採用している。
B6500はページ化配列をサポート。
B6500では、外側ブロックの変数に内側の入れ子になったサブルーチンからアクセスする手段が用意された。