Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

命令フェッチ(メイレイフェッチ)とは | 意味や読み方など丁寧でわかりやすい用語解説

命令フェッチ(メイレイフェッチ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

命令フェッチ (メイレイフェッチ)

英語表記

Instruction fetch (インストラクションフェッチ)

用語解説

命令フェッチとは、中央処理装置(CPU)がプログラムを実行する際に、次に実行すべき命令をメモリから読み出す処理のことである。CPUがコンピュータの脳として機能し、様々な指示(命令)に従ってタスクをこなしていく過程において、命令フェッチは必ず最初に行われる根本的なステップとなる。例えるならば、CPUがレシピ(プログラム)に従って料理をする際に、次に何をするべきかという手順(命令)をレシピ本(メモリ)から読み取ることに相当するが、具体的な作業内容にフォーカスすれば、CPUがプログラムカウンタと呼ばれる内部の記憶領域に示されたアドレスを参照し、そのアドレスが指すメモリ上の場所から命令データを取得する一連の動作が命令フェッチである。

CPUがプログラムを実行する際には、「フェッチ(命令の読み出し)」「デコード(命令の解読)」「実行(命令の実行)」「ライトバック(結果の書き戻し)」といった一連の段階を経て処理を進める。命令フェッチは、これらの段階のまさに第一歩にあたり、このフェッチが滞りなく行われなければ、CPUは後続のいかなる処理も開始することができないため、プログラム実行の根幹をなす非常に重要な工程である。

命令フェッチの具体的な流れは次のように進む。まず、CPUの内部には「プログラムカウンタ(PC)」という特殊なレジスタ(非常に高速な小容量の記憶領域)がある。このPCは、次にメモリから読み出すべき命令が格納されているメモリ上の「アドレス」(番地)を常に保持している。CPUは、このPCが保持するアドレスの値を、メモリとCPUの間でアドレス情報をやり取りするための通路である「アドレスバス」に載せて、メインメモリに対して「このアドレスにある命令データを送ってください」と要求する。

この要求を受け取ったメインメモリは、指定されたアドレスに格納されている命令データを読み出す。読み出された命令データは、メモリとCPUの間で実際のデータをやり取りするための通路である「データバス」に載せられてCPUへと送り返される。CPUは、データバスを通じて送られてきた命令データを受け取ると、それを「命令レジスタ(IR)」と呼ばれる別のレジスタに一時的に格納する。この命令レジスタに命令が格納された時点で、命令フェッチの工程は一時的に完了となる。

命令フェッチが完了し、命令レジスタに命令が格納された後、CPUはすぐに次の命令フェッチに備える。具体的には、プログラムカウンタの値を更新し、次に読み出すべき命令のアドレスを指すようにする。一般的に、命令は一定の長さ(例えば4バイト)を持っているため、現在のプログラムカウンタの値にその命令の長さを加算することで、次の命令のアドレスを計算し、プログラムカウンタを更新する。もし命令の長さが可変である場合は、命令の解読(デコード)段階で命令の長さを把握し、それに基づいてプログラムカウンタを更新することもある。

命令フェッチの効率は、CPUの全体的な性能に直接的に影響を与える。これは、CPUが命令フェッチを完了しない限り、次のデコードや実行の段階に進むことができず、処理が滞ってしまうためである。メインメモリはCPUの動作速度に比べてアクセスが遅いため、命令フェッチのたびにメインメモリへアクセスすると、CPUが命令の到着を待つ「ストール(停止)」が発生し、全体の処理速度が著しく低下してしまう。この性能低下の問題を緩和するために、CPUの内部や非常に近い場所には、「キャッシュメモリ」と呼ばれるメインメモリよりもはるかに高速な小容量のメモリが配置されている。

命令フェッチを行う際には、まずこのキャッシュメモリに目的の命令があるかどうかを確認する。もしキャッシュメモリ内に目的の命令がすでに存在していれば、メインメモリへアクセスするよりも格段に速く命令を読み出すことができ、この状態を「キャッシュヒット」と呼ぶ。一方、キャッシュメモリに目的の命令がない場合は、メインメモリまでアクセスする必要が生じ、この状態を「キャッシュミス」と呼ぶ。キャッシュミスが発生すると、メインメモリからの読み出しが必要となるため、命令フェッチに時間がかかり、CPUの性能が低下する要因となる。

現代の高性能なCPUでは、命令フェッチの効率をさらに高めるために、様々な高度な技術が導入されている。例えば、「プリフェッチ(先読み)」という技術では、CPUが実際にその命令を必要とする前に、次に実行される可能性のある命令を予測して、あらかじめキャッシュメモリに読み込んでおく。また、「投機的実行」という技術では、プログラムの実行経路が複数に分岐する可能性がある場合、どの経路が選ばれるかを予測し、実際にその経路が選ばれるかどうかわからない命令であっても、先にフェッチやデコード、さらには実行の一部まで進めておくことがある。これらの先進的な技術は、命令フェッチによる遅延を最小限に抑え、CPUの処理パイプラインを常に命令で満たしておくことで、高い処理性能を維持するために不可欠な役割を果たしている。

関連コンテンツ