\r\n\r\n

htgが解説:CPUは実際どのように動いているのでしょうか?

コンピュータの中のほとんどのものは、比較的簡単に理解することができます。ラム、メモリー、周辺機器、ソフトウェアが一緒になって、コンピュータを動かしているのです。しかし、システムの心臓部であるCPUは、多くの技術者にとっても魔法のようなものです。ここでは、その内訳をできるだけ詳しく...。

コンピュータの中のほとんどのものは、RAM、メモリ、周辺機器、ソフトウェアが連携して動作しており、比較的簡単に理解することができます。しかし、システムの心臓部であるCPUは、多くの技術者にとっても魔法のようなものです。ここでは、それを全力で分解していきます。

この記事の研究の多くは、「But How Does It Know?" by J. Clark Scott.この記事よりもずっと深い内容で、アマゾンで数ドル買う価値のある素晴らしい本です。

始める前に注意していただきたいのは、現代のCPUは、ここで紹介した内容よりも数段複雑だということです。10億個以上のトランジスタを搭載したチップのすべてのニュアンスを一人で理解することは、ほとんど不可能です。しかし、すべてのシステムがどのように組み合わされているかという基本原理は変わらないので、基本を理解することで現代のシステムをよりよく理解することができるようになるのです。

小さく始める

コンピュータは2進数で動作します。オンとオフの2つの状態しか知らない。2進数の計算をするために、いわゆるトランジスタを使っている。ゲートに電流が流れていれば、トランジスタはソース電流だけをドレインに流すことができる。つまり、2回目の入力信号に応じてワイヤーを切断するバイナリスイッチが形成される。

関連:バイナリーとは何か、なぜコンピューターはバイナリーを使うのか?

現代のコンピュータは、数十億個のトランジスタを使って計算を行いますが、最も低いレベルでは、ゲートと呼ばれる最も基本的な部品を形成するために少数のトランジスタがあればよいのです。

ロジックゲート

トランジスタを適当に積み重ねれば、いわゆるロジックゲートの出来上がり。論理ゲートは、2つの2進数の入力を受け、それに対して演算を行い、出力を返す。例えば、どちらかの入力が真であれば、orゲートは真を返す。withゲートは両方の入力が真であるかどうかをチェックし、with orは片方の入力だけが真であるかどうかをチェックします。N変数(NOR、NAND、XNOR)はそのベースゲートを反転させたものです。

ゲイツと数学する

たった2つのゲートで、基本的な2進法の足し算を行うことができるのだ。上の図は、論理ゲートの無料オンラインプレイグラウンドである「logicaly」を使って作成した半加算器です。片方の入力だけがオンで、両方がオンでない場合、ここのiso-orゲートがオンとなります。両方の入力がONの場合は、withゲートが開きますが、入力がない場合は、withゲートが閉じます。したがって、両方が開いている場合、XORは閉じたまま、ANDゲートが開くので、正解は2になります。

しかし、ビットは1より大きいものを記憶することができないので、この機械は最も単純な数学の問題を解くだけであり、あまり有用ではない。しかし、これは半加算器でしかなく、そのうちの2つを別の入力に接続すると、全加算器となります。

完全加算器は、3つの入力、加算する2桁の数字、そして「丸め」を持っています。最後の数値が1ビットに格納できる数値を超えた場合に丸めを行う。フルアダーはチェーン状に連結され、ビットは1つのアダーから次のアダーに渡される。入力されたビットは最初の半加算器のXORゲートの結果に加算され、さらにORゲートが追加され、ソレを開放する必要がある場合の両方に対応します。

両方の入力がオープンになると、フィードがオープンされ、チェーンの次の完全加算器に送られます。

これは足し算と同じくらい複雑です。ビット数が増えるということは、本質的に、より長いチェーンでより多くの完全加算器を意味します。

掛け算は足し算の繰り返し、引き算は奇数ビットの反転、割り算は引き算の繰り返しで、他のほとんどの数学的演算は足し算で行うことができる。最近のコンピュータは、より複雑な演算を高速化するためにハードウェアベースのソリューションを持っていますが、技術的には完全な加算器ですべてを行うことができます。

バス、そして思い出

今、私たちが使っているコンピュータは、悪い電卓に過ぎないのです。これは、何も記憶できず、出力に対して何もしないためです。上に示したのは、これらをすべて実現する収納庫です。ボンネットの下には、ゲートありとゲートなしがたくさん使われていて、現実にはストレージの技術によって大きく異なるかもしれませんが、その機能は同じです。ある入力を与え、「書き込み」ビットをオンにすると、その入力をセルに保存するのです。単なる記憶装置ではなく、そこから情報を読み出す手段も必要ですから。これは、イネーブルコードによって行われます。イネーブルコードは、メモリの各ビットに対応するゲートの集まりで、すべて別の入力「読み取り」ビットと関連付けられています。書き込みビットと読み出しビットは、一般に「セット」「イネーブル」とも呼ばれます。

いわゆるレジスターにパッケージされています。これらのレジスタは、システム全体を取り囲んで各コンポーネントと接続する配線の束であるバスに接続されている。最近のコンピュータでもバスは1本だが、マルチタスク性能を向上させるために複数のバスを搭載している場合もある。

各レジスタには書き込みビットと読み出しビットが残っていますが、この設定では入力と出力は同じです。これ、実は結構いいんですよ。例R1の内容をR2にコピーしたい場合は、R1のリードビットをオンにして、R1の内容をバス上にプッシュする。リードビットがONの時、R2のライトビットをONにすると、バスの内容がR2にコピーされることになります。

レジスタはRAMの生成にも使われる。ゲートは通常、格子状に配置され、配線は2つの方向を持っている。

デコーダは2進数の入力を受けて、対応する番号のワイヤを開く。例えば、"11 "は2進数で3、最高2桁なので、デコーダは最高値の線を開くことになります。各交差点には、レジスタがあります。これらはすべて、中央のバスと中央の読み書き入力に接続されています。読み出しと書き込みの入力は、レジスタを通る両方の配線が同時にオンになったときだけオンになり、書き込みと読み出しを行うレジスタを効果的に選択することができます。繰り返しになりますが、現代のRAMはもっと複雑になっていますが、この設定は今でも有効です。

クロック、ステッパー、デコーダー

レジスタはどこにでもあり、CPUの中でデータを動かしたり情報を保存したりするのに欠かせないものです。では、なぜレジスタが物を動かすのでしょうか?

クロックは、CPUコアの最初の部品で、設定した間隔(ヘルツまたは1秒あたりのサイクル数)でオフとオンを繰り返す。これはCPUの横に表示される速度で、5GHzのチップは1秒間に50億回のサイクルを行うことができます。クロックスピードは通常、CPUの速度を示す指標となります。

クロックには、ベースクロック、イネーブルドクロック、セットクロックの3種類の状態があります。ベースクロックは半周期オンになり、残りの半周期はオフになります。イネーブルクロックはレジスタをオープンするために使用され、データを確実にイネーブルにするために長くオンにしておく必要があります。セットクロックは常にイネーブルクロックと同時にONにする必要があり,そうしないと不正なデータが書き込まれる可能性があります。

クロックは、1から最大ステップまでカウントし、終了すると1にリセットするステッパーに接続されています。また、クロックは、CPUが書き込むことのできる各レジスタのWith Gateにも接続されています。

これらのゲートは、もう一つの部品であるインストラクションデコーダーの出力にも接続されている。命令デコーダは、「R2をR1にセットせよ」という命令を受け取り、CPUが理解できるようにデコードする。また、「インストラクション・レジスタ」と呼ばれる独自の内部レジスタを持ち、現在の演算の場所を記憶している。正確には、どのように行うかは実行中のシステムによりますが、いったんデコードされると、正しい設定をオンにして、正しいレジスタのビットを有効にし、クロックに従ってトリガーされます。

プログラム命令はRAM(最近のシステムではCPUに近いレベル1キャッシュ)に格納される。プログラムデータは他の変数と同じようにレジスタに格納されるため、実行時に**indulgeしてプログラム内を飛び回ることができる。このように、ループやif文によって、プログラムは構造を得ているのです。ジャンプ命令は、命令デコーダがメモリから読み出した現在の位置を別の場所に設定します。

どのように組み合わされるのか

これで、CPUの仕組みの過度な説明は終わりです。メインバスはシステム全体にまたがり、すべてのレジスタに接続されている。この加算器と他の演算は、算術論理演算装置(ALU)にまとめられている。このALUはバスに接続され、演算する2番目の数値を格納するためのレジスタも独自に持つことになる。

計算を行うために、プログラムデータをシステムRAMから制御部にロードする。制御部は、RAMから2つの数値を読み出し、1つ目をALUの命令レジスタにロードし、2つ目をバスにロードする。同時に、ALUに命令コードを送り、何をすべきかを指示する。そして、ALUがすべての計算を行い、その結果を別のレジスタに格納し、そこからCPUが読み出して処理を継続することができる。

写真提供:Rusty9/Shutterstock

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ