コンピュータ
電算機(でんさんき)は、広義には計算機、狭義には計算開始後は人手を介さずに計算終了まで動作する計算機。純理論的には、チューリングマシンと等価なものを指す。日常的にはパーソナルコンピュータ(パソコン)を指して「コンピュータ」と呼ぶことも多い。
なお、日本の法律上での呼称は「電子計算機」(でんしけいさんき)とされている。「電子頭脳」(でんしずのう、略称・電脳)という通称でも呼ばれる(人間の頭脳のアナロジーとして、またロボットの頭脳として捉えられる事による)。
ハードウェアの構造からデジタルコンピュータとアナログコンピュータに大別されるが、現在使われているほとんどのコンピュータはデジタルコンピュータであり、単にコンピュータという場合はこちらを指すことが多い。
デジタルコンピュータは、おもに半導体素子を用いて作られた論理回路の組み合わせによって構成される。演算の対象は通常2進数によって表され、桁数を増やしていけば原理的にいくらでも計算精度を上げられるが、ほとんどの演算では、桁数が多くなれば必要な計算が増えて遅くなる。
対してアナログコンピュータは、加減算や微積分などを行うアナログ電子回路を演算増幅器によって構成し、それらを組み合わせて所望の演算を行う。演算の対象は電圧によって表され、演算結果はオシロスコープやペンレコーダなどに出力される。入力の変化に対してほぼリアルタイムで出力が得られる特徴があり、各種シミュレーションなどに利用されたが、演算内容を変更するためには回路を変更する必要があり、得られる精度にも限界があるので、デジタルコンピュータの高速化に伴ってその役割を終えた。
古くはチャールズ・バベッジによって開発された階差機関などがデジタルコンピュータの元祖であった。現在のデジタルコンピュータは、ストアードプログラム方式で逐次処理をして駆動するノイマン型コンピュータがほとんどであるが、量子コンピュータやDNAコンピュータなどのノイマン型でないコンピュータも研究され、1990年代後半から画像解析分野などで実用化されている。例を挙げるならば、地球観測プラットフォーム技術衛星の映像解析など地球自然環境調査などの分野で利用されている。
目次
語源
computer という語は元々は算術計算を行う人を指す言葉だった。この用法は(アメリカやイギリスでは非常に稀になりつつあるが)今でも有効である。オックスフォード英語辞典第2版(OED2)では、この語が機械的な計算装置を指す言葉として使われた最初の年を1897年と記している。1946年までには、異なるタイプの計算機を区別するために、OED2によってcomputerに付く修飾語句がいくつか導入されている。これらの修飾語の中には analogue、digital、electronicといった語が含まれている。しかし様々な引用文から、1946年以前にこれらの語が既に使われていたことは明らかである。
コンピュータの仕組み
1940年に最初の電子式汎用計算機が登場して以来、コンピュータに使われる技術は劇的に変化してきたが、ほとんどのコンピュータは今なおノイマン型アーキテクチャを採用している。
ノイマン型コンピュータの機能は原理的には非常に素直なものである。典型的には、クロックサイクルごとにコンピュータは命令とデータをメモリから取り出す (fetch)。取り出した命令を実行し、結果を格納し、次の命令を取り出す。「停止」の命令に遭遇するまでこの手順が繰り返される。
フォン・ノイマン型アーキテクチャではコンピュータは次の4つの主要な部分からなるとされる。すなわち、算術論理ユニット(Arithmetic and Logic Unit, ALU)、制御回路、記憶装置(メモリ)、入出力装置(まとめて I/O と呼ぶ)である。これらの部分はバスと呼ばれる導線の束で相互に接続され、通常はタイマまたはクロックによって動作する(別のイベントが制御回路を動作させる場合もある)。
結城浩は一応は有名なプログラマではある。
命令
コンピュータの命令は人間の言語に比べるとずっと貧弱である。コンピュータは限られた数の明確で単純な命令しか持っていないが、曖昧さは全くない。多くのコンピュータで使われている命令の典型的な例としては、「5番地のメモリの中身をコピーしてそのコピーを10番地に書け」とか「7番地の中身を13番地の中身に加算して結果を20番地に書け」とか「999番地の中身が0なら次の命令は30番地にある」といったものである。
コンピュータの内部では命令は二進コード、つまり2を底とする計数法で表現される。例えば、インテル系のマイクロプロセッサで使われるあるコピー命令のコードは10110000である。ある特定のコンピュータがサポートする特定の命令セットをそのコンピュータの機械語(machine language)と呼ぶ。
実際には、人間がコンピュータへの命令を機械語で直接書くことは通常はなく、高水準のプログラミング言語を使う。プログラミング言語で書かれた命令が、インタープリタやコンパイラと呼ばれる特別なコンピュータプログラムによって自動的に機械語に翻訳されて実行される。プログラミング言語の中にはアセンブリ言語(低水準言語)のように、機械語に非常に近いレベルで対応付けられるものもある。逆に Prolog のような高水準言語は計算機の実際の演算の詳細とは完全に切り分けるという絶対原理に基づいている。
記憶装置(メモリ)
メモリは番地を付けられたセルの列で、各々のセルには小さな量の情報が格納される。この情報はある場合にはコンピュータに何をすべきかを教える命令である。また、セルにはコンピュータが命令を実行する対象となるデータも格納される。全てのセルはこのどちらかを格納し、ある時はデータを、またある時は命令を格納する。
一般的には、メモリセルの中身はいつでも書き換えられる。すなわち石板というよりは落書き帳に近い。
各セルのサイズとセルの数はコンピュータごとに大きく異なる。また、メモリを実装する技術も時代とともに大きく変化してきた。最初は電磁リレーが、続いて水銀の入った管(水銀遅延線)やバネに音波を通す方法が使われた。次には永久磁石の配列(磁気コアメモリ)やトランジスタが使われた。現在では1つの半導体チップの上に数百万個のコンデンサとトランジスタを集積した集積回路(DRAM)が主に使われている。
演算処理(プロセッサ)
算術論理演算ユニット(ALU)は算術演算(加算・減算など)のような基本的な演算やAND、OR、NOTといった論理演算、比較演算(2つのバイトの中身が等しいかどうかの比較など)、シフト演算などを行う装置である。コンピュータの中で真の仕事(情報処理)を行う部分と言える。
制御
制御ユニットはメモリの中でどのバイトがコンピュータが現在実行中の命令を格納しているかを追いかけ、どの命令を実行すべきかを ALU に教え、実行に必要な情報をメモリから受け取り、実行結果を適切なメモリ位置に運ぶといった仕事をする。一度これらの仕事を終えると、制御ユニットは次の命令に飛ぶ。(次の命令は普通、次のメモリ番地に位置しているが、命令がジャンプ命令の場合には別の場所にある。)
メモリを参照する際に、現在の命令はメモリ内で関連する番地を指定するために様々なアドレッシングモードを使う場合がある。コンピュータのマザーボードの中には2つまたはそれ以上のプロセッサをサポートするものもある。コンピュータサーバでは2つまたは複数のプロセッサを使うのが一般的である。
入出力
入出力(Input/Outputを略してI/Oとも言う)はコンピュータが外の世界から情報を得たり、計算結果を外に送り返したりすることを可能にするためのものである。外部から見て、コンピュータに情報を送ることを入力、逆にコンピュータから情報を得ることを出力という。
入出力には、入出力インターフェースを介して、入出力装置(I/O装置)が接続される。入出力装置としては例えば、キーボード、マウス、スキャナ、モニタやプリンタ、磁気ディスク装置、光学ドライブ装置などといった馴染み深いものから、3次元ディスプレイやデータグローブといったものまで、幅広いものが存在する。
入出力装置は、主として入力を得るためのもの(キーボード、スキャナなど)、出力するためのもの(モニタ、プリンタなど)、入力と出力を兼ね備え情報を蓄積して後からそれを読み出すことのできるもの(磁気ディスク装置など)に大別することができる。
アーキテクチャ
現代のコンピュータではALUと制御ユニットを中央処理装置(CPU ;central processing unit)と呼ばれる一つの集積回路にまとめている。典型的には、コンピュータのメモリは数個の小さな集積回路の形で CPU の近くに配置する。コンピュータの質量の圧倒的大部分を占めているのは電源装置のような付属システムかあるいは入出力装置である。
大型のコンピュータでは、上記のようなモデルとは違って複数のCPUと制御ユニットが同時に動いているものもある。さらに、主に研究用途や科学計算に使われるコンピュータでは上に書いたモデルとは大きく異なっている。しかしこういったタイプのコンピュータはプログラミングの方式が標準化されていないため、商用目的の機種にはほとんど見られない。
プログラム
コンピュータプログラムは単にコンピュータに実行させる命令の大きなリストである。場合によってはデータの表が付属することもある。現在でも1行~数1000行程度のプログラムが用いられているが、ワープロソフトやOSなどのコンピュータプログラムは数百万行の命令からなる。これらの命令の多くは繰り返し実行される。2003年時点での典型的なPCは1秒間に20~30億個の命令を実行できる。コンピュータのこのような並外れた能力は、複雑な命令を実行できる能力に由来するものではない。むしろ、コンピュータはプログラマと呼ばれる人々によって組まれた何百万もの単純な命令を実行しているのである。プログラムごとに全てを新規に書き下すことは効率が悪いため、画面に点を描くといったよく使われる仕事を行う命令のセット(ライブラリ)が多数用意されている。
今日では、ほとんどのコンピュータは同時にいくつものプログラムを実行するように見える。これは通常、マルチタスクと呼ばれている。実際には、CPUはあるプログラムの命令を実行した後、短い時間の後でもう一つのプログラムに切り替えてその命令を実行している。この短い時間の区切りをタイムスライスと呼ぶ。これによって、複数のプログラムがCPU時間を共有して同時に実行されるように見える。これは動画が実は静止画のフレームの短い連続で作られているのと似ている。このタイムシェアリングは通常、オペレーティングシステムというプログラムで制御されている。
オペレーティングシステム
具体的に処理すべき作業の有無によらず、コンピュータに自らの演算資源を管理し「ユーザーの指示を待つ」という動作を取らせるためにさえ、ある種のプログラムを必要とする。典型的なコンピュータでは、このプログラムはオペレーティングシステム(Operating System = OS)と呼ばれている。オペレーティングシステムをはじめとする、コンピュータを動作させるのに必要となるソフトウェアを全般に、「基本ソフト(基本ソフトウェア)」「システムソフトウェア」と呼ぶ。
コンピュータを動作するためオペレーティングシステムは、ユーザー、もしくは他のプログラムからの要求に応じてプログラム(この意味では、アプリケーションソフトウェアもしくは単にアプリケーションという用語も使用される。ソフトウェアという用語も似た意味合いだが、これはプログラム一般を指すより広い概念である。)をメモリー上にロードし、プログラムからの要求に応じていつ、どのリソース(メモリやI/O)をそのプログラムに割り当てるかを決定する。
オペレーティングシステムはハードウェアを抽象化した層を提供し、他のプログラムがハードウェアにアクセスできるようにする。例えばデバイスドライバと呼ばれるコードがその例である。これによってプログラマは、コンピュータに接続された全ての電子装置について、その奥深い詳細を知る必要なくそれらの機械を使うプログラムを書くことができる。また、ライブラリと呼ばれる再利用可能な多くのプログラム群を備え、プログラマは自ら全てのプログラムを書くことなく、自らのプログラムに様々な機能を組み込むことができる。
ハードウェアの抽象化層を持つ現在のオペレーティングシステムの多くは、何らかの標準化されたユーザインターフェイスを兼ね備えている。かつてはキャラクターユーザインターフェースのみが提供されていたが、1970年代にアラン・ケイらがDynabook構想を提唱、暫定Dynabookと呼ばれるaltoとsmalltalkによるグラフィカルユーザインターフェース環境を実現した。残念ながら暫定Dynabookは当時のゼロックスの首脳陣の判断により製品化されなかった(ゼロックスより発売されたGUI搭載のシステムXerox Starは暫定Dynabookとは別系統のプロジェクトに由来する)が、この影響を受け開発されたアップルコンピュータ社の LisaやMacintosh、マイクロソフト社のWindowsの発売、普及により、グラフィカルユーザインターフェースが一般的にも普及することとなった。
現在、デスクトップコンピュータ用として最も普及しているOSはマイクロソフト社のWindowsである。
世間に普及するコンピュータを台数を基準として見た場合、そのほとんどはデスクトップコンピュータとして存在しておらず、携帯電話や炊飯器などの電気製品、各種の測定機器、乗用車や工作機械などの装置に組み込まれた、非常に小さく安価なコンピュータとして実装されている。これらを組み込みシステムと呼ぶ。一般に組み込みOS(embedded OS)と呼ばれる専用のOSを用いる。TRONプロジェクトのITRON、米WindRiver社のVxWorks、米Symbian社のSymbian OS、米LinuxWorks社のLynxOSなどが利用されている。ただし、近年は開発期間の短縮などの目的で、WindowsやLinuxといったデスクトップコンピュータで使われているOSと同系統のOSを搭載する場合もある。また、小規模な組み込みシステムのなかには、明確なOSを内蔵していないものも多い。
コンピュータの歴史
- 紀元前3000年頃に古代バビロニアで数字が誕生し10進法が定められる。
- 紀元前2000年頃に古代バビロニアで手動式デジタルコンピュータの一種であるそろばんが発明される。(古代ギリシアでは紀元前300年頃に伝わって来たとされており、日本では西暦1500年頃の室町時代に明から伝わって来たといわれる)
- 1620年 イギリスのガンターが、計算尺の原型となる対数尺を発明。
- 1623年頃、ウィルヘルム・シッカートが、ネピアの骨を応用した、乗算と加減算を行なえる、歯車式の計算機を作った。加減算に関しては繰り上がりが出来たが、乗算に関しては繰り上がりが出来なかった。
- 1642年 ブレーズ・パスカルがピン歯車式計算機(加算機)であるパスカリーヌを開発。約50台が作成された。
- 1664年 ゴットフリート・ライプニッツがパスカルの加算機をもとに乗算機を作成。その後の60年間に約1500台が販売された。
- 1698年 ライプニッツが二進法を発見。
- 1822年 解析機関の設計者チャールズ・バベッジが第1階差機関の実験モデルを作成。
- 1823年 バベッジによる階差機関の開発開始。
- 1833年 追加予算が打ち切られ、階差機関の開発が中止となる。
- 1843年 シュウツ親子による階差機関の完成。
- 1854年 ジョージ・ブールがブール代数を発見する。
- 1871年 バベッジが実現を見ぬまま死去。解析機関のオペレータであるエイダ・ラブレスは世界最初のプログラマとされる。
- 1889年 ホレリスがパンチカード方式の自動集計機を実現。
- 1905年 ジョン・フレミングが二極真空管(後のダイオード)を発明。
- 1906年 リー・ド・フォレストが三極真空管を発明。
- 1936年 アラン・チューリングが万能計算機械(チューリングマシン)の論文を発表。
- 1938年 ドイツのコンラッド・ツーゼが、自宅で機械式の計算機V1(後にZ1と改名)を作成。
- 1939年 ツーゼが、Z1をベースに、演算部がリレー、記憶部が機械式のテスト用の計算機、Z2を作成。
- 1940年 ツーゼが、Z2をベースに、全リレー式の、Z3を作成。Z3はプログラム可能な最初の計算機である。
- 1942年 アタナソフとベリーが電子素子を使って演算処理をする世界初の機械 ABCを作成。
- 1943年 ローレンツSZ42暗号機によるドイツ軍の暗号を解読するため、イギリスでColossusが発明される。
- 1944年 ツーゼがZ4を作成。メモリ部分は機械式に戻る。
- 1945年 フォン・ノイマンがストアードプログラム方式を提唱。
- 1946年 ペンシルバニア大学でENIACが完成。
- 1947年 AT&Tベル研究所のウォルター・ブラッテン、ジョン・バーディーン、ウィリアム・ショックレーらがトランジスタを発明。
- 1948年 マンチェスター大学のウィリアムスとキルバーンが、初のプログラム内蔵式のコンピュータThe Babyを発明。
- 1951年 レミントンランド社が初めてUNIVAC Iを商品化。
- 1952年
- 米IBM社が初の商用のプログラム内蔵式コンピュータIBM 701を発売。
- 日本初のデジタル式リレー計算機「ETL Mark I」を通産省工業技術院電気試験所(現:産業技術総合研究所)が開発。
- 1956年
- 初の高級プログラミング言語FORTRANが誕生。
- 日本初の電子計算機「FUJIC」を富士フイルム社が開発。レンズの設計用であった。
- アメリカ合衆国ブルックヘブン国立研究所のウィリアム・ヒギンボーサムが、アナログ演算機とオシロスコープを用いた『Tennis for Two』を開発。
- 米IBM社が初のハードディスクドライブを発売。5MBであった。
- 1958年 米Texas Instruments社のキルビーが集積回路(IC)を発明。
- 1960年 米ディジタル・イクイップメント社が、世界初のミニコンピュータPDP-1を発売。
- 1961年 IBM、IBM 7030を発売。
- 1962年 PDP-1上で稼動するデモンストレーションプログラムとして、世界初のシューティングゲームとされている「スペースウォー!」が開発される。
- 1964年
- IBM社が、汎用コンピュータであるSystem/360を発売。
- コントロール・データ・コーポレーション、CDC 6600を製造開始。1969年まで世界最高速の地位にあり、世界で初めて成功したスーパーコンピュータとも言われる。
- 1967年 IBM社がフロッピーディスクを開発。
- 1968年 ダグラス・エンゲルバートが、マウスやウインドウの概念を発表。
- 1969年 後にインターネットの母体となるアーパネットが運用開始。UNIXオペレーティングシステムの開発が始まる。
- 1971年 3月、米Intel社が世界最初の4bitのマイクロプロセッサi4004を開発。
- 1972年 アタリ社、業務用ゲーム機「PONG」(ポン)を発売。続いて家庭用ゲーム機「ODYSSEY」(オデッセイ)を発売。
- 1973年
- 1974年
- 4月、米国intel社が8bitのマイクロプロセッサi8080を発表。10 月に発売されたビジコンの電卓141-PFに搭載される。
- ゲイリー・キルドールが8ビットCPU(8080)用のディスクオペレーティングシステム、CP/Mを開発。
- 1975年
- 4月、ビル・ゲイツがMicrosoft社を設立。同年9月にi8080用のBASICインタプリタ発売。
- クレイ・リサーチ社、Cray-1を発表。スーパーコンピュータの代名詞となる。
- 米MITS社が、世界初の一般消費者向けマイクロコンピュータAltair 8800を発売。主に組み立てキットとして販売された。
- ジョン・コックの統括のもとで、RISCの概念に基づくマイクロプロセッサIBM 801の開発が行われる。
- 1977年
- ビル・ジョイが開発した1BSDが初めて配布される。
- アップルコンピュータ社が、パーソナルコンピュータApple IIを発売。
- 1978年 シャープが日本で初めての国産マイコンキットMZ-80Kを発売。
- 1980年 CERNのティム・バーナーズ=リーが、WorldWideWebの元となるEnquireを開発。
- 1981年
- 1982年 米サン・マイクロシステムズ社がTCP/IPを採用したワークステーションを発売。
- 1983年
- リチャード・ストールマンがGNUプロジェクトを開始。
- 任天堂、ファミリーコンピュータ発売。
- 1984年
- 1985年
- アップルコンピュータ、LaserWriterを発売。ページ記述言語としてPostScriptを採用したレーザープリンタで、ページレイアウトソフト「PageMaker」とともに、DTPの時代を切開く。
- マイクロソフト社が最初のWindows製品であるWindows1.0を発売。
- 1986年 東芝が世界初のラップトップパソコンJ-3100を開発・商品化。
- 1987年 3月、シャープがX68000を発売。
- 1988年
- ネクスト・コンピュータ社がNEXTSTEPを搭載したNeXTキューブを発売。
- 日本電気ホームエレクトロニクス、CD-ROM²を発売。世界で初めてCD-ROMを搭載したコンピュータ(ゲーム機)用周辺機器であった。
- 1989年 東芝が世界初のノートパソコンDynaBookを発売。
- 1991年
- リーナス・トーバルズがスクラッチビルドによるUNIXライクなOSカーネルLinuxを発表。
- CERNの研究員ティム・バーナーズ=リーがWorld Wide Webプロジェクトを発表する。
- 1993年
- NetBSD・FreeBSDの発表。
- Webブラウザ・NCSA Mosaic公開。WWWの普及が始まる。
- 1994年 ソニー・コンピュータエンタテインメント、プレイステーションを発売。
- 1995年 マイクロソフト社がWindows 95を発売。
- 1996年 サン・マイクロシステムズ社により、Javaの開発環境を公式にリリースされる。
- 1997年 チェス専用スーパーコンピュータディープ・ブルーがチェス世界チャンピオンガルリ・カスパロフに勝利した。
- 1998年
- アップルコンピュータ社がiMacを発売。
- マイクロソフト社がWindows 98を発売。
- 2000年
- ソニー・コンピュータエンタテインメント、プレイステーション2を発売。DVDの普及が本格的に始まる。
- マイクロソフト社がWindows 2000、Windows Meを発売。
- 2001年
- 4月、アップルコンピュータ社がMac OS Xを発売。10月にはiPodを発表。
- マイクロソフト社がWindows XPを発売。
- 2006年
- ソニー・コンピュータエンタテインメントがBlu-ray Discドライブを搭載したプレイステーション3を発売。
- マイクロソフトがMicrosoft Windows Vistaを発売。ただし一般消費者向けには2007年のリリースとなる。
コンピュータの種類
- スーパーコンピュータ(スパコン)
- メインフレーム(大型汎用機、汎用機)
- ミニコンピュータ(ミニコン)
- オフィスコンピュータ(オフコン)
- ワークステーション
- マイクロコンピュータ(マイコン)
- パーソナルコンピュータ(パソコン)
- PDA
- グリッドコンピュータ
- 組み込みシステム
- マイクロコントローラ(組み込み用コンピュータ)
- 電卓
- ポケットコンピュータ
- ニューロコンピュータ
- 生体コンピュータ
- DNAコンピュータ
- 量子コンピュータ