では、実際にコンピュータはどのように動作しているのでしょうか。

好奇心の強い非技術者のために、2進数によってコンピュータがどのように動作しているかをハイレベルで概説します。

Photo by Federica Galli on Unsplash

コンピュータの仕組みはずっと興味があったことですが、実際に基礎知識を持って、高いレベルで理解しようとは思いもよりませんでした。 このブログ記事を書くために調査を行い、理解するのがそれほど難しくないことがわかったので、非常にやりがいがありましたし、さらに、コンピュータの仕組みを理解することは、再び高いレベルであっても、かなり頭が下がります。 これは非常に基本的な考え方で、コンピューターは外部ソース (キーボード、マウス、センサー、インターネット) から情報を受け取り、それを保存し、処理し、そのプロセスの結果 (出力) を返します。 ところで、よく考えてみると、コンピュータがインターネットでつながった瞬間、あるコンピュータ(例えばウェブサイト)の出力が別のコンピュータの入力になり、入力と出力のループが永遠に続くことになります(!!)。

つまり、非常に基本的なレベルでは、コンピューターが理解するのは 1 と 0 だけであり、すべての入力と出力は、ある時点で 1 と 0 に変換されるか、1 と 0 から変換されます。 1と0(BInary digiTからビットとも呼ばれる)が強力なのは、あらゆる情報を電気信号(ON/OFF)に変換することができる点である。 少し考えてみてください。 あなたが見たり、考えたり、相互作用するあらゆるものは、実は電気信号(!!)に変換して表現することができるのです。 情報を電気信号として表現することで、コンピュータは実際にその情報を処理し、変換することができます。

では、2進数システムはどのように機能するのでしょうか。 2進数とは、すべての数字が2の基数で計算されることを意味します。 たとえば、私たちの多くは10の底で数を考えるのに慣れています。 例えば2561という数字を考えてみると、その数字が右から左のどの位置にあるかによって、10の倍数である数値が異なることがわかります。 この例では、例えば、1が1の位、6が10の位、5が100の位、2が1000の位を占めています。 こうして、(2×1000)+(5×100)+(6×10)+(1×1)=2561となる。 2進数も全く同じように動作しますが、1進ごとに前の進数より2倍ずつ増えていくことを表します。 以下は、12を表す例です。

8ビットで0から255までの任意の数、32ビットで0から40億までの任意の数を表すことができるわけですね。 確かにそうだが、文字列や句読点はどうするんだ、と思うかもしれない。 と思うかもしれませんが、文字列や句読点はどうなるのでしょうか。今日でも、私たちはASCII(American Standard Code for Information Interchange)という、大文字を含むあらゆる文字や句読点を8ビットの数字のいずれかに対応させる方式を採用しています。

では、画像についてはどうでしょうか。 さて、実は画像も0と1に分解することができるのです。 ご存知のように、どんな画面にも決められた数のピクセルがあり、各ピクセルには色があります。ご存知のように、RGB や HEX カラーコードを使用すると、色を数字で表すことができ、つまり、各ピクセルがどの色でなければならないかをコンピュータに伝えることができるのです。 音楽、ビデオ、その他あらゆる情報についても同様です。

しかし、電気信号は一体どうやって「計算」するのでしょうか。 そこで登場するのが電気回路です。 非常に基本的で単純化されたレベルでは、電気回路を使って「論理機械」として動作させることができるのです。 ある入力を与えると、論理の組み立て方(Not、And、Or)によって出力を返す回路や、和、差、乗、除算を返す回路がある。 これは論理学で使われる用語で、すべての真理値表を表現できるブール演算子の集合のことで、数学者が「限界はない」と表現するのに使われる言い回しだ。 これらの計算はすべて、CPU 内の ALU (Arithmetic Logic Unit) と呼ばれるユニットで行われます。

CPU (Central Processing Unit) はコンピュータの頭脳で、すべての計算がここで行われることはご存じでしょう。 CPUの面白いところは、CPUにはメモリがないことで、つまり、絶対に何も記憶できないことです。 メモリがなければ、すべての計算が実行された直後に失われてしまうのです。 大雑把に言うと、すでにご存知の方もいらっしゃるかもしれませんが、コンピュータが使っているメモリは2種類あります。 RAMはRandom Access Memory(ランダムアクセスメモリー)とPersistent Memory(パーシステントメモリー)の頭文字をとったものです。 RAMメモリは、8ビットの数字を格納する巨大なグリッド(行列)と考えることができます。 RAMメモリは、CPUが必要なときにいつでも使えるように、任意の8ビット数値のメモリマトリックス内の「アドレス」を記録しています。 そして、どうでしょう? これらの演算を行うために、私たちは以前と全く同じ回路論理を使っているのです。 つまり、与えられた入力をメモリの特定の「場所」に格納したり、メモリに格納されている情報にアクセスしたりするために、まったく同じロジックを使用します。

ここでは、コンピュータの仕組みの表面をほとんど触れていませんが、これを理解するためにかなりの時間がかかり、すでに数回以上、私の心を吹き飛ばしています。 私を魅了するのは、コンピュータがいかに強力で、私たちの日常生活に組み込まれているかということです。だからこそ、少なくとも、コンピュータの仕組みについて直感を持つことが重要だと思うのです。

最後に、スティーブ ジョブズがコンピュータを自転車に例えている、私がとても好きなビデオを紹介します:

この記事のための調査中に見つけた素晴らしいリソースのリストです。 https://www.khanacademy.org/computing/computer-science/how-computers-work2/v/khan-academy-and-codeorg-introducing-how-computers-work

Crash Course シリーズのコンピュータ サイエンスは本当に素晴らしいです。 https://www.youtube.com/watch?v=O5nskjZ_GoI

論理と真理値表への入門。 https://medium.com/i-math/intro-to-truth-tables-boolean-algebra-73b331dd9b94

NAND Logicで、電気回路がどのように論理演算を行うことができるかを理解することができます。 https://en.wikipedia.org/wiki/NAND_logic

Wikipedia の ASCII ページ: https://en.wikipedia.org/wiki/ASCII

Wikipedia の Binary Code ページ、バイナリ演算の短い歴史が書かれています。 https://en.wikipedia.org/wiki/Binary_code

さらに深く掘り下げたい場合は、ここから始めるとよいでしょう。 https://softwareengineering.stackexchange.com/questions/81624/how-do-computers-work/81715

ここまでお読みいただきありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。