ソフトウェアの勉強をし始めた頃、初めに習ったことがコンピュータで扱うデータについてでした。
その時は、コンピュータがBitやByteを扱うことを習いましたが、漠然とした内容で理解が出来なかったことを覚えています。
私たちが扱っているコンピュータは、物理的に存在している物なのです。
それなのに、習うことと言ったら概念ばかりなので、深く物を考える人にとっては物足りない理解になってしまいます。
今回は、Bitについてソフトウェアの観点からハードウェアまで見ていきたいと思います。
Bitの概念
プログラムやITを学び始めた人が初めの方に学ぶのが、コンピュータが扱うデータ量を表わす単位であるbitでしょう。bitとは、コンピュータが扱うデータの最小単位です。
bitは”0”と”1”のみ表現でき、2進数を用いることで私たちが普段使用する10進数に置き換えています。2進数は、桁が上がる度に2の倍数で増えていきます。
例えば、”00011010”という8bitのデータがあった場合、bitが立っている(1になっている)箇所が、右から2桁目、4桁目、5桁目になり、それぞれ10進数で2、8、16を表わします。これらの値を足すと「2+8+16=26」となり、”00011010”は10進数で”26”となります。
また、この例で使用した8bitは、1Byteという単位で表わされます。
そして、1024Byteが1KB(KiloByte)、1024KBが1MB(MegaByte)というように1024毎に単位が上がります。ここまで話した通り、コンピュータは10進数の数値を直接理解することができないが、bitと2進数を用いることで10進数を理解できます。
しかし、なぜコンピュータは10進数の数値を理解出来ないのでしょうか?なぜ0と1しか扱えないのでしょうか?
なぜコンピュータは”1″と”0″しか認識できないのか?
それには、まず、コンピュータがどのように0と1を理解しているのかを知りましょう。
コンピュータとは、CPUやメモリを搭載し、計算や文書処理などの機能を持つ装置を指します。
主にCPUが計算を行い、メモリは記憶領域として使われます。
ここでは、CPUにフォーカスを当て、コンピュータがどのように0と1を理解しているのかを紐解きましょう。
CPUが物理的に0と1を表現するために、トランジスタを利用しています。
トランジスタは、一種のスイッチのようなもので、電流の流れを制御しています。
このトランジスタの電流制御により、電流が流れている状態を1、止まっている状態を0とすることで0と1を表現しています。
トランジスタは、今では一つのサイズが7nmになっており、CPUやメモリの中には、このトランジスタが無数に配列されています。
そして、CPUやメモリは、このトランジスタの面積比での個数により性能が決まります。
そのため、トランジスタのサイズが小さくなるほど、面積比でのトランジスタの個数が増えるため、CPUやメモリの性能が上がります。
では、CPUで使用されているトランジスタの特性を見てみましょう。
トランジスタの原理
CPUに使用されているトランジスタは、主にMOSFET(Metal Oxide Semiconductor Field Effect Transistor : 電界効果トランジスタ)という種類のトランジスタです。
MOSFETは、半導体の基板上に絶縁体であるシリコン酸化膜を堆積し、さらにその酸化膜の上にアルミなどの電極が堆積されています。
基板には、電流の通り道となるチャネルが二カ所に形成されています。
酸化膜上にある電極をゲート(Gate)、二カ所のチャネルをそれぞれドレイン(Drain)、ソース(Source)と言います。
MOSFETには、Nチャネル型とPチャネル型の二種類があります。Nチャネル型の場合、基板がP型半導体であり、チャネルがN型になります。
Pチャネル型の場合、基板がN型半導体であり、チャネルがP型になります。
それぞれ動作が異なり、Nチャネル型は、ゲートに電圧を掛けることでチャネルを結び、電流の通り道を作り、Pチャネル型は、ゲートの電圧を低くすることで電流の通り道を作ります。
ここでNチャネル型MOSFETの挙動を見ていきましょう。ソース側を0Vとし、ドレイン側に電圧を掛けます。
MOSFETには、閾値電圧Vthが定められており、ゲートの電圧がVth未満の場合、ゲートが閉じ、ドレイン-ソース間には電流が流れませんが、ゲートの電圧がVthより大きいとゲートが開き、ドレイン-ソース間に電流が流れます。
トランジスタの回路例
これを使って回路を組んでみます。
ゲートには、マイコンなどを接続し、電圧を制御できるようにします。
ドレイン側に電圧源を接地し、その中間に出力先を接続します。
ゲートに電圧を掛ける前は、ゲートが閉じているため、ドレイン-ソース間に電流は流れず、電流は出力先に流れます。この出力先に電流が流れている状態が”1”を表わしています。
次にゲートに電圧を掛けると、ゲートが開き、出力側に流れていた電流がドレイン-ソース間に流れます。
この出力先に電流が流れていない状態が”0”を表わしています。
このように、ゲート電圧を制御することでMOSFETのON/OFF、出力の0/1を制御できます。
そして、このような回路がCPUやメモリ内に敷き詰められることで機能を実現しています。
深く理解することが大切
普段、私たちが使っているコンピュータ、プログラマが用いているデータは、物理的な観点で見ることで深く理解できます。
低レベル層でのプログラミングに慣れている人でも、電気・電子の領域まで足を踏み込める人は少ないと思います。
プログラミングをする上でここまで知る必要はないかもしれませんが、開発者として自分たちが普段使っている物が何であるのかは知っておくことが大切だと感じています。
更にここから深く掘り下げていくと、量子力学の領域に踏み込むことに成ります。
もっと知りたい!と言う人は、下記の本がお勧めです。
CPUをディジタル回路から理解する本です。
第一章では、今回お話ししたトランジスタの話や、論理回路の基本的な組み方が書いてあるため、浅い知識の人でも読み進めていけます。
フリーのハードウェアプログラミングソフトを使用して、CPUのディジタル回路を組みながらCPUを学べるため、ハードウェアプログラミングとCPUの理解の両方の知識を修得出来る一冊です。
所謂ペネパタ本という多くのコンピュータサイエンス専攻の大学生が読む本です。
まずコンピュータの概念を知ろうと思ったら、この本を手に取るのが良いです。
上下巻あるので、かなりのボリュームになりますが、一読することをお勧めします。
実際にCPUを作ってみる本です。
秋葉原辺りで手に入る部材を使ってCPUを物理的に組んでいきます。
私たちが使っているCPUは、ナノスケールのトランジスタを使っているため、あの小さなチップになりますが、私たちが創作できるレベルのサイズは、かなり大きなサイズになることが実感できます。
コンピュータ系の学生が電子工作をするのは、少しハードルが高いと思いますが、実際に手を動かしながらだと良く理解出来るので、ぜひ挑戦してみてください。