IBM 700/7000 series

IBM 700/7000シリーズ (アイビーエムななひゃく・ななせんシリーズ) は、1950年代から1960年代初頭にかけてIBM社が製造していた大規模コンピュータシステム (メインフレーム) のシリーズである。このシリーズには、互換性のないいくつかの異なるプロセッサ・アーキテクチャが含まれている。700シリーズは真空管ロジックを使用しており、トランジスタ化された7000シリーズが導入されたことによって時代遅れになった。7000シリーズは、最終的に、1964年に発表されたSystem/360に置き換えられた。しかし、7000シリーズに取って代わる十分に強力な最初の360である360/65は、1965年11月まで利用可能にはならなかった。OS/360の初期の問題と、ソフトウェアの変換コストが高かったため、その後も何年にもわたって多くの7000シリーズが使用された。 日本でも、特にIBM 7000シリーズが輸入され、利用されている。 IBM 700/7000シリーズは、データと命令の格納方法が全く異なる6つの方法がある。 最初の科学技術計算機 (36/18ビットワード): 701 (防衛電卓として知られる) その後の科学技術計算機 (36ビットワード、ハードウェア浮動小数点): 704、709、7040、7044、7090、7094 事務処理用 (可変長文字列): 702、705、7080 1400シリーズ (可変長文字列): 7010 10進数 (10桁ワード): 7070、7072、7074 スーパーコンピュータ (64ビットワード): 7030 (「ストレッチ」(Stretch)として知られる) 700クラスは真空管を使用し、7000クラスはトランジスタ化されている。初期の701と702のモデルを除いて、すべてのマシンは (当時の他のほとんどのコンピュータと同様に) 磁気コアメモリを使用しているが、当初はウィリアムス管を使用し、後に磁気コアメモリに変換された。 シリーズでも機種によりワードマシン（科学技術計算用）であったりキャラクタマシン（事務計算用（商用））であったりと、仕様が一貫したりしているわけではない。ストレッチ(Stretch)として知られる7030のように性格の全く違う機種にも、通し番号のように見える名前が付与された。 初期のコンピュータはソフトウェアなしで販売されていた。オペレーティングシステムが登場し始めると、4つの異なるメインフレームアーキテクチャと1400ミッドラインアーキテクチャを持つことは、少なくとも4つの異なるプログラミング作業が必要となることを意味し、IBMにとって大きな問題となった。 System/360は、7000シリーズおよび1400シリーズのアーキテクチャの最高の機能を1つの設計に統合した。ただし、一部の360モデルには、1400と7000の命令セットをマイクロコードでエミュレートできるオプション機能を持っている。1970年半ばに発売された360の後継機であるSystem/370のセールスポイントの1つは、改良された1400/7000シリーズのエミュレーションで、360上で必要に応じてシャットダウンしてエミュレーションモードで再起動するのではなく、オペレーティングシステムの制御下で実行できるようになったことである。 アーキテクチャは異なるものの、同じクラスのマシンは同じエレクトロニクス技術を使用し、通常は同じ周辺機器を使用する。テープ・ドライブは通常7トラック形式 (英語版) を使用し、真空管マシンにはIBM 727が、トランジスタマシンには729が使用されている。真空管機もほとんどのトランジスタ機も、701で導入されたものと同じカードリーダー/カードパンチ（英語版）、ラインプリンターを使用している。これらのユニット、IBM 711、721、および716は、IBMの会計機テクノロジーに基づいており、プラグボード式のコントロールパネルも含まれている。これらは比較的低速であり、7000シリーズの設置においては、はるかに高速な周辺機器を搭載したIBM 1401を組み込んで、カードからテープ、およびテープからラインプリンタへの操作をオフラインで実行するのが一般的であった。その後の3台のマシン、7010、7040、7044は、ミッドラインのIBM 1400シリーズの周辺機器を採用した。7030のテクノロジーの一部は、IBM 7340（英語版）Hypertapeなど、他の7000シリーズコンピュータのデータチャネルや周辺機器で使用された。 IBMポキプシー 研究所での開発中は「防衛計算機」(Defense Calculator)として知られていたが、1953年4月7日にこのマシンはIBM 701電子データ処理マシン (IBM 701 Electronic Data Processing Machine) として正式に発表された。 データ形式 数値の幅は36ビットまたは18ビットで、固定小数点のみである。 固定小数点数は、二進の符号/絶対値形式で格納される。 命令形式 命令は18ビット長のシングルアドレスである。 符号(1ビット) - ワード全体(-)またはハーフワード(+)オペランドアドレス オペコード(5ビット) - 32命令 アドレス(12ビット) - 4096ハーフワードアドレス メモリを2048ワードから4096ワードに拡張するために、アドレスフィールドの最上位ビットを使用してバンクを選択する33番目の命令が追加された。(この命令は、元々アドレスフィールドを無視していたため、未使用のビットを持つ唯一の命令であると思われる「No OP」命令を使用して作成された可能性があるが、この新しい命令の説明書は現在入手できない)。 レジスタ プロセッサレジスタは以下のように構成されていた。 AC - 38ビットアキュムレータ MQ - 36ビット乗数/商 メモリ 2,048または4,096 - 6ビット文字の36ビットバイナリワード IBMの36ビット科学技術アーキテクチャは、さまざまな計算集約型アプリケーションに使用された。最初のマシンは真空管式の704と709で、その後、トランジスタ式の7090、7094、7094-II、そして低価格の7040と7044が続いた。最終モデルは、入出力操作を処理する7044にリンクされた7094で構成される直接結合システム (Direct Coupled System: DCS) であった。 データ形式 数値は固定小数点でも浮動小数点でも36ビットである。(参照：なぜ36ビットなのか?) 固定小数点数は、二進の符号/絶対値形式で格納される。 単精度浮動小数点数は、仮数部符号、8ビット指数(エクセス128)、27ビット仮数で構成される。 7094で導入された倍精度浮動小数点数は、仮数部符号、17ビット指数(エクセス65536)、54ビット指数で構成される。 英数字文字 (Alphameric characters) は6ビットBCDで、1ワードに6文字が格納される。 命令形式 基本的な命令フォーマットは、3ビットのプレフィックス、15ビットのデクリメント、3ビットのタグ、15ビットのアドレスからなる。プレフィックス・フィールドは命令のクラスを指定する。デクリメント・フィールドは、多くの場合、演算結果を更新するための即値オペランドを含むか、命令タイプをさらに定義するために使用される。タグの3ビットは3つ (7094では7つ) のインデックスレジスタを指定し、その内容がアドレスから減算されて実効アドレスが生成される。アドレスフィールドには、アドレスまたは即時オペランドが含まれる。 レジスタ プロセッサ・レジスタは次のように構成されている。 AC - 38ビットアキュムレータ MQ - 36ビット乗数/商 XR - 15 ビットインデックスレジスタ (3個 または 7個) SI - 36ビットセンスインジケータ アキュムレータ (および乗数/商) レジスタは符号/絶対値形式で動作する。 インデックスレジスタは2の補数形式で動作し、命令アドレスを修正するために使用される場合、命令内のアドレスから減算される。3つのインデックス・レジスタを持つマシンでは、タグに2つまたは3つのビットがセットされている場合 (つまり、複数のレジスタを選択している場合)、それらの値は減算される前に一緒にOR演算される。7つのインデックスレジスタを持つIBM 7094には「互換性」モードがあり、このトリックを使用した以前のマシンのプログラムを引き続き使用できる。 センス・インジケータは、パネル・スイッチやライトを介してオペレータとの対話を可能にする。 メモリ 704: 4,096 または 8,192 または 32,768 - 6 ビット文字を含む 36 ビットのバイナリワード 709、7090、7094、7094 II、7040、7044：32,768 - 6ビット文字を持つ36ビットのバイナリワード 入力/出力 709/7090 シリーズは、テープやディスクなどの高速入出力にデータ同期チャネル (Data Synchronizer Channels; DSC) を使用する。基本的な7ビットのDSC (7607など) は、メモリとI/Oデバイス間のデータ転送を制御するコンピュータメモリから独自の簡単なプログラムを実行するが、より高度な9ビットの7909では、より高度なチャネルプログラムをサポートしている。709xのユニットレコード装置は非常に遅かったため、パンチカードのI/Oや高速プリントは、オフラインのIBM 1401との間で磁気テープを転送して行うことがよくあった。その後、データチャネルを使用して7090を7040に、または7094を7044に接続してIBM 7094/7044 Direct Coupled System (DCS)を構成するために使用された。この構成では、より高速な1400シリーズの周辺機器を使用できる 7044 が主にI/Oを処理した。 FORTRANアセンブリプログラム FORTRAN Assembly Program (FAP) は、IBMの間に合わせのFMS (Fortran Monitor System)オペレーティングシステムの下で動作する、709、7090、および 7094 用のアセンブラである。以前のアセンブラは SCAT (SHARE Compiler-Assembler-Translator) であった。マクロはベル研究所 (BE-FAP) によってFAPに追加され、最終的な7090/7094アセンブラはIBSYSの下でIBMAPとなった。 メモリを予約するために使用されるその擬似命令BSSは「BSSセクション」という一般名の由来であり、今日でも多くのアセンブリ言語で、実行イメージに保存する必要のないタイプの予約メモリアドレス範囲を指定するために使用されている。 IBM 702とIBM 705は類似しており、705は702のプログラムの多くを変更することなく動かすことができるが、完全に互換性があるわけではない。 IBM 7080は705をトランジスタ化したバージョンで、さまざまな改良が加えられている。 後方互換性のために、705 I モード、705 II モード、705 III モード、または完全な 7080モードで実行できる。 データ形式 データは、レコードマークで終わる可変長の文字列で表される。 命令形式 5文字：1文字のオペコードと4文字のアドレス - OAAAA レジスタ 702 2つのアキュムレータ(A & B) - 512文字 705 1アキュムレータ - 256文字 14個の補助記憶装置 - 16文字 1つの補助記憶装置 - 32文字 7080 1アキュムレータ - 256文字 30個の補助記憶装置 - 512文字 32個の通信記憶装置 - 8文字 メモリ 702 ウィリアムズ管で2,000～10,000文字（2,000文字単位) 文字サイクルレート - 23マイクロ秒 705 (モデルI、II、またはIII) 20,000または40,000または80,000文字のコアメモリ 文字サイクルレート - 17マイクロ秒または9.8マイクロ秒 7080 80,000文字または160,000文字のコアメモリ 文字サイクルレート - 2.18マイクロ秒 入力/出力 705 と基本的な 7080 は、7ビット・インターフェイスのチャネルを使用する。7080は、7908データチャンネルを装備して、9ビット・インターフェースを使用して高速デバイスを接続することができる。 700/7000 事務処理用アーキテクチャは、大きく成功したIBM 1400シリーズの中型ビジネス・コンピュータに影響を与えた。その後、IBMはIBM 7010と呼ばれるIBM 1410のメインフレーム版を発表した。 データ形式 データは、ワードマーク（英語版）で終わる可変長の文字列で表される。 命令形式 可変長：1、2、6、7、11、12文字 レジスタ なし、すべての命令はメモリ上で動作した。ただし、低位メモリの固定位置にある15個の5文字フィールドは、インデックスレジスタとして扱うことができ、その値を命令で指定されたアドレスに追加することができる。また、現在処理中の文字のアドレスなど、今日では目に見えない内部レジスタもプログラマに公開されている。 メモリ 100,000文字 IBM 7070、IBM 7072、IBM 7074は、10進の固定ワード長のマシンである。 これらは、小型で古いIBM 650と同様に10桁ワードを使用しているが、650と命令セットの互換性はない。 データ形式 ワード長 - 10進数10桁＋符号 数字エンコーディング - 5者択2符号(two-out-of-fiveコード) 浮動小数点 - オプションで、2桁の指数を使用 各ワードの3つの記号 - プラス、マイナス、アルファ プラスとマイナスは10桁の数値を示す。 アルファは、数字のペアでコード化された5文字のテキストを示す。(61 = A, 91 = 1) 命令形式 すべての指示は1ワードを使用する 2桁のオペコード (符号を含む、プラスまたはマイナスのみ) 2桁のインデックスレジスタ 2桁のフィールドコントロール - 桁の集合を選択し、左右に移動することができる 4桁のアドレス レジスタ すべてのレジスタは1ワードを使用し、メモリとしてアドレスを指定することもできる。 アキュムレータ - 3つ (アドレス 9991、9992、9993 - 標準、99991、99992、99993 - 拡張 7074) プログラムレジスタ - 1つ (アドレス 9995 - 標準、99995 - 拡張 7074) コンソールからのみアドレス指定可能。現在の命令を格納する。 命令カウンタ - 1つ (アドレス9999 - 標準、99999 - 拡張 7074) コンソールからのみアドレス指定可能 インデックスレジスタ - 99 (アドレス 0001-0099) メモリ 5000～9990ワード (標準) 15000～30000ワード (拡張 7074) アクセス時間 - 6マイクロ秒 (7070/7072)、4マイクロ秒 (7074) 加算時間 - 72マイクロ秒 (7070)、12マイクロ秒 (7072)、10マイクロ秒 (7074) 入力/出力 707x は7ビット・インターフェースのチャネルを使用する。7070と7074は、9ビット・インターフェイスを使用してより高速なデバイスを接続するために、7907のデータチャネルを装備することができる。 IBM 7074は、1962年に米国内国歳入庁で使用された。 IBM 7700データ収集システム(IBM 7700 Data Acquisition System (英語版) )は、その番号と発表日が1963年12月2日であるにもかかわらず、IBM 7000シリーズのメンバーではない。 700シリーズと7000シリーズのすべてのマシンは、Wheatstone (1972年)、Dhrystone (1984年)、LINPACK (1979年)、リバモアループ（英語版） (1986年) などの標準的な性能測定ツールよりも前のものである。 下の表では、GibsonとKnightの測定では速度を報告しており、数値が大きいほど速度が高くなる。TRIDIAの測定では時間を報告するが、数値が低い方が高速である。 IBM 650 IBM 1400シリーズ IBM System/360シリーズ IBM System/370シリーズ ^ 例外は7340 Hypertapeである ^ a b c 6ビット＋パリティ ^ a b c 8ビット＋パリティ ^ Weik, Martin H. (December 1955). “IBM-705”. ed-thelen.org. 2020年10月24日閲覧。 ^ Weik, Martin H. (March 1961). “IBM 705 I II”. ed-thelen.org. 2020年10月24日閲覧。 ^ Weik, Martin H. (March 1961). “IBM 705 III”. ed-thelen.org. 2020年10月24日閲覧。 ^ “IBM 7010”. ed-thelen.org. 2020年10月24日閲覧。 ^ Gannon, Robert (March 1963). “Big-Brother 7074 is watching you”. Popular Science. http://blog.modernmechanix.com/big-brother-7074-is-watching-you/ January 19, 2020閲覧。.  ^ M. Phister, Jr., Data Processing Technology and Economics, 2nd ed., 1979; Table II.2.11.1 ^ "Final Report on 64/6600 FORTRAN Version 3.0", Control Data Corporation, 1966 June 6; section I.B, pp. 3-4; at bitsavers.org ウィキメディア・コモンズに関連カテゴリがあります。 IBM 700 series、IBM 7000 series IBM Mainframe family tree The Architecture of IBM's Early Computers (PDF) C Gordon Bell, Computer Structures: Readings and Examples, McGraw-Hill, 1971; part 6, section 1, "The IBM 701-7094 II Sequence, a Family by Evolution", ISBN 0-07-004357-4 IBM 705 IBM 7030 Stretch IBM 7070 IBM 7094 IBM 7090/94 Architecture Jack Harper's FAP page Birth of an Unwanted IBM Computer, by Bob Bemer