HTGは説明します:CPUは実際にどのように動作しますか?
- Anthony Heddings
@anthonyheddings
- 更新されたFebruary28,2020,4:58pm EDT
コンピュータ内のほとんどのものは、理解するのが比較的簡単です:ram、ストレージ、周辺機器、およびソフトウェアは、すべてコンピ しかし、あなたのシステムの中心であるCPUは、多くの技術者にとっても魔法のように思えます。 ここでは、我々はそれを打破するために最善を尽くします。この記事の研究のほとんどは、”しかし、それはどのように知っていますか?”J.Clark Scottによる。 それは素晴らしい読書であり、この記事よりもはるかに深さに入り、Amazonでカップルのドルの価値があります。始める前に1つ注意してください:現代のCpuは、ここで概説しているものよりも桁違いに複雑です。 一人の人が十億以上のトランジスタを持つチップのすべてのニュアンスを理解することはほぼ不可能です。 しかし、それがすべて一緒にどのように適合するかの基本原則は同じままであり、基本を理解することはあなたに現代のシステムのより良い理解
小さな起動
コンピュータはバイナリで動作します。 オンとオフ:彼らは二つの状態を理解しています。 バイナリで計算を実行するには、トランジスタと呼ばれるものを使用します。 トランジスタは、ゲートの両端に電流がある場合にのみ、ソース電流がドレインに流れることを可能にします。 本質的に、これは第二の入力信号に応じてワイヤを遮断するバイナリスイッチを形成する。
関連:バイナリとは何ですか、なぜコンピュータはそれを使用しますか?
現代のコンピュータは、計算を実行するために数十億のトランジスタを使用しますが、最低レベルでは、ゲートとして知られる最も基本的なP>
論理ゲート
いくつかのトランジスタを適切に積み重ねると、論理ゲートとして知られているものがあります。 論理ゲートは二つのバイナリ入力を取り、それらに対して演算を実行し、出力を返します。 たとえば、ORゲートは、いずれかの入力がtrueの場合にtrueを返します。 ANDゲートは、両方の入力が真であるかどうかをチェックし、XORは、入力の1つだけが真であるかどうかをチェックし、N-バリアント(NOR、NAND、およびXNOR)は、それらのベースゲートの反転されたバージョンです。P>
ゲートで数学を行う
ちょうど二つのゲートを使用すると、基本的なバイナリ加算を行うことができます。 上の図は、論理ゲートのための無料のオンライン遊び場であるLogiclyを使用して作成されたハーフ加算器を示しています。 ここでのXORゲートは、入力の1つだけがオンの場合はオンになりますが、両方はオンになりません。 両方の入力がオンの場合、ANDゲートはオンになりますが、入力がない場合はオフのままになります。 したがって、両方がオンの場合、XORはオフのままで、ANDゲートがオンになり、2つの正解になります。
これは、3つの異なる出力、ゼロ、1、2を持つ簡単なセットアップを提供します。 しかし、1ビットは1より高いものを格納することはできません、そしてそれは可能な最も単純な数学の問題の1つだけを解決するので、このマシンはあまり有用ではありません。 しかし、これは半分の加算器であり、それらのうちの2つを別の入力に接続すると、完全な加算器が得られます:p>
完全な加算器には3つの入力があります—追加する2つの数値と”キャリー。”キャリーは、最終的な数が単一のビットに格納できるものを超えたときに使用されます。 完全な加算器はチェーンでリンクされ、キャリーはある加算器から次の加算器に渡されます。 キャリーは前半加算器のXORゲートの結果に追加され、soがオンになる必要がある場合に両方のケースを処理するための余分なORゲートがあります。
両方の入力がオンの場合、キャリーがオンになり、チェーン内の次のフル加算器に送信されます:p>
そして、これは加算が取得するのと同じくらい複雑です。 より多くのビットに移動することは、本質的には、より長いチェーン内のより完全な加算器を意味します。乗算は加算を繰り返すだけで、減算はいくつかの派手なビット反転で行うことができ、除算は減算を繰り返すだけです。
他のほとんどの数学演算は加算で行うことができます。 すべての近代的なコンピュータは、より複雑な操作を高速化するためのハードウェアベースのソリューションを持っていますが、あなたは技術的に完全な加算器でそれをすべて行うことができます。
バス、およびメモリ
今、私たちのコンピュータは悪い電卓に過ぎません。 これは、何も覚えておらず、その出力で何もしないためです。 上に示すのは、そのすべてを行うことができるメモリセルです。 フードの下では、多くのNANDゲートを使用しており、実際の生活ではストレージ技術によってはかなり異なる場合がありますが、その機能は同じです。 あなたはそれにいくつかの入力を与え、’write’ビットをオンにすると、入力がセル内に格納されます。 これは単なるメモリセルではなく、そこから情報を読み取る方法も必要なので、これは単なるメモリセルではありません。 これは、メモリ内の各ビットのANDゲートの集合であり、すべて別の入力である「読み取り」ビットに接続されています。 書き込みビットと読み取りビットは、多くの場合、”セット”と”有効”と呼ばれています。
このパッケージ全体がレジスタとして知られているものに包まれています。 これらのレジスタは、すべてのコンポーネントに接続されたシステム全体を走るワイヤの束であるバスに接続されています。 現代のコンピュータでさえ、マルチタスク性能を向上させるために複数のバスがあるかもしれませんが、バスを持っています。
各レジスタにはまだ書き込みビットと読み取りビットがありますが、この設定では入力と出力は同じものです。 これは実際には良いです。 例えば。 R1の内容をR2にコピーする場合は、r1の読み取りビットをオンにし、r1の内容をバスにプッシュします。 読み取りビットがオンの間、r2の書き込みビットをオンにすると、バスの内容がR2にコピーされます。
レジスタはRAMを作るためにも使用されます。 RAMはグリッドに配置されることが多く、ワイヤは2つの方向に配置されます。
デコーダはバイナリ入力を取り、対応する番号のワイヤをオンにします。 たとえば、”11″は2進数で3であり、最も高い2ビットの数値であるため、デコーダは最も高いワイヤをオンにします。 各交差点には、レジスタがあります。 これらはすべて、中央バスに接続され、中央の書き込みおよび読み取り入力に接続されています。 読み出し入力と書き込み入力の両方がオンになるのは、レジスタを横切る二つのワイヤもオンになっている場合だけであり、書き込みと読み出しの元となるレジスタを効果的に選択することができます。 繰り返しますが、現代のRAMははるかに複雑ですが、この設定はまだ機能します。
クロック、ステッパー、デコーダ
レジスタはどこでも使用され、データを移動してCPUに情報を格納するための基本的なツールです。 だから、何が物事を移動するように指示しますか?
クロックはCPUのコアの最初のコンポーネントであり、ヘルツ単位、または秒あたりのサイクルで測定された設定された間隔でオフとオンになります。 これは、Cpuと一緒に宣伝されている速度です。5GHzチップは毎秒5億サイクルを実行できます。 クロック速度は、多くの場合、CPUがどのくらいの速さのための非常に良いメトリクスです。
クロックには、ベースクロック、イネーブルクロック、およびセットクロックの三つの異なる状態があります。 ベースクロックは半分のサイクルでオンになり、残りの半分はオフになります。 イネーブル-クロックはレジスタをオンにするために使用され、データが有効になっていることを確認するために長い間オンにする必要があります。 設定されたクロックは、常にイネーブル-クロックと同時にオンにする必要があります。クロックはステッパーに接続されており、これは1から最大ステップまでカウントされ、完了すると1にリセットされます。
クロックはステッパーに接続されています。 クロックは、CPUが書き込むことができる各レジスタのANDゲートにも接続されています。
これらのANDゲートは、別のコンポーネントである命令デコーダーの出力にも接続されています。 命令デコーダは、”SET R2TO R1″のような命令を受け取り、それをCPUが理解できるものにデコードします。 これは、現在の操作が格納されている場所である”命令レジスタ”と呼ばれる独自の内部レジスタを持っています。 これがどのように正確に行われるかは、実行しているシステムにかかっていますが、デコードされると、正しいセットをオンにし、正しいレジスタのビップログラム命令はRAM(または最新のシステムではL1キャッシュ、CPUに近い)に格納されます。
プログラム命令はRAMに格納されます。
プログラム命令はRAMに格納されます。 プログラムデータは他のすべての変数と同様にレジスタに格納されているため、その場で操作してプログラムを飛び回ることができます。 これは、プログラムがループとif文で構造を取得する方法です。 ジャンプ命令は、命令デコーダが読み取っているメモリ内の現在の位置を別の位置に設定します。
どのようにそれがすべて一緒に来る
さて、CPUの動作の全体的な単純化が完了しました。 メインバスはシステム全体にまたがり、すべてのレジスタに接続します。 完全な加算器は、他の演算の束と一緒に、算術論理ユニット、またはALUにパックされています。 このALUにはバスへの接続があり、動作している2番目の番号を格納するための独自のレジスタもあります。
計算を実行するには、プログラムデータがシステムRAMから制御セクションにロードされます。 制御部はRAMから二つの数値を読み取り、最初の数値をALUの命令レジスタにロードし、次に二つ目の数値をバスにロードします。 一方、ALUには何をすべきかを指示する命令コードが送信されます。 その後、ALUはすべての計算を実行し、その結果を別のレジスタに格納し、CPUがそのレジスタから読み取り、プロセスを続行できます。
Image Credit:Rost9/
Anthony Heddingsは、LifeSavvy Mediaの常駐クラウドエンジニアであり、テクニカルライター、プログラマー、AmazonのAWSプラットフォームの専門家です。 彼は何百万回も読まれているハウツーオタクとCloudSavvy ITのための何百もの記事を書いています。完全なバイオを読む”
Leave a Reply