System/360
System/360(システムさんろくまる、S/360、システム/360)は、IBMが1964年4月7日に発表したメインフレーム コンピュータのシリーズである。1965年から1977年まで出荷された。
コンピュータ・アーキテクチャを採用し、アーキテクチャと個々の機種の回路実装は区別し、プログラムおよび周辺機器の互換性がある小型から大型までのファミリ(コンピュータファミリ)を形成した。商用計算と科学技術計算をカバーし(汎用機)、また商用では初のオペレーティングシステムや仮想機械が登場するなど、後のコンピュータの設計に影響を与え続け、「史上最も成功したコンピュータ設計の1つ」とされている。
このSystem/360シリーズの大成功により、コンピュータ業界で後発のIBMは競合他社を市場で圧倒することになり、そのアーキテクチャやアプリケーション・プログラムの互換性は、後続のSystem/370や最新のSystem zまで引き継がれている。
System/360はアドレス指定に8ビットで構成されるバイト単位を採用し、また商用計算で使用される十進数演算と科学技術計算で使用される浮動小数点数演算の両方の命令セットを備えた。この「8ビット = 1バイト」はSystem/360の成功によってその後のコンピュータの事実上の業界標準となり、また十進数演算と浮動小数点数の両方の装備により従来の「専用機」に対して「汎用機」とも呼ばれるようになった(なお浮動小数点演算の方式は当初は精度上の課題があり、後に改良された)。またシステム制御プログラム群が整理され「オペレーティングシステム」と呼ばれるようになった。
同一の命令セット・アーキテクチャを、最上位機種では可能な限りハードウェアで直接的に実装し、下位機種ではマイクロプログラム方式の活用により比較的低コストで実装した。このコンピュータ・アーキテクチャ確立により、IBMは互換性のある設計で様々な価格帯のシステムをリリースすることができた。
System/360は市場で大いに成功し、顧客は小さめのシステムを購入しても、後で自社の業務の規模の拡大に合わせて上位機種へ移行できて、その際に新しい機種へのソフトウェアの書き換えが不要という利点が生じた。プログラムや周辺機器の互換性が生まれ、コンピュータ・ファミリを形成した。
1964年に発表されたSystem/360で、最も低性能な機種は0.018から0.034MIPSで、最上位機種はその約50倍の性能である。主記憶装置の容量は8kBから8MBまであったが、後者の構成は滅多に見られなかった。また補助記憶装置は、主記憶装置の磁気コアメモリ装置に比して10倍程度アクセスが低速な磁気コアメモリ装置 IBM 2361 Large Capacity Storage を最大8MBまで接続可能である。大型機種では主記憶装置は最低でも256kB以上であり、512kB、768kB、1024kB といった容量が一般的だった。
System/360は上述の通りコンピュータ・アーキテクチャと回路実装を明確に区別した最初のコンピュータシリーズである。System/360の設計責任者はジーン・アムダール、プロジェクトマネージャはフレデリック・ブルックスで、責任者は会長のトーマス・J・ワトソン・ジュニアである。ワトソンのもう1人の副官であるジョン・R・オペルもSystem/360の立ち上げに深く関わった。System/360開発プロジェクトには多額の費用がかかっており、フォーチュン誌による "$5 billion gamble" という表現の示すとおり、IBMはSystem/360に社運をかけたと言っても過言ではない(2002年の価値に換算すると280億ドルつまり約3兆円のお金をIBMは投入した。ちなみに、同時期のあのアポロ計画の予算が250億ドルである。アポロ計画よりも多くの金を投入したのである。)そして、IBMは賭けに勝ったのである。
それまでのコンピュータは、主に事務処理や入出力処理用の小型機(IBM 1401など。衛星プロセッサとも)と主に科学技術計算用の大型機(IBM 7090など)とでは、それぞれ異なる命令セットアーキテクチャで作られる(専用機)のが普通であって、OSのようなシステムプログラムはモデル別に開発されており、大型のモデルに変更するとアプリケーションプログラムはそのままでは利用できず書き直しが必要であった。System/360は、最下位モデルから最上位モデルまで命令セットアーキテクチャをほぼ統一して、基本的にはシリーズ内のどれかで動くプログラムは、全てのモデルで動く(汎用機)。また、様々な用途に応じたソフトウェアを入れ替えて使うことで、多種多様の業務に対応できるとも言える。「360度(全方位)、様々な業務に対応できる」という意味を込めて、360と付けられた。構成によっていくつかのサブモデル(360/40など)がある。また、360の後継はSystem/370で、更に現在のSystem Zシリーズに続いている。
System/360を発表するとIBMには当初の予想を超える受注が舞い込み、発表後の最初の4週間で1,000台受注した。その次の4週間で、さらに追加で1,000台受注した。System/360は、IBM をメインフレームの巨人メーカーへと成長させた。当時のメインフレーム市場における IBM社 の強さを「白雪姫と7人の小人」にたとえるものもあった。1967年頃には、IBM社は大型コンピュータにおける米国メーカーの出荷高の7割以上を占めており、他社を圧倒してメインフレームの市場をほぼ独占していた。残りの7社とは、UNIVAC、Honeywell、GE、CDC、RCA、NCR、バロースのことであり、市場シェアを数%ずつ分け合う小さな存在であった。
なおSystem/360は集積回路を使用した「第3世代」コンピュータに分類される。
コンピュータ・ファミリの出現、互換周辺機器市場の出現、互換機市場の出現
それ以前とは異なり、IBM社は小型から大型までのさまざまなモデルを含むコンピュータシリーズ全体を開発し、基本的に全てのマシンにおいて同じ命令セットが動作するようにした(一部特殊市場向けには例外あり)。これによって顧客は最初は小さなシステムで利用をはじめて、必要に応じて(業務ソフトウェアを変更することなく)上位のモデル機種の利用に移行することが可能となった。そのうえ多くのモデルでは顧客が以前に利用していたIBM社の機種の命令セット(例えばIBM 1401やIBM 1620)をマイクロコードでエミュレーションするオプションを提供していた。これにより以前の機種で使用していたプログラムもほぼ変更せずに新しいシステム360のマシン上で動作させることができた。
System/360は、" コンピュータのハードウェア " というものに対するユーザ企業の考え方をすっかり変えた(コンピュータのハードウェア市場のありかたを完全に変えた)。移行の柔軟性により、導入や機種更新に際しての障壁が小さくなった。他のシステムベンダー(ゼネラル・エレクトリック以外)では自社の機種間でも相互に互換性がなく、それぞれの機種は顧客の用途に合わせて高度にカスタマイズされて設計されており、結果的に値段が高くなり導入しにくいことが多かった。System/360により、ユーザは最初は安価な下位機種から使い始めて、次第に装置を足したり、上位機種に変更してゆけば良いということになった(しかも当時、IBMはコンピュータを顧客に販売せずにレンタルしていたのでさらに利用の障壁は低かった。これは第二次世界大戦前のパンチカード会計システムの頃からの伝統であり、不況に強いビジネスモデルと言われている)。
IBM以外の企業も、System/360と組み合わせて動く周辺機器を製造することができた。すぐにS/360プラグ互換の周辺機器を製造する企業群とその産業領域が出現した(なお、これと同じような現象が、およそ20年後にIBMがパーソナルコンピュータ(IBM PC)をリリースした際にもクローンなどを許可したことで起きた)。他社によるS/360の周辺機器は1967年のテレックス(テレタイプ端末)やテープドライブ装置などを皮切りに、1968年のディスク・ストレージ付きMemorexなどと続き、この産業領域は目覚ましい成長を経験した。互換機も製造されるようになり(後述)、1972年にはソヴィエト連邦と東欧諸国の連合までSystem/360互換の(en) Ryad(ES EVM)コンピュータを製造すると発表した。
IBMの既存の顧客は第二世代のマシン上で動作するソフトウェアの大きな資産を抱えていた。多くのモデルで顧客の従来のマシン(例えば、モデル30では IBM 1400シリーズ、モデル65では IBM 7094)のエミュレーションをオプションとして提供している。特殊なハードウェアを使ったり、特殊なマイクロコードやソフトウェアを使って、ターゲットシステムの命令をエミュレートし、古いプログラムを新しいマシン上で実行可能としていた。ただし、初期化時にモードを切り換えるので、エミュレーションと通常運用を同時に行うことはできない。モデル85と後のSystem/370にもエミュレーション・オプションが残されているが、そちらはOSの上で通常のプログラムと同じようにエミュレーションを行える。
IBMは6つのモデルのコンピュータと40種類の共通周辺機器を発表した。最終的にはNASA向けの特殊な機種も含めて14のモデルがリリースされた。最も安価なモデルは 360/20 であり、4Kの磁気コアメモリを装備し、レジスタも他のモデルが32ビット16本なのに対して、16ビット8本であり、命令セットは他の機種のサブセットになっていた(小企業向けであり、それ以上のものではない)。
1964年の最初の発表では、モデル30, 40, 50, 60, 62, 70 という6モデルが含まれている。モデル30, 40, 50 は中小型システムで、従来のIBM 1400シリーズの市場をカバーする。これらは1965年中頃に出荷が開始された。モデル60以上のモデルは7000シリーズの市場をカバーすることを想定していたが出荷されることなく、モデル65 と 75 が新たに発表され、モデル65 は1965年11月に出荷開始され、モデル75 は1966年1月に出荷開始された。
下位モデルとして、モデル20(1966年、上述)、22(1971年)、25(1968年)が追加された。モデル22はモデル30に若干制限を加えたバージョンで、主記憶容量の上限が小さくなっていて、I/Oチャネルの容量も小さくなっている。したがってディスクやテープ装置の性能や容量がモデル30より小さくなっている。
モデル44(1966年)は中型の科学技術計算向けであり、浮動小数点演算機構が付加されているが一部の命令は削除されている。
上位モデルとして、モデル67(1966年、後述、64または66と予測されていた機種)、85(1969年)、91(1967年)、95(1968年)、195(1971年)が追加された。モデル85はSystem/360と後継のSystem/370のギャップを埋めるために出された機種で、後の370/165の基盤となった。System/370にもモデル195があるが、そちらは動的アドレス変換機構を含まない。
それぞれのモデルは、データパス幅の違いや、マイクロコード使用の有無などで実装は異なるが、いずれも互換性を保っている。すなわち、特に文書化された点を除いて、各モデルはソフトウェア的には互換で、新しい機能はアーキテクチャを崩さないように追加されている。
例えばモデル91は科学技術計算向けに設計されており、ビジネス向けの十進演算命令は省かれていた。モデル91はTomasuloのアルゴリズムによりアウト・オブ・オーダー実行を行うが、そのための「不正確な割込み」(imprecise interrupt)という問題は不評で、以後の同様のマシンでは「確定ユニット」が取り入れられた。モデル65にはCPU間信号を追加したデュアルプロセッサ版 (M65MP) があり、モデル85ではキャッシュメモリ(バッファメモリ)を導入している。モデル44, 75, 91, 95, 195ではロジックをハードウェア回路で実装しているが、それら以外の下位のモデルではマイクロコードによる実装を採用している。
モデル67は1965年8月に発表されたモデルで、IBMとしては初の動的アドレス変換機構(DAT、現在ではMMUと呼ばれるもの)でタイムシェアリングシステムをサポートした。モデル40をベースとしてDAT実験機が構築されている。モデル67をリリースする前にIBMはモデル64と66を発表していた。それらはモデル60と62にDATを追加したものだが、60および62の代替としてモデル65をリリースすることが決まり、モデル64と66もモデル67で代替されることになった。System/370では1972年にDATハードウェアが再登場したが、370でも当初はDATがなかった。モデル65と同様、モデル67にもデュアルCPU版が存在する。
IBM社は1977年末までにはすべてのSystem/360のモデルの営業を終えた(次のSystem/370に完全に移行したためである)。
System/360では以下のような業界標準が生まれた。
2の補数による整数演算(業界初ではないが、System/360で採用されたことで標準となった。現在のデジタルコンピュータはことごとくこの方式である。)
8ビットでバイトを構成(4ビットや6ビットをバイトとする案もあった)
バイト単位のアドレス指定(ワード単位アドレスではない)
32ビット ワード
バスタグI/Oチャネルは FIPS-60 で標準化されている。
IBM浮動小数点標準(これはIBM/360からの標準であり、16進指数を採用しており、数値的な性質の観点からは良い選択ではなかった。浮動小数点数#IBM方式を参照)
EBCDIC(※)文字セット
(※)EBCDICについては解説が必要である。本来、ASCIIの採用がSystem/360のセールスポイントのひとつであり、BCD(二進化十進表現)とASCIIとの切り替えスイッチが付いていた。IBMはASCIIの標準化にも深く関わっている。しかし、360をリリースするとき周辺機器がASCIIに対応していなかった。また、大企業や政府は大量のBCDファイルを持っていてASCIIに抵抗があった。BCDは簡単にEBCDICに変換できたが、ASCIIではそうはいかなかったのである。そのためもっぱらEBCDICがSystem/360の初期に使用され、それが大成功したがために業界標準となってしまい、その後の汎用コンピュータは互換性を維持するためにEBCDICをサポートし続けた。
System/360シリーズにはコンピュータ・アーキテクチャ仕様が定められている。その仕様は実装については全く何も前提としておらず、外部とのインタフェースと外から見た振る舞いを規定している。アーキテクチャは、あらゆる実装で必須とされるインタフェースが記述しており、実装しなくてもよいオプションのインタフェースも記述している。
アーキテクチャには次のような項目が含まれる。
16本×32ビット 汎用レジスタ (R0-R15)
64ビット プログラムステータスワード (PSW)
24ビット 命令アドレス
割り込みは、マスク不可とマスク可能なクラス、さらにサブクラスがある。
命令セット。各命令が詳述されており、プログラムへの割り込みとして認識される例外の発生条件も定義されている。
特殊なプロセッサ通信領域がアドレス0番地から始まっている。
ブート(IBMでは Initial Program Load、IPL と呼ぶ)
システム状態(メモリおよびプロセッサ)の表示と人手による変更
入出力機構 - 周辺機器自体は記述されていない。
オプションの機能として次のような項目がある。
タイミング機能(インターバルタイマ)
モデル20を除く全てのSystem/360でこれらの仕様を実装していた。
二進演算と論理演算は、レジスタ-レジスタ間、メモリ-レジスタ/レジスタ-メモリ間で実行可能である。商用命令セット・オプションを実装している場合、レジスタ-レジスタ間および一部はメモリ-レジスタ間でパック10進数演算を実行可能である。科学命令セット・オプションを実装している場合、4本の浮動小数点数レジスタがあり、32ビットまたは64ビットの浮動小数点演算を実行可能である。モデル85と195の場合、さらに128ビットの拡張浮動小数点数を扱うことができ、2本の浮動小数点数レジスタで1つの数値を格納する。他の機種ではソフトウェアでのエミュレーションで同等機能を提供する。1バイトは8ビット、1ワードは32ビット、1ダブルワードは64ビット、1ニブルは4ビットである。命令のオペランドにはレジスタ番号またはメモリアドレスを指定できる。この複雑な組み合わせにより、命令長や形式は様々に変化する。
メモリアドレッシングは「ベース+ディスプレースメント」形式でレジスタ R1~R15 をベースに使うことができる。ディスプレースメントは12ビットなので最大4096バイトまで示すことができ (0-4095)、ベースレジスタの示すアドレスからのオフセットを指定する。R0レジスタはベースとして使うことはできず、「0」をベースに指定するとメモリの先頭 4KBの範囲を指定することになっていた。これは割り込みルーチンの先頭部分で、ベースレジスタを適切に設定する前に固定のメモリアドレスにアクセスするのに使われていた。IPLの場合は、レジスタの内容をセーブする必要はなく単にクリアすればよいので、この機能は使われていない。
モデル67以外では、あらゆるアドレスは物理メモリアドレスである。IBMが仮想記憶を本格的に採用したのはSystem/370シリーズからである。モデル67では仮想記憶アーキテクチャが導入され、Michigan Terminal System、CP-67(CP-67)、TSS/360 で使われたが、System/360の主要OSでは仮想記憶に対応していない。
命令コードは1バイトで、最低でも1バイトのイミディエート値が一種のオペランドとして存在する。命令は必ず 2バイト境界に配置しなければならない(命令の先頭アドレスが2で割り切れる)。命令には3種類の形式がある。オペランド無し(2バイト)、1オペランド(4バイト)、2オペランド(6バイト)である。
例えばMVC(文字移動)命令(16進で D2)は最大でも256バイトしか転送できない。それ以上の転送には複数回のMVC命令を実行する必要がある(System/370ではもっと強力な命令MVCLが追加され、16MBまでの文字列転送が可能となった)。1オペランドは2バイトである。4ビット(ニブル)でベースレジスタを指定し、残り12ビットでディスプレースメントを指定する。MVC命令は 6バイトであり、(R8+1)アドレスから(R7+0)アドレスへ256バイトを転送する命令のコードは "<tt>D2FF 7000 8001</tt>" となる(FFの部分が転送サイズを示し、実際の転送サイズより1小さい値を取る)。
System/360は「システム状態」と「問題状態」を分離するよう設計されている。それによって基本的セキュリティとプログラミング上のエラーからの復帰を可能にしている。問題 (problem) とはユーザプログラムを意味し、システム状態に対応しているデータやプログラムの内容を変更することはできない。プログラム実行で何らかのエラーが起きると、制御されたルーチンを経由してシステム状態に移行し、オペレーティングシステムがエラーの訂正または当該プログラムの終了を試みる。同様にプロセッサのハードウェアエラーが起きると、マシンチェック・ルーチンを経由して復旧を試みる。
発明されたばかりの集積回路は信頼性や可用性に不安があったため、IBMはハイブリッド集積回路を使用した。個々のトランジスタやダイオードと基板にプリントされた抵抗などでフリップフロップを構成して、プラスチックか金属でカバーを施した。これをいくつかプリント基板に実装してSLTモジュール(Solid Logic Technology)と呼んだ。SLTモジュールの一方の端にはソケットがあり、バックプレーンにあるピンを挿入する形で実装する(一般的な実装とはソケットとピンが逆である)。
周辺機器は「チャネル」経由でシステムと接続する。チャネルは、周辺機器と主記憶間のデータ転送に最適化された命令セットを持つ専用プロセッサである。現代風に言えば、Direct Memory Access (DMA) に近い。
チャネルには、バイトマルチプレクサチャネルとセレクタチャネルがある。前者は低速デバイス向けで、パンチカードリーダ/パンチ、ラインプリンター、通信コントローラなどを接続する。後者は高速デバイス向けで、ディスクドライブ、磁気テープドライブ、磁気ドラムなどを接続する。モデル20以外のSystem/360は、バイトマルチプレクサチャネルを1つとセレクタチャネルを1つ以上備えている。小型のシステム(モデル50まで)ではチャネルが本体に内蔵されているが、大型のシステム(モデル65など)では本体とは別筐体になっている(IBM 2860/2870など)。
バイトマルチプレクサチャネルは同時に複数の周辺機器の入出力を扱え、それぞれの周辺機器は最高速度で動作できる。このため「マルチプレクサ」と名付けられており、複数の周辺機器の入出力を多重化して主記憶との単一のデータ経路にまとめている。各周辺機器は、1バイトモード、2バイトモード、4バイトモード、バーストモードのいずれかで動作するよう設定される。相対的に高速な周辺機器ほど大きなデータブロックを使用する。例えば2501パンチカードリーダは毎分600枚のパンチカードを読み込み、1バイトモードで動作する。一方、1403-N1プリンターはバーストモードで動作する。また、バイトマルチプレクサチャネルにはサブセレクタ部があり、磁気テープドライブを接続できる。バイトマルチプレクサのチャネルアドレスは一般に "0" で、サブセレクタのアドレスは "C0" から "FF" である。したがって磁気テープドライブは一般に 0C0 から 0C7 のアドレスに配置される。他の一般的なアドレスとしては、2501カードリーダは00A、2540リーダ/パンチは00C/00D、1403-N1プリンターは00E/00F、3211プリンターは010から013、2701/2703通信ユニットは020から0BFである。これらのアドレスはz/VMでもそのまま継承されている。
モデル30/40/50には1052-7コンソールが付属しており、アドレスは一般に01Fとされた。ただし、コンソールはバイトマルチプレクサチャネルに接続されるわけではなく、直接本体と接続される。
セレクタチャネルは高速周辺機器を扱う。ストレージデバイスを制御ユニットに接続し、制御ユニットをチャネルに接続する。制御ユニットを介することで多数のデバイスをチャネルに接続できる。上位モデルでは複数のセレクタチャネルを備え、それらが同時並行的に動作するので、全体として性能が向上する。
制御ユニットとチャネルは灰色のバスタグ (bus and tag) ケーブル対で接続する。バスケーブルはアドレスおよびデータ情報を運び、タグケーブルはバスケーブル上のデータが何なのかを示す。一般に制御ユニットはデイジーチェーン接続される。各制御ユニットには対応するアドレスの範囲が割り当てられている。例えば制御ユニットXがアドレス40から4F、制御ユニットYがC0からDF、制御ユニットが80から9Fといった具合である。アドレス範囲は8以上の2のべき乗でなければならず、各制御ユニットには複数のデバイスを接続できる。例えば、制御ユニットYに6台のディスクを接続し、それらにアドレスC0からC5を対応させる。
制御ユニット同士をどういう順番で接続するかも重要である。各制御ユニットには優先度として High または Low が設定される。制御ユニットが X、Y、Z の順序でデイジーチェーン接続されている場合、デバイス選択をメインフレームからチャネルに送信すると、X→Y→Z→Y→X とその信号が送られていく。優先度がHighに設定された制御ユニットは信号が外に向かう際にチェックを行い、優先度がLowに設定された制御ユニットは信号が折り返して戻ってくる際にチェックを行う。また、1つの制御ユニットを複数のチャネルから接続することができ、それらチャネルは別々のメインフレームでもよい。
一般にチャネルのケーブルは最大約60メートルまでとされている。このとき制御ユニット1台を接続するとケーブル長約3メートルに換算する。
モデル85および195で、IBMは新たな種類のチャネルである 2880 ブロックマルチプレクサチャネルを導入した。このチャネルはチャネルプログラムの実行を中断して配下デバイスの入出力完了を待ち合わせずに別のデバイスのためにチャネルを解放することができる。これを最初に使ったのは 2305 固定ヘッドディスクで、8つのアドレスを持ち、回転位置検出 (RPS) 機能を持っていた。これらのチャネルは標準で1.5MB/sであり、2バイト・インタフェースでは3MB/sとなる。後者の場合、タグケーブル1本につきバスケーブル2本を使用する。
System/360の小型機種向けには BOS/360(ベーシック)、COS/360(カード)、TOS/360(テープ)、DOS/360(ディスク)があり、DOS/360は後に DOS/VS, DOS/VSE, VSE/AF, VSE/SP, VSE/ESA へと発展し、最終的に z/VSE に進化した。
それより上位のモデルではOS/360を使用した。当初 PCP (Primary Control Program) や MFT (Multiprogramming with a Fixed number of Tasks) があり、それらが OS/VS1 に発展した。また、MVT (Multiprogramming with a Variable number of Tasks) は MVS へと発展した。MVTは開発に時間がかかりすぎたため、機能の限定された MFT が主に使用された。PCPは中型機で使われたが、最終的にはMFTとMVTだけが残った。
モデル67を1965年8月に発表したとき、IBMは多くの先進的機能を備えたTSS/360(タイムシェアリングシステムを搭載したMulticsへの対抗OS)も本体と同時にリリースすると発表した。しかし正常に動作させることができず、リリース延期が繰り返され、最終的に1971年にキャンセルされた。代わりとしてCP-67、MTS、OS/360上で稼働するTime Sharing Optio(TSO)などが使われた。
CP-67は仮想機械システムであり、CP/CMS(CP/CMS)とも呼ばれる。CP-67はIBMの主流ではない部門がMITの研究者らと共同で開発した。CP/CMSは広く受け入れられ、VM/370 へと発展し、現在の z/VM へとつながっている。
モデル20には単純化したOSである、CPS (Card Processing System)、TPS (Tape Processing System)、DPS (Disk Processing System) が用意された。それぞれ必要な主記憶容量が 4K (CPS)、8K (TPS)、12K (DPS) であり、多くのユーザーは最小構成で使えるCPSを使っていた。
TPSとDOSでは、実行すべきジョブスタックの定義(JCL)とトランザクションデータの供給にパンチカードリーダーを使っていた。しかし、OS自体はディスクや磁気テープで提供されており、結果(マスターファイル)も磁気テープやハードディスクに格納することができる。