
このページを読むために使用しているコンピューターは、マイクロプロセッサーを使用して作業を行います。マイクロプロセッサは、デスクトップマシン、サーバー、ラップトップなど、通常のコンピュータの心臓部です。使用しているマイクロプロセッサは、Pentium、K6、PowerPC、Sparc、または他の多くのブランドやタイプのマイクロプロセッサのいずれかですが、それらはすべてほぼ同じ方法でほぼ同じことを行います。
マイクロプロセッサ(CPUまたは中央処理装置とも呼ばれます)は、単一のチップ上に製造された完全な計算エンジンです。最初のマイクロプロセッサは、1971年に導入されたIntel 4004でした。4004はそれほど強力ではありませんでした。加算と減算しかできず、一度に4ビットしか実行できませんでした。しかし、すべてが1つのチップ上にあるのは驚くべきことでした。 4004より前は、エンジニアはチップのコレクションまたはディスクリートコンポーネント(トランジスタを一度に1つずつ配線)からコンピューターを構築していました。 4004は、最初のポータブル電子計算機の1つに電力を供給しました。
コンピュータのマイクロプロセッサが何をしているのか疑問に思ったことがある場合、またはマイクロプロセッサの種類の違いについて疑問に思ったことがある場合は、読み進めてください。この記事では、ゲームをプレイする場合でも、ドキュメントのスペルチェックを行う場合でも、非常に単純なデジタルロジック技術によってコンピューターがどのように仕事を行えるかを学びます。
- マイクロプロセッサの進歩:Intel
- マイクロプロセッサロジック
- マイクロプロセッサメモリ
- マイクロプロセッサの説明
- マイクロプロセッサのパフォーマンスとトレンド
- 64ビットマイクロプロセッサ
マイクロプロセッサの進歩:Intel

家庭用コンピュータに組み込まれた最初のマイクロプロセッサは、1974年に導入された1チップ上の完全な8ビットコンピュータであるIntel 8080でした。市場に本格的に登場した最初のマイクロプロセッサは、1979年に導入されて組み込まれたIntel8088でした。 IBM PC(1982年頃に最初に登場)に。 PC市場とその歴史に精通している場合は、PC市場が8088から80286、80386、80486、Pentium、Pentium II、Pentium III、Pentium4に移行したことをご存知でしょう。マイクロプロセッサはIntelによって製造されており、それらはすべて8088の基本設計を改良したものです。Pentium4は、元の8088で実行されたコードを実行できますが、約5,000倍高速です。
2004年以来、Intelは複数のコアと数百万以上のトランジスタを備えたマイクロプロセッサを発表してきました。しかし、これらのマイクロプロセッサでさえ、以前のチップと同じ一般的な規則に従います。

このページの表に関する追加情報:
- 日付は、プロセッサが最初に導入された年です。多くのプロセッサは、最初のリリース日から何年もの間、より高いクロック速度で再導入されています。
- トランジスタは、チップ上のトランジスタの数です。シングルチップ上のトランジスタの数は、ここ数年で着実に増加していることがわかります。
- ミクロンチップ上の最小ワイヤ、ミクロンで、幅です。比較のために、人間の髪の毛は100ミクロンの太さです。チップ上のフィーチャサイズが小さくなると、トランジスタの数が増えます。
- クロック速度は、チップをクロックできる最大速度です。クロック速度は、次のセクションでより意味があります。
- データ幅はALUの幅です。8ビットALUは、加算/減算/乗算などを行うことができます。2つの8ビット番号。32ビットALUは32ビット番号を操作できます。8ビットALUは2つの32ビット数を加算するために4つの命令を実行する必要がありますが、32ビットALUは1つの命令でそれを実行できます。多くの場合、外部データバスはALUと同じ幅ですが、常にそうであるとは限りません。8088には16ビットのALUと8ビットのバスがありましたが、最新のPentiumは32ビットのALU用に一度に64ビットのデータをフェッチします。
- MIPSは「1秒あたり数百万の命令」の略で、CPUのパフォーマンスの大まかな尺度です。最近のCPUは非常に多くの異なることを実行できるため、MIPSレーティングは多くの意味を失いますが、このコラムからCPUの相対的な能力の一般的な感覚を得ることができます。
この表から、一般に、クロック速度とMIPSの間に関係があることがわかります。最大クロック速度は、製造プロセスとチップ内の遅延の関数です。トランジスタの数とMIPSの間にも関係があります。たとえば、8088は5 MHzでクロックされますが、0.33 MIPSでのみ実行されます(15クロックサイクルごとに約1命令)。最近のプロセッサは、多くの場合、クロックサイクルごとに2命令の速度で実行できます。この改善は、チップ上のトランジスタの数に直接関係しており、次のセクションでさらに意味があります。
チップとは何ですか?
チップとも呼ばれている集積回路。一般に、マイクロプロセッサを構成するトランジスタがエッチングされた、小さくて薄いシリコン片です。チップは一辺が1インチほどの大きさで、数千万個のトランジスタを含むことができます。より単純なプロセッサは、わずか数ミリメートル四方のチップにエッチングされた数千個のトランジスタで構成されている場合があります。
マイクロプロセッサロジック

マイクロプロセッサがどのように機能するかを理解するには、内部を調べて、マイクロプロセッサを作成するために使用されるロジックについて学ぶことが役立ちます。その過程で、アセンブリ言語(マイクロプロセッサの母国語)や、プロセッサの速度を上げるためにエンジニアができることの多くについて学ぶこともできます。
マイクロプロセッサは、プロセッサに何をすべきかを指示する一連のマシン命令を実行します。指示に基づいて、マイクロプロセッサは3つの基本的なことを行います。
- マイクロプロセッサは、そのALU(算術/論理ユニット)を使用して、加算、減算、乗算、除算などの数学演算を実行できます。最新のマイクロプロセッサには、大きな浮動小数点数に対して非常に高度な操作を実行できる完全な浮動小数点プロセッサが含まれています。
- マイクロプロセッサは、あるメモリ位置から別のメモリ位置にデータを移動できます。
- マイクロプロセッサは、決定を下し、それらの決定に基づいて新しい命令セットにジャンプできます。
マイクロプロセッサが行う非常に洗練されたことがあるかもしれませんが、それらはその3つの基本的な活動です。次の図は、これら3つのことを実行できる非常に単純なマイクロプロセッサを示しています。

これは、マイクロプロセッサと同じくらい簡単です。このマイクロプロセッサには次のものがあります。
- アドレスをメモリに送信するアドレスバス(8、16、または32ビット幅の場合があります)
- データバスメモリにデータを送信したり、メモリからデータを受信することができる(ワイド8、16または32ビットであってもよいです)
- アドレス指定された場所を設定するか取得するかをメモリに通知するためのRD(読み取り)およびWR(書き込み)行
- クロックラインプロセッサシーケンスのクロックをすることができます
- リセットラインゼロ(または任意の)プログラム・カウンタをリセットし、再起動の実行
この例では、アドレスバスとデータバスの両方が8ビット幅であると仮定します。
この単純なマイクロプロセッサのコンポーネントは次のとおりです。
- レジスタA、B、およびCは、フリップフロップで作られた単なるラッチです。(詳細については、ブール論理のしくみの「エッジトリガーラッチ」のセクションを参照してください。)
- アドレスラッチは、レジスタA、B、Cと同じです。
- プログラムカウンターは、指示されたときに1ずつインクリメントし、指示されたときにゼロにリセットする追加機能を備えたラッチです。
- ALUは、8ビット加算器のように単純な場合もあれば(詳細については、ブール論理のしくみの加算器に関するセクションを参照)、8ビット値を加算、減算、乗算、および除算できる場合もあります。ここでは後者を想定しましょう。
- テストレジスタは、ALUで実行された比較からの値を保持できる特別なラッチです。ALUは通常、2つの数値を比較して、それらが等しいかどうか、一方が他方よりも大きいかどうかなどを判断できます。テストレジスタは、通常、加算器の最終ステージからのキャリービットを保持できます。これらの値をフリップフロップに格納し、命令デコーダーはその値を使用して決定を下すことができます。
- 図には「3-State」とマークされた6つのボックスがあります。これらはトライステートバッファです。トライステートバッファは、1、0を渡すことも、基本的に出力を切断することもできます(出力が向かうワイヤから出力ラインを完全に切断するスイッチを想像してください)。トライステートバッファを使用すると、複数の出力をワイヤに接続できますが、実際に1または0をラインに駆動できるのはそのうちの1つだけです。
- 命令レジスタと命令デコーダは、他のすべてのコンポーネントを制御する役割を果たします。
この図には示されていませんが、命令デコーダーから次のような制御ラインがあります。
- 現在データバス上にある値をラッチするようにAレジスタに指示します
- 現在データバス上にある値をラッチするようにBレジスタに指示します
- ALUによって現在出力されている値をラッチするようにCレジスタに指示します
- 現在データバス上にある値をラッチするようにプログラムカウンタレジスタに指示します
- 現在データバス上にある値をラッチするようにアドレスレジスタに指示します
- 現在データバス上にある値をラッチするように命令レジスタに指示します
- プログラムカウンターにインクリメントするように指示します
- プログラムカウンターにゼロにリセットするように指示します
- 6つのトライステートバッファ(6つの別々の行)のいずれかをアクティブにします
- 実行する操作をALUに指示します
- ALUのテストビットをラッチするようにテストレジスタに指示します
- RDラインをアクティブにします
- WRラインをアクティブにします
命令デコーダに入るのは、テストレジスタとクロックラインからのビット、および命令レジスタからのビットです。
マイクロプロセッサメモリ

前のセクションでは、アドレスバスとデータバス、およびRDラインとWRラインについて説明しました。これらのバスとラインは、RAMまたはROMのいずれかに接続します。通常は両方に接続します。サンプルのマイクロプロセッサには、8ビット幅のアドレスバスと8ビット幅のデータバスがあります。これは、マイクロプロセッサが256バイトのメモリをアドレス指定(2 8)でき、一度に8ビットのメモリを読み書きできることを意味します。この単純なマイクロプロセッサには、アドレス0から始まる128バイトのROMと、アドレス128から始まる128バイトのRAMがあると仮定します。
ROMは読み取り専用メモリの略です。ROMチップは、事前設定されたバイトの永続的なコレクションでプログラムされます。アドレスバスは、ROMチップにどのバイトを取得してデータバスに配置するかを指示します。RDラインの状態が変化すると、ROMチップは選択されたバイトをデータバスに提示します。
RAMはランダムアクセスメモリの略です。RAMにはバイトの情報が含まれており、マイクロプロセッサはRDラインとWRラインのどちらに信号が送られているかに応じて、それらのバイトの読み取りまたは書き込みを行うことができます。今日のRAMチップの問題の1つは、電源がオフになるとすべてを忘れてしまうことです。そのため、コンピューターにはROMが必要です。

ちなみに、ほぼすべてのコンピューターにはある程度のROMが含まれています(RAMを含まない単純なコンピューターを作成することは可能です-多くのマイクロコントローラーはプロセッサチップ自体に少数のRAMバイトを配置することでこれを行います-しかし一般的に作成することは不可能ですROMを含まないもの)。上のPC、ROMが呼び出されるBIOS(基本入力/出力システム)。マイクロプロセッサが起動すると、BIOSで検出した命令の実行を開始します。 BIOS命令は、マシンのハードウェアをテストするようなことを行い、次にハードディスクに移動してブートセクタをフェッチします(ハードディスクのしくみを参照)。詳細については)。このブートセクタは別の小さなプログラムであり、BIOSはディスクから読み取った後にRAMに保存します。次に、マイクロプロセッサはRAMからブートセクタの命令の実行を開始します。ブートセクタプログラムは、ハードディスクからRAMに何か他のものをフェッチするようにマイクロプロセッサに指示し、RAMはマイクロプロセッサが実行します。これは、マイクロプロセッサがオペレーティングシステム全体をロードして実行する方法です。
マイクロプロセッサの説明
前の例で示した非常に単純なマイクロプロセッサでさえ、実行できる命令のセットがかなり多くなります。命令のコレクションはビットパターンとして実装され、命令レジスタにロードされるとそれぞれが異なる意味を持ちます。人間はビットパターンを覚えるのが特に得意ではないので、さまざまなビットパターンを表すために短い単語のセットが定義されています。この単語の集まりは、プロセッサのアセンブリ言語と呼ばれます。アセンブラは、非常に容易にそれらのビットパターンに単語を翻訳することができ、その後、アセンブラの出力を実行するマイクロプロセッサのためにメモリ内に配置されます。
この例では、設計者が単純なマイクロプロセッサ用に作成する可能性のあるアセンブリ言語命令のセットを次に示します。
- LOADAmem-メモリアドレスからレジスタAをロードします
- LOADBmem-メモリアドレスからレジスタBをロードします
- CONBcon-定数値をレジスタBにロードします
- SAVEBmem-レジスタBをメモリアドレスに保存します
- SAVECmem-レジスタCをメモリアドレスに保存します
- ADD - AとBを追加し、Cに結果を格納
- SUB -AとBを減算し、結果をCに格納します
- MUL -AとBを乗算し、結果をCに格納します
- DIV -AとBを除算し、結果をCに格納します
- COM -AとBを比較し、結果をテストに保存します
- JUMPaddr-アドレスにジャンプします
- JEQ addr-等しい場合、アドレスにジャンプします
- JNEQ addr-等しくない場合は、アドレスにジャンプします
- JGaddr-より大きい場合はアドレスにジャンプします
- JGE addr-以上の場合、アドレスにジャンプします
- JL addr-より小さい場合は、アドレスにジャンプします
- JLE addr-以下の場合、アドレスにジャンプします
- STOP-実行を停止します
Cプログラミングのしくみを読んだ場合、この単純なCコードが5の階乗を計算することを知っています(5の階乗= 5!= 5 * 4 * 3 * 2 * 1 = 120):
プログラムの実行の最後に、変数fには5の階乗が含まれます。
アセンブリ言語
Cコンパイラは、アセンブリ言語には、このCコードを変換します。RAMがこのプロセッサのアドレス128で始まり、ROM(アセンブリ言語プログラムを含む)がアドレス0で始まると仮定すると、単純なマイクロプロセッサの場合、アセンブリ言語は次のようになります。
ROM
だから今問題は、「これらの命令のすべてがROMでどのように見えるか」です。これらの各アセンブリ言語命令は、2進数で表す必要があります。簡単にするために、各アセンブリ言語命令に次のような一意の番号が付けられていると仮定します。
- LOADA-1
- LOADB-2
- CONB-3
- SAVEB-4
- SAVEC mem-5
- 追加-6
- SUB-7
- MUL-8
- DIV-9
- COM-10
- ジャンプアドレス-11
- JEQアドレス-12
- JNEQアドレス-13
- JGアドレス-14
- JGEアドレス-15
- JLアドレス-16
- JLEアドレス-17
- 停止-18
番号はオペコードとして知られています。ROMでは、小さなプログラムは次のようになります。
7行のCコードが18行のアセンブリ言語になり、ROMでは32バイトになったことがわかります。
デコード
命令デコーダは、各オペコードをマイクロプロセッサ内のさまざまなコンポーネントを駆動する信号のセットに変換する必要があります。例としてADD命令を取り上げ、それが何をする必要があるかを見てみましょう。
- 最初のクロックサイクル中に、実際に命令をロードする必要があります。したがって、命令デコーダは次のことを行う必要があります。プログラムカウンタのトライステートバッファをアクティブにするRDラインをアクティブにするデータ入力トライステートバッファをアクティブにして、命令を命令レジスタにラッチする
- 2番目のクロックサイクル中に、ADD命令がデコードされます。必要な作業はごくわずかです。ALUの出力をCレジスタに追加ラッチするようにALUの動作を設定します。
- 3番目のクロックサイクル中に、プログラムカウンターがインクリメントされます(理論的には、これは2番目のクロックサイクルにオーバーラップする可能性があります)。
すべての命令は、マイクロプロセッサのコンポーネントを適切な順序で操作する、これらのような一連のシーケンス操作として分解できます。このADD命令のような一部の命令は、2または3クロックサイクルかかる場合があります。他の人は5または6クロックサイクルかかるかもしれません。
マイクロプロセッサのパフォーマンスとトレンド
使用可能なトランジスタの数は、プロセッサのパフォーマンスに大きな影響を与えます。前に見たように、8088のようなプロセッサの典型的な命令は実行するのに15クロックサイクルかかりました。乗算器の設計により、8088で1つの16ビット乗算を実行するだけで約80サイクルかかりました。トランジスタが増えると、単一サイクルの速度が可能なはるかに強力な乗算器が可能になります。
より多くのトランジスタは、パイプラインと呼ばれる技術も可能にします。パイプラインアーキテクチャでは、命令の実行が重複します。したがって、各命令の実行には5クロックサイクルかかる場合がありますが、実行のさまざまな段階で同時に5つの命令が存在する可能性があります。そうすれば、1つの命令がクロックサイクルごとに完了するように見えます。
最近の多くのプロセッサには複数の命令デコーダがあり、それぞれに独自のパイプラインがあります。これにより、複数の命令ストリームが可能になります。つまり、各クロックサイクル中に複数の命令を完了することができます。この手法は実装が非常に複雑になる可能性があるため、多くのトランジスタが必要になります。
トレンド
プロセッサ設計の傾向は、主に、高速浮動小数点プロセッサが組み込まれた完全な32ビットALUと、複数の命令ストリームを使用したパイプライン実行に向かっています。プロセッサ設計の最新のものは64ビットALUであり、人々は今後10年間でこれらのプロセッサを自宅のPCに搭載することが期待されています。また、特定の操作を特に効率的にする特別な命令(MMX命令など)の傾向があり、プロセッサチップにハードウェア仮想メモリのサポートとL1キャッシュが追加されています。これらすべての傾向がトランジスタ数を押し上げ、今日利用可能な数百万のトランジスタパワーハウスにつながっています。これらのプロセッサは、1秒あたり約10億の命令を実行できます。
64ビットマイクロプロセッサ

1992年以来64ビットプロセッサが使用されており、21世紀にはそれらが主流になり始めました。 IntelとAMDの両方が64ビットチップを導入し、MacG5は64ビットプロセッサを搭載しています。 64ビットプロセッサには、64ビットALU、64ビットレジスタ、64ビットバスなどがあります。
世界が64ビットプロセッサを必要とする理由の1つは、アドレス空間が拡大しているためです。多くの場合、32ビットチップは最大2GBまたは4GBのRAMアクセスに制限されます。現在、ほとんどの家庭用コンピュータが256MBから512MBのRAMしか使用していないことを考えると、これは大変なことのように思えます。ただし、4 GBの制限は、サーバーマシンや大規模なデータベースを実行しているマシンにとって深刻な問題になる可能性があります。また、現在の傾向が続くと、家庭用マシンでさえ、すぐに2GBまたは4GBの制限にぶつかり始めます。 64ビットRAMアドレス空間は当面の間本質的に無限であるため、64ビットチップにはこれらの制約はありません。2^ 64バイトのRAMは10億ギガバイトのRAMのオーダーです。
マザーボード上に64ビットアドレスバスとワイド高速データバスを備えた64ビットマシンは、ハードディスクドライブやビデオカードなどに対してより高速なI / O(入力/出力)速度も提供します。これらの機能により、システムパフォーマンスが大幅に向上します。
サーバーは間違いなく64ビットの恩恵を受けることができますが、通常のユーザーはどうでしょうか。RAMソリューションを超えて、64ビットチップが「通常のユーザー」に現時点で実際の具体的なメリットを提供するかどうかは明らかではありません。データ(非常に複雑なデータには多くの実数が含まれます)をより高速に処理できます。やって人々ビデオ編集や非常に大きな画像に写真の編集をしている人は、コンピューティングパワーのこの種の恩恵を受ける。ハイエンドゲームも、64ビット機能を利用するように再コーディングされるとメリットがあります。しかし、電子メールを読んだり、Webを閲覧したり、Word文書を編集したりしている平均的なユーザーは、実際にはそのようにプロセッサを使用していません。
マイクロプロセッサと関連トピックの詳細については、次のページのリンクを確認してください。