マイクロプロセッサ:ストアドプログラムコンピューティングの進化
コンピューティングの初期、アラン・チューリングやジョン・フォン・ノイマンなどの先駆者たちは、真に有用なマシンは単にコマンドリストを実行するだけでなく、同じメモリプール内でデータを格納、取得、修正できなければならないことを認識しました。この洞察がストアドプログラムコンピュータの概念を導きました。
チューリングの理論的マシンは、プログラム命令とデータの両方を保持するシーケンシャルアクセステープに依存しました。制御回路がテープを読み、操作を実行し、結果をテープに書き戻すかテープを移動して新しいデータを読み取りました。現代システムでは、そのテープをランダムアクセスメモリ(RAM)に置き換え、同じ目的をはるかに高速かつ柔軟に達成しています。
初期の自動工作機械制御から有用な類推が得られます。オープンループまたは数値制御(NC)システムは、紙テープに穴としてエンコードされた指示に従って旋盤やフライス盤をガイドしました。マシンはワークピースの状態を認識せず、盲目的にテープに従って動作しました。
デバイスが環境に「盲目」であったため、金属膨張や工具摩耗などの変化を補正できませんでした。プログラマはテープが読み取り専用でマシンに内部状態を追跡するメモリがないため、ありうるすべての命令シーケンスを予見しなければなりませんでした。
有限状態マシン(FSM)へのアップグレードにより、ツールに初歩的なメモリが与えられました:一部データビットをアドレスロジックにフィードバックすることで、「クーラントオン」や「工具在位置」のようなシンプルな状態を記憶できるようになりました。それでも真の柔軟性には程遠い状態でした。
ブレークスルーはクローズドループ数値制御(CNC)で訪れました。プログラムが書き込み可能メモリ(RAM)に新しいデータを書き込めるようになったのです。制御システムは自分が何をしたかを記録し、センサ検出変化に適応できるようになりました——機械技師が後で参照するためにスクラッチパッドにメモを取るのとよく似ています。
コンピュータ科学者たちは長らく、人間の脳が経験を通じてシナプスを強化するように、自らのコードを修正できるマシンを夢見てきました。このような自己修正プログラムを実現するには、実行コードがデータを格納する同じ書き込み可能メモリに存在しなければなりません——これは今日でも研究の最前線にある概念です。
ほとんどのソフトウェアは依然として固定命令シーケンスに従い、別データフィールドのみを変更します。真のストアドプログラムモデルをサポートするには、FSM以上のものが必要です:読み書き可能メモリ、データ処理ユニット、洗練されたコントローラ。
読み書き可能メモリは、スタティックまたはダイナミックRAMチップで手頃かつ高速に提供されます。論理演算は算術論理演算ユニット(ALU)が処理し、算術とブール関数を実行できます。
コントロールユニットは、メモリ、ALU、外部デバイス間のデータ移動を調整。トライステートバッファでバス上のデータをルーティングし、デコーディングロジックでバイナリ命令コードを行動に変換します。
命令例:「アドレス0010の値とアドレス1101の値を加算せよ」「アドレス0111のバイトのパリティを計算せよ」。バイナリコードから操作へのマッピングは任意で、初期ASCII標準に似ていますが、命令セットは通常メーカー固有です。
読み書き可能メモリ、ALU、コントロールユニットが統合され——しばしば単一チップ上で——プロセッサを形成。最小限の外部メモリを持つプロセッサがマイクロプロセッサ;バス制御回路と結合すると中央処理装置(CPU)になります。
CPUの動作はフェッチ/実行サイクルにカプセル化されます。プログラムカウンタが次の命令アドレスを保持。コントロールユニットがそのアドレスをメモリアドレスバスに読み出し、RAMから命令を取得し、一時レジスタに格納。
命令がオペランドを必要とする場合、コントロールユニットが追加メモリアクセスを発行し、取得データをALUレジスタにルーティング。ALUが要求操作を実行し、結果をアキュムレータに配置。最後にプログラムカウンタがインクリメントし、サイクルが繰り返されます。
マイクロプロセッサ (CPU) -------------------------------------- | ** プログラムカウンタ ** | | (アドレス値をインクリメントし | | 外部メモリチップに送信して | | 次の命令をフェッチ) |==========> アドレスバス | (RAMメモリへ) | -------------------------------------- | ** コントロールユニット ** |<=========> コントロールバス | (メモリから読み取った命令を | | デコード、ALU/内部レジスタ/ | | 外部デバイスへのデータフロー | | をイネーブル、すべてのバス | | 通信をアービトレート) | (アドレス/データバスを共有する | すべてのデバイスへ;仲裁) | -------------------------------------- | ** 算術論理演算ユニット (ALU) ** | | (すべての数学的計算と | | ブール関数を実行) | -------------------------------------- | ** レジスタ ** | | (命令コード、エラーコード、 | | ALUデータ等を保持する小さな | | 読み書きメモリ; | | 「アキュムレータ」を含む) |<=========> データバス | (RAMメモリおよび他の | | 外部デバイスから) | --------------------------------------
最もシンプルな操作でも多くのマイクロステップを必要とします。累乗のような複雑な算術は基本関数の反復イテレーションを含みます。フライトシミュレータのグラフィックエンジンが毎フレームディスプレイをリフレッシュするために実行しなければならない数千サイクルを考えてみてください。
フェッチ/実行サイクルの圧倒的な速度がこれを可能にします。一部設計では、マイクロコードと呼ばれる小さなプログラムを内部ROMに埋め込みます。マイクロコードは複雑な操作のサブステップを処理し、プログラマがすべての詳細を書く代わりに単一の高レベル命令を発行できるようにします。
このように、プロセッサはプロセッサを含みます:開発を簡素化しながら性能を維持する、プログラムの中のプログラム。
産業技術
- ネットワークプロトコルの理解:物理層から高度なアービトレーションまで
- デジタルメモリが重要な理由
- デジタルメモリの基礎:アドレッシング、アクセス、揮発性
- ROM、PROM、EPROM、EEPROMの理解:設計、プログラミング、識別
- 包括的なOp-Ampデータ:National SemiconductorおよびCA3130データシート
- データ駆動型製造:効率化、コスト削減、イノベーションを解き放つ
- 組織の優位性を最大化:データを戦略的インサイトに変える
- C言語のデータ型完全ガイド:整数、浮動小数点、void型
- C言語共用体:複数データ型の効率的なメモリ管理
- C言語動的メモリ管理:calloc、malloc、freeの解説
- Python データ型マスター: 実践ガイド