HP 3000

HP 3000シリーズは、ヒューレット・パッカード社が1973年に困難な開発を経てリリースしたミニコンピュータファミリである。最初の機種は性能問題から一旦回収された。このシリーズは最初にタイムシェアリング機能を搭載したオペレーティングシステム(OS)を搭載したミニコンピュータとなることを意図していた。信頼性が高く強力であったため、オフィスコンピュータ的な使われ方が主流であった。初期の機種は大きな筐体であったが、後の機種は机の下に収まる程度となった。

製品寿命はDECのVAXよりも長かった。2001年11月、後継である e3000 シリーズのサポート終了を5年後とすることが発表された。製品の新規販売は2003年までで、サポート終了までの移行期間は今のところ 2008年12月31日までとされている（当初、2006年末とされていたが延長された）。

初期のメモリセグメントと64K制限 
コードとデータは可変長セグメントに格納される。コードはリードオンリーでリエントラントであり、最大 32,760 バイトまで、データは最大 65,528 バイトまでである。MPE はコードセグメントをプログラムファイルから読み込み、セグメント化された共有ライブラリ (SL) ファイルを必要に応じて読み込む。1つのプロセスには最大 256 セグメントまで持たせることができる。

コードセグメントは最大 32KB だが、ルーチン呼び出し時にはセグメント番号とセグメント内のルーチン番号を指定するため、1つのプログラム内に理論上最大 64K 個のルーチンが存在可能であった。当時の16ビットミニコンピュータではアドレス空間が全部で 64K であることが多かった。データセグメントとスタックセグメントは最大64Kであった。共有ライブラリには共有のデータは存在せず、各プロセス専用のデータセグメントを使用する。

システムのプログラミングはALGOL系の言語 SPL で行われるが、インラインアセンブラが利用可能であり、命令セットへの直接アクセスが可能である。HP 3000 の標準端末 HP 2640 シリーズはキャラクタモードだけでなく、フォームからのデータ入力を行うブロックモードをサポートしていた。

Classic と PA-RISC XL 
HP 3000 ファミリは 16ビットの "Classic" と 32ビットの "XL"（後に "IX"）ファミリがあり、後者は1984年にPA-RISCチップの登場とともに追加された。両者にはバイナリ互換性はないが、低速ながらエミュレーションで従来のコードを実行したり、再コンパイルして実行することが可能であった。初期の "Classic" は独自のCISCプロセッサを使用している。PA-RISC を搭載した HP 3000 は1988年ごろから量産されるようになり、1995年までに完全に置換がなされたものの、ユーザーサイトでは従来のマシンがそのまま使われ続けた。

3000 シリーズのオペレーティングシステムは MPE（Multi-Programming Executive）と呼ばれ、その後 MPE-XL となり、さらにPOSIX準拠となってからは MPE-IX と呼ばれた。初期のバージョンには独自のコマンド行インタプリタがあり、階層型ファイルシステムは無い。プログラムをコマンドとして実行するという概念が無く、例えばコンパイラは "run fortran.pub.sys" などと打ち込んで実行される。当時の他のミニコンピュータに比較して、非常に信頼性が高く安定動作するのが特徴であった。

HP 3000 シリーズの成功の一因は、OSの一部として（一部例外はあるが）独自のデータベース管理システム Image（後に TurboIMAGE に改称）を搭載していた点である。これは、OSやハードウェアの違いに関わらずバイナリ互換性を維持しており、1973年のプログラムが2003年のシステム上でも再コンパイルなしで動作する。

市場がUNIXにシフトしていく中、ヒューレット・パッカードは2001年11月、HP 3000 の寿命（サポート期限）を2006年末とすることを発表した（販売は2003年まで）。2006年初め、HPは制限つきでサポートを2年延長することを発表した。これは、独自仕様のミニコンピュータとしては異例の長い製品寿命である。PDP-11とVAXを合わせたよりも長い寿命であるが、OpenVMS は AlphaベースのシステムからIA-64ベースのシステムへとサポートされ続ける予定である。

スタックマシン 
今日、多くの命令セットは汎用レジスタモデルに基づいている。HP 3000 のプロセッサとメモリのアーキテクチャはスタックマシンモデルに基づいている。これはバロース B5000に影響されたと言われている。レジスタ数は少なく（例えば HP 1000 では AX レジスタと BX レジスタの2本だけ）、オペランドは局所変数やリターンアドレスを置くスタックと同じスタックに置かれる。従って、例えば次のようなコードがあったとする。

LOAD AX, 0X0001
LOAD BX, 0X0002
ADD AX, BX

これは次のコードと同じである。

PUSH 0X0001
PUSH 0X0002
ADD

サブルーチン呼び出しの call 命令は固定個の引数しか取れない。そのため、C言語コンパイラの実装は難しかった（実装されなかったわけではない）。

16ビットのマイクロプログラム方式の機種（Series I, II, III, 30, 33, 39, 40, 42, 44, 48, 52, 58, 64, 68, 70, 37, ...）は、16ビットのワード単位のアドレスにバイトアドレス指定を加え、セグメント方式のスタックマシン型命令セットアーキテクチャ (ISA) であった。約 214 種の命令のほとんどは16ビット長である。スタック操作命令は16ビットワードに2つの操作を詰め込むことができ、一部の命令が32ビットである。

CISC実装の変遷は以下の通り。
 III: スタックのトップ4ワードがレジスタ。マイクロ命令サイクルは 175ナノ秒、すなわち 5.7MHz
 30, 33: SOS（シリコン・オン・サファイア）。スタックのトップ2ワードがレジスタ。マイクロ命令サイクルは 90ナノ秒、すなわち 11MHz。各命令は 3-7 サイクルかかる。
 40, 42, 44, 48: ショットキーTTL。スタックのトップ4ワードがレジスタ。マイクロ命令サイクルは 105ナノ秒、すなわり 9.5MHz
 64, 68: ECL。スタックのトップ8ワードがレジスタ。マイクロ命令サイクルは 75ナノ秒、すなわち 13MHz。8KBキャッシュ。60Kb の書き換え可能なコントロールストア。16ビットALU×2。
 37: CMOS。スタックのトップ4ワードがレジスタ。

32ビットモデルは PA-RISC を使っている。PA-RISC のバージョンと機種の対応は以下の通り。
 PA-RISC 1.0 Series 925, 930, 935, 949, 950, 955, 960, 980
 PA-RISC 1.1 Series 917, 920, 922, 927, 937, 947, 948, 957, 958, 967, 977sx, 987, 990, 991, 992, 995
 PA-RISC 2.0 Series 918, 928, 968, 978, 988, 996, A クラスと N クラス

参考文献 
 Hewlett Package: HP3000 Computer Systems: General Information Manual; August 1983; 5953-7553

外部リンク 
 The Classic HP 3000 - 歴史
 Edler, C The Rise, Fall and Rise of the HP 3000 - 歴史
 HP3000 FAQ
 Bitsavers スキャンされPDF化された各種マニュアル類。ただし、ミラーサイト利用推奨。
 Printing HP3000 MPE/iX to Windows 
 HP Computer Museum スキャンしてPDF化されたマニュアル群がある。
 HP 3000 General Information Manual Sep 79, Oct 1984 大きなPDFファイルなので、要注意
 HP 3000 Performance (text file)
 "HP SYSTEM/3000 system description" promotional material Nov 1971
 November 19, 2001: HP Sunsets Its Proprietary e3000 Server Line
 November 14, 2001 Hewlett-Packard phases out server line, the line will be phased out over a five-year period
 hp.com: HP is committed to continued support of HP e3000 installations
 HP e3000 transition program FAQ
 Classic Genealogy and PA-RISC Systems Performance Spreadsheets
 Picture of HP 3000
 

ミニコンピュータ
ヒューレット・パッカードの製品
命令セットアーキテクチャ