WisdomSoft - for your serial experiences.

1.4 ハードウェア構成

標準的なコンピュータのハードウェア構成と、その関係を紹介します。

1.4.1 コンピュータの仕組み

他のプログラミング言語の経験で十分にコンピュータについての理解がある場合や、コンピュータの自作経験などがあり、ハードウェアに関する知識がある場合はこの項目を読み飛ばして「2.1 開発環境とコンパイラ」 に進んでください。

C 言語は、高水準言語でありながら低水準言語に最も近い言語でもあります。そのため、C 言語を使いこなすためにはある程度のコンピュータに対する知識が必要となります。C 言語で挫折する人の多くは、C 言語の知識よりもコンピュータに対する知識が不足しているために理解に苦しむ傾向があります。そこで、この場ではコンピュータシステムに関する基本を説明します。

そもそもコンピュータとは、何らかのデータを入力し、データを適切な方法で計算して、その結果を出力する道具であると考えられます。これを実現させるために最低限必要な装置が入力装置、出力装置、演算装置、制御装置、記憶装置の5つで、これをコンピュータの 5 大要素と呼びます。

表1 コンピュータの五大要素
入力装置 データをコンピュータに送信する装置
出力装置 計算結果のデータを取り出す装置
演算装置 データをプログラムに従って計算する装置
制御装置 他の装置の動作を制御する装置
記憶装置 データを保存するための装置
図1 コンピュータの5大要素と関係
コンピュータの5大要素と関係

入力装置は、文字や数字を入力するためのキーボードや、座標を入力するポインティングデバイス(マウスやペン、タッチスクリーンなど)、映像を入力するスキャナ、マークシートを読み取る OMR、時間を入力するタイマーなど、数多く存在します。

出力装置は、ディスプレイが代表的ですが、他にもプリンタやプロッタなどが存在します。

演算装置と制御装置はワンセットで中央処理装置と呼びます。CPU と言えばわかりやすいかもしれません。中央処理装置は入出力を管理し、コンピュータ全体を制御します。これがなければ、コンピュータは計算することができないため、コンピュータの中枢神経であると考えられます。

記憶装置は計算するデータや計算結果を保存するための場所で、とくに CPU と直接回線で結ばれている重要な記憶装置を主記憶装置と呼びます。プログラムはデータの保存や計算結果の保存に主記憶装置を用いるため、主記憶装置に対する理解は重要です。 記憶装置はメモリとも呼ばれますが、通常メモリという言葉を使う場合、主記憶装置を指します。コンピュータにはこの他にハードドライブや ROM などの他の記憶装置が存在し、これを補助記憶装置と呼びます。主記憶装置はコンピュータの電源を切ると保存していたデータが削除されますが、補助記憶装置は電源を切ってもデータは保存されています。その代わり、主記憶装置はデータアクセス速度が高速で、CPU との直接のデータ取引に適していますが、補助記憶装置はデータアクセス速度が主記憶装置よりも遅く、CPU との取引には適していません。このように、記憶装置はその役割に応じて性質が異なっています。

これらの記憶装置に保存されているデータは、「1.3 2進数と16進数」で学習した2進数のバイナリデータです。このとき、1桁の2進数値を「ビット」という単位で表しますが、CPU や 1 ビット単位で計算を行うことはありません。CPU の最小の計算単位のことを「バイト」と呼び、一般的には 8 ビットが 1 バイトとなります。すなわち多くのコンピュータは 8 ビットをひとつの塊として扱います。

ただし、8 ビット = 1バイトではないので十分注意してください。あくまでバイトはコンピュータの最小処理単位を表し、1 バイトのビット数はコンピュータアーキテクチャに依存する問題です。しかし一般的には 8 ビット単位で処理されることが多く、確実に 8 ビットを表す単位が必要です。そこで、ネットワーク関連の書物では 8 ビットを表す単位「オクテット」を使います」。1 バイトが 8 ビットのコンピュータに特化した会話では 1 バイトを 8 ビットと限定して話を進めることができますが、ネットワーク関連書物などではコンピュータを限定することができないため、オクテットが用いられます。しかし、ややこしいので本書では原則として 1 バイトを 8 ビットとして扱います。

記憶装置には何らかの方法で 1 ビットずつデータが格納されています。データはそれぞれバイト単位で扱われるため、記憶装置はバイトごとに住所の代わりとなる数字を割り当てています。記憶装置のデータの位置を表すこの数字をメモリアドレスと呼び、プログラムはメモリアドレスを使って目的の情報にアクセスします。この考え方は C 言語では重要で「6.1 ポインタ」で詳細を説明します。この場では、コンピュータで扱われるすべてのデータには、プログラムがデータにアクセスするための住所が必ず存在することを覚えておいてください。とにかくプログラミングの世界では、データを参照するには、データが存在する場所を指定しなければなりません。そのため、あらゆるデータに一意に識別できる住所が必要なのです。