PC 教室ハードウエア ⇒ メモリ

ハードウエア~これが無いと CPU は、何も出来ない(メモリ)

メモリの増設

RAM モジュールを挿す場所は、マザーボードに用意されています。 これをスロット(Slot)と呼びますが、 スロットの数は、マザーボードによって違います。 大抵は、3 つ、ないしは、4 つあります。

このスロットが 3 つあるとして、 既に PC100 CL2 容量 128MbytesDIMM1 つ使っているとします。

その RAM モジュールを使いながら、 追加するとすると、最大で、384Mbytes のメモリを搭載できる事になります。

256Mbytes のモジュールを使えば、 トータルで 768Mbytes512Mbytes のモジュールを使えば、 トータルで 1.5Gbytes のメモリまで搭載できますが、 今使っている 128MbytesDIMM は、 マザーボードから取り外さないといけません。

また、使うことの出来るメモリーモジュールの種類は、 マザーボードによって決まります。 自分が使っている PC で、 利用することの出来るメモリーモジュールは、 どういう種類のものなのかを知っておく必要があります。

メモリを追加する時は、この辺りを十分注意してください。

CPU に、 バスを経由して接続されているメモリには、二つの種類があります。 RAMRandom Access Memory)と、 ROMRead Only Memory)です。

ROM は、 その名前が示すように、読み込む事だけが出来るメモリです。 このメモリに対して、書き込みを行ってもエラーにはなりませんが、書き込む事は出来ません。 何故そんなメモリが必要なのかというと、 絶対に内容が変化しない大切なデータを記憶しておく必要があるからなんです。

その大切なデータとは、実は、プログラムなんです。 それは、 BIOS です。 BIOS について、 詳しい説明は、ソフトウエア編で説明しますが、 “プログラムが無ければ計算機はただの箱”の鍵は、ここにあります。

BIOS は、電源が投入されたり、リセットが掛けられたりすると、 HDD にインストールされている OS をメモリに読み込んで、それを実行してくれます。 CPUで、 “CPU は、プログラムという脚本を、メモリからしか読み込めない”と書きましたね。 プログラムを HDD にインストールしただけでは、 CPU は、インストールされたプログラムを実行することが、出来ません。 それを HDD から、メモリに読み込み、 読み込んだプログラムを実行するように CPU に命令して、 初めてプログラムを実行することが、出来ます。 ですから、その読み動作と、 読み込んだプログラムを実行するように CPU の仕事を切り替える、 それを BIOS がやってくれるのです。

その為の脚本が、BIOS として、 ROM にあらかじめ記憶されています。 その脚本が、何かの理由によって消えてしまったり、違うものになってしまったら、 計算機はどうなるのでしょう? HDD にインストールされた OS が実行されなくなります。 ということは、電源を入れても何も動かなくなってしまうということです。

RAM は、電源を切ってしまうと、 そこに記憶しているものは、全部無くなってしまいますが、 ROM は、記憶している内容が消えません。 もし、不具合のあるプログラムが、BIOS プログラムを記憶している場所に、 適当なデータを書き込んでしまったとしても、 ROM は、CPU から書き込みをされても、 書き込む事が出来ないから、 記憶している BIOS プログラムを構成するインストラクションが破壊されません。 だから、安心して使うことも、電源を切ることもできるわけです。

ROM に、 BIOS プログラムを記憶させる、 一番最初はどうするんでしょうか? ROM に記憶されている内容を消去したり、記憶させるデータを書き込む為の、 専用の機械があるので、それで記憶させるのです。

しかし、IBM PC/AT 互換機の場合は、 BIOS をアップデート(更新)する事が出来ます。 どうして出来るんでしょうか?

それは、ROM ではなく、 Flash ROM というメモリを使っているからなんです。 Flash ROM は、普段は、普通の ROM と同じなんですが、 ある特殊な操作(それは、もちろん CPU から行います)をすると、 書き込み動作が出来るように変化するメモリなのです。

話を RAM に移しましょう。 RAM には、実は色々な種類があります。 通常、メモリに使用される RAM は、 Dynamic RAMDRAM)です。 何故、DRAM という種類の RAM が使われるのかというと、 他のものと比べると、動作は遅いのですが、安いからです。

DRAM の原理を簡単に言えば、コンデンサーです。 コンデンサーは、高校の物理の授業で習いましたね。

簡単に復習すると、コンデンサーは、二つの導電性のある板を平行に並べただけのものです。 そこに直流の電気を流すと、電気自体は伝わりませんが、板と板の間に、電気が貯えられます(帯電)。 直流電気を流すのを止めると、貯えられた電気が放電されます。

この帯電が、データの記憶です。 数字は、2 進数で表され、 0 は、電気が流れない、 1 は、電気が流れるで表現するんでしたね? つまり、1 を示す場合では、帯電され、 0 を示す場合では、帯電しないんです。 このコンデンサーを大量に用意して、 大量の 10、を記憶するわけです。

でも、コンデンサーは、直流電気の流れを止めてしまうと、帯電した電気を放電してしまいます。 この放電時間は、コンデンサーの容量によって違ってきます。 コンデンサーの容量の単位は、F(ファラッド)でしたね?

放電で、記憶した内容が無くなってしまわない様に、DRAM には、 リフレッシュサイクル(Refresh Cycle)というタイミングがあります。 もう一度電気をかけなおなして、帯電させるわけです。

DIMM

そのリフレッシュサイクルを、放電時間より短い時間間隔で行えば、 記憶した内容が、消えてしまう事が無いでしょう?

これで万々歳、といいたい所ですが、DRAM の動作が遅い原因がここに在るのです。 DRAM がリフレッシュサイクルに入ってしまうと、 CPU からの読み込み・書き出し要求は、 リフレッシュサイクルが終わるまで、待たされる事になるんです。

この、根本的にどうする事も出来ない遅さを補おうと、 色々な RAM モジュール(RAM Module)が開発され、 製品化されている為、RAM モジュールには、色々な種類があります。

RAM モジュールは、RAM そのものでありません。 例えば、128Mbytes のメモリを追加する時には、 128Mbytes 分の RAM と、 その周辺に用意された回路も含む部品を、マザーボードに追加します。 それが、RAM モジュールです。

写真は、PC100 規格の DIMM モジュールです。 DIMM モジュールの左側に並べられた小さな三つの黒い箱が、 DRAM です。 PC100 CL2DIMM は、 128Mbytes だけでなく、 256Mbytes512Mbytes の容量の RAM モジュールがあります。

今使っている RAM モジュールを使いつつ、 RAM モジュールを追加する時は、全く同じ規格、 全く同じ容量の RAM モジュールを追加した方が良いと言われています。 そうしないと、きちんと動作してくれない可能性があるからです。

メモリは、記憶の単位が、 大抵の場合、8bits ごとになっています。 一度に行える読み込みも、書き込みも、最小の単位は、メモリの記憶の単位毎です。 一度に行える読み込みと、書き込みの最大は、と言うと、 それは、CPU によって違ってきます。 Pentium II の場合は、最大 64bits です。 この、メモリの記憶の単位のことをバイト(byte)といいます。

その最小単位の 1byte 毎に、記憶場所を示す番地が付いています。 HDD における、セクターと同じです。 一つのセクターの容量は、512bytes で、それぞれにセクター番号が付いていて、 それで場所を示す、ということでしたね。 メモリの場合は、 1byte 毎に、 記憶場所を示す番地が付けられています。

CPU は、 メモリからの読み込み・書き出しを、番地とデータの長さを指定して行います。 自分が記憶したデータは何処に在るのか、自分が実行すべきインストラクションは何処に在るのか、 番地がキーになります。

ある番地に記憶されたデータは、その番地にデータを書き込まない限り、ずっと記憶されます。 例えば、0 番地に、 128 のデータが記憶されていたとすると、 0 番地にデータを書き込まない限り、 0 番地に記憶されているデータは、128 です。 もし、0 番地に、 64 というデータを書き込むと、 0 番地にはそれ以後、64 が記憶されます。 書き込んだ瞬間に、それ以前に記憶されていたデータは消える、とも言えます。

では、電源を投入した直後の RAM の記憶内容は、 どうなっているんでしょうか? それは、不定です。その時の電気状態によって変化します。 大抵は、255 になります。 255 という数字は、 2 進数で表すと、11111111 です。 よく見てください。 この数字は、8bits の全てのビットが、1、 つまり、ON になった時の数字です。 その後、CPU が動作をはじめると、 全て 0 で初期化されます。 さて、この仕事は誰がするんでしょう? 答えは、BIOS です。

RAM は、番地によって、 書き込んだり、読み込んだりする場所を指定できるのですが、 この番地さえ指定すれば、好きな場所にアクセスすることが出来ます。 アクセスするメモリの番地において、無秩序な順番で読み込んだり、書き込んだりするアクセスは、 ランダムアクセス(Random Access)と言います。

RAM は、Random Access Memory の略でしたね。 ランダムアクセスすることが出来るメモリなので、RAM と言うのでした。 RAM があるからには、その他のアクセス形態のメモリもあります。

このようなアクセス形態をハードウエア上で実現するメモリもあります。 このようなメモリは、実は、計算機上のいたる所にあったりしますが、 存在が表面化することは、殆どありません。 ですが、これらのメモリとはっきりと区別するために、 CPU に接続され、 ソフトウエア上から当たり前のようにアクセスできるメモリのことを、 メインメモリと呼ぶこともあります。

また、このようなアクセス形態をソフトウエアでも実現しています。 これは、メインメモリの使い方として、ソフトウエア上の論理的な存在としてあります。

FIFO は、キーボードからの入力を受け付ける割り込み処理の中で使っています。 割り込みを受けた時に、 押されたキーのキーコードを queue に記憶(enqueue)し、 キーボード入力を処理する所では、 queue に記憶されたキーコードを取り出し(dequeue)ます。

LIFO は、割り込みによる仕事の切り替え、復帰を行う際に使っています。 割り込みを受けた時、 中断した場所(インストラクションのメモリ番地)を stack に記憶(push)し、 割り込み処理が終わった時に、復帰場所を stack から取り出し(pop)て、中断した場所から実行を再開します。

さて、 CPUで、 “リセット、もしくは、電源が投入された直後の動きだけは、 CPU だけで、ある程度までは動きます” と書きましたが、この詳しい説明をしましょう。

実は、CPU は、電源が投入されたり、リセットされたりすると、 CPU 内部での、準備(初期化)動作が行われ、 メモリのある番地に記憶されているインストラクションから実行するように作られています。 最初に実行するインストラクションのメモリ番地は、 CPU の種類によって違います。

その最初に実行されるインストラクションが記憶されているメモリ番地が、 ROM になるように、 マザーボード(Mother Boad)は作られ、その番地には、 最初に実行するインストラクションが記憶されるように、 BIOS プログラムは作られています。

そこから、 ブートストラップという天地創造が始ります。 ブートストラップに付いては、ソフトウエア編の、 ブートストラップという天地創造で詳しく話します。