■ 11_02. プログラム ■
■ プログラム言語
私たちは意識せず使っていますが、コンピュータ内部の処理は2進数で実行されています。
2進数を人間が扱いやすい数字や言語に変換することで、操作を簡単にしています。
逆に言うと、人間の言語を2進数に置き換えてコンピュータに処理させているわけです。
しかし、ちょっと考えても、2進数でコンピュータを扱うなんて無理です。
私たち人間の言語を2進数に変換してくれるものが必要です。それが、プログラムです。
プログラムを記述するための言語を、プログラミング言語といいます。
プログラミング言語によって記述された命令文がプログラムで、
いろいろなプログラミング言語があります。
例えば、COBOL、Delphi、Visual_Basic、C++、Java、PHP、Perl などです。
コンピュータが直接理解できる2進数の命令を「機械語(マシン語)」といいます。
私が1973年に初めて書いたプログラムは機械語をシンボル化したものでした。
プログラムの仕組みを大別すると2種類有ります。
ひとつは、人間が普段使う言語で書かれた、コンピュータへの命令文としてのプログラムで、
もうひとつは、そのプログラムをコンピュータ自身が処理できる2進数に変換したプログラムです。
人間の理解できるプログラムをソース(基)プログラム、
コンピュータが理解できる2進数のプログラムをオブジェクト(実行)プログラム、
ソース・プログラムをオブジェクト・プログラムに変換するモノをコンパイラ(翻訳機)といいます。
コンパイラもプログラムです。
翻訳でオブジェクト・プログラムを生成すると、ソース・プログラムとコンパイラは休憩します。
処理を実行するのはオブジェクト・プログラムだけです。
COBOL、Delphi C++ などが コンパイラ型のプログラム言語です。
ソース・プログラムを解読しながら動くインタプリタ(interpreter)というモノもあります。
翻訳しながら処理を実行するので、ソース・プログラムもインタプリタも休憩できません。
オブジェクト・プログラムはどうなった?
インタープリタがオブジェクト・プログラムの代役も務めます。
初期のBasic、PHP、Perl、などがインタプリタ型のプログラム言語です。
厳密にはプログラムと区別されますが、JavaScript なども、インタプリタと似た働きをします。
■ ソフトウェアの分類
ソフトウェアは、目に見える機械(ハードウェア)に対する言葉ですが、、、
目的を完遂するため プログラムが連動し グループを形成したものがソフトウェアとも言えます。
無数の詳細な命令が集まったプログラム同士が、さらに集まったプログラム群です。
Word、Excel、Gmail、GoogleChromeなどです。
2進数の塊りが、ソフトウェアのかたちになり、ユーザーが使える状態になっています。
ソフトウェア」は、目的や役割によって、違う呼び方をします。
・ OS(Operating System)基本ソフトウェア
・ アプリケーション・ソフトウェア
・ デバイス・ドライバ
・ ミドルウェア
・ ファームウェア 、、、 などです。
それぞれの特徴を、仕事に置き換えてみました、、、
■ コンピュータの基本構成
プログラミングを知るには、先ず、コンピュータの仕組みを知る必要があります。
ノートパソコン〜大型のホスト・コンピュータまで コンピュータの基本構成はほぼ同じで、
CPU、メイン・メモリ、ハードディスク(補助記憶装置)、入・出力機器から成っています。
■ パソコンの基本構成
一般的なパソコンの基本構成を、少し詳しく書きました。
バス( BUS )はコンピュータの神経で、全てのデジタル信号が、バスを通ります。
バスが、コンピュータ全体の処理速度を決定します。
CPUとメイン・メモリをつなぐ内部バスは特に高速で、
SSDや内蔵ハードディスクの専用バスが続きます。
それ以外の補助記憶装置や入・出力装置とのバスは、殆どUSBになってきました。
USB(ユー・エス・ビー)は、バス(データ伝送に使う経路)の規格です。
USBメモリーは、USBバスを経由してメイン・メモリとデータを読み書きできる外部メモリです。
CPU(Central Processing Unit)は、コンピュータの頭脳で、演算・制御を実行します。
より高速に演算処理するため、CPU内部の半導体LSI は極限まで細密化されています。
メイン・メモリ(主記憶装置)は 単にメモリとも呼ばれます。
ハードディスクにあるプログラムやデータを読み込み、CPU が処理できるようにします。
コンピュータの原理上、プログラムを実行するには、メモリに読み込む必要があります。
メモリには RAM(ラム)と言う、読み書き可能な半導体メモリが使われます。
RAM(ラム)は、電源OFFで、データが消えてしまいます。
ハードディスク(HDD)は、磁気ディスクのことで、電源OFFでも、記憶したデータは消えません。
USBメモリ、CD-RW、DVD-RW、なども、ハードディスクと同じ補助記憶装置です。
これらの補助記憶装置は、ハードディスク同様、電源OFFしても、データは消えません。
入力装置にはキーボード、マウス等があり、出力装置にはディスプレイ、プリンタ、などがあります。
ディスクトップパソコンなどでは、CPU、メモリ、内臓ハードディスクをまとめて本体と呼びます。
これに対し、補助記憶装置、入力装置、出力装置などを総称して、周辺機器と呼びます。
■ メモリの種類
メモリは下図のような RAM(Random Access Memory)と呼ばれる半導体メモリが使われます。
RAM はランダムに、高速に読み書きできますが、電源を切るとデータが消えてしまいます。
そのためRAM などの半導体メモリは、揮発性メモリとも呼ばれます。
このRAM には、大きく2種類があります。
・SRAM(Static RAM):「エスラム」
高速で動作しますが、かなり消費電力が必要です。
CPU内のレジスタ(演算器)や、キャッシュメモリ(一時記憶)に使われています。
・DRAM(Dynamic RAM):「ディーラム」
SRAMと比べやや低速ですが、消費電力が小さく、安価に高集積で大容量のもが作れます。
主記憶装置として使われ、普通RAM と言えば、DRAMのことを指します。
■ 必要なメモリの容量
パソコンのメモリ容量は、[スタート] → [コンピュータ] → [システムのプロパティ]で確認できます。
上図は、オフィスで使っていた Fujitsuパソコン の基本情報です。
実装メモリ(RAM) 8.00GB の記載があります。
Windows7 64bit 版は、4GB以上あれば、そこそこ使えるので、十分なメモリ容量と言えます。
経験的に、マイクロソフト社が 「2GBあれば動く」 と言えば、4GB以上にしておくのが無難です。
Windowsは、メモリが足りなくなるとハードディスクで補完しようとしますので、
(ハードディスクの読み書きは、メモリに比べて100万倍遅いので)動作速度が極端に遅くなります。
最終的にデータを保管する以外は、なるべくハードディスクと読み書きさせないほうが良いのです。
メモリとハードディスクの余分な読み書きを減らすため メモリ容量に余裕を持たせておきましょう。
■ メモリの速度と記憶容量
CPUは、レジスタ(演算器)とキャッシュ・メモリで構成され、どちらもSRAMでできています。
動作速度が速い順は CPU > メモリ > ハードディスク となります。
レジスタを構成するSRAMの動作速度は、数ナノ(10のマイナス9乗)秒です。
キャッシュ用SRAMの動作速度も数ナノ秒で、レジスタとメイン・メモリの速度ギャップを埋めます。
CPUのキャッシュ は 水洗トイレ の 貯水タンク と同じです。
レジスタが演算予定のデータをメイン・メモリから先読みし、レジスタの待ち時間を無くします。
細かく言えば、キャッシュ・メモリも2次、3次と細分化されますが、、、
メイン・メモリを構成するDRAMの動作速度は、数10ナノ秒です。
ハードディスクの動作速度は(メモリに比べて100万倍遅い)数10ミリ秒です。
メイン・メモリとハードディスクの速度ギャップを埋めるのがキャッシュ・ディスクで、
普通はDRAMです。
キャッシュ・メモリのSRAM容量は 1MB〜8MB程度、、、
メイン・メモリのDRAM容量は 2GB〜32GB程度、、、
ハードディスクの容量は 500GB〜1TB(1000GB)が普通です。
■ コンピュータの動作原理
コンピュータが動作すると、ハードディスクにあるプログラムやデータを、メモリに一時的に格納し、
CPU が高速にアクセスできるようにします。
メモリにはプログラム、基データ、プログラムで生成されたデータなども格納します。
CPU はメモリにしか直接アクセスできません。
そのため、コンピュータは、ハードディスクにあるプログラムをその都度メモリに読み込みます。
プログラム・アイコンをクリックすると、ハードディスクからメイン・メモリに読み込みます。
詳しくは、OSの解説(後述)を参照して下さい。
CPU がプログラムやデータにアクセスできるメモリの大きさを、メモリ空間と言います。
メモリ空間 には、1バイト(8ビット)ごとにアドレス(番地)が振られています。
64bit版 Windows7 は、理論的に、16TB( アプリは 8TB)までのメモリ空間を扱えます。
32bit版 Windows7 は、理論的に、4GB( アプリは 3GB)までのメモリ空間を扱えます。
実際に使える物理的なアドレス空間は、ハードや、Windowsのバージョンによって制限されます。
CPU は、四則演算〜ハードウェア制御など、数100種類の命令を実行できます。
プログラムとは、これらの命令を必要に応じて並べた命令群です。
下図は、ハードデスクから2つのデータを取り出して加算しその結果をハードデスクの別の場所に
保存するという、シンプルなプログラムの動きを表しています。
@実行させたい命令群を、メモリ(アドレス100〜103)に読み込みます。
A処理対象のデータを、メモリ(アドレス501、502)に読み込みます。
Bメモリ(アドレス100〜103)に読み込んだ命令群を、並べられた順番に実行します。
C処理したデータ(アドレス503)を、書き出します
このように、命令群をメモリに読み込み逐次処理するのが、ノイマン型コンピュータの基本原理です。
■ マルチタスク
逐次処理では、特定の時点で、1つの命令しか実行できません。
したがって、複数プログラムの同時実行はできません。
では、マルチタスク(プログラムの並列処理)は、どのように実現しているのでしょうか。
実は、時間を区切って、複数のプログラムを、切り替えながら、1つづつ実行しています。
昔は、タイム・シェアリング(タイム・スライシング)等と呼んでました。言い得て妙でしょ〜
下図で、目・口・手の動きは並列処理のように見えますが 瞬間を切り取ると1つしか処理してません。
■ コンピュータの操作と動き
@電源をON して コンピュータを起動する とは、
ハードディスクにある OS をメモリに読み込むことです。
AWordやExcel 等 プログラムを起動する とは、
ハードディスクにあるプログラムをメモリに読み込むことです。
Bファイルを保存する とは、
データ・ファイルをメモリからハードディスクに書き込むことです。
Cファイルを開く とは、
ファイルを、ハードディスク から メモリ に読み込むことです。
■ OS と アプリケーションの関係
コンピュータが何らかの処理をするには ハードウェア とソフトウェア の連携が必要です。
ハードウェア と ソフトウェア の関係は以下のとおりです。
OS(Operating System)は、コンピュータシステム全体を管理するソフトウェアです。
アプリケーション・ソフトは、Word、Excel、Gmailなど、処理目的に応じたソフトウェアです。
OS は、キーボード入力やディスプレイ出力などの入出力や、メモリ、ハードディスクの管理など、
多くの アプリケーション・ソフト が共通に利用する汎用的な機能を提供します。
OSの提供する汎用的な機能を使うことで、アプリケーション・ソフトの開発を効率化できますし、
アプリケーション・ソフトの操作を共通化できます。
1つのアプリケーションの操作に慣れれば、他のアプリケーションも感覚的に使えるようになり
ユーザーにもメリットがあります。