最低限の基礎知識
ハードウェア、ソフトウェア
よくコンピューターは、装置や設備などの物理的なものである「ハードウェア(hardware)」と、条件設定や計算値のような概念的なものである「ソフトウェア(software)」で構成されているとされる。
「コンピューターの構成の基礎知識」1と0の極限を目指す機械
例えばあなたがゲーム機でチェスゲームをしている時、ゲーム機(ハードウェア)の中に実際に物理的なチェスのコマなどが入ってたりするわけではないであろう。
「チェスのルールと基本」コマの動き、ポーンの価値、チェックと引き分け
実際には、画面上にチェスをビジュアル的に再現するための計算式や条件付けなどのプログラムコードすら入っているとはいえない。
ハードウェアをぶっ壊して、中身のどこを探してもそんなものは見つけられないはず。
ただ、そのように定義付けられたソフトウェアという概念がそこにあるわけである。(注釈1)。
人間でいうなら、ハードウェアが物理的な肉体とか臓器で、ソフトウェアが神経系、思考。
神経系が生み出す思考の中で、あなたが左腕を動かしたとする。
それは、概念的に左腕を動かしたというふうに思考内で定義できるだろう。
実際の左腕も動いているとするなら、そこに発生しているのは神経系というソフトウェアが、あなたというハードウェアに発生させた影響である。
「幻肢」本当に脳は現実を作ってるいるか。意識プログラム、鏡の治療法。
それと近い形で、ゲームなどは実現されている。
しかしハードウェアのスペックを超えて動かすことは、ソフトウェアにもできない。
だから、あなたが空を飛ぼうといくら思っても、飛べないというわけだ。
(注釈1)現実と概念の境目
しかしこれらは冷静に考えると境目が難しい。
例えばゲーム機でカードゲームをしている時。
その時にゲーム機の中にあるものとは何だろうか。
表示されている画像は、ゲーム機の中にあると言えるだろうか。
カードが表示されていない時ならば、少なくとも物理的には、確実にないといえよう。
表示されている時も、実際にそこに表示されているのは、画面上に表示された点の集合にすぎない。
そういうふうに考えていくと、画像同様にゲーム機自体だって、おそらくは粒子の集合にすぎない。
これらの違いは究極的にはデザイン以外にあるだろうか。
また、概念的には、ゲーム機の中ではゲームのプログラムがあるものと考えれるだろう。
だがそれは意識のように、物質から離れてるような存在だろうか。
それともそれらも物質的なものとして実は考えられるか。
「宇宙プログラム説」量子コンピュータのシミュレーションの可能性 「意識とは何か」科学と哲学、無意識と世界の狭間で
アプリケーション、システム
ソフトウェアはさらに、「アプリケーション・ソフトウェア(application software)」と「システム・ソフトウェア(system software)」とで分けられるのが普通。
アプリケーション・ソフトウェアは、単にアプリケーション、あるいは応用ソフトウェアなどと呼ばれる。
システム・ソフトウェアは、単にシステム、あるいはシステムプログラムと呼ばれる場合もある。
アプリケーションは、実際的な利用目的に直接的に関わる操作領域。
システムは、アプリケーションを実現するための内部処理や管理を任されている領域といえる。
例えば特定のブロックを合わせれば消えるというパズルゲームがあるとする。
そのようなゲームのプレイ目的といえば、ブロックを操作して、上手く合わせて消す過程を楽しむことであろう。
そのようなゲーム自体のシステムやビジュアルコントロールがアプリケーション。
そのようなアプリケーションを実現している内部プログラムがシステムである。
アプリケーションもそうと言えばそうだろうが、システムという言葉はコンピューター関連の分野ではかなり使いやすいため、その意味を正確に捉えたい時、使われている文脈には注意である。
そして「オペレーティングシステム(Operating System)」、いわゆる『OS』は、システムソフトウェアの代表格的なものである。
インターフェース、プログラム言語
コンピュータに関して、ある動作に必要な要素を「リソース(resource)」。
また、異なる機器や領域を接続し、交信や制御をなるべく共通的な操作で行いやすくするための部分を「インターフェース(interface)」という。
ハードウェアやソフトウェア自体も、言ってしまえばリソースである。
また、インターフェースは例えば、入出力する画面がそうである。
コンピューターの動作を実現している最も根本的な階層は、0と1の組み合わせだけが全てだということは有名であろう。
しかし、実際には大半のプログラマーが、プログラムを画面に打ち込む時、そこに現れている数字は、0と1だけではないし、文字も多量に含まれている。
さらに言うなら、そのプログラムで実現されるゲームなどには、プログラムコードの面影もなかったりする。
しかし、目的の動作に繋がる機械語のプログラムを、もっとわかりやすいものとして変換し、そしてまた変換してくれるビジュアルがインターフェースである。
なぜ16進数なのか
ちなみに0と1ばかりの機械語だが、表示としては、16進数が普通好まれる。
16進数の表示のメリットは、何よりまず桁数が大きくなりがちな2進数を、かなりすっきりさせやすいこと。
また、16進数の一桁の最後(つまり10進数では9に当たる)Fは、
2進数では1111と、ちょうど4桁の最後に対応していて、データとして扱う上でも都合がいい。
コンピューターが扱うデータ量は、基本的に一区切り8ビット(1バイト)とされるが、これが16進数ではFF(2桁の最大)で、2進数では11111111(8桁の最大)となる。
(あまり意味はないだろうが)長い2進数を自力で変換する場合でも、4桁ごとに区切れば、簡単に16進数に変換できる。
「ビットとは何か」情報量の原子は本質的にも原子であるのか
0と1というのは概念(ソフトウェア)的な観点から。
実際にはスイッチ回路と呼ばれるようなON、OFFを切り替えれる(物理的には電流の有無)スイッチをいくつも用意し、その組み合わせから、コンピューターは様々な物理動作へと繋げている
「電気回路、電子回路、半導体の基礎知識」電子機器の脈
通常、OSと言えば、リソースの総括的な管理機能に加え、ユーザーにわかりやすいインターフェースを提供するためのシステムである。
それと、機械語や、機械語をシンプルに文字列などに置き換えただけみたいな「アセンブリ言語(assembly language)」と呼ばれるようなプログラム言語を「低水準言語(low-level programming language)」。
もっとより、人間が構造を理解しやすくしたプログラミング言語を「高水準言語(high-level programming language)」と言う。
お絵かきソフトで絵を描く時も情報処理
普通、コンピューターで行うことは、何らかの情報を、組み替えたりして別の情報を出力する行為である。
コンピューターがすごい計算機と言われるのは その根本的な原理が計算機だからというだけではない。
実のところ、コンピューターにあまり詳しくないような人が、わかりやすいインターフェース上で行っている操作も、かなり計算機的なのである(注釈2)
例えば、お絵かきソフトで絵を書く時を考える。
もしもあなたが、液晶タブレットをなぞって、ただ絵を書いてるだけのつもりなのだとしても、その時に行われているのは、画面という空間上の大量の点(ドット)のひとつずつに、対応する色の数字コードを割り当てていくという作業も同然である。
あなたが絵を書いてるつもりで入力した、その色に対応する数字ひとつひとつは、我々が視覚情報として捉えることができる二次元の絵になるが、そういう絵も、また情報である。
つまりこの場合、あなたが各ドットの色という情報を入力し、イラストという情報が出力されているわけだ。
言うまでもないことだろうが、実際にはもっと複雑な計算の流れがそこにはある。
しかしとにかく、ユーザーにそんなつもりはなくても、コンピューターで行えることは、そのような「情報処理(information processing)」が主だ。
そして、全体としての情報処理において、中心的な役割を担う処理装置を「CPU(Central Processing Unit)」という。
これはよく、コンピューターの脳と例えられる。
(注釈2)ウロボロスな宇宙
そもそもこの世界のあらゆる行動が、結局そういうことになってしまう。
だからこそシミュレーション仮説やホログラフィック原理などが注目されているわけである。
「ホログラフィック原理」わかりやすく奇妙な宇宙理論
しかし仮に、この世界がコンピューター上の世界のようなものなら、我々が量子コンピューターを作って成し遂げようとしていることはいったい何なのだろうか。
コンピューター内部の情報処理により、そこに擬似的に発生したような別の小コンピューターが、より大きな宇宙コンピューターを逆に操作したりするということなどはありえるだろうか。
そんなのは、コンピューターのウロボロスであろうか。
概念が概念を操作する繰り返し。
この宇宙は何なのだろう。
ちなみにウロボロス(ouroboros, uroboros)とは、自身の尾を噛んで環となっているヘビか竜の図で、時に無限ループの象徴ともされるもの。
オブジェクトとしての定義
わりと諸説あってはっきりしないことではあるが、実際のコンピューターの動作に必要なものとして定義された様々なものを「オブジェクト(object)」。
実際にそのようなオブジェクトが発生させる動作の一連の流れや変化を「インスタンス(instance)」とか「プロセス(process)」とか「タスク(task)」などと言う。
例えばロック系の音楽ファイルが増えてきて、「ロック」というフォルダにまとめたとする。
その時起きているのは、データを概念的に保持するフォルダというオブジェクトから、別のフォルダというオブジェクトに、音楽データというオブジェクトを移動するプロセス、というような感じである。
インスタンス、プロセス、タスクは、 ほぼ同義の意味で使われる場合と、微妙に違うニュアンスで使われる場合とがある。
プログラマーによって解釈が異なったりもする。
正確には、おそらく明確に、最初に誰かが定義した内容を完全に理解できていなくても、プログラムを使うことに関して影響があまりないだけ。
エンジニアというのは実用的な人たちである。
解釈なんてどうでもよく、オブジェクトが最初に想定したとおりに動作してくれたなら、それでよいのだ。
もちろん解釈はともかく、実質的な原理はある程度わかっていなければお話にならない(不具合の修正などができないから)。
抽象化、仮想化
「抽象化(Abstraction)」というのは、通常、何らかの対象の要素に注目して取り出し、思考対象としてセッティングする方法である。
例えば、あなたが恋愛の物語を楽しみたいとする。
この時あなたは、本棚の恋愛要素のある小説を取ったりするだろう。
この時、恋愛要素のある小説というのは、いくつものタイトルに当てはまる特徴のはずだ。
だがこれを明確に特定のタイトルに決めていたら、それを探す手間がやや上がるであろう。
ある意味でこれは、抽象化を利用した時間短縮の例である。
「仮想化(virtualization)」は、コンピュータにおけるリソースの抽象化とされることがある。
しかしそもそも、 各種コンピューターのリソースというのはもともと抽象的なものである。
仮想化とは、何を仮想としているのだろうか。
例えば、単純な計算である15×5を行うとする。
答えは75であるが、コンピューターにこれを計算させる場合、実際には2進数でしか行えない。
だが、普通我々がパソコンに搭載された電卓のアプリなどで15×5をする場合、そこで認識されるのは10進数の掛け算だろう。
そんなことが実現できるのは、メモリー上で仮想的な10進数算術を置いているからである。
仮想化技術にはいくつもの便利な用法があるが、特に多くの人に 身近な実例がエミュレーターというものではなかろうか。
スペックの劣るハードウェアを、仮想的に再現する技術である。
「エミュレータ」基礎と利点。違法なゲーム配布という闇。管理者エミュはあるか
そういうハードウェアのソフトウェア化と言われるようなものは仮想化の典型である。
ハードウェアを仮想的なソフトウェアとして使えるなら、ユーザーは簡単な設定切り替えで、ひとつだけのハードウェアを複数ハードウェアかのように扱うこともできる。
メインメモリー、仮想メモリー
もうひとつ。
メモリーの仮想化も重要である。
仮想メモリーとは、実際的なメモリー容量を、実際よりも大きいかのように扱うための技術といえる。
ここで重要なことがある。
それは真の意味での仮想メモリーなど実現できていないこと(注釈3)。
基本的にメモリーの仮想化という言葉が使われる時、そこで発生しているのは、あくまでメインメモリーの増加である。
「メインメモリー(主記憶装置)」といえばCPUと直結しているような、いわば情報処理に使うためのメモリーと考えられる。
例えば1+1+1という計算をするとしよう。
この時1と1と1がなければ計算はできないし、最初の1+1をした時の2を保持しておかなければ、さらに1は足せない。
パソコンの中に搭載されているものであっても、「ハードディスクドライブ(HDD)」のような情報処理領域からある程度離れているような記憶装置は「セカンダリーメモリー(補助記憶装置)」と呼ばれる。
HDDのような外部設置とセカンダリーメモリーの利点は、なんといっても直接的に処理に使う場合に、必要な速度をそれほど求められないこと。
そのためセカンダリーメモリーは、「レイテンシ(データ転送や要求に対する返送速度)」や、「スループット(処理速度)」はメインメモリーに比べて遅いとされる。
その代わりに、大容量となっている場合が多い。
基本的に仮想メモリーと言えば、セカンダリーメモリー内に仮想的に用意されたメインメモリーのこと。
仮想メモリーの実現方法として代表的なものとしては、例えば「ページング」や「スワップファイル」と呼ばれてるような方法がある。
それらは基本的に、ハードディスク(というかセカンダリメモリー上)に、メインメモリーの情報をいくらか適切に保管させ、必要に応じて引き出すことで、擬似的にメモリーを増設するというもの。
しかしどれほどに上手くデータのやり取りを行ったとしても、外部のメモリーを使っていることから、仮想的に増設されたメモリーの動作自体は遅くなる。
しかし仮想メモリーには、言わずもがな、利用できる容量が大きくなるという利点がある。
それと、なぜだか、主記憶装置はメインメモリーとよくカタカナで書かれるが、補助記憶装置はたいてい補助記憶装置としか書かれない。
(注釈3)宇宙を増設することなんてできるのか
本当の意味での仮想メモリーなんて実現できるだろうか。
容量を増やすと口では簡単に言えても、それが簡単とは思えない。
この宇宙の全容量を1GBとしよう。
この宇宙で仮想メモリーを設定することで2GBのメモリーを実現することができるだろうか。
1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001GBすら多分無理ではないか。
では仮にこの宇宙が無限だとして、我々に利用可能な有限領域に限界があるとするならどうだろう。
その利用可能な有限領域を仮想メモリによって増やすことはできるのだろうか。
もしも利用不可能な領域を利用可能ならそれはできると考えられるだろうが、それはいったい何を意味しているのか
Windows
直感的にわかりやすいGUI
よいOSとは、どのくらいの知識を持つユーザーにとっても共通して簡単に操作を覚えることができて、それでいて高機能であるというものだろう。
『Windows(ウィンドウズ)』は直感的にわかりやすいグラフィカルなUI(ユーザーインターフェース)、いわゆる『GUI』を備えたOSとして、1985年に登場した。
Windowsはある程度「互換性(Compatibility)」も強く、よく普及した。
そのおかげで、以前は「機種依存性(machine dependence)」が高かった『PC(個人用コンピューター)』の多くのソフトウェアを、共通のインターフェース下で動かしやすくもなった。
現在ではWindowsはPCのOSのスタンダードとして、かなり普遍的となっている。
コマンドプロンプト、ウィンドウシステム
Windowsが登場したくらいの時期、マイクロソフト社のOSといえば、文字入力を基本としたUIを備えた「MS-DOS」であり、これはけっこう普及していたとされる。
MS-DOSのUIは、現在でも「コマンドプロンプト(Command prompt)」という機能として残っている。
コマンドプロンプトは現在は、Windows自体の深い操作や設定をするための機能として知られる。
GUIに関しては、アップル社がすでに自社開発PCである「Macintosh(マッキントッシュ)」用のOSが採用していた。
また、「Unix(ユニックス)」と呼ばれるタイプのOSでは「X Window System(エックスウィンドウシステム)」というのがあった。
特に素晴らしいとされたのがウィンドウシステムだった。
並行して動作する各アプリケーションに、ウィンドウと呼ばれる画像領域を割りあてた、確かに直感的にわかりやすいGUI的システムである。
マイクロソフトが、それらの先人たちに影響を受けて開発したのがWindowsというわけである。
容量の拡大。インターネットへの対応
最初期のWindowsは、MS-DOS上で動作するアプリケーション。
ウィンドウはタイル状に並べられ、ユーザーが自由に扱うこともできなかった。
Windows2.0の頃には導入する企業も増えてきたようだが、それはまだタスク切り替えを行いやすくするためのアプリ、いわゆるタスクスイッチャー程度の扱いであった。
Windows3.0になるとインターフェース的なデザインもようやくいい感じになってきて、普及し始めたとされる。
ただ、MS-DOS上で動く関係上、MS-DOSの情報処理に使える容量制限(640キロバイト)がネックとされていた。
しかし一応i386というCPUの場合は、仮想メモリーにより容量制限を超えられる「エンハンスドモード(増加モード)」という動作方式があった。
今ではもう過去のものになってしまったような印象を持つ人も多いが、もっとも重要なWebブラウザのひとつと言えよう「Internet Explorer」が登場したのは、Windows3.xの時代だったとされる。
またWindowsでは3.1から専用的なデバイス(機器)を接続することでインターネットの利用も可能となっていたという。
「ブラウザ」WEB表示の仕組み。レンダリングはいかにして行われるか? 「ネットワークの仕組みの基礎知識」OSI参照モデル、IPアドレスとは何か
Windows95
1995年に登場したWindows95は、コンピューターを使う技術者だけでなく、一般家庭にまで広まったOSということで、歴史的にも重要であろう。
とにかくWindows95は、直感的にわかりやすくなっていて、ユーザーのハードルを大幅に下げている。
現在までのウィンドウ系列のベースとなったと言ってもいい。
コンピュータネットワークにおける、いわば利用のためのセットである「TCP/IP」を標準的にサポートし、 ビジュアル的にもよりわかりやすい構造となり、「スタートメニュー」や「タスクバー」、「エクスプローラー」も用意された。
タスクバーは画面の真下などに表示される棒状領域で、起動中のアプリケーションなどをわかりやすく配置し、切り替えを容易としている。
スタートメニューは、基本的にはタスクバーの端に起動ボタンが用意された、Windows独自のメニューである。
Windows8では使用率が低いとされていたために廃止されたが、愛着のある人が多かったのかWindows10で復活した(注釈4)。
エクスプローラーは、各種ファイルをかなり直感的に理解しやすいフォルダの階層構造で示しているもの。
それとWindows95からは、Plug And Playなどとも呼ばれるように、それまでは停止中にしか切り替えができなかった周辺機器の接続を、起動中に付け替えることができるようになった。
(注釈4)優れたデザインはどのくらい必要なのか
これが失って初めてわかるというものなのだろうか。
別にコンピューターに限った話ではないが、実用的なものばかり置いておいても、デザイン的にいまいちな場合がある。
コストの無駄でも、全然役に立たないものでも、人の心を捉えるものならデザインとして置いておくのはいい方法なのかもしれない。
NT系の登場
クラッシュリスクの分散
Windows 95から(USBやDVDへの対応など)正当進化を果たしたWindows98や、WindowsMEは、影が薄いと言われる。
特にMeは、大きな支持を得ていたWindows2000の影に隠れがちであった。
そして2001年には、いよいよ満を持して、後に普及しすぎて、さらに後継に繋げづらくなってしまうほどにヒットを飛ばすことになる「Windows XP」が登場したわけである。
Windows 2000やXPは、「Windows NT系」と呼ばれるようなもの。
それは、Windows3.0の時代から、並行して開発を始めていたとされる、新時代の次世代OSであった。
Windows9の系譜のOSは、 比較的低スペック環境でも動く代わりに、多くのリソースを各アプリケーション間で共有しているため、どこか1つの小クラッシュが、全体の大クラッシュにつながりがちであった。
しかしWindows NT系は、メモリー領域をうまく分断することで、1つのエラーが致命的になりにくくした。
当然その ような仕組みだから大量のメモリが必要となため、仮想メモリを使いまくりで、動作はかなり遅かった。
だがおそらくは、当時のコンピューター業界は、速度よりも性能を求めていた。
当時としてはセキュリティ面が高く、速度もできるだけ早くした Windows 2000は、多くの企業が利用することになり、そしてさらに次のXPは一般層にまで広く普及する。
コンピューターを知らないユーザーのために
XPの次のVista(2006年)の時代になると、速度を重視する傾向が結構強くなっていて、動作がはっきり重くなってしまったVistaの評判は悪かった。
興味深いのが、Vistaでもう1つ不評だとされていた点。
様々なシステムへのアクセス権限の縛りの多さ。
これは明らかに、OSそのものに関わるシステムを余計に操作して、変にバグらせないための、コンピューターの知識があまりないユーザーを意識した進化だった。
Vistaの次のWindows7(2009)では、そのようなアクセス権限はかなり緩和されているが、やはり何も知らないユーザーが、何も知らない内にシステムを破壊してしまわないような配慮が強いとされる。
OSは操作するためのシステムであるからして、文字通りに、コンピューターを使えない人でも、コンピューターを使えるようにと、工夫されてきたわけである。