System/370

IBM System/370 (S/370、システム/370、しすてむさんななまる)は、1970年6月30日にIBMが発表したメインフレーム・コンピュータのシリーズ名およびコンピュータ・アーキテクチャ名で、System/360ファミリの後継である。

System/370は、System/360 との互換性を保ち、性能向上に加えて商用初の仮想記憶をサポートした。System/360に続くSystem/370の成功により、コンピュータ市場でのIBMの影響力は圧倒的となった。

またSystem/370の後続シリーズ（30x0、4300、9370）の上位モデルでは、1981年に拡張アーキテクチャのSystem/370-XAが発表され、アドレス空間と入出力が拡張された（31ビットアドレス空間、動的チャネルサブシステム）。このアーキテクチャは後にESA/370、ESA/390を経て、現在のz/Architectureへと発展した。

 概要 
System/370は、前身のSystem/360から24ビットアドレッシング（最大仮想メモリは16MB）を引き継いで上位互換性を保ち、前身のSystem/360と同様に互換性のある複数モデルによってコンピュータ・ファミリーを形成し、ユーザーの資産（プログラム、周辺機器など）を保護した。

System/370は商用として初めての仮想記憶を実現したため、ユーザーはより広いアドレス空間を使用できるようになり、企業におけるデータベースやオンライン・トランザクション処理の用途が拡大した。

System/360に続くSystem/370の成功により、GEなどは撤退し、System/360の互換機を製造していたメーカーは撤退するか（RCAなど）System/370の互換機を開発する（日立製作所など）ようになった。また1975年にはIBMから退職したアムダールが富士通と提携してプラグコンパチブル型（IBMのオペレーティングシステムを稼働させる）のSystem/370互換機を発表した。

System/370シリーズの後継製品は、大型（水冷・スタンドアロン）の3030・3080・3090、中型（空冷・スタンドアロン）の4300シリーズ、小型（空冷・ラックマウント）の9370シリーズである。これらは正式にはSystem/370シリーズ（という製品名称）ではなかったが、System/370アーキテクチャを継承したため、広義にはSystem/370と呼ばれる事がある。（このため本稿でも記述する。）

1981年には上位機種用にSystem/370-XAアーキテクチャが発表され、論理アドレッシングが31ビット（最大仮想メモリは2GB）に拡張され、I/OによるCPU負荷を軽減する動的チャネルサブシステムが採用された。なお、この技術は特許と著作権で守られていたため互換機対策とも言われ、この技術をめぐりIBM産業スパイ事件も発生した。System/370-XAアーキテクチャは、更にハイパー空間（64ビットアドレッシングのデータ専用アドレス空間）などを持つESA/370アーキテクチャとなった。

1990年にはブランド名がエンタープライズシステム(ES)と改称され、製品シリーズ名はES/3090、ES/4300、ES/9370に、アーキテクチャ名はESA/390と名称変更された後、真の後継製品であるES/9000シリーズに引き継がれた。

 特徴 
System/370 はその約20年の歴史の中で数回のアーキテクチャ改良を重ねてきた。最初の最も大きな変更は仮想記憶の導入であり、1972年、IBM の "System/370 Advanced Function" の発表により一般に公開された。IBM は当初、System/370 では何故か仮想記憶を採用しなかった。1972年の発表には以下の事項が含まれていた。
 全 System/370 機種へのアドレス再配置ハードウェアの導入
 新たな System/370-158 と -168 の発表
 新たな4つのオペレーティングシステムの発表: DOS/VS（仮想記憶をサポートした DOS）、OS/VS1（仮想記憶をサポートした OS/MFT）、OS/VS2（仮想記憶をサポートした OS/MVT。後に SVS と MVS へと進化）、VM/370（CP/CMS の再実装）
仮想記憶は実際にはこの発表以前に System/370 ハードウェアに導入されていた。
 1971年、System/370-145 で実装された（同機は仮想記憶開発を行った Cambridge Scientific Center に極秘裏に搬入された。この時期既にアドレス再配置ハードウェアが完成していたと思われる）
 1972年、System/370-155-II と System/370-165-II は即座に System/370-158 と -168 に置換された

その後のアーキテクチャ上の変更は主記憶容量の拡張（物理メモリと仮想アドレス空間）が中心となった。これは、負荷の増大と顧客の要望にこたえるためであった。これはムーアの法則に従ってメモリ単価が低下したことによる必然的傾向であった。IBMのメインフレーム開発では、基本的に従来互換は常に保たれていた。

 1981年10月、3033 と 3081 プロセッサに "extended real addressing" が追加され、物理記憶装置のアドレスが26ビットに拡張された（個々のアドレス空間は依然として24ビットであった）。この拡張は 4381 や 3090 といった他のシステムにも適用されていった。
 System/370-XA (eXtended Architecture)アーキテクチャ: 3081 と 3083 プロセッサで1983年初めに利用可能となった。アドレス空間の 24ビットから 31ビットへの拡張、2つのアドレス空間の間でデータを移動させる機能、入出力アーキテクチャの完全な再設計(動的チャネルサブシステム)などの大きな改良がなされた。
 ESA/370 アーキテクチャ（Enterprise System Architecture、後に ESA/390 と改称）では、32ビットのアクセスレジスタ16本を追加し、アドレッシングモードを追加し、複数アドレス空間を同時に扱う機能がいくつか追加された。

System/370シリーズの中で特筆すべきマシンとして、IBM 3033、IBM 3090 がある。これらはオプションでベクター拡張機構を装備しスーパーコンピュータとしても使用できた。また、中小規模の低価格な IBM 9370 もある。

System/370で話題にするべきトピックに仮想計算機（VM）がある。仮想記憶という概念をコンピュータのほかの部分にも適用した概念で、一台の物理マシンの上に複数台の仮想コンピュータを実現した。当時、コンピュータにOSをインストールするためには数日を要していた。その間、エンドユーザーはコンピュータを使うことが出来なかった。商用利用でマシンタイム一分間数百円の時代であるにも係わらず。仮想計算機はこの作業を、エンドユーザーの利用と並行して行うことができ、最後にDASD（Direct Access Storage Device, つまりハードディスク）をテープに吸い上げ、物理マシンのDASDに戻し直せばよくなった。エンドユーザーが使えない時間は数時間にまで減った。

 アドレス空間の拡張 
上述の通り、System/370 での大きなアーキテクチャ上の変化として、アドレス空間が 24ビットから 31ビットに拡張された。

System/370 のアドレッシングの拡張は、24ビット論理アドレスに依存している System/360 命令セット設計とそれを使った大量のコードベースのために複雑化した。特によく使われる命令 "Load Address" (LA) はアドレスをレジスタに置くときに上位8ビットを明示的にクリアしていた。このため、既存ソフトウェアの移行時に大きな問題となった。

アドレッシングの拡張の実装は以下の3段階で行う戦略がとられた。
 第一に物理レベルで拡張（システム当たりのメモリ搭載量を増やす）
 次にオペレーティングシステムレベルで拡張（システムソフトウェアが複数のアドレス空間にアクセスし、より大きなアドレス空間を利用可能とする）
 最後にアプリケーションレベルで拡張（新しいアプリケーションがより大きなアドレス空間にアクセス可能とする）

System/360 の命令セット中核部は 24ビット論理アドレスのままとされたため、この第三のステップは「現状」の明らかな打破を要求した。既存のアセンブリ言語アプリケーションはもちろん書き換えない限り移行できないし、アセンブラでないアプリケーションも新たなコンパイラを使わないと対応できない。このため、高性能な31ビットの環境で24ビットアプリケーションを動作させる状況がしばらく続いたユーザーが多かった。

 31ビットと32ビット 

IBM が 32ビットではなく 31ビットを選んだ理由はいくつかある。System/360 Model 67 は完全な 32ビットアドレッシングモードを持っていたが、この機能は System/370 には反映されず、当初は 24ビットとなった。System/370-XA でアドレス空間を 31ビットとしたのには、以下のような理由があった。
 最上位ビットを "control or escape bit" として残したいという意見があった
 32ビットアドレスと引数を符号付数値として扱う2つの命令（BXH と BXLE）の相互作用の問題（また、このために System/360 Model 67 での TSS でも 31ビットアドレッシングが使われた）。
 システム設計段階で、System/360 Model 67 を使っていた主なサイトから 31ビットにすべきという意見があった。

 モデル 
下表では System/370 の主なシリーズと機種をまとめている。アーキテクチャ欄で各シリーズの主要アーキテクチャを示している。多くの機種で複数のアーキテクチャがサポートされていた。例えば 308x は当初 System/370 アーキテクチャとして出荷されたが、後に XA も提供された。4381 などの多くのプロセッサで、マイクロプログラムの置き換えが可能となっており、ユーザーがアーキテクチャを選択可能になっていた。

以下で "System/370-compatible" という用語が出てくるのは、IBM の文書がこの用語を使っているためである。IBM 以外では、この用語はアムダールや日立製作所などのIBM以外の System/370互換機を指すのが一般的である。

 出荷開始 アーキテクチャ 機種 1970年 System/370 370-xxx シリーズ (370-115 - 370-195) 1977年 System/370-compatible 303x シリーズ (3031, 3032, 3033) 1979年 System/370-compatible 43xx シリーズ (4331, 4341, 4361) 1980年 System/370-compatible 308x シリーズ (3081, 3083, 3084) 1981年 System/370-XA 308x シリーズ (3081, 3083, 3084) 1983年 System/370-XA 4381 1986年 System/370-XA 3090 シリーズ (120 - 600) 1986年 System/370-compatible 937x シリーズ 1988年 ESA/370 ES/3090 と ES/4381

 アーキテクチャ 
System/370 はコンピュータ・アーキテクチャ仕様であり、System/360 アーキテクチャとの互換性を保った改良版であり、多くの点で共通している。アーキテクチャには、あらゆる実装で使用可能な必須インタフェースと常に実装されるとは限らないオプションインタフェースから構成される。

アーキテクチャ上の主な特徴は次の通り。

 プロセッサ（1個以上）
 汎用レジスタ 16本
 制御レジスタ 16本
 ステータスレジスタ (PSW; program status word) では、以下のような情報が示される
 割り込みマスク
 特権状態
 条件コード
 命令アドレス（プログラムカウンタ）
 タイミング機能（カレンダクロック、インターバルタイマ、CPUタイマ、クロック比較器）
 割り込み機構: マスク可割り込みとマスク不可割り込み、クラス分けされている。
 命令セット: 各命令の完全な説明とプログラム割り込みと呼ばれる例外時の動作も定義されている。
 主記憶装置
 1バイトは8ビット
 特殊なプロセッサ通信領域がアドレス0にある。
 キーによるメモリ保護機能
 手動制御操作により、以下のことが可能
 ブートプロセス（Initial Program Load、IPL）
 オペレータによる割り込み
 システムのリセット
 基本デバッグ機能
 システム状態（メモリとプロセッサ）を表示して手動変更可能
 入出力機構: 周辺機器そのものを記述しているわけではない。

主なオプション機能は以下の通り。

 Dynamic Address Translation（動的アドレス変換）機構により仮想記憶システムを実装可能
 浮動小数点命令

インタフェース仕様は拡張可能であるため、初期のインタフェースに影響を与えることなく新たなインタフェースを追加可能である。そのような例として次の拡張があった。

 ECPS:VM （VM/370 オペレーティングシステムをサポートするための機能）
 ECPS:VSE （DOS オペレーティングシステムをサポートするための機能）

アーキテクチャに修正を加える際には、互換性を保持することに多大な労力を費やした。特に、最低でも非特権プログラムの互換性だけは確保された。この方針は System/360 のころからのものである。互換性を保つための鍵となった方針として、未使用フィールドを予め決まった値（通常 0）にセットしておいた点がある。そして、それ以外の値になっていると例外として認識される。インタフェースを変更するとき、この未使用フィールドを新たな目的で使用することができる。行儀の良いプログラムなら、新たなインタフェースを実装したシステム上でも実行可能であることが期待できる。例えば、64ビットの PSW レジスタのビット番号 32 は未使用であり、0 でないときは例外が発生することになっていた。後に System/370 XA アーキテクチャが定義され、そのビットで 24ビットアドレスなのか31ビットアドレスなのかを識別するようになった。従って、24ビットアーキテクチャ上で動作していたほとんどのプログラムは新たな31ビットシステムでも64ビットシステムでも動作可能である。しかし、全てのインタフェースの互換性が保たれたわけではない。例えば、入出力インタフェースは System/370 XA で非互換になっている。このため、オペレーティングシステム（デバイスドライバ相当部分）は移植が必要であった。

 オペレーティングシステム 
System/370の仮想記憶をサポートするオペレーティングシステムには、小規模向けの DOS/VS (後のDOS/VSE、現在のz/VSE）、大規模向けの OS/VS（後の OS/VS1、OS/VS2、MVS、OS/390、現在のz/OS)、仮想化OSのVM/370などが使用できた。

またGNUコンパイラコレクションには System/370 向けのバックエンドがあったが、更新されることなく最後には System/390 用バックエンドに置換された。System/370 と System/390 の命令セットは基本的には同じで System/360 以来の一貫性を保持しているが、gcc における古いシステムのサポートは重視されなかった。現在サポートされているのは、System/390 Generation 5 (G5) の全命令セットをサポートしたマシンであり、そのハードウェアプラットフォームで Linux/390 がリリースされた。

 後継 
System/370 は1990年代に System/390 に置き換えられた。ただし、当初はマーケティングのための製品ラインの改称でしかなかった。2000年、zSeries が後継として登場。zSeries では64ビットのアーキテクチャが導入されており、31ビット化以来の大きな変化となった。アーキテクチャ的にも命令セット的にも System/360 からの互換性は基本的に保たれている。