WisdomSoft - for your serial experiences.

1.1 プログラムの仕組み

プログラムが動く基本的な仕組みと、ハードウェアとの関係について解説します。

1.1.1プログラミング

人間が意図したとおりにコンピュータを制御するための、一連の命令をプログラムと呼びます。そしてプログラムを記述する一連の行為をプログラミングと呼びます。プログラミングができる人のことをプログラマとも呼びますが、現代のソフトウェア開発は複雑かつ専門職が多様化しており、プログラミングだけが開発のすべてではありません。業界では、ソフトウェア開発に携わる人のことを技術者(Engineer)や開発者(Developer)と呼ぶことの方が多いように感じます。

プログラムを記述する方法はいくつか存在しますが、その多くは定められた文法でコンピュータへの命令を順に記述したテキストで表されます。コンピュータに命令するために作られた人工言語のことをプログラミング言語と呼びます。プログラミングとはプログラミング言語の文法に従ってコンピュータへの命令をまとめたテキストを作成することです。

プログラミング自体は文章を書く行為に似ているかもしれません。メモ帳のようなテキストエディタを使って命令を記述します。しかし、プログラミング言語で書かれたコードを読めるのは、同じ言語を理解するプログラマだけです。多くの一般人にとって、プログラミング言語で書かれたコードが何を意味しているのかを理解することは困難です。プログラムを書くには、まずプログラミング言語を習得する必要があるのです。

多くのプログラミング言語は英単語の組み合わせで命令を組み立てますが、英語とは異なります。コンピュータへの命令は論理的な整合性が求められるため、私たちが話す言葉のように曖昧な表現を含みません。

プログラミング言語と呼ばれるものは多く存在しますが、中でも本書で学習するプログラミング言語 C++ は、世界中のコンピュータで、多くの技術者が標準的に利用している言語です。

プログラムの仕組みを理解するには、コンピュータがどのようにして動いているのかを理解する必要があります。日常的に利用しているアプリケーションの裏側で、コンピュータがどのような処理を行っているのかご存知でしょうか。 まずは、コンピュータの基本的な構造や動作の仕組みをおさらいしましょう。

1.1.2 ハードウェアとソフトウェア

コンピュータは、大きくハードウェアソフトウェアの 2 つの概念に分けて考えることができます。

ハードウェアは、物理的な演算装置や記憶装置などから構成される目に見える機械そのものです。キーボードやマウス、ディスプレイなどもハードウェアに該当します。見て触れることができる「機械」がハードウェアだと考えて間違いありません。しばしば、ハードウェアのことを装置デバイスやコンソールなどと呼ぶこともあります。

どのようなハードウェアも、基本的にはコンピュータの五大要素と呼ばれる次の 5 種類に分類できます。

  • 入力装置
  • 制御装置
  • 演算装置
  • 記憶装置
  • 出力装置

入力装置は、コンピュータに外部の情報を入力する機器です。キーボードやマウスが代表的な入力装置ですが、最近流行っているタッチパネルや加速度センサ、GPS なども入力装置に分類されます。出力装置はこの逆で、コンピュータから外部に情報を送る装置となります。ディスプレイとプリンタが代表的な出力装置でしょう。

演算装置は計算を行うための装置で、制御装置の指示に従って計算を行います。これらの装置を合わせて中央処理装置 (Central Processing Unit, CPU) と呼び、コンピュータの性能を決定する重要な要素となっています。

図 CPU
図1 CUP 図1 CUP

計算された結果は記憶装置によって保存されます。多くのコンピュータは、様々な容量や速度の記憶装置を役割に応じて使い分けています。CPU が計算を行うために利用するデータには、CPU 内に組み込まれているレジスタと呼ばれる小さな記憶領域が使われます。レジスタは CPU と一体になっているため高速に読み書きできますが、その容量は数バイトしかありません。いわゆる 32 bit CPU や 64bit CPU というのは、このレジスタのサイズが関係しています。

プログラムが扱うデータは主記憶装置に保存されます。家電量販店などで見かける PC のカタログに「メモリ」と書かれている部分が主記憶装置に相当します。主記憶装置は CPU と深く関わっているため、この部分の容量や CPU との通信速度は PC 全体のパフォーマンスに大きく影響します。

図2 主記憶装置
図2 主記憶装置

通常、主記憶装置の情報はコンピュータの電源を落とすと失われてしまいます。そこで、ハードディスクドライブ HDD のような補助記憶装置が使われます。私たちが普段使ってる PC で見えている「ファイル」は、補助記憶装置に保存されているものです。

これら CPU や主記憶装置などの部品を組み合わせて接続しているものがマザーボードです。マザーボードにはいくつものソケットやコネクタがあり、規格に従って適切な CPU や主記憶装置、ハードディスクやディスクドライブ、グラフィックボードなどをはめ込みます。

図3 マザーボード
図3 マザーボード

これが、一般的な PC の基本的なハードウェア構成です。ソケットやコネクタ、各種スロットの形状は時代と共に変化してきましたが、ハードウェア構成は何十年も前から同じです。

図4 コンピュータの五大要素
図4 コンピュータの五大要素

ハードウェアは、定められた手順に従って命令を実行するだけです。従って、ハードウェアに仕事を与える一連の命令手順が示されなければ、コンピュータはただの箱でしかないわけです。ハードウェアに命令し、制御するプログラムがソフトウェアです。PC の電源を入れた瞬間から、ソフトウェアが主記憶装置に読み込まれ、定められた手続きでプログラムが実行されています。Windows も Office も、ブラウザも、動画が音楽プレイヤーも、ゲームも、すべてプログラムされたソフトウェアです。

ソフトウェアとは、ハードウェア上で動作するあらゆるプログラムを指す言葉ですが、幅広い意味で使われているため文脈から意味をくみ取る必要があるときもあります。同じソフトウェアであっても、動作する領域によって呼び方が異なります。

図5 ハードウェアとソフトウェアの関係
図5 ハードウェアとソフトウェアの関係

家電量販店で売られている PC 本体はハードウェアですが、どのメーカーの PC を購入しても表示される画面や操作方法が共通しているのは、インストールされている OS (オペレーティング・システム)が同じ、あの Windows だからです。OS はハードウェアを管理し、ハードウェアの違いを吸収します。

多くのプログラマが開発するソフトウェアはアプリケーションでしょう。アプリケーションは OS の上で動作するソフトウェアのことで、OS が提供する機能を利用することで、ハードウェアに依存することなく描画やファイル制御、通信などを行えるようになります。このとき OS がアプリケーションに提供する機能を API (Application Programming Interface)と呼びます。

Windows 専用ソフトウェアはハードウェアの種類や構成が違っても、Windows が動作しているコンピュータ上であれば同じように動作します。アプリケーションはハードウェアではなく OS に依存するソフトウェアなのです。OS の上で動作するアプリケーションは、ハードウェアを意識することなく目的の処理に集中できます。ハードウェアとの通信は OS が代行してくれるため、プログラムは OS が提供する機能を通じて入出力を行います。

また、ハードウェアを制御するための小さいプログラムもソフトウェアです。ハードウェアに直接埋め込まれているような命令はファームウェアと呼ばれ、PC だけではなく周辺機器や携帯電話などにも組み込まれています。ハードウェアと OS の間で通信を行うソフトウェアはデバイスドライバと呼ばれます。プリンタなどの周辺機器が OS の種類やバージョンで対応が異なるのは、システムごとにデバイスドライバを用意しなければならないためです。

もちろん OS もソフトウェアの一種なので OS そのものをプログラミングすることも可能です。しかし、プログラミング言語の知識だけで作れるものではなく、ハードウェアやシステム設計に関する深い知識と経験が必要です。Windows のような現代的なシステムを実現するには大規模な開発チームと多くの影響力のあるハードウェアベンダーの協力なしには困難といえます。