VAX

名称

"VAX"は本来 Virtual Address eXtension の頭字語である。その名が示すとおり、VAXは16ビットのPDP-11の32ビットへの拡張であり、その巨大なアドレス空間の管理に仮想記憶を使用した初期の商用コンピュータでもあった。初期のVAXプロセッサには「互換モード」が実装されていて、PDP-11の命令のほとんどをエミュレートできた。VAX-11 という呼称は PDP-11ファミリの継承者であることを強調したものである。後のバージョンでは互換モードが縮小され、PDP-11の命令は徐々にエミュレーションソフトウェアで実行されるようになっていった。
VAXという名称は、1970年代に Mick Atkinson が発明した掃除機のブランド名でもある。DECとの間で商標使用に関する法的なやりとりがあった。解決策として非競争協定が結ばれた。つまり、DECは将来に渡って家電製品に進出せず、VAXコーポレーションはコンピュータに進出しないという約束である。
英語圏のユーザーの間では、「VAXコンピュータシステム」の複数形として VAXen という言葉が使用された。

歴史

最初のVAXは VAX-11/780 であり、1977年10月25日にDECの株主会議で公開された。この機種のアーキテクトはカーネギーメロン大学でゴードン・ベルが指導した Bill Streckerである。その後様々な価格および性能、容量の派生機種が開発された。VAXは1980年代初期には非常に一般的になった。
VAX-11/780は時にMIPSの基準として扱われる。コンピュータの性能を示すMIPSという単位は、本来、単に実行される命令の個数を示すだけで、具体的にどのような仕事をこなせるのか、を反映しない。そこで、VAX-11/780でなんらかのベンチマークプログラムを動かし、それが示す性能を1MIPSとして、性能の基準とする、ということがしばしば行われたのである。1 VAX MIPS は VAX-11/780 の性能を意味し、あるコンピュータが 27 VAX MIPS の性能という場合、VAX-11/780 の約27倍の性能であることを意味する。この目的で実際によく使われたベンチマークプログラムは当時ポピュラーだったものの一つであるドライストーンで、こんにちでも時折使われている単位DMIPSは、あるマシンのドライストーンの成績の値を、VAX-11/780のドライストーンの成績の値1757で割った値である。他にVAX-11/780を性能比較の基準として今も使っている例として、BRL-CADベンチマークがある。これはBRL-CADというソリッドモデリングソフトウェアに含まれる性能解析スイートである。
DEC周辺では VUP (VAX Unit of Performance) という用語が使われた。関連用語として cluster VUP が VAXcluster の全体性能を示すのに使われた。
VAX-11/780にはLSI-11が内蔵されており、マイクロコードのロード、ブート、診断などに使われていた。その後の機種では内蔵していない。そのため780のユーザーはVMS以外にLSI-11上でRSX-11MやRT-11といったOSを動作させることもできた。
その後VAXは様々な実装がなされた。最初のVAXはTTLで実装されており、4×5フィートの筐体が1個のCPUの実装に使われた。ECLゲートアレイ/マクロセルアレイチップを複数個使用した実装のCPUは、VAX 8600、VAX 8800、VAX 9000シリーズで使用された。複数個のMOSFETカスタムチップで実装されたCPUはVAX 8100、VAX 8200シリーズで使用された。VAX 11/730および725といったローエンド機はビットスライス方式で実装している。
MicroVAX I はVAXファミリの転換期のマシンである。その設計時、VAXアーキテクチャ全体を1個のVLSIチップで実装することはまだ不可能だった（後に VAX 8200/8300で実施されたような数個のVLSIチップによる実装も無理だった）。その代わりに MicroVAX I ではVAXの命令セットの複雑な部分のほとんどをエミュレーションソフトウェアに移行させ、基本的な命令だけをハードウェアで実装したのである。これによって大量に必要とされたマイクロコードを削減することが可能となった。これを"MicroVAX"アーキテクチャと称した。MicroVAX I では、ALUとレジスタが1個のゲートアレイチップで実装され、それ以外の制御部は従来の論理回路を使用した。
その後の MicroVAX II の 78032 CPU (DC333) と 78132 FPU (DC335) がMicroVAXアーキテクチャを完全VLSI（マイクロプロセッサ）で実装したものである。78032 はメモリ管理ユニットを内蔵した初のマイクロプロセッサである。MicroVAX II の中核部は1枚の基板で実装されており、そこにプロセッサと1MBのメモリとDMA機構を備えたQ22-busのインタフェースが搭載されている。MicroVAXシリーズのその後の機種ではさらに改良やメモリの追加が行われていった。
その後、CVAX、SOC（"System-on-a-chip"、ワンチップ版CVAX）、Rigel、Mariah、NVAX とチップは進化していった。VAXマイクロプロセッサは当初低価格なワークステーション向けに進化し、その後ハイエンドの機種にも使用されていった。メインフレームからワークステーションまでをカバーする1つのアーキテクチャは当時の業界ではVAXだけであった。CVAXマイクロプロセッサのダイには「最良のものを盗むには十分気をつけて」という意味の言葉がいいかげんなロシア語でエッチングされていた。これは当時のソビエト連邦の技術者に向けたメッセージであり、ソ連ではDECのコンピュータをリバースエンジニアリングしてクローンを開発していたためである。
VAXアーキテクチャはRISC技術に取って代わられた。1989年、DECはMIPSアーキテクチャのプロセッサを使用しUltrixの動作するDECstationをリリースした。1992年、DECは自身のRISCプロセッサ Alpha(当初の名称は Alpha AXP)を導入した。この高性能64ビットRISCアーキテクチャ上では OpenVMS が動作した。
2000年8月、コンパックは2000年末までにVAXシリーズの生産を完全に終了すると発表した。2005年までにVAXの生産は終了したが、古いシステムは今でも世界中で使われている。

オペレーティングシステム

VAXの本来のオペレーティングシステムは、DECのVAX/VMS（後にAlphaに移植されPOSIX準拠となった際に OpenVMS へ改名）である。VAXアーキテクチャとVMSオペレーティングシステムは互いを最大限に生かすため、同時並行的に開発された。これはVAXcluster機能の最初の実装の際も同様である。他のVAX用オペレーティングシステムとしては、BSD（4.3まで）、Ultrix-32、RTOSのVAXELN、Xinuなどがある。最近では、NetBSDとOpenBSDが様々なVAX機種をサポートし、LinuxのVAXアーキテクチャへの移植も行われている。

命令セット

VAXの命令セットは強力で直交性が高い。当時多くのプログラムがアセンブリ言語で書かれていたので、プログラマが親しみやすい命令セットという観点は重要だった。その後、高水準言語でプログラミングすることが多くなり、命令セットを気にするのはコンパイラ開発者ぐらいになった。
VAXの命令セットで特徴的な点として、サブプログラムの最初にレジスタマスクを置く点が挙げられる。これは、そのサブプログラムに制御が渡されたとき、どのレジスタの内容を保持するかを示すビットパターンである。レジスタマスクは実行コード内にデータを埋め込んでいる形式なので、機械語コードを逐次的に解析するのが難しくなる。例えば、機械語コードに何らかの最適化を施すのが複雑化する。

アドレッシングモード

VAXは、リテラル（即値）、レジスタ、ポストインクリメント、プレデクリメント、レジスタ間接、ポストインクリメント付きレジスタ間接、プレデクリメント付きレジスタ間接、ディスプレースメント (byte, word, long) 付きレジスタ間接、ディスプレースメント (byte, word, long) 付き二重間接、インデックス付きといった多数のアドレッシングモードを持ち、それらを組み合わせて使用できる。プログラムカウンタ (PC) はR15として汎用レジスタの1つとされているので、PCに対して各種アドレッシングモードを使用することもできる。そのためPC相対アドレッシングが可能であり、位置独立コードが容易に書ける。また、VAXには実効アドレスをロードする命令群もあり、それ自体はメモリアクセスしないが、後で使用するアドレスを計算するのに使われる。

VAXシステム

ほぼ時系列に列挙している。DEC内部で開発中に使用したコードネームをイタリック体で示す。VAXシステムはVLSIプロセッサを使っているか使っていないかで大まかに分けられる。MicroVAX-I はその過渡期の設計である。