システムを作るうえで、コンピュータの構造を把握しておいた方が良い部分があるので、簡単にまとめておきます。
ただ、パソコンを前提にしているので、おそらく世界中で使用されているスマホだと若干違います。とは言え、根本では考え方は一緒です。
ただ、パソコンを前提にしているので、おそらく世界中で使用されているスマホだと若干違います。とは言え、根本では考え方は一緒です。
コンピュータを構成するパーツ
現在、一般の会社や個人が使用するコンピュータの構造を簡単にまとめると、次のような部分から構成されます。
・コンピュータ本体
・モニタ
・キーボード
・マウス
・外付けハードディスク
・その他(プリンターなど)の入出力装置
このうちコンピュータ本体はまた、下記の様な部品から構成されています。
・電源
・マザーボード
・CPU(+CPUファン)
・メモリ
・グラフィックボード(+ファン)
・ハードディスク
・DVD・Blu-Ray ディスク装置
このうち、CPU、メモリ、グラフィックボードは通常はマザーボードに載せられています。
コンピュータの中核と言うべきものはCPUです。いわば頭脳の思考をする部分に当たります。
もう一つが、メモリで、頭脳で言うと記憶をする部分です。
・コンピュータ本体
・モニタ
・キーボード
・マウス
・外付けハードディスク
・その他(プリンターなど)の入出力装置
このうちコンピュータ本体はまた、下記の様な部品から構成されています。
・電源
・マザーボード
・CPU(+CPUファン)
・メモリ
・グラフィックボード(+ファン)
・ハードディスク
・DVD・Blu-Ray ディスク装置
このうち、CPU、メモリ、グラフィックボードは通常はマザーボードに載せられています。
コンピュータの中核と言うべきものはCPUです。いわば頭脳の思考をする部分に当たります。
もう一つが、メモリで、頭脳で言うと記憶をする部分です。
コンピュータの中核はCPUとメモリ
コンピュータの中核はCPUとメモリです。
メモリはbit(びっと)という単位の記憶が集まったものです。1bitには0か1かのどちらかの状態を記憶できます。
そして8つのbitがあつまったものを1byte(バイト)と言います。1byteは8つのbitの集まりで、それぞれのbitの状態から
00000000 〜 11111111
のパターンを区別できます。つまり256種類の状態を区別(記憶できます。)(詳細は別途)
因みにbitもbyteも単位を表すので、複数形では表記せず、例えば8bitと書きます。
そして、その1byteのメモリが行儀よくたくさん並んでいる状態をイメージしてください。
今販売されている、個人で使うノートコンピュータでも、だいたい4GB(およそ40億byte)のメモリが搭載されています。
それぞれのメモリを区別するために、1byteずつのメモリに0から始まる順番を表す数値を割り当てます。それが番地(アドレス、address)です。
単純にコンピュータが動く仕組みを書くと、「CPUはメモリに記憶されたプログラムを順番に読み込み、それを実行します」。それ以上でもそれ以下でもありません。
プログラムは、メモリに格納されたデータをメモリの別の位置に移動したり、メモリ中のデータを演算することで加工します。
メモリのデータを読んだり書いたりすることをメモリにアクセスすると言います。
CPUはメモリの何番地のデータをCPUにコピーしなさいとか(LOAD)、CPUのデータをメモリの何番地にコピーしなさい(STORE)という命令を持っているので、プログラム中にそういう命令があれば、その様に実行します。
因みに、アドレス(番地)と言っても、番地がメモリに刻印されているわけではありません。メモリのアドレスは、電気信号で識別されます。例えば4bitあdれば、0000から1111までの16通りを識別できます。
4本の電気信号線を使って、16個の宛先を区別できる訳です。
この考え方を進めていけば、32本の信号線を使うと約40億個の識別ができます。CPUの写真を観たことがある人は、たくさんのピンが並んでいます。そのうちの何10本かは、この様に、アドレスを識別するための信号線です。
コンピュータのメモリは、この信号線の情報から、個々のメモリを呼び出すために内部で何10億個のメモリの中の一つを選び出す回路(デコーダーと言います)を持っていて、それによって、メモリを読み書きします。
ところで、メモリ中のデータはCPU内では、どこに格納されるのでしょうか。
それが、レジスターと呼ばれるものです。レジスターはCPUによりますが、数個から数10個ほゆうしているCPUもあります。
また、それらのレジスターで、計算が出来るものをアキュムレーターと呼んだりします。
外部のメモリからレジスタにデータを読み込み、CPU内部でアキュムレータとレジスターとで計算して、結果を外部御メモリに格納するのが、CPUの内部の処理です。
そしてCPUの演算を担う部分をALUと呼びます。
つまりCPUの中は、レジスタやアキュムレータというメモリの仲間と、それらレジスターの情報を演算するALUから構成されます。
ALUは1回の処理で、一つの演算を実行します。
最近のCPUはこのALUを複数持っていて、同時に処理を並行して実行可能になっています。
(基本的な考え方は、距離が近いほど、電子の移動時間が少なくのと、数が少なくて識別が簡単だから早く処理出来ると考えておいてください。)
メモリのアクセスに50ns掛かるとすると、メモリ中では、数nsで済みます。メモリへのアクセスはCPU内のレジスタに対するアクセスの10倍以上の時間が掛かるのです。(nsはナノセカンド)
とは言え、CPUの中にメモリを大量に持つわけにはいきません。そこで、上に書いた様に数個から数10個程度のレジスタが供えられているのです。
ただ、昔に比べて、集積度が向上し、レジスタよりも遅いけれど、外部のメモリよりも早いメモリをCPU内部に集積できるようになりました。それが内部キャッシュメモリと呼ばれるものです。
CPUが動作している時、内部キャッシュメモリにデータが無い場合は、一旦メモリを読みに行きます。一度読んだデータ(とアドレスの情報)はレジスタにコピーするだけではなく、内部のキャッシュメモリにも格納しておきます。
そして、再度、CPUが同じアドレスにアクセスした際は、内部キャッシュメモリにデータがあるので、CPUは内部キャッシュメモリ殻データをレジスタにコピーします。
つまり、内部キャッシュに該当する情報があれば、外部のメモリを観に行くよりも早くデータにアクセスすることが出来るのです。
もちろん外部のメモリも、高価なもの購入することで、他より早いものを設置することが出来ます。それを外部キャッシュメモリと呼びます。
なお、メモリをアクセスする場合、一度に多くのbyteのデータを読めれば、メモリのアクセス時間が短縮できます。
今現在は、個人のパソコンではCPUからメモリに対して1度に4byte単位でアクセスできるものと1度に8byte単位でアクセスするものなどがあります。また同様に一つの命令で1度に4byte単位で演算できるものと1度に8byte単位で演算出来るものがあります。このように4byte単位(4×8bit=32bit)でアクセスしたり演算するのが32bitマシーン、8byte単位(8×8bit=32bit)でアクセスしたり演算するのが64bitマシーンと呼ばれます。
しかし構造が簡単で、基本コンデンサに充電されている(1)、充電されていない(0)という状態で記憶しているだけなので、コンデンサを時間が経つと放電してしまいます。そこで、メモリ内部では、一定の期間で読み込んであげて再充電すると言ったことをしています。従って、電気が切られて再充電がされなくなると記憶の内容が失われてしまいます。
こういうメモリをダイナミックメモリと呼んでいます。
CPUにとっては、処理するデータはメモリの中に格納されていて、メモリの場所(位置)を示すのにアドレスと言う情報が使われることを覚えておいてください。
メモリ
メモリにはプログラムとデータが記憶されます。実はプログラムもメモリに書き込まれたデータです。メモリはbit(びっと)という単位の記憶が集まったものです。1bitには0か1かのどちらかの状態を記憶できます。
そして8つのbitがあつまったものを1byte(バイト)と言います。1byteは8つのbitの集まりで、それぞれのbitの状態から
00000000 〜 11111111
のパターンを区別できます。つまり256種類の状態を区別(記憶できます。)(詳細は別途)
因みにbitもbyteも単位を表すので、複数形では表記せず、例えば8bitと書きます。
そして、その1byteのメモリが行儀よくたくさん並んでいる状態をイメージしてください。
今販売されている、個人で使うノートコンピュータでも、だいたい4GB(およそ40億byte)のメモリが搭載されています。
それぞれのメモリを区別するために、1byteずつのメモリに0から始まる順番を表す数値を割り当てます。それが番地(アドレス、address)です。
単純にコンピュータが動く仕組みを書くと、「CPUはメモリに記憶されたプログラムを順番に読み込み、それを実行します」。それ以上でもそれ以下でもありません。
プログラムは、メモリに格納されたデータをメモリの別の位置に移動したり、メモリ中のデータを演算することで加工します。
メモリのデータを読んだり書いたりすることをメモリにアクセスすると言います。
CPUはメモリの何番地のデータをCPUにコピーしなさいとか(LOAD)、CPUのデータをメモリの何番地にコピーしなさい(STORE)という命令を持っているので、プログラム中にそういう命令があれば、その様に実行します。
因みに、アドレス(番地)と言っても、番地がメモリに刻印されているわけではありません。メモリのアドレスは、電気信号で識別されます。例えば4bitあdれば、0000から1111までの16通りを識別できます。
4本の電気信号線を使って、16個の宛先を区別できる訳です。
この考え方を進めていけば、32本の信号線を使うと約40億個の識別ができます。CPUの写真を観たことがある人は、たくさんのピンが並んでいます。そのうちの何10本かは、この様に、アドレスを識別するための信号線です。
コンピュータのメモリは、この信号線の情報から、個々のメモリを呼び出すために内部で何10億個のメモリの中の一つを選び出す回路(デコーダーと言います)を持っていて、それによって、メモリを読み書きします。
ところで、メモリ中のデータはCPU内では、どこに格納されるのでしょうか。
CPUの構造
実はCPUの中にも少量のメモリと同様のものが存在します。それが、レジスターと呼ばれるものです。レジスターはCPUによりますが、数個から数10個ほゆうしているCPUもあります。
また、それらのレジスターで、計算が出来るものをアキュムレーターと呼んだりします。
外部のメモリからレジスタにデータを読み込み、CPU内部でアキュムレータとレジスターとで計算して、結果を外部御メモリに格納するのが、CPUの内部の処理です。
そしてCPUの演算を担う部分をALUと呼びます。
つまりCPUの中は、レジスタやアキュムレータというメモリの仲間と、それらレジスターの情報を演算するALUから構成されます。
ALUは1回の処理で、一つの演算を実行します。
最近のCPUはこのALUを複数持っていて、同時に処理を並行して実行可能になっています。
キャッシュメモリ
一般にCPUの中にレジスターを持つのは、メモリにアクセスするよりも、CPUの中でデータを持っていた方が演算が早く出来るからです。(基本的な考え方は、距離が近いほど、電子の移動時間が少なくのと、数が少なくて識別が簡単だから早く処理出来ると考えておいてください。)
メモリのアクセスに50ns掛かるとすると、メモリ中では、数nsで済みます。メモリへのアクセスはCPU内のレジスタに対するアクセスの10倍以上の時間が掛かるのです。(nsはナノセカンド)
とは言え、CPUの中にメモリを大量に持つわけにはいきません。そこで、上に書いた様に数個から数10個程度のレジスタが供えられているのです。
ただ、昔に比べて、集積度が向上し、レジスタよりも遅いけれど、外部のメモリよりも早いメモリをCPU内部に集積できるようになりました。それが内部キャッシュメモリと呼ばれるものです。
CPUが動作している時、内部キャッシュメモリにデータが無い場合は、一旦メモリを読みに行きます。一度読んだデータ(とアドレスの情報)はレジスタにコピーするだけではなく、内部のキャッシュメモリにも格納しておきます。
そして、再度、CPUが同じアドレスにアクセスした際は、内部キャッシュメモリにデータがあるので、CPUは内部キャッシュメモリ殻データをレジスタにコピーします。
つまり、内部キャッシュに該当する情報があれば、外部のメモリを観に行くよりも早くデータにアクセスすることが出来るのです。
もちろん外部のメモリも、高価なもの購入することで、他より早いものを設置することが出来ます。それを外部キャッシュメモリと呼びます。
なお、メモリをアクセスする場合、一度に多くのbyteのデータを読めれば、メモリのアクセス時間が短縮できます。
今現在は、個人のパソコンではCPUからメモリに対して1度に4byte単位でアクセスできるものと1度に8byte単位でアクセスするものなどがあります。また同様に一つの命令で1度に4byte単位で演算できるものと1度に8byte単位で演算出来るものがあります。このように4byte単位(4×8bit=32bit)でアクセスしたり演算するのが32bitマシーン、8byte単位(8×8bit=32bit)でアクセスしたり演算するのが64bitマシーンと呼ばれます。
ダイナミックメモリ
現在広く使われているメモリは、ダイナミックメモリと言うものです。ダイナミックメモリはトランジスタ回路とコンデンサーで出来ています。構造がシンプルなので、小さなエリアに大量に作成できます。例えばPCで使われているものは一つのメモリモジュールで16GBのメモリが積まれています。(マザーボードには2枚一組で差して64bitのデータを一度にアクセス出来る32GBメモリとして使われています。)しかし構造が簡単で、基本コンデンサに充電されている(1)、充電されていない(0)という状態で記憶しているだけなので、コンデンサを時間が経つと放電してしまいます。そこで、メモリ内部では、一定の期間で読み込んであげて再充電すると言ったことをしています。従って、電気が切られて再充電がされなくなると記憶の内容が失われてしまいます。
こういうメモリをダイナミックメモリと呼んでいます。
CPUにとっては、処理するデータはメモリの中に格納されていて、メモリの場所(位置)を示すのにアドレスと言う情報が使われることを覚えておいてください。
プログラムはどこから読み込むのか
コンピュータに使われているメモリは電気が消えると情報が消えてしまいます。
じゃあ、コンピュータのプログラムはどこから読んでいるの?という疑問を持つ人がいても良いですよね。
最近はパソコンを使わずにスマホだけの人もいる様なので、スマホの電源を切っても、立ち上げればまた普通に使えるので、こんな質問すら意味が分からないかもしれません。
PCの場合は、電源を立ち上げると、HDDからWindowsなどのシステムを読み込みます。メーカーで販売しているPCなどは最初からHDDにWindowsなどのOSが格納されています。
PCを自分で組み上げた場合は、HDDにWindowsなどをインストールする必要があります。
ただ、Windowsを起動するためには、HDDからWindowsのシステムをコンピュータのメモリに読み込む必要があるとすると、最初にHDDからWindowsを読み込むのは誰がやっているんだと疑問に思いませんか。
実は、コンピュータのマザーボードには、電源がオンにされた際に、CPUが最初に読み込むメモリが設置されています。
そのメモリは、ダイナミックメモリではなく、電源を切っても記憶され続けるメモリになっています。
コンピュータに電源が入ると、CPUはそのメモリにある情報をプログラムとして実行します。このプログラムをBIOSと呼んでいます。
このBIOSが、HDDのある特定の領域を読み込みます。この領域には、HDDからデータをプログラムとしてメモリに読み込むプログラムが書かれています。(HDDにWindowsなどをインストールする際に、この領域にそういうプログラムが書き込まれると考えておいてください。)そして、Windowsのシステム部分がメモリにy見込まれてWindowsが走り出します。
あれ、電源切っても消えないメモリがあるなら、最初からWindowsをそのメモリに書いておけば良くない?って思いますよね。
実は、ノートPCなどで使われているSSDがまさにその様なメモリなのです。
じゃあ、なんでSSDをたくさん使わないのかというと、値段が高いんです。
メモリの例として、32GBのメモリの例を書きましたが、2020年6月現在32GBのメモリは約2万円程度で販売されています。
一方で、HDDは3TBで1万円程度で販売されています。3TBは32GBの約100倍です。なので、3TBのメモリを用意すると、200万円程度してしまいます。
さらに、電気を切っても消えないSSDはどうでしょう。
こちらは急速に安くなっています。現在1TBが1万円〜2万円程度で販売されています。
それでも、HDDの3倍程度の価格です。
電源切っても消えないSSDの問題点は、データの読み書きがダイナミックメモリに比べて、相当遅いのです。
HDDに比べれば、数倍から10倍程度早いのですが、ダイナミックメモリと比べると、数百分の1程度です。
スピードが遅いので、一時的にデータやプログラムを置いている分には良いのですが、処理をするには遅すぎるんです。
もちろん価格を高くして、速度を上げることもできますが、原理的にダイナミックメモリに比べて回路が複雑になるので、価格はどうしても高くなり、速度も遅くなります。
じゃあ、コンピュータのプログラムはどこから読んでいるの?という疑問を持つ人がいても良いですよね。
最近はパソコンを使わずにスマホだけの人もいる様なので、スマホの電源を切っても、立ち上げればまた普通に使えるので、こんな質問すら意味が分からないかもしれません。
PCの場合は、電源を立ち上げると、HDDからWindowsなどのシステムを読み込みます。メーカーで販売しているPCなどは最初からHDDにWindowsなどのOSが格納されています。
PCを自分で組み上げた場合は、HDDにWindowsなどをインストールする必要があります。
ただ、Windowsを起動するためには、HDDからWindowsのシステムをコンピュータのメモリに読み込む必要があるとすると、最初にHDDからWindowsを読み込むのは誰がやっているんだと疑問に思いませんか。
実は、コンピュータのマザーボードには、電源がオンにされた際に、CPUが最初に読み込むメモリが設置されています。
そのメモリは、ダイナミックメモリではなく、電源を切っても記憶され続けるメモリになっています。
コンピュータに電源が入ると、CPUはそのメモリにある情報をプログラムとして実行します。このプログラムをBIOSと呼んでいます。
このBIOSが、HDDのある特定の領域を読み込みます。この領域には、HDDからデータをプログラムとしてメモリに読み込むプログラムが書かれています。(HDDにWindowsなどをインストールする際に、この領域にそういうプログラムが書き込まれると考えておいてください。)そして、Windowsのシステム部分がメモリにy見込まれてWindowsが走り出します。
あれ、電源切っても消えないメモリがあるなら、最初からWindowsをそのメモリに書いておけば良くない?って思いますよね。
実は、ノートPCなどで使われているSSDがまさにその様なメモリなのです。
じゃあ、なんでSSDをたくさん使わないのかというと、値段が高いんです。
メモリの例として、32GBのメモリの例を書きましたが、2020年6月現在32GBのメモリは約2万円程度で販売されています。
一方で、HDDは3TBで1万円程度で販売されています。3TBは32GBの約100倍です。なので、3TBのメモリを用意すると、200万円程度してしまいます。
さらに、電気を切っても消えないSSDはどうでしょう。
こちらは急速に安くなっています。現在1TBが1万円〜2万円程度で販売されています。
それでも、HDDの3倍程度の価格です。
電源切っても消えないSSDの問題点は、データの読み書きがダイナミックメモリに比べて、相当遅いのです。
HDDに比べれば、数倍から10倍程度早いのですが、ダイナミックメモリと比べると、数百分の1程度です。
スピードが遅いので、一時的にデータやプログラムを置いている分には良いのですが、処理をするには遅すぎるんです。
もちろん価格を高くして、速度を上げることもできますが、原理的にダイナミックメモリに比べて回路が複雑になるので、価格はどうしても高くなり、速度も遅くなります。
スマホの場合は
ただ、そうは言っても、外部記憶装置としては十分早いのです。
なので、そこまで大きな記憶容量を必要としなければ、HDDを使う代わりに電源を切っても記憶されるメモリを使うことは、機器の小型化に役立ちます。
スマホがまさにそれです。
HDDの代わりに電源が切られても記憶が残るメモリを使っています。これがSDカードです。SDカードに入っているのは、電源を切られても記憶が消えないメモリです。
写真や音楽を保存しておき、必要な都度写真を見たり、音楽を聴いたりする程度の用途であれば十分な速度なのです。
現在はスマホで動画編集すら可能なのは驚きですが、さすがに高画質で長時間の動画を編集するには、荷が重いです。
そういう用途には、いまだにPCの方が有利です。
ただ、スマホのCPUやメモリは、今後も性能を上げていくと思いますので、近い将来PCはサーバー用途以外に使われなくなる可能性もあるかもしれません。(さすがに、あの小さな画面でプログラム開発はしたくないですが)
なので、そこまで大きな記憶容量を必要としなければ、HDDを使う代わりに電源を切っても記憶されるメモリを使うことは、機器の小型化に役立ちます。
スマホがまさにそれです。
HDDの代わりに電源が切られても記憶が残るメモリを使っています。これがSDカードです。SDカードに入っているのは、電源を切られても記憶が消えないメモリです。
写真や音楽を保存しておき、必要な都度写真を見たり、音楽を聴いたりする程度の用途であれば十分な速度なのです。
現在はスマホで動画編集すら可能なのは驚きですが、さすがに高画質で長時間の動画を編集するには、荷が重いです。
そういう用途には、いまだにPCの方が有利です。
ただ、スマホのCPUやメモリは、今後も性能を上げていくと思いますので、近い将来PCはサーバー用途以外に使われなくなる可能性もあるかもしれません。(さすがに、あの小さな画面でプログラム開発はしたくないですが)