HP 3000

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

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

1. 初期のメモリセグメントと64K制限
--------------------

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

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

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

2. Classic と PA-RISC XL
-----------------------

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

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

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

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

3. スタックマシン
----------

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

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

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

PUSH 0X0001 PUSH 0X0002 ADD

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

16ビットのマイクロプログラム方式の機種は、16ビットのワード単位のアドレスにバイトアドレス指定を加え、セグメント方式のスタックマシン型命令セットアーキテクチャ  であった。約 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 クラス

4. 参考文献
-------

Hewlett Package: HP3000 Computer Systems: General Information Manual; August 1983; 5953-7553

5. 外部リンク
--------

[1] - 歴史
Edler, C [2] - 歴史
[3]
[4] スキャンされPDF化された各種マニュアル類。ただし、ミラーサイト利用推奨。
[5]
[6] スキャンしてPDF化されたマニュアル群がある。
HP 3000 General Information Manual [7], [8] 大きなPDFファイルなので、要注意
[9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]