3. 現在のコンピュータの仕組み(ハードウエア、ソフトウエアと仮想化関連技術)

3-1. コンピュータの仕組み(ハードウェアとソフトウェア)

歴史の話は、とりあえず前回まででおいといて、今回から2回、現在のコンピュータやネットワークの仕組みについて、初歩的な事を纏めておきましょう。

まずは、ハードウェアとソフトウェアの用語。この用語、20年前の大学教育なら説明の必要すら無い用語でしたが、「computerの日本語訳(直訳)が計算機であることを知らない世代になっている」ことを踏まえ、一応最初に、基本的なことをまとめておきます(^^;

IT分野では「ハードウェア」とは「機械そのもの。形があるもの」の意味で使われます。対する用語として「ソフトウェア」は「プログラムやデータなど、形のないもの」の意味で使われます。この概念が生まれたのが、バベッジの解析機関かもしれません(^^; が、一般的には、1960年頃から、使われ始めた用語のようです。1950年代まではプログラムは機械の一部あるいは操作法といった認識であり、単独の「製品」と言う認識が薄かったですが、コンピュータで多様な処理を行うような時代になるにつれ、処理そのものはプログラム次第、と言う認識が高まり、機械そのもの(ハードウェア)と、プログラムなど(ソフトウェア)を分けて呼ぶようになりました。


3-2. ハードウエア(キーワード)

歴史で紹介したように、「現在のコンピュータの仕組み(ハードウェア)」は、基本的に「ノイマン型」と呼ばれるものであり、ここ70年間殆ど仕組みは変わっていません(大きさや性能は10億倍ほど変化していますが)。ですから、詳しく知りたい方は最近の本かどうか関係なく、ちゃんとした教科書が山ほどありますしwebにも山ほど解説や技術情報がありますので(http://www.infonet.co.jp/ueyama/ip/など)、電子回路の初歩、デジタル回路、論理素子、演算回路、記憶回路....と順番に学んでいただければ、現在の最新のコンピュータの仕組みまで「詳しく」知ることができます(ただし分量は膨大になりますので、本気でコンピュータの仕組みを知りたい人向けです(^^;)。逆に言えば、現在の進んだコンピュータを使っていても、基礎的な知識を学んでいない人は、多分70年以上過去のセンスである可能性も高い部分です。

そこで、まず、ハードウェアについて調べる時のヒントとして、最低限の「キーワード」を、私なりに、レベル別に4段階に分類して簡単にまとめておきますので、「必要に応じて、後で自分で調べて」ください。

キーワード1(1950年代から現在まで変わっていない基本):アナログ・デジタル、ノイマン型、逐次処理、CPU、メモリ(主記憶装置)、ストレージ(補助記憶装置)、バス(コンピュータ用語)、クロック
キーワード2(1960年代から現在の基礎):キャッシュメモリ、CPUクロック・バスクロック
キーワード3(40年前のスーパーコンピュータの技術=現在のPCやスマホの技術):並列化、パイプライン処理・ベクトル処理、マルチCPU・マルチcore、GPU
キーワード4(1970年頃から始まったCPUの流れ。PCとスマホの世界):CISC・RISC (IntelとARMの違い)

他にもいろいろありますが、「最低の知識レベルの受講生であっても、1・2のキーワードについてはある程度調べて知っておいて欲しい」ですし、また「殆どの受講生は、3のキーワードについても、ある程度調べて知っておいて欲しい」と思います。 また、「ある程度知っていると思っている受講生」は、キーワード4についても調べて知っておいてください。なお、ここまで全部クリアしたレベルなら、自力で他にもキーワードを見つけられると思いますので、自分でどんどん「現在のコンピュータのしくみ」を調べてください。なおゴール(終わり)はありません。CPU開発者でも主要な部分・自分が開発する部分のみを詳しく知っているだけで「コンピュータの仕組み全部を完璧に知っている一人の人間」と言うのは多分存在しないと思いますし、また、時代が進むつれ、新しいものが出てきますから。

とは言っても、「最初から、自力で調べるのは難しい」かもしれません。ということで、次にハードウェアについて「この授業の内容として、最低限知っておいてね」と言う部分から順に、簡単に紹介していきます(なおソフトウェアについては、後ほど見ていきます)。


3-3. 現在のコンピュータ(ハードウエア)の、やや詳しい補足説明

既に知っていることは読み飛ばし、どう頑張っても「今の自分には」理解できなそうなことは「簡単に眼だけ通して」読み飛ばしてもかまいません。「少し知っていて、詳しくは知らない」という部分を、自分なりに学んでいくと良いと思います。

現在の一般的なコンピュータ(ノイマン型コンピュータ)は、計算や制御を司る中心部分「中央処理装置=Central Processing Unit=CPU」が「主記憶装置=Main Mamory=メインメモリ」に格納される命令列(プログラム)やデータにしたがって「1つずつ順に命令を実行(逐次処理)する」という仕組みをしています。なお命令やデータは全てデジタル(0か1の組み合わせ)で、電子回路では0Vか5Vか、とかの電圧(ビット:bit)で表現します。この仕組みのコンピュータをノイマン型コンピュータと呼びます。コンピュータは、bitを扱う基本論理回路(OR回路、AND回路、NOT回路)を多数組み合わせて、様々な処理をする回路(加算回路、カウンタ、記憶レジスタ. 等)を作り、これらの回路を多数組み合わせて、コンピュータの部品(CPUやメモリ等)を作ります。なお、現在のCPUは100億個程度の素子で作られています(1970年代のCPUは数千個の素子で作られていました)。沢山の部品はタイミングを合わせて動作させる必要がありますので「クロック」と呼ばれる信号(オーケストラの指揮者が振るタクトのようなもの)でタイミングを合わせます。1秒間に何回動作させるかを「クロック周波数(単位はHz:ヘルツ)」と呼びます。昔は1秒間に数万回(10,000)くらいの「遅い」動作でしたが、現在では1秒間におよそ「1,000,000,000」回くらいです。大きな数は0を沢山並べると分かりにくいですから、普通は3桁ごと区切り、キロ(K)、メガ(M)、ギガ(G)等と表します。現在のCPUのクロックスピードは(スマホでも、スーパーコンピュータでも)、およそ数GHzです(歴史で説明したように、光が10cmくらい進む時間で1回動作します)。

それらの装置は「バス(Bus)」と呼ばれる信号線の束で繋がれています。イメージとしては... 言葉どおり「道を走るバス」です。バスは同じ道を走っていますが随所に「停留所」があり、そこからバスに乗ったり降りたりして、様々な場所に行けます。コンピュータの中の様々な装置の間の信号のやりとりも、同じ仕組みで、停留所から(バスが空いていれば)バスに乗り、目的地の停留所に到着したら降りる、と言う形で通信をします。もしバスが満員だったら... 次のバスが来るまで待ちます。ちなみにコンピュータの中のバスは1人乗りです。このような仕組みにすることで「多数の装置が組み合わされていても、配線は少なくてすむ(同じ信号線を、タイミングを合わせて全ての装置で共有する)」ことができるからです。

バスには、CPUとメインメモリだけでなく、様々な装置が繋がれます。たとえば入力装置(キーボードやマウスなど)や出力装置(ディスプレイやプリンタなど)など。1960年代はそういう装置は個々の別々の装置として作られ接続されていましたが、段々に「周辺装置」という形である程度纏めて扱う技術が進展します。現在ではそういう周辺装置を繋ぐための標準的な仕組みを「入出力インターフェイス」と呼んでいます。つまり、バスには「CPU」、「メインメモリ」、「入出力インターフェイス」が繋がれます。そして、入出力インターフェイス経由で「個々の入力装置、個々の出力装置、個々の補助記憶装置(ストレージ:ディスクなど)」が繋がれます。
余談:日本の携帯電話業者は、メインメモリ(主記憶装置)をRAM(ラム)、ストレージ(補助記憶装置)をROM(ロム)と呼んでいますが、普通の用語としてはRAM(Randam Access Memory:格納順によらず任意の記憶内容を取り出せる記憶装置),ROM(Read Only Memory:読み出し専用の記憶装置)の意味であり、明らかな誤用です(^^;;; なお、「日本の携帯電話業界」でしかでしかそのような誤用はしませんし、海外では普通にMain Memory(主記憶装置)、Strage(ストレージ:補助記憶)と言いますので、これも常識として知っておくとよいかも。

1960年代、様々な装置をある程度まとめて取り扱う技術の進展により「装置の動作速度の違い」の問題に気が付き始めます。たとえばCPUは純粋に電子素子の集まりなので極めて動作速度が速いですが、たとえばその速度で人間がキーボードを打てるはずも無く、印刷機もその速度で動けるはずも無く、また、補助記憶装置(ストレージ)も、当時は磁石を利用する方式でしたので(磁気ディスク、磁気テープ)、人間よりは速いですがCPUの速度からすると(4桁以上の)桁違いに遅いです。全ての装置を同じバスに繋ぎ、同じクロックで制御すると、装置全体のスピードが4桁(1万倍)以上遅くなってしまします。

そこで、装置が交換する情報を「一時的に蓄えておく装置(=キャッシュメモリ)」の仕組みが発明されました。高速な装置はキャッシュメモリからプログラムやデータを取り出し、高速に処理して結果もキャッシュメモリに格納する。バスに繋がれた装置は、ゆっくりとしかし「一気に纏めて」キャッシュメモリからデータを取り出したりキャッシュメモリに入れたりする。この工夫により、CPU内では高速な処理を行い、バスに繋がれたその他の装置は、比較的遅い、必要なタイミングで一気にでデータ交換をすることにより、処理全体を効率的に高速に行えるようになりました。現在のコンピュータは殆どすべてこの仕組みを採用していますので、タイミングを取るクロックも、CPU内のタイミングを取る「CPUクロック」と、バスに繋がれた装置(メインメモリや入出力インターフェイス)とのタイミングを取る「バスクロック」に分かれています。なお、同じCPU・同じCPUクロックを使ったコンピュータでも、高級品と廉価品でスピードが違うのは、主にこの「バスクロック」違いです。バスクロックを上げると、バスの制御もバスに繋がれた装置も全部高速で動くものが必要になりますので、その分値段も高くなります。他方、それほどの高速性を必要としないならば、バスクロックを落としてそこに繋がれる装置も廉価版にすることにより、比較的安価になります。

ここまで、なんとなく理解していただけましたか? なお細かい内容詳しい説明は、いくらでもWebでみつけられますので、この辺で、最初に紹介したキーワード1・2の内容の紹介を、一応終えます。

----

1970年代から80年代、コンピュータを用いた大規模な計算や処理を行うにつれ「もっと速いコンピュータが欲しい」という需要が生まれてきます。代表的なものとしては「天気予報」の計算です。これはナビエ・ストークス方程式という流体力学の基本方程式(多次元の偏微分方程式)を精度よく解く必要があり、それには膨大な量の計算を高速に行う必要があります。初歩的な天気予報の計算ができるようになったのが1970年代です。それまでも「理論は(今年のノーベル物理学賞受賞者の真鍋さんなどの研究により)知られていた」のですが「明日の天気図を得るのに、1か月の計算時間が掛かる」のでは、天気予報として実用になりません。そこで、70年代に「今までの1000倍のスピードで計算できる『スーパーコンピュータ』の研究と開発」が進められます。クロックを早くすることも計算を速くする1つの手段ですが、それだけではいずれ(既に説明した、光速度の)限界に達してしまいます。なにか「根本的に違う方式」を考案する必要があります。そこで考え出されたのが(複数の装置で手分けして同時に計算を進める)並列化の手法です。

たとえば1人で手計算で「掛け算」を行う場合、桁をずらしながら1桁ずつ掛け算を行い、その結果を桁をずらしながら縦に並べ、最後に全部足し合わせますよね? これをそれぞれの桁の計算を「何人かで手分けして同時に」えば、最後の足し算をのぞけば、人数分の1の手間(時間)で答えを出せます。初期のCPUの中では、1つの命令(計算)を実行するために、何段階かの処理を組み合わせて、行っていました(数クロックで1命令実行)。これをもっと細かい処理単位に分け、それぞれの処理を行う装置を別々に用意し、いわば「流れ作業(=パイプライン)」方式によって、命令を実行する方式にすれば、各装置は休みなく同時に動くことにより、高速な演算が行えるようになります(パイプライン方式による並列化)。この方法で、従来の約10倍の処理速度が実現できました。なお現在のCPUはほぼすべてこの技術を取り入れているため、実質「1命令=1クロック」の実行時間です。

しかしまだ、たかが10倍です。あと100倍は速くしたい。そこでたとえば「演算回路を100個並べる」方法が考案されました。演算装置をこのように複数並べることを「ベクトル演算」と言います(なお「ベクトル」とは「数が並んだもの」です(高校などで向きと大きさ、と教わった人は、(大学生以上なら)忘れてください(^^; ただ単に3次元までのベクトルは向きと大きさでも表せる、というだけのことです)。これは「ベクトル計算用の専用回路」を大量に作る必要があり、極めて高価になりますので、それだけのお金を掛ける価値のある目的のために、特別に作られ、特別に販売されました。これにより大規模な気象計算も可能になり「24時間以内のピンポイント天気予報は、ほぼ確実に当たるのが普通(当たらないと誤解しているのは天気の違う荒い地域区分でごっちゃに見ているから)」という時代に入ります。

スーパーコンピュータができると、気象予報や天気予報だけでなく、いろいろな分野への応用が行われます。1980年代にはCG作成のためにハリウッドの映画会社も高価なスーパーコンピュータを導入しましたが、模型を作って撮影するより安価でした。もちろん「スターウォーズシリーズのような莫大な収益を得る映画の作成に百億円程度のスーパーコンピュータを購入するのは、それほど高くない」というレベルの話です。なおこのタイプのスーパーコンピュータは、あまりに開発費が高くなるため、大規模なものは、「地球シミュレータ(NEC)」などが最後のベクトル型のスーパーコンピュータとなっています。しかし、ハリウッドでのCGの成功などは「CG目的に高性能コンピュータを使う」という需要を生み出しました。そこで「グラフィック処理に特化した、超小型の小規模なベクトル型計算機」を1チップに埋め込む動きが出てきます。それが現在のGPU(Grephic Processing Unit)です。この動きを加速し、しかも膨大な開発費を確保することに大きな貢献をしたのが「3DCGを多用したリアルなゲーム」です。GPUの実用化に伴いどんどんリアルなゲームが生まれ、それを大勢が購入することにより潤沢な開発費を調達でき、次の高性能GPUの開発へ、とサイクルが回り、GPUは年々高性能化し、また小規模なものはCPUチップの中に埋め込まれ、現在では、殆どのコンピュータにGPUが組み込まれています。特に個人用PCやゲームマシンやスマホなどには例外なく全て組み込まれています。そのため、現在のこれらの機器は「グラフィック処理に関しては」1980年代のスーパーコンピュータ並の性能を持ち、当時はスーパーコンピュータでしかできなかったCGや動画処理なども、誰もが身近な機器でできる時代になっています。

また、この「並列化」はソフトウェア(OS)の「複数あるいは単一のソフトウェアの実行を、効率的に独立な複数の部分に分けて管理する」実行管理技術の進展により、「マルチCPU」の流れも生み出しました。これはコンピュータの中枢部である「CPU」を複数持ち、大量の処理(計算)を、複数のCPUで協力して分担し、行う方法です。問題(処理)をうまく分解できる場合には、例えば1000個のCPUを使い協力・分担すれば、最高で1000倍の速さで処理を行うことができます(現在のスーパーコンピュータは、主としてこの手法で作られます)。

そこまで沢山でなくても、例えば2つ、4つ、8つ、CPUを備えれば、最高で2倍、4倍、8倍の処理速度を得ることができます。また、数個であればCPUを別に用意するのでなく、「1つのCPUチップの中に、実質的なCPUの回路(=コア)を複数組み込む」こともできます。これが「マルチコアCPU」であり、現在のPCやスマホに使われているCPUは、殆ど全て、マルチコアCPUです。なお2つのものをデュアルコア、4つのものクアッドコア、6つのものをヘキサコア、8つのものをオクタコア...と呼ぶこともあります。なお、スマホでマルチコアが多いのは、処理能力を上げることが主な目的ではなく、「待受などCPUパワーを使わない時は、自動でいくつかのコアの電源を切り動いているコア数を減らし、消費電力を抑える(電池を長持ちさせる)ため」です。

現在のハードウエアは、パイプライン方式により実質1命令1クロックで実行でき、マルチコア・マルチCPUによって、単一のCPU回路の数倍の処理能力を持ち、さらに数十~数千の簡易な演算装置を持つGPUを備えることにより、一昔前のスーパーコンピュータ並みの処理性能を実現しています。なお、GPUをCG(画像処理)だけに使うのはもったいない、と言うことでGPUに(グラフィック専用演算だけでなく)プログラムできる機能を組み込み、様々な演算を行えるようにし(GPGPU: General-Purpose computing on Graphics Processing Units)まさにパーソナルスーパーコンピュータとでも言うべき性能を持たせることも可能です。このようにして作られた、言わば「パーソナルスーパーコンピュータ」が、現在、多方面での研究開発、特にAIの開発などに使われています。なお、大規模なスーパーコンピュータにも(高価なベクトル計算機の代わりにそれと比較したら安価な)多数のGPUが組み込まれています。ここまでが「キーワード3」に関わる、大まかな説明です。

# 研究所が、高速演算するためにGPU目当てに「ゲーム用PC」を購入したり、米国ペンタゴンがプレステ3を2200台購入したり(2200台のプレステ3を繋げて1つのスーパーコンピュータが作れます)、知らない人が見たら「何やってるの?(^^;」と思うでしょうね。

----

次に、キーワード4の「CISC CPU(IntelのCPU) とRISC CPU(ARM のCPU)」の歴史について、簡単に説明します(WindowsPCとスマホ、古いMacと新しいMacの違いと関係します)。この部分はやや高度ですので、興味のない方は読み飛ばしても構いません。

元々CPUは、多くの部品を集めて作られていました。1970年代、日本ビジコン社の島正利とインテル社のコラボの結果として世界初のマイクロプロセッサ4004が生まれ、引き続き8080が市販され、「インテルのCPU」の時代が始まりました。その後、モトローラ社を始めとし「より合理的なCPU」が開発されますが、結果として8080の仕組み(アーキテクチャ)をひきついだCPUが(最初に作ったCPUとの互換性維持のため、無茶苦茶な仕様にもかかわらず)熾烈な競争の中で最終的に生き残り、現在のIntel Coreシリーズになっています。人類の歴史と言うものは「必ずしも良いものが生き残るわけではない(悪くても強いものが生き残る)」と言う原則が成り立っていますので、CPUの進化の歴史もその1つです。8080~Coreシリーズにいたる流れは、CISC ( Complex Instruction Set Computer)と呼ばれ「複雑な演算を1つの命令を実行できる」複雑な仕組みのCPUを目指しています。同じクロックスピードなら、できるだけ複雑な処理を一気に行えた方が速い、と言う戦略です。

それに対し1970年代から「より合理的なCPUを作ろう」と言う動きも続き、RISC( Reduced Instruction Set Computer) と呼ばれる仕組みのCPUが開発されます。これは、命令セットを整理することによりCPUの回路を単純化し、消費電力も抑え、結果的に同じ大きさ同じ消費電力なら、CISC より高速で処理性能が高いCPUになるのではないか? と言うアイデアです。実際に数多くのRISC CPUが作られ、省電力高性能CPUが作れることが分かってきました。が、半導体産業は「数の勝負」であり、1つ開発するのに掛かる膨大な開発費を何個売って回収できるか? で産業としての成否が決まります。その戦いの中、巨大メーカーに成長したインテルに勝てる企業がなくなり、インテルおよびそのコピーCPUを生産するAMD以外のCPUは市場から消えていきました。

その中で「半導体製品の生産競争には、参戦できる資金力も工場も無いが、良いCPUの設計図を、半導体製造工場を持つ企業に売ることはできる」と言う形で、英国ARM社がARMシリーズと呼ばれる「RISC仕様のCPU」を生み出し「設計図(=生産ライセンス)を売る(設計技術を持たなくても半導体製造工場があればCPUを生産できる)」と言うビジネスモデルで、主に機器組み込み用CPUの市場を開拓しはじめました。これに大きな転機が来たのはiPhoneなどのスマートフォン市場。小型省電力と言う目的に合致したことから、以後「iPhoneを始めとし、殆ど全てのスマートフォンや数多くの機器組み込み用CPUとして」使われ始めます。多くの人が使い始めるに従って「ソフトの開発システムや開発環境」も整備され、現在では、機器組み込み用コンピュータ~スマートフォン~タブレット等」は、ほぼ全てと言って良いほど「ARMが設計したCPU」が使われています(製造は様々な半導体メーカです)。Intel CPU 搭載のタブレットなどは、演算速度は早くても消費電力が大きすぎるため電池がもたない、とかいろいろあり、インテルもATOMシリーズなど「省電力CPU」を発表しますが、この目的につかうCPUとしては、現在ではほぼ完全にARMのCPUに淘汰されました。

それなら... とマイクロソフト社もARMを使ったWindowsマシンを販売しましたが、これは(ソフトウエアの互換性の問題で)完全に失敗に終わっています。

現在の殆どのコンピュータは「IntelのCPU(CISC)」あるいは「ARMのCPU(RISC)」です。両者は、仕組みも命令も全く違いますので、ソフトウエアも全く違い、全く互換性はありません。「今までに開発された大量のソフトウエア」が使えるかどうか? と言うことがコンピュータにとって重要ですので「過去の歴史(由来)」は、生き残りのために決定的に重要な要素になります。マイクロプロセッサの登場以来今までずっと「インテルCPUの一人勝ち」であったのは、そのような事情によるものでした。

しかし現在では、スマホの普及に伴い、多分「CPUの個数」としてはARMのCPUが世界で一番多く使われています。今後はどちらのCPUが本流になるのか? 今のところわかりません。そのような状況で、抜け目ない孫正義(ソフトバンク創業者)はARM社を購入ソフトバンクグループ傘下としARM社に潤沢な開発費を保証しました(なお、その4年後ソフトバンクはNVIDIA社にARM社を売ろうとしていますが...今でも「世界が」それを認めません(^^;)。なお、ARM CPUは「シンプルな構造により、低消費電力で高性能」と言う特徴を持つため、最新の(日本の)スーパーコンピュータ「富岳」にも使われています。

なお、Macは今までIntelのCPUを使っていましたが、新型Macは、ARM系のCPU(M1, M2)を使っています。IntelのCPU(x86系)とARMのCPUでは、CPUが実行する命令体系が全く違うので、そのままでは全くソフトの互換性が無くなり、今まで動いていたソフトが新型Macでは全く動かなくなります.... が... あとはソフトウエアの所で「仮想化技術・仮想マシン」の話題として話しましょう。CPUが違うにもかかわらず、新型Macはその仕組みを使っているので、ARM系のM1チップを使っている新型MAC上で、IntelCPUのMac(従来のMac)用のソフトも動かせるようになっています。

以上、簡単に概略を説明しただけですので、さらに詳しく知りたい方は、ここまでの話を「キーワード」として、Webで調べてください。現在では、ほとんどの情報はWebで得られます。

では次に、CPU以外のハードウェア(メモリ、入出力インターフェイス、入出力装置)について、簡単に説明します。


3-4. CPU以外のハードウェア

多岐に渡りますので、簡単に最近の流れのみ。

・入出力インターフェイス(個々専用の接続コネクタ→USBへ)。

USB : Univarsal Sereal Bus

1996年キーボードなどの低速入手力装置用の規格としてUSB1.0が制定(1.5MB/s)され、その後キーボード、マウス、プリンタなどはUSB接続が普通になります。その後、2000年高速化規格としてUSB2.0(60MB/s)、2008年USB3.0(625MB/s=0.6GB/s)、2019年USB4(5GB/s)と高速化され、現在ではHDDなどの高速デバイスや大量の情報の伝達が必要なディスプレイなども、USBで接続可能になっています。

初期のころは「1本の信号線で順に信号を伝える(シリアル通信)より、同時に数本の線を使って信号を渡す(パラレル通信)の方が早い」と言う常識でした。そのため「安価な低速通信の規格」として始まりました。しかし、シリアル通信は「他の線とタイミングを合わせる必要がない」ため、短い時間を扱う技術の進展により、パラレル通信より圧倒的にな高速伝達ができる技術として大きく発展し、パラレル通信は高速化に難があり淘汰されていきます。その結果、現在では「ほぼ全ての周辺機器はUSBで繋ぐことが普通」になっています。また、初期のUSBは「5V1A」の電源を有しており、周辺機器への電源供給に使われたが、近年ではさらに高電圧高電流の電源供給をサポートする規格(USB PD:PowerDelivery)に発展し、「周辺機器への電源供給だけでなく、スマホや様々な「直流電源を必要とする機器」への電源供給規格としても、発展」しています。目指す未来は「電源+通信は、全てUSB」の世界。USB-TypeCは、これを目指して制定されています。しかし...appleが.... しかし欧州連合(EU)が... 少なくともEUはその世界を目指しています。

・ストレージ(補助記憶装置)

コンピュータの黎明期には、「磁気テープ」「磁気ドラム」「磁気ディスク」が使われ、その後小型化が可能な「磁気ディスク(ハードディスク=Hard Disk Drive:HDD)」が、「プログラムやデータを保存する媒体(補助記憶装置)」として標準的に使われるようになります。その後「フラッシュメモリ」の発明により、不揮発性の(電源を切っても記録が保持される)記憶媒体として、フラッシュメモリを利用したUSBメモリやSDカードが生まれ、これらが低速小規模な補助記憶装置として用いられ始めます。現在では(低速な)フラッシュメモリを使いながら、(この授業の後半で説明する)RAID技術などの高速化技法と高度な制御技術を使い、「接続方法や使い方はHDDと全く同じで、中身はフラッシュメモリで作った、超高速なHDDみたいな装置=Solid State Drive(SSD)」が生まれ、順次SSDに置き換わっています。SSDはHDDに比べ高速で、動く部分がないため振動に強く、良いことづくめですが、コストが高いことが唯一の欠点でした。昔は、同容量のHDDに比べ数十倍から数百倍の値段であったが、現在では数倍程度になっています。小規模コンピュータならSSDとHDDの価格差は製品全体の価格に比べ小さいため、現在殆どSSDに移行しています。大量のファイルを扱うコンピュータではこの価格差が馬鹿にならないため現在でもHDDが用いられますが、その場合でも、SSDとHDDを複合して使うことが普通になっています。なお「お金に糸目をつけない、ある程度の価格ならOK」と言う用途では、大規模な補助記憶装置もSSDに移行しています。なお「高速である必要が無い」コンピュータ(スマートフォンやタブレットなど)の場合には、SSDの代わりにフラッシュメモリをそのまま使ったりSDカードを用いることも多いです。また、「日本の携帯電話業界では、ストレージのことをROMと呼んでいます」ので、要注意です(ROMという言葉の誤用であり、日本以外ではROMとは言わず、正しくstorage:ストレージと言います)。

・ディスプレイ

1960年代までのコンピュータは、「テレ タイプライター」を主な入出力装置にしていました。「ディスプレイ」が広く使われ始めたのは1970年代ころからになります。1970年代にはパーソナルコンピュータ(PC)が生まれ、その出力装置に「家庭用TV」が用いられます。その頃のアメリカのTVは、画像を横640縦480個の点に分解していましたので、しばらく640x480ドットのディスプレイ(VGAディスプレイ)が、コンピュータの標準の出力装置として使われました。特殊目的にはもっと細かいディスプレイも使われましたが、大きな転機となったのは「デジタルハイビジョン放送の普及」です。これにより「1920x1024ドット(フルHD=2K=横が約2千ドット)」のディスプレイが普通になり、コンピュータのディスプレイもフルHDが1つの標準になっていきます。また、TVの表示装置もブラウン管から液晶・有機ELと変化し、コンピュータの出力にも同じパネルが使われるようになってきます。また、初期のTVでは「コンピュータの出力として十分な鮮明さが無い」という理由でコンピュータのディスプレイ用には高性能な表示装置や専用の接続ケーブル(アナログRGB端子)が使われていましたが、TVの性能が上がるにつれ、その必要な無くなり、今は「TVから、チューナーを外したようなもの」で十分利用できる時代になり、接続もTVと同じ「HDMI」で十分高品質に接続できるようになりました。

しかし、TVの世界は「デジタル著作権」とか面倒な問題があり、HDMIの規格も「盗聴(不正コピー)防止の暗号化」などが組み込まれ、さらにそのライセンス料が結構高かったりで、「そういう無用なものを外す」という形で「ディスプレイポート」の規格が生まれました。現在ではディスプレイポートあるいはHDMIで接続し、フルHDあるいはそれ以上の解像度で表示、が普通になりました。4K(横およそ4千ドット)8K(横およそ8千ドット)のTVにもつなげますし、数台のTVやディスプレイを並べて表示することもできます。現在ではTV自体が1つのコンピュータと呼んでも良い時代になっています。なお、高解像度の表示を行うには高い処理能力が必要ですが、現在では(前に述べた)GPUがその処理を担っています。ですから、CPUの能力が低い安価なPC等でも、フルHD程度の動画はスムーズに再生できます。GPUを搭載していない20年前のPCなどだと、CPUの処理能力はかなり高くても、動画をスムーズに表示できない場合がありました。なお解像度は「人間の視野を8Kの解像度で覆うと、ドットの大きさはほぼ人間の目の限界に近くなる」ことから、8Kを大幅に超える解像度は(見えない場所に表示するのでなければ)ほとんど必要ないだろう、と言われています。

・入力装置

初期のコンピュータの入力装置はキーボード(テレタイプライタ)およびテレタイプに使われる穴あきの紙テープなどでした。その語、ディスプレイに表示する時代になり、タイプライターの流用ではなく単独のキーボードが使われます。なおキー配列は様々なものが生まれましたが、結果的にタイプライターと同じ「QWERTY配列のキーボード」以外はすべて淘汰されました。暫定ダイナブック ALTO の登場と共に「マウス」がポインティングデバイスとして生まれ、現在でもつかわれています。特殊目的にデジタイザーやタブレット、タッチパネルなども生まれましたが、製図や漫画やデザインなど、特殊目的に使われるだけでした。現在スマホやタブレットで標準的な「タッチパネル」はiPhoneで登場し、ジョブズの「指に勝るポインティングデバイスはない!」という主張で、iPhoneではマウスインターフェイスはサポートされませんでした。iPhoneから始まったタップ操作などは、その後のスマートホンやタブレットの標準的な入力方法になり、それに合わせたソフトも多数開発されました。

その後、タブレットを使い本格的な処理もできる時代になると、ジョブズの行き過ぎた主張の欠点が見えてきました。マウスの代わりにペン入力が導入されましたが、ペンとマウスは使い方が違います。そこでipadでも現在は、キーボードやマウスを接続することができるようになり iPadを本格的に使う場合には、キーボードとマウスを繋げることが当たり前になってきています。

・ネットワーク

ネットワークのしくみについては次回詳しく説明しますが、初期のころは「コンピュータ同士をつなぐため」に生まれたコンピュータネットワークが、あらゆるものにコンピュータが内蔵される時代になり、「周辺装置自体がコンピュータ」という時代に発展しました。そのため「周辺装置」との接続にネットワーク技術が使われ、ときには「ネットワークとして認識されていないようなもの」までネットワーク技術で繋がれるようになりました。たとえばディスプレイやプロジェクタとの接続や補助記憶装置との接続も現在はネットワーク接続を利用することが多くなりました。そういう意味では「ネットワーク」自体を、入出力装置の一種と捉える方がよい場合も生まれました。なお、皆さんが無線でイヤホンを使う場合 Bluetoothを利用することも多いと思いますが、このBluetooth技術も「小規模近距離低速の、(インターネットと同じ仕組みの)無線ネットワーク技術」です。ですから、同じBluetoothに、複数の装置(イヤホンとマウスとキーボード等)を同時に接続することもできます。なお、入力装置をインターネットで遠隔地に置き、出力装置のロボットと繋げることにより「遠隔操作」も可能になります。遠隔手術、防犯カメラ、ATM... さまざまな形態の入出力システムがネットワーク経由でコンピュータに繋がれています。

その他、現在では、カメラ、マイク、スピーカー、その他の多くの家電製品なども(BluetoothやWiFiなど経由で)、コンピュータの入出力装置になっています。

全てのものがネットワーク経由でコンピュータの入出力装置になる時代、IoT(Internet of Things)と呼ばれています。

その中で

などは、(過去の大失敗の歴史なども含め)「今後大きく発展する可能性もあるもの」と思いますので、いろいろな意味で、参考にしていくと面白いと思います。


3-5. ソフトウェアの階層構造

ソフトウェアの階層構造

キーワード:アプリケーションソフトウェア(アプリ)、OS(Operating System)、カーネル・デバイスドライバ(ドライバソフト)・シェル, UNIX, Linux


現在のソフトウエアには「階層性」があります。そのため「機械を変えても同じアプリが動く」と言う機能がある程度実現されています。ただし、どんな機械でもどんなアプリでも動くわけではありません。まずは、その辺を整理しておきましょう。

1960年代コンピュータが市販され使われ出すと、様々なソフトウエアが現れます。全てのソフトウエアを「機械毎にプログラムを書き直すのはとても大変」なので、機械が変わってもある程度同じソフトウエアを使う仕組みが(大型コンピュータの世界で)生まれます。それが「OS:オペレーティングシステム」です。OSの主な働きは「資源管理」です。「資源(リソース)」とは「コンピュータが扱うもの全て」の総称であり、CPUやメモリなどの機械だけでなく、仕事・時間・スケジュールなども「資源」に含まれます。OSの登場以前は、「新しい装置が増えたら、全てのソフトウエアを作り直す」ことが必要でした。OSの登場により「機械が多少異なっても(同じ系統の、旧型・新型など)、同じOSが動いていれば、同じアプリケーションソフトが動く」と言う時代がはじまりました。

アプリケーションソフト(アプリ)は(直接機械を制御せず)OSの機能を呼び出して動き、OSが機械の管理をする。OSは機械を管理し、同じ系統の、旧型・新型など機械の差はOSが埋める、という仕組みです。これを「階層化」と呼びます。しかし、新たな機械を繋げるためには、OS自体を作り替えなければならず、コンピュータのメーカーが提供する周辺装置以外の機器を繋げることは極めて困難(不可能に近い)でした。そこで、1969年には、OS自体も階層化され、「デバイスドライバ(ドライバ)」と呼ばれる小さなソフトが個々の機械の管理を行い、OS本体(カーネル)は、(機械を直接制御せず)ドライバを呼び出して機械を管理するようになりました。この階層化により、OSを作った後に新たな機械を作っても、ドライバソフトさえ変更すれば同じOSを使えるようになりました。1970年代になると、マイクロプロセッサを使ったパーソナルコンピュータ(PC)の流れが始まります。大型コンピュータ比べ安価なため、周辺装置なども専用品をつくるのではなく、元々他の目的のためにある製品や部品などを改造して繋げることも多く、装置(機械)の違いを吸収するドライバの仕組みは一気に広がります。OSの階層化により「新しい周辺装置を繋げても、それ用のドライバをインストールすれば、同じOSが動く」という時代が始まり、現代に至ります。現在では、OSはさらに階層化されていますが、OSの種類によって、若干実装が違いますので、細かいことは省略します。

なお「人がOSに指示をする部分=見かけや操作法」は、「資源管理」とは別の階層にすることが多いです。この部分を「シェル(shell=貝殻の意味」)」と呼んでいます。当初は「コマンド(文字)で指示する方式=character user interface(CUI)」のみでしたが、アラン・ケイらのAltoで「メニューやアイコンなどの図形を使って指示する方式=Graphical User Interface(GUI)」が生まれ、その流れを組むMachintoshやWindows等で普及しました。CUIにしてもGUIにしても、これら「人間の操作とOS本体を結ぶ働き」を実現している部分が、シェルです。OSは、大まかに「人が操作する部分(マン・マシン・インターフェイス)=shell」、「本体(資源管理を行う)=kernel」「機械を制御(デバイス・ドライバ)」という3層の階層構造を持っていると思って、良いと思います。(shell,kernelは専門用語と思わず「普通の英語の意味」でイメージしてください)。なお、ドライバソフトは、昔は機器と一緒に付属CDで提供されるのが普通でしたが、今はネット経由でダウンロードしインストールすることが普通になってきています。しかもそれをOSが自動で行うことも多く、のんきな末端の利用者はドライバをインストールしていることすら気が付かないことも多いかもしれません(メッセージが表示されますので注意深い利用者は、ドライバのインストールに気が付きます)。

なお、アプリケーションソフトがOSの機能を呼び出すには、API(Application Program Interface)と呼ばれる「ソフトウエア間の通信機能」が使われます。コンピュータの中で動いているソフトウエア(プログラム)はお互いにAPIを使って会話し、連携します。逆に言えば、個々のプログラムの中身の詳細を知らなくても、APIさえ知れば、さまざまなプログラムに指示を与えて処理をしてもらうことができます。コンピュータの中は、様々なソフトウエア(小人さんみたいなもの?)が、互いに連絡を取り合って、集団として機能する、一種の(沢山の小人さん達が集まった)社会のような仕組みをしています。

 現在広く使われているOSの名称をいくつか列挙しておきます。

・Windows

・UNIX(UNIX系として以下のものがある), Solaris, Mac OS, iOS,

・Linux(UNIX互換フリーソフト。Linuxカーネルを使ったものとして以下のものがある), Android, Chrome OS,

・TRON...


現在最も多く使われているOSは、多分UNIXおよびUNIX互換のLinuxと思われます。iPhoneもAndroidもタブレットもデジカメもオーディオプレーヤーも... そこらにあるもの殆どがそうですから(Windowsはパーソナルコンピュータの分野だけです)。なお殆どのスーパーコンピュータや研究・開発用のコンピュータも、普通はLinuxで動かします。また、インターネットの仕組みを構築し管理するためのソフトも、普通はLinux上で動かしますし、家庭用ルータなどの機器も(コンピュータを使って作られますが、そのコンピュータのOSは)Linuxが使われていることが多いです。なお車のエンジン周りの制御用コンピュータとか「リアルタイム性が強く要求される場所」では、TRONが使われることもあります(ました?)が、LinuxベースのものやAndroidが使われること多いかもしれません。



3-6.プラットフォーム

キーワード: プラットフォーム(IT用語)、Javaプラットフォーム

同じOSなら同じアプリケーションソフトが動きますが、OSが違うと同じアプリケーションソフトは動きません。どのOSでも動くアプリケーションを作るには「それぞれのOS用のアプリケーションを、別々に作る」必要があります。不便ですね(^^; どのPCでも同じアプリケーションソフトを動かせるようにできたら便利ですよね。

今まで、「機械→OS→アプリ」という形で、機械自体を一番下の階層として、その上にOSを作り、OSの上にアプリケーションを作るという形でソフトウエアの体系はまとめられていました。

ここで逆転の発想。最終的には「アプリケーションソフト」が動けばいいのだから、その下の階層(土台)に当たるものを、作ったらどうか?この土台を「プラットフォーム」と呼びます。このプラットフォームを実現するソフトを各OS用に作っておけば、その「プラットフォーム」の上に乗っているアプリケーションソフトは、どのOSのプラットフォーム上でも動くのだから、結局OSに依存しないアプリケーションソフトが出来たことになるのでは? そういう発想で作られたのがJavaプラットフォーム(Java実行環境)です。Java言語(プログラム言語)で書かれたプログラムは、コンパイラによって「Java中間言語(Java環境における機械語)」に翻訳され「Java実行環境(JRE)と呼ばれるプラットフォーム」上で実行されます。JREは各OS用のものが開発されており、JREをインストールしたPCであれば「どのCPUでも、どのOSでも」同じアプリケーションソフト(Javaアプリ)が動きます。

Java プラットフォームの図

この仕組みにより「同じプラットフォームさえインストールされていれば、ハードウエアの詳細やOSによらずに、同じアプリが動く」という世界が実現されます。現在の携帯電話やスマートフォンの世界は、これにあたります(Androidは、Linuxカーネルの上に、通信機能とプラットフォーム機能を乗せたもの。iOSもほぼ同じ。ただしライセンスの関係で名称を変え、互換性も一部保たれていないだけ)。どのメーカーのAndroidスマートフォンでも、同じアプリが動くのは、この仕組みが使われているからです。また、機器組み込み用のコンピュータ(例えば自動販売機の中のコンピュータとか、カメラとか家電製品の中のコンピュータとか)もこのような仕組みで作ることが多いです。CPUを全く別のものにしても(機械語も変わる)、その上で動くプラットフォームさえ移植すれば、機器を制御するアプリケーションソフト自体は同じものが動きますので、新製品開発のコストも抑えられますし、開発のサイクルも極端に短くできます。



3-7.仮想マシンと仮想化技術

キーワード:仮想マシン・物理マシン、仮想化、VirtualBox、VMware

プラットフォームとしてJavaを使うと「Javaで書かれたアプリケーションプログラム」は、どのCPUどのOSでも動きますが、現在はJavaで書かれていない「Windows用のプログラムや、特定のOS向きのプログラム」が多数存在します。それらを全てJavaに書き換えるのは大変な作業が必要であるばかりでなく、開発者側にそれなりのメリットが無ければ移植作業は行われません。

そこで.. 「PC(ハードウエア)」自体を「ソフトで」作ったらどうだろう? というアイデアが生まれました。皆さんPCの中に「電卓ソフト」があるのをご存じと思います。「電卓ソフト」は、「実物の電卓と同じ動き」をしますが、もちろんPCの中に「実物の電卓」が入ってるわけではありません。

コンピュータはソフト次第で様々な動きをしますから、ソフトで「PC本体」を作ることも可能になります(このことを最初に考えたのは、アラン・チューリングかもしれません。彼はコンピュータ(電子計算機)が生まれる前の時代に、「任意のチューリングマシンを模倣する単一のチューリングマシン(万能チューリングマシン)」を数学的に考案し、これを用いてコンピュータの計算能力や限界について、様々な数学的定理を証明しました)。このような、ソフトで作ったPCを「仮想機械=仮想マシン(Vertual Machine = VM)」と呼びます。PCだけでなく「ゲームマシン」や「スマートフォン等」もソフトで作れます。それらも「仮想マシン」と言えます。なお、実際の機械を「物理マシン(Physical Machine)」と呼びます。これも日本語より英語の方がイメージつかみやすいと思います。Physical Machine=肉体を持った機械、という意味です。

仮想マシンのアイデアは古く、1958年には初歩的なものが作られていますが、ソフトで機能を実現するため「遅い」という欠点がありました。しかし年々コンピュータの性能は上がり、しかも現在ではCPU内にVM用の専用回路なども搭載され「速度に関してはほとんど問題が無い」状態になっています。

VMの図

VMの図

仮想マシンの技術を使うと、「PCは1つのソフト(=データ)」となりますので、「機械自体をバックアップしたり、複製したり、移動したりすることが簡単にできる」という利点があります。たとえばAというPC(物理マシン)上で動く仮想マシンXがあったとします。これを停止させずに(動きながら)Aとネットで繋がれているBというPC(物理マシン)に移動させることもできます(live migration)。このように移動させてから、たとえばAを点検なり機種更新なりして、再びBからAに移動させれば「仮想マシンXと停止させずに、機器の交換や更新」ができます。仮想マシンって、なんか肉体(物理マシン)に乗り移る(憑依する)霊のような感じですね(^^; そんなイメージで良い(正しい)です。

コンピュータウィルスの解析とかの「危険な実験」とか、「機械(物理マシン)の寿命を超えて、動き続けるシステムを作りたい場合」とか、実際の機械より多くのPC(特にサーバーマシン)を同時に動かしたい場合とかに、この技術が使われます。

なお、皆さんのPCでも「仮想マシン」は簡単に作れます。様々なタイプの「仮想化基盤(仮想マシンを作り、管理する仕組み)」がありますが、無料のものでおすすめは、例えばVertualBox( https://ja.wikipedia.org/wiki/VirtualBox )などです(有料のものならVMware。本学のサーバー群もVMware上の仮想マシンで構築しています)。ただしマシン(PC)が作れるだけですから、実際に動かすにはOSが必要です。Windowsは有料ですが、Linuxなら無料です。なお Android も無料で提供されていますので、PC上に仮想のスマートフォンを作ることも可能です... と言うか、スマートフォンのアプリ開発って、まず「仮想スマートフォン」をPC上に作って、そこで動作確認しながら「全てPC上で」作るんです(^^; また、Mac上に仮想PC作ってWindows入れて動かしたり、WindowsPC上に仮想PC作ってLinux入れてその上で様々なサーバー動かしたり、サーバーアプリケーションの開発したり、そういう目的にも使われます。もちろん、複数の仮想PC同士を「仮想のネットワーク」で繋ぐことも可能です。

ところで、新型Macが話題になっているようです。今までのMacはIntelのCPUを使っていましたが、新型Macは、ARM系のCPU(M1)を使っています。IntelのCPU(x86系)とARMのCPUでは、CPUが実行する命令体系が全く違うので、そのままでは全くソフトの互換性が無くなり、今まで動いていたソフトが新型Macでは全く動かなくなります。そこで、新型Macには、ARM系のM1CPUで、IntelのCPUの命令を実行するような「Rosetta2」と呼ばれるプラットフォームというか、IntelCPUをエミュレートするソフトが組み込まれています。まあ、仮想CPUの技術で互換性を保っている、と言っても良いかもしれません。そのような仕組みを搭載しているので、ARM系のM1チップを使っている新型MAC上で、IntelCPUのMac(従来のMac)用のソフトも動かせるようになっています。

製品発表までは、「ソフトでエミュレートするので、遅いのではないか?」とか「動作が不安定になるのでは?」という噂(想像)もありましたが、実際に発売されているものは、今のところ十分な速度でしかも比較的安定しているようです。



3-8.その他の、ソフトの話題

【Web ページを閲覧するソフト:Web ブラウザ】

良く使われるものとしては、以下のものがあります。

・Moizlla Firefox(オープンソース:フリー):

・Google Chrome(フリー):オープンソースのChromium をベースにカスタマイズ。基本部分は「Chromium」として公開。

・Edge(MS-Windows標準添付。最新版(Chromiumベース)以外非推奨(2020.1以上前ののEdgeは「Microsoft独自」のソフトであり、機能も低く問題も多かった。2020年1月版以降は、chromiumをベースにしており、性能的には問題なし。

・Safari(MacOS、iOS 標準添付:フリー)

・Internet Explorer(MS-Windows標準添付「だった」)現在非推奨。


【オフィスソフト】

OA向きのアプリケーションソフト群を「オフィス」と総称することがあります。

・MS オフィス:

Word,Excel,PowerPoint等からなります。マイクロソフト社製の「結構高価なソフト」です。日本では「最初からついている」と誤解している人もいますが、「抱き合わせ商法(プレインストール)」により購入しているものです。なお、世界的にはこのビジネスモデルが通用しないため、最近ではサブスクリプション型(利用権登録し、月額**円の利用料を払い続ける)に移行しつつあります。画面の大きさ9インチ未満のAndroid, iOSでは無料版があります。

・LibreOffice, OpenOffice

無料(オープンソース)のオフィスソフトです。OpenOffeceとして始まりましたが、主要な開発チームがLibreOfficeに移行しましたので、「LibreOffice」が現在サポートが充実している正当な後継と思って良いでしょう。MS-Officeともある程度の互換性がありますが、完全互換ではありません。しかし、独立したOffeceソフトとしては、MS-Offeceより高機能な部分もあります。WindowsでもMacでもLinuxでも使えます。Mac純正のオフィスソフト(Pages,Numbers,Keynote)よりもMS-Offeceとの互換性が高く、無料なので、MacやLinuxの利用者は多いです。また日本では「抱き合わせ商品のみ販売」されていますが、そうでない海外では「MS-Office無し版のWindowsPC」にLibreOfficeを入れて使う人も多いです。


【OS含め全部一式、全て無料】

米国MIT(マサチューセッツ工科大学)のリチャード・ストールマンが「フリーソフト(無料&自由)」の概念を生み出し、ソフトウエアを「文化=人類の共有財産」とするためのプロジェクトとして「GNUプロジェクト」を1983年に開始します。その後、このプロジェクトのもとに「UNIX系の開発システム一式(エディタ、コンパイラー... 等)」が開発されます。OS本体の開発が遅れましたが、リーナス・トーバルズの開発したLinuxが合流し、現在では、OS本体(Linux)を含め、ソフトウエア開発ソフト一式、オフィス系ソフト一式、各種研究用&教育用ソフト一式が、「世界中のどの国のどのような身分の人でも、完全に無料で自由に」使える環境が整っています。次々と開発されるスーパーコンピュータにも使われ、またメーカーが新たなIT機器を作るときにも、またインターネットの環境を構築するためのソフトウェアも、このようなフリーソフトが、広範に使われています。当初は「共有」ということから思想的な攻撃(米国での:赤狩り)も受けましたが、現在では「企業活動としても、無駄を省き、効率的な製品開発につながる」という理由で、この流れを引き継ぐ「オープンソース」の流れで、様々な無料ソフトが作られ、公開され、広く使われています。

例:

では、今日は、このへんで終わります。