コンピュータ
コンピュータ (computer) は、広義には計算機、狭義には計算開始後は人手を介さずに計算終了まで動作する計算機です。純理論的には、チューリングマシンと等価なものを指します。日常的にはパーソナルコンピュータ(パソコン)を指して「コンピュータ」と呼ぶことも多いです。なお、新聞、雑誌、テレビ等では「コンピューター」と表記されるのが通常であり、ソフト最大手のマイクロソフト社もこの表記に統一することを発表しました。なお、日本の法律上での呼称は「電子計算機」(でんしけいさんき、略称:電算機、電算)とされています。「電子頭脳」(でんしずのう、略称:電脳)という通称でも呼ばれます(人間の頭脳のアナロジーとして、またロボットの頭脳として捉えられる事による)。ただし、電子頭脳・電子計算機等は概念的にはコンピュータのごく一部であり、歴史的な、あるいは研究中のコンピュータには電子的でないものもあります。また日本では昭和30年代のコンピュータの生産が行われた時代から「電子計算組織」とも呼ばれ昭和40年代前半頃まで使われた呼称でした。また21世紀を迎えても官公庁の公式文書である入札公告、条例などではこのように書かれることがあります。ハードウェアの構造からデジタルコンピュータとアナログコンピュータに大別されますが、現在使われているほとんどのコンピュータはデジタルコンピュータであり、単にコンピュータという場合はこちらを指すことが多いです。デジタルコンピュータは、おもに半導体素子を用いて作られた論理回路の組み合わせによって構成されます。演算の対象は通常二進法によって表され、桁数を増やしていけば原理的にいくらでも計算精度を上げられますが、ほとんどの演算では、桁数が多くなれば必要な計算が増えて遅くなります。対してアナログコンピュータは、加減算や微積分などを行うアナログ電子回路を演算増幅器によって構成し、それらを組み合わせて所望の演算を行います。演算の対象は電圧によって表され、演算結果はオシロスコープやペンレコーダなどに出力されます。入力の変化に対してほぼリアルタイムで出力が得られる特徴があり、各種シミュレーションなどに利用されましたが、演算内容を変更するためには回路を変更する必要があり、得られる精度にも限界があるので、デジタルコンピュータの高速化に伴ってその役割を終えました。古くはチャールズ・バベッジによって開発された階差機関などがデジタルコンピュータの元祖でした。階差機関はALUに相当し解析機関はコンピュータに相当します。現在のデジタルコンピュータは、ストアードプログラム方式で逐次処理をして駆動するノイマン型コンピュータがほとんどですが、量子コンピュータやDNAコンピュータなどのノイマン型でないコンピュータも研究され、1990年代後半から画像解析分野などで実用化されています。例を挙げるならば、地球観測プラットフォーム技術衛星の映像解析など地球自然環境調査などの分野で利用されています。
コンピュータの語源は?
computer という語は元々は算術計算を行う人を指す言葉でした。この用法は(英語圏では非常に稀になりつつあるが)今でも有効です。オックスフォード英語辞典第2版 (OED2) では、この語が機械的な計算装置を指す言葉として使われた最初の年を1897年と記しています。1946年までには、異なるタイプの計算機を区別するために、OED2によってcomputerに付く修飾語句がいくつか導入されています。これらの修飾語の中には analogue、digital、electronic といった語が含まれています。しかし様々な引用文から、1946年以前にこれらの語が既に使われていたことは明らかです。
コンピュータの仕組み
1940年代に最初の実用デジタルコンピュータが登場して以来、コンピュータに使われる技術は劇的に変化してきましたが、すべてのコンピュータはチューリングマシンの原理で動作しています。チューリングマシンはあらゆる計算可能な数を計算することのできるプログラミング機械です。電子計算機の「計算」とはALU機能のことではなく、あらゆる計算という意味です。チューリングマシンは非常に素直に動作します。チューリングマシンはアドレスの無いテープ状の記憶域から入力記号列を取り出します(fetch)。取り出した記号の値を内部状態と比較し、状態変化表にしたがって、内部状態を変更するか、ヘッドの位置をひとつだけ移動するか、値をテープ記憶に記録するかを決め、実行します。次の命令を取り出します。「停止」の命令に遭遇するまでこの手順が繰り返されます。チューリングマシンでは命令とデータを区別せず、単なる入力記号列としています。実際のコンピュータはチューリングマシンの入力記号列のうちプログラムとなる命令列と、データとなる書き換え可能な入出力列を区別しています。また計算結果を利用するため、I/O機構が追加されています。I/O機構はプログラムの入れ替えにも使われます。実際のコンピュータはチューリングマシンと異なり、アドレス付きのメモリをランダムアクセスすることで実行効率を向上しています。しかし、究極的な計算能力(あらゆる計算可能な数を計算することができる)は変わりません。コンピュータは次の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つのバイトの中身が等しいかどうかの比較など)、シフト演算などを行う装置です。コンピュータの中で真の仕事(情報処理)を行う部分と言えます。
入出力
入出力(Input/Outputを略してI/Oとも言う)はコンピュータが外の世界から情報を得たり、計算結果を外に送り返したりすることを可能にするためのものです。外部から見て、コンピュータに情報を送ることを入力、逆にコンピュータから情報を得ることを出力といいます。入出力には、入出力インタフェースを介して、入出力装置(I/O装置)が接続されます。入出力装置としては例えば、キーボード、マウス、スキャナ、モニタやプリンタ、磁気ディスク装置、光学ドライブ装置、ネットワークインタフェースなどといった馴染み深いものから、3次元ディスプレイやデータグローブといったものまで、幅広いものが存在します。入出力装置は、主として入力を得るためのもの(キーボード、スキャナなど)、出力するためのもの(モニタ、プリンタなど)、入力と出力を兼ね備えたもの(磁気ディスク装置、インタフェースなど)に大別することができます。
アーキテクチャ
現代のコンピュータではALUと制御ユニットを中央処理装置 (CPU ;central processing unit) と呼ばれる一つの集積回路にまとめています。典型的には、コンピュータのメモリは数個の小さな集積回路の形で CPU の近くに配置します。コンピュータの質量の圧倒的大部分を占めているのは電源装置のような付属システムかあるいは入出力装置です。大型のコンピュータでは、上記のようなモデルとは違って複数のCPUと制御ユニットが同時に動いているものもあります。さらに、主に研究用途や科学計算に使われるコンピュータでは上に書いたモデルとは大きく異なっています。しかしこういったタイプのコンピュータはプログラミングの方式が標準化されていないため、商用目的の機種にはほとんど見られません。
ソフトウェア
プログラムコンピュータプログラムは単にコンピュータに実行させる命令の大きなリストです。場合によってはデータの表が付属することもあります。現在でも1行〜数1000行程度のプログラムが用いられているが、ワープロソフトやOSなどのコンピュータプログラムは数百万行の命令からなります。これらの命令の多くは繰り返し実行されます。2003年時点での典型的なパーソナルコンピュータは1秒間に20〜30億個の命令を実行できます。コンピュータのこのような並外れた能力は、複雑な命令を実行できる能力に由来するものではありません。むしろ、コンピュータはプログラマと呼ばれる人々によって組まれた何百万もの単純な命令を実行しているのです。プログラムごとに全てを新規に書き下すことは効率が悪いため、画面に点を描くといったよく使われる仕事を行う命令のセット(ライブラリ)が多数用意されています。今日では、ほとんどのコンピュータは同時にいくつものプログラムを実行するように見えます。これは通常、マルチタスクと呼ばれています。実際には、CPUはあるプログラムの命令を実行した後、短い時間の後でもう一つのプログラムに切り替えてその命令を実行しています。この短い時間の区切りをタイムスライスと呼びます。これによって、複数のプログラムがCPU時間を共有して同時に実行されるように見えます。これは動画が実は静止画のフレームの短い連続で作られているのと似ています。このタイムシェアリングは通常、オペレーティングシステムというプログラムで制御されています。
オペレーティングシステム(OS)
具体的に処理すべき作業の有無によらず、コンピュータに自らの演算資源を管理し「ユーザーの指示を待つ」という動作を取らせるためにさえ、ある種のプログラムを必要とする。典型的なコンピュータでは、このプログラムはオペレーティングシステム (Operating System = OS) と呼ばれている。オペレーティングシステムをはじめとする、コンピュータを動作させるのに必要となるソフトウェアを全般に、「基本ソフト(基本ソフトウェア)」「システムソフトウェア」と呼ぶ。 コンピュータを動作するためオペレーティングシステムは、ユーザー、もしくは他のプログラムからの要求に応じてプログラム(この意味では、アプリケーションソフトウェアもしくは単にアプリケーションという用語も使用されます。ソフトウェアという用語も似た意味合いですが、これはプログラム一般を指すより広い概念である)をメモリー上にロードし、プログラムからの要求に応じていつ、どのリソース(メモリやI/O)をそのプログラムに割り当てるかを決定します。オペレーティングシステムはハードウェアを抽象化した層を提供し、他のプログラムがハードウェアにアクセスできるようにします。例えばデバイスドライバと呼ばれるコードがその例です。これによってプログラマは、コンピュータに接続された全ての電子装置について、その奥深い詳細を知る必要なくそれらの機械を使うプログラムを書くことができます。また、ライブラリと呼ばれる再利用可能な多くのプログラム群を備え、プログラマは自ら全てのプログラムを書くことなく、自らのプログラムに様々な機能を組み込むことができます。ハードウェアの抽象化層を持つ現在のオペレーティングシステムの多くは、何らかの標準化されたユーザインタフェースを兼ね備えています。かつてはキャラクタユーザインタフェースのみが提供されていましたが、1970年代にアラン・ケイらがDynabook構想を提唱、暫定Dynabookと呼ばれるaltoとsmalltalkによるグラフィカルユーザインタフェース環境を実現しました。残念ながら暫定Dynabookは当時のゼロックスの首脳陣の判断により製品化されませんでした(ゼロックスより発売されたグラフィカルユーザインタフェース搭載のシステム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を内蔵していないものも多いです。