メインフレーム / オフコン全盛時代の終焉は、ある意味マイクロプロセッサーの登場によってもたらされたのです。
マイクロプロセッサ(MicroProcessor) - Wikipedia
コンピュータなどに搭載される、プロセッサを集積回路で実装したもの。小型・低価格で大量生産が容易であり、コンピュータのCPUの他、ビデオカード上のGPUなどにも使われている。また用途により入出力などの周辺回路やメモリを内蔵するものもあり、一つのLSIでコンピュータシステムとして動作するものを特にワンチップマイコンと呼ぶ。マイクロプロセッサは一つのLSIチップで機能を完結したものが多いが、複数のLSIから構成されるものもある。
*「CPU」、「プロセッサ」、「マイクロプロセッサ」、「MPU」は、ほぼ同義語として使われる場合も多い。本来は「プロセッサ」は処理装置の総称、「CPU」はシステム上で中心的なプロセッサ、「マイクロプロセッサ」および「MPU(Micro-processing unit)」はマイクロチップに実装されたプロセッサを指す。
当初のコンピュータにおいて、CPUは真空管やトランジスタなどの単独素子を大量に使用して構成されたり、集積回路が開発されてからも、たくさんの集積回路の組み合わせとして構成されてきたが製造技術の発達、設計ルールの微細化が進むにつれてチップ上に集積できる素子の数が増え、一つの大規模集積回路にCPU機能を納めることが出来るようになったのであった。汎用のマイクロプロセッサとして最初のものは、1971年にインテルが開発したIntel 4004(1971年11月15日発表)である。テッド・ホフによる基本的なアイディアと、嶋正利による論理設計とフェデリコ・ファジンによる回路・マスク設計による、最初期のマイクロプロセッサとして知られるが、同時代には以下の様なマイクロプロセッサと認められるLSIも開発されている。
CADC(MP944、米海軍1970年)…1968年にギャレット・エアリサーチ社がF-14飛行制御用デジタルコンピュータの開発を要請されてCADC (Central Air Data Computer) を設計。これは1970年に設計を完了したMP944というMOSベースのチップセットから成るマイクロプロセッサで、従来の機械装置より小型で信頼性が高く、初期のF14 トムキャット戦闘機に採用された。米海軍は軍需用品として民間への商用販売などを1997年まで禁止していたため、 は最近までほとんど知られていなかった。
TMX1795(Texas Instruments、1970年〜1971年)…8-bitマイクロプロセッサー8008 のベースとなった試作品。
TMS 1000(Texas Instruments)…マイクロコントローラに近い構成のLSIで、1971年9月17日に電卓向けプログラムを内蔵した TMS1802NC をリリース。μPD707・708(NEC、1971年12月サンプル出荷開始)…半導体プロセスの製造効率から2チップ構成だが機能的にはマイクロプロセッサでμCOMシリーズの源流である。シャープが日本コカ・コーラへ供給する仕向け機器に用いられた。
4004は当初電卓用に開発された、性能が非常に限られたものであったが、生産や利用が大幅に容易となったため大量に使われるようになり、その後に性能は著しく向上し、価格も低下していった。この過程でパーソナルコンピュータやRISCプロセッサも誕生した。ムーアの法則に従い、集積される素子数は増加し続けている。現在ではマイクロプロセッサは、大きなメインフレームから小さな携帯電話や家電まで、さまざまなコンピュータや情報機器に搭載されている。
1987年、COBOL業界から転職してきた中途採用の人に設備(PC-9801)を説明していて、「CPUはどこですか?(´ω`)」と聞いてきたので、ヘンなことを聞く人だなぁと思いながら筐体を開けソケットから80286を抜いて「CPUはコレですが」と言ったら(゜Д゜)になって固まっていた。彼は翌日から来なかった。 https://t.co/ScFmuTgJZe
— ウチューじん・ささき (@uchujin17) June 22, 2018
電子工作少年からのマイコン育ちだった僕は知る由もなかったけど、大型機の世界では業務用冷蔵庫ほどもあるキャビネットが「CPU」で、キーボードとモニターの付いた機械は「端末」でしかなかったのね。彼にはPC-9801が端末に見えたのだろう。
— ウチューじん・ささき (@uchujin17) June 22, 2018
悪いことをした、とは思わない。その程度の知識や理解でマイコン業界に転職できると思ったなんて「ふざけんな!」(日向ちゃん@宇宙よりも遠い場所)だわ。今では信じられないけれど、当時の大型機のCOBOL屋には「マイコン・パソコンなんてしょせんオモチャwww」と見下す風潮が根付いていたのよ。
— ウチューじん・ささき (@uchujin17) June 22, 2018
マイコン以前のコンピュータにもいろいろあって、COBOLを動かす基幹業務系ではIBMのメインフレームが圧倒的な強さを誇っていて、「CPU」も元々はIBMの用語だったと記憶。いっぽう科学技術系ではDECのミニコンピューターが愛用されていた。
— ウチューじん・ささき (@uchujin17) June 22, 2018
モトローラ6800系はDECのミニコンPDP-11の影響が強いと言われていて、たぶんミニよりも小さいマイクロのニュアンスを込めてMicro Processing Unit=MPUと呼んだのだろう。邪悪なIBM用語たるCPUと呼ぶな…というニュアンスはしかし、あったかどうだか。
— ウチューじん・ささき (@uchujin17) June 22, 2018
マイコン・パソコンに熱を上げていた若者(僕もそうだった…今でも若者だけど!´ω`)の多くはメインフレームを見たこともスーパーミニコンを触ったこともないから、単にintel/Zilogの80系とMorola/Mostechの68系で意地を張り合っていただけじゃないかな。
— ウチューじん・ささき (@uchujin17) June 22, 2018
80系・68系の抗争も後のMS-DOS・Macintoshの抗争に似て、ビット並びのLittleとBig Endianのどっちが「自然」だとか、レジスタマシンとメモリマシンのどっちが「優れている」とか、まぁおおよそ愚にもつかないことで唾を飛ばしあって、両方使えるひとは「どっちもどっちだよ」と諦観していた。
— ウチューじん・ささき (@uchujin17) June 22, 2018
68系信者は80系を「直交性に欠ける」と批判したけど、それは主にZ-80のZilogニモニックが何でもかんでも全部LDにしてしまったのが悪いのであって、MVIとかLDAとかの元祖intel 8080ニモニックだとちゃんと直交性がある。こっちではHLとBC/DEは基本別扱いだ。
— ウチューじん・ささき (@uchujin17) June 22, 2018
レジスタ経由のI/OアドレッシングはBCしか使えないとか、ループ命令のDJNZはBしか使えないとかの制限もあったけど、基本的に8080は「Aがアキュムレータ、HLがポインタ、B,C,D,Eは補助レジスタ」。HとLを8bit単位にバラして使えたり、BC/DEが16bitで使える命令もあるので混乱するだけ。
— ウチューじん・ささき (@uchujin17) June 22, 2018
演算は基本的にアキュムレータに対してしか行えない、というのは68系でも同じことで、補助レジスタの代わりにアドレッシングモードが沢山あるだけ。6502のダイレクトページアドレッシングは実質「メモリを流用した補助レジスタ」でもある。これに気が付いたら「似たようなものじゃん」となる。
— ウチューじん・ささき (@uchujin17) June 22, 2018
8086系では直交性は更に進んでいて、なのに悪く言われたのはメモリ空間が20bitに増えたのにレジスタ幅を16bit据え置きにしたこと、24bit空間の80286でさえ16bitレジスタのまま難解きわまる仮想メモリシステムを導入したせいだと思う。
— ウチューじん・ささき (@uchujin17) June 22, 2018
68000はレジスタを32bit幅にして、まだAXを若干特別扱いしていた8086に対しD0~D7というデータレジスタを備えてちょっと後のRISCっぽくなった。でもアドレスレジスタA0~A7も備えていて、これは段々と68Kファミリーに暗い影を落とすようになってゆく。
— ウチューじん・ささき (@uchujin17) June 22, 2018
68000ファミリーには趣味でも仕事でも縁が薄く、本格的に使ったのは入社1年目の1度だけだったけど、特に感銘は受けなかった。レジスタ幅が32bitあってメモリ空間がブチ切れていないのは素晴らしいけれど、それ以上のものでもないんじゃ?と思っていた( ˘ω˘)
— ウチューじん・ささき (@uchujin17) June 22, 2018
とはいえ、「レジスタに物理アドレスを入れて直接メモリアクセスできる」という、当たり前のようなことがなかなかできなかったのがマイコン業界でもあるのだけど(´ω`)インテルは386を出す前にこれまた難解きわまるiAPX432という寄り道をしたし。
— ウチューじん・ささき (@uchujin17) June 22, 2018
Zilog Z-8000もTI TMS9900も「レジスタ幅16bitの16bitプロセッサ」で、Z-8000はセグメント拡張、TMS9900はメモリ空間すら16bitという設計で、これだったら8086のほうがマシだよねという顔ぶれ。だから32bitレジスタの68000は確かに画期的ではあったのだけど。
— ウチューじん・ささき (@uchujin17) June 22, 2018
90年代に入るとSPARC、MIPSを筆頭に32bitレジスタ x 32本のRISCプロセッサがわんさか出てきて、68000系は対抗できなくなって消えていった。まぁ雨後の筍みたいに沸いたRISCアーキテクチャもほとんどARMに一掃されちゃったけど。
— ウチューじん・ささき (@uchujin17) June 22, 2018
まるで「プトレマイオスの天動説」でも聞かされてる様な目眩を感じます。
その一方では「コンピューターが使用可能なリソースの仮想化」の歴史自体が20世紀一杯は錯綜に満ちていたりもするのです。
仮想記憶(Virtual Memory) - Wikipedia
仮想記憶技術が開発される以前、1940年代から1950年代のプログラマは2レベルの記憶装置(主記憶あるいはRAMと、磁気ディスク装置あるいは磁気ドラムメモリといった二次記憶)を直接管理する必要があり、大規模プログラムではオーバーレイなどの技法が使われていた。従って仮想記憶は、主記憶を拡張するためだけでなく、そのような拡張をプログラマが可能な限り容易に扱えるように導入された。マルチプログラミングやマルチタスクを実装した初期のシステムは、メモリを複数のプログラムに分割するのに仮想記憶を使っていない。例えば初期のPDP-10はレジスタを使ってマルチタスクを実現していた。
ページング方式はマンチェスター大学のAtlas上で開発された。1万6千ワードの磁気コアメモリの一次記憶と9万6千ワードの磁気ドラムメモリによる二次記憶を制御するものである。最初のAtlasは1962年に稼働開始したが、ページングのプロトタイプは1959年に開発されている[4](p2)[5][6]。なお、ドイツの初期の情報工学者 Fritz-Rudolf Güntsch (後に Telefunken TR 440 というメインフレームを開発)は 1957年の博士論文 Logischer Entwurf eines digitalen Rechengerätes mit mehreren asynchron laufenden Trommeln und automatischem Schnellspeicherbetrieb(複数非同期ドラム装置と自動高速メモリモードを持つデジタル計算機の論理概念)で仮想記憶のコンセプトを発明していたと言われている。
1961年、バロースはセグメント方式で仮想記憶をサポートした世界初の商用コンピュータ B5000 をリリースした。
1965年にMITが開発したMultics以降、仮想記憶は本格的に採用され始めた。
コンピュータ史上の多くの技術と同様、仮想記憶にも様々な曲折があった。安定した技術と見なされるまで、仮想記憶の様々な問題点を解決しようとするモデルや理論が開発され実験がなされた。仮想アドレスを物理アドレスに変換するハードウェア機構の開発も必然的だったが、初期の実装ではそれによってメモリアクセスが若干遅くなった。システム全体を対象とするアルゴリズム(仮想記憶)は従来のアプリケーション単位のアルゴリズム(オーバーレイ)よりも非効率ではないかという懸念もあった。1969年、商用コンピュータでの仮想記憶に関する論争は事実上終結した。David Sayre 率いるIBMの研究チームが仮想記憶システムが手動制御システムよりも優位にあることを示したのである。
1970年、IBMはSystem/370シリーズのOSであるDOS/VS、OS/VS1、OS/VS2(後のMVS)で仮想記憶をサポートした。OS/VS1はシングルタスクの仮想記憶で、マルチタスクには従来通りユーザーによるマルチプログラミングが必要であったが、OS/VS2はマルチタスクの仮想記憶(複数の仮想アドレススペース)をオペレーティングシステムの機能としてサポートした。以後の各社メインフレームでは仮想記憶が一般的となる。
ミニコンピュータで初めて仮想記憶を導入したのは、ノルウェーのNORD-1である(1969年)。1976年、DECのミニコンピュータ VAXシリーズのOSであるVMSで仮想記憶をサポートした。
しかし、1980年代の初期のパーソナルコンピュータでは仮想記憶は採用されていない。これは当時のマイクロプロセッサの性能や機能の問題もあるし、個人用のコンピュータに仮想記憶が必要になると見なされていなかったという面もある。当時の主流はバンク切り換えによるメモリ増設だった。x86アーキテクチャで仮想記憶が導入されたのは、Intel 80286 によるプロテクトモードが最初だが、セグメント単位のスワッピングはセグメントが大きくなると性能が悪くなるという問題があった。Intel 80386 では既存のセグメント方式の下層にページング方式を実装し、ページフォールトによるページングが可能となった。しかしセグメントディスクリプタのロードは時間のかかる処理だったため、OS設計者はセグメントを使わずページングだけを使うようになっていった。仮想記憶が導入されたのは、OS/2(1987年)、Microsoft Windows 3.0 (1990年)、MacintoshのSystem 7(1991年)、Linuxカーネル 0.11+VM(1991年)などが最初である。
1950年代から1960年代にかけての黎明期のコンピューターは、大変高価なものだった。そのため、このコンピューターを多くのユーザーと共用する方法がいろいろと考えられた。そのひとつが「バッチ」だ。ひとつひとつの処理単位 (ジョブ)が、順次実行される処理形態。この方法では、前の処理が終わらなければ、次の処理に移ることはできない。これでは不便だと言うことらになり、生まれたのが、「タイムシェアリング」だ。
- タイムシェアリングとは、1台のコンピューターのCPU処理時間を極めて短い時間単位で分割し、複数のユーザーに順次割り当て、見かけ上複数のユーザーが同時にコンピューターを利用できるようにすることでコンピューターの共用を実現しようとした。1961年、IBM 709でタイムシェアリングが実装され、さらに使いやすいシステムの実現を目指し、MITでMULTICS (Multiplexed Information and Computing Service)プロジェクトがスタートとした。MULTICSは必ずしも成功とは言えなかったが、この考えは受け継がれ、後のUNIXへとつながる。
- さて、分割したCPUの処理時間は、ユーザーにとって独立した個別のCPUと見做される。ならば、これにユーザー個別のオペレーティング・システムを動かせるように発展させることで、今でいう仮想化が生まれた。
- 1967年、IBM System/360モデル67で実装されたCP-67/CMSが商用ベースでは、初めてのモノとされている。また、その時始めて、Virtual Machine(VM)という言葉が使われた。
このようにして「マシンの仮想化」なる概念が誕生した。
1964年以前 (分散)
メインフレームが生まれる1964年以前、コンピューターは業務にあわせた専用機として存在していた。企業は、業務毎にその専用機を使わなくてはならず、分散システムの時代。また、ハードウェアは高価であり、複数の機器を利用しなければならず、その運用負担やコストの増大は課題となってた。
1964年(集中)
この年に、メインフレームの先駆けであるIBM System/360が誕生した。「汎用機」とも呼ばれ、異なる業務もこれ一台で対応できる万能機としてその存在感を示した。浮動小数点演算も可能であり、事務計算ばかりでなく、技術計算もこれ一台でこなすことができた。ただし、異なる業務での共用は、当初はバッチ処理。その後、タイムシェアリング使えるようになる。ただし、同じOS上に複数のアプリケーションを稼働させる処理形態をとっていた。
1967年 (集中・分割)
仮想化の技術は、この年以前からもいろいろと研究されていたが、1967年 IBM System/360モデル40用に研究用の仮想化OSとしてCP-40が開発され、これをベースにSystem/360モデル67用にCP-67が開発され始めて商用製品として発売された。1972年 仮想記憶をサポートしたSystem/370シリーズ用にCP-370が開発され本格的に普及するようになった。
この仕組みにより、高価であったハードウェアをユーザー個別の専用機として「分割」することで、利用の自由度を高め、見かけ上のマシン・コストの削減を図ろうということが、この当時の仮想化の目的となっていた。
1980年代〜 (分散)
安価な小型のコンピューターの出現により、何でもメインフレームの時代から、ダウンサイジング、分散の時代へと移っていった。メインフレームほどの能力や機能はいらない、その代わり、集中システムであるメインフレームの運用上の制約を受けることなくもっと自由に使いたいとの思惑から、高価なメインフレームを仮想化で「分割」するのではなく、低価格の専用で使えるハードウェアを購入した方が便利であるという考え方が広がり、「分散」がすすんでいった。その一方で、企業が抱えるコンピューターの台数は増大し、TCOの増大を招くこととなった。
1999年(集中・分散)
この前年の1998年にVMware社が設立され、翌年の1999年に初めての製品、VMware Workstationが発売されました。x86ベースの仮想化ソフトウェアで、これ以前も研究目的では存在していたが、商用ベースでは初めてのもの。当時は、WindowsとLinuxに対応し、主にソフトウェア開発・評価・テストを目的とするものだった。その後、機能も拡張され適用範囲が広がってゆく。また、VMware以外にも多くの仮想化ソフトウェアが出現し、現在に至っている。
この時代の仮想化は、安価な物理マシンの増大によりTCOが増大、そのことが企業のIT予算を圧迫するに至り、仮想化により物理マシンを「集約」することでTCOを削減したいという思惑から仮想化が広く使われるようになった。
BIOSの歴史
BIOSはIBM PC(1981年)と共に登場し、「IBM PC互換機」が普及した事によりパソコンの標準ファームウェアとなりました。
以降、ハードウェアもBIOS自身も当時とは全く異なる姿になるまで大きく拡張・変更され続けていますが、アプリケーション互換性を保たなければならなかった過去の経緯から、未だBIOSは大変古い仕組みを使い続けており、機能の実装に大きな制約があります。
具体的に一番大きい制約は、リアルモード(CPUがオリジナルのIBM PCに搭載されていた8086をエミュレートするモード)で動作しているということです。これにより、一度にアクセスできるデータサイズは64KBに制限され、メモリ空間全体でも通常1MBまでしかアクセス出来ません。
プロテクトモードやロングモード(64bitモード)でOSを走らせるためには、CPUのモード切替の作業が必要になり、ブートローダやOSの構造はやや複雑になります。
また、BIOSがハードディスクからロードするブートローダのサイズも決められており、既に現代のブートローダはここに入りきらないサイズに達してしまい、「多段ブート」と呼ばれる、ブートローダが更に大きなブートローダをロードするという対処療法的な実装がなされています。USBやBluetooth、LANやWiFiなど、最近のハードウェアのBIOSからの利用もなかなか困難になってきています。
このような状況で「古い仕組み」と認識されつつも、ずっと根本的な変更が加えられぬまま放置されてきたBIOSですが、最近になって新たに問題が発生し、新しい仕組みである「UEFI」への移行が進みつつあります。
現在BIOS搭載機上のHDDで使われている「MBR」と呼ばれるパーティーションテーブルですが、これは2TBまでのサイズしかサポートしておらず、新たなパーティーションテーブルと、新たなパーティーションテーブルからブートする仕組みが必要になったのです。
EFIの歴史
EFIは、1990年代にIntelとHPがIA64アーキテクチャを設計した時に、IA64とIA32両方で使えるレガシーフリーなファームウェア仕様を作ったのが始まりで、当初IA32では必要性が薄く殆ど採用されなかったのに対し、IA64にはEFIしかファームウェア標準が無いため初めてのIA64サーバ・ワークステーションリリース時から採用されています。
Appleは例外で、Intel Mac(1992年〜)はリリース時からEFIを搭載しています。但しこれはEFI 1を基にし、OSXに合わせて仕様をやや変更しているようです。
EFIはその後Unified EFI Forumへ権利を移管してUEFIと呼ばれるようになり、2.x系の仕様がリリースされました。IA32(Intel 64含む)でも、2TB以上のHDDが普及すると共に新しいハードウェアで採用が本格化してきています。
また、Windows RTタブレットやARMサーバにおいて、UEFIを採用したARMマシンも出てきているようです。
レガシーフリーと先に書いた通り、IA32におけるEFIはプロテクトモードまたはロングモードで動作するためメモリ空間の制約を持たず、GPTと呼ばれる新たなパーティーションテーブルを採用して2TB以上のHDDをサポートし、NICやUSBなど様々なデバイスをサポートしています。OSのブートローダのサイズにも制限がありません。更に、レガシ互換機能としてBIOSブートもサポートされます。
コンピューター・リソースへのアクセス方法がフラットな単一アドレスに集約されるまで、これだけの歳月と歴史が必要だったという次第。そうした思考様式と「試金石の概念導入(紀元前7世紀頃の地中海沿岸とオリエント地方)に端を発する人文学上の仮想化概念(すなわち貨幣経済化)」の合流が21世紀まで持ち越しとなったのも仕方がない?
こうして両者の認識は「操作者(言語ゲームとしてのコンピューター・アーキテクチャーや経済モデルの外側に仮想化された形で追い出された「人間そのもの」)」が「操作(コンピューター・アーキテクチャーや経済モデルが受容可能な体裁を整えた操作者の「観想」体系)」を通じて「世界そのもの(操作者の「操作」に応じた影響を受容する「コンピューター・アーキテクチャーにとっての接続デバイス群」や「経済モデルにとっての経済そのもの」)」にアクセスするフラットな言語神秘学的空間に統合される道を辿る事になったのです。もちろん、まだ実際の完全に実用的な「合流」は遥か先の未来の事となりそうですが…
そしてこの世界観において人類は改めて「操作者側(インテリ=ブルジョワ=政治的エリート階層)」と「デバイス側(プロレタリア階層(労働者・小作農)や組織に管理職として組み込まれるホワイトカラー階層)」に二分される展開を迎える?