CPUでの処理

CPUでの処理について解説します。

CPU(中央処理装置)の概要

Intel.com

CPUは、コンピュータのすべての計算や制御を行う「頭脳(作業員)」です。
  • 主な役割
    • 制御装置:主記憶からプログラムの命令を取り出して解読し、全体に指示を出す。
    • 演算装置:指示通りに、四則演算(算術)やデータの比較(論理)を行う。

  • 内部にある重要パーツ
    • レジスタ:CPUの内部にある、超高速・小容量の一時記憶。次に実行するアドレスを指す「プログラムカウンター(PC)」や、現在実行中の命令を入れる「命令レジスタ(IR)」などがある。

  • 性能の指標
    • クロック周波数:1秒間に刻むテンポ(Hz)。高いほど速い。
    • MIPS:1秒間に実行できる命令の数(百万単位)。
    • コア数:1つのCPUチップ内にある頭脳の数。複数が1つのメモリを共有する「マルチコア(デュアル、クアッドなど)」が現在の主流。

主記憶装置(メインメモリ)の概要

メモリ – DELL

主記憶装置は、CPUが今まさに処理しているプログラムやデータを一時的に置いておく「机(ワークスペース)」です。
  • 主な役割
    • CPUが直接データを読み書きできる記憶装置。
    • 各部屋に「アドレス(番地)」が割り振られており、ピンポイントでデータを指定してやり取りする。
  • 最大の特徴(揮発性)
    • 電源を切るとデータがすべて消える(揮発性)。そのため、消えてはいけないデータは補助記憶装置(SSDやHDDなど)に保存する。
  • 使われている半導体(DRAM)
    • 主記憶にはDRAMというメモリが使われる。安価で大容量にしやすい反面、データが消えないように定期的な電気の注ぎ直し(リフレッシュ操作)が必要で、速度はやや遅い。
  • 高速化の技(メモリインタリーブ)
    • メモリ内部をいくつかの区画(バンク)に分け、同時に並列アクセスすることで読み書きを速くする仕組み。

CPU と 主記憶装置 のつながり(命令実行サイクル)

コンピュータが動くとき、この2つの装置は以下の4ステップを猛烈なスピードで繰り返しています。
  • フェッチ(取り出し):CPUが主記憶のアドレスから命令を読み出す。
  • デコード(解読):CPUのデコーダが命令の意味を理解する。
  • オペランド読出し:計算に必要なデータを主記憶からCPUのレジスタに持ってくる。
  • 実行・書き戻し:CPUの演算装置(ALU)が計算し、結果を主記憶やレジスタに記録する。

主記憶装置の基本的な仕組み

主記憶装置の内部は、細かく区切られた膨大な数の「部屋(記憶素子)」で構成されています。
  • アドレス(番地)
    それぞれの部屋には、データを見失わないように「0番地、1番地、2番地…」と一意の番号(アドレス)が割り振られています。
  • データの読み書き
    CPUはアドレスバスを使って「○番地の部屋のデータをちょうだい」と指定し、データバスを使ってその部屋にあるデータ(0と1のデジタル信号)を読み書きします。
  • 揮発性(きはつせい)
    主記憶装置の最大の特性は、「電気を切るとデータがすべて消える」ということです。そのため、パソコンの電源を切っても消えないように、データは補助記憶装置(SSDやHDD)に保存(退避)しておく必要があります。

「命令」と「データ」の違い

CPUが理解する1つのまとまった指示(機械語)は、以下のように「命令部」と「アドレス部(データ部)」に分かれています。
  • 命令(命令部 / オペコード)
    • CPUに「何をさせるか」を指示するコードです。
    • 例:「ロード(読み込め)」「ストア(保存せよ)」「アッド(足し算せよ)」「ジャンプ(飛び先へ進め)」など。
  • データ(アドレス部 / オペランド)
    • 命令が「何を対象にして処理を行うか」を指定する部分です。
    • 具体的な数値(データそのもの)が入ることもあれば、データが格納されている「主記憶のアドレス(番地)」が入ることもあります。

レジスタ

レジスタはCPU内部に存在する「超高速・小容量の一時記憶回路」です。
CPUが「作業員」、主記憶(メインメモリ)が「作業机」なら、レジスタは作業員の「ポケットや手元にあるメモ帳」に例えられます。机(メモリ)から書類(データ)をいちいち取り出すのは時間がかかるため、いま使う書類や計算途中の数字は、すべて手元のメモ帳(レジスタ)に書き留めて処理します。
 
午前試験(科目A)で正解の選択肢、または誤りの選択肢として必ず登場する5つのレジスタです。

レジスタ名 役割(何を記憶しているか) 試験でのキーワード
プログラムカウンター(PC) 次に実行する命令の、主記憶上のアドレス(番地)を記憶する。 「次に実行する」「アドレス」
命令レジスタ(IR) 主記憶から取り出した、現在実行中命令そのものを記憶する。 「実行する命令」「命令そのもの」
汎用(はんよう)レジスタ 演算するデータや計算結果、アドレスなど、多目的に何でも一時記憶する。 「多目的」「データやアドレス」
アキュムレータ 演算装置(ALU)が計算した結果を一時的に格納する(汎用レジスタの一種)。 「演算結果」「累積器」
状態レジスタ(PSW) 計算結果が「プラス・マイナス・ゼロ」のどれか、または「溢れ(オーバーフロー)」がないかなどのCPUの状態情報を記憶する。 「フラグ」「割込み時の退避」

アドレッシング(アドレス指定方式)

試験では、命令の「アドレス部(オペランド)」から、目的のデータがどこにあるかを特定する方法(アドレッシング)が頻出します。
  • 即値アドレス指定
    • アドレス部にデータそのものが書かれている方式。メモリにデータを取りに行く必要がないため最速。
  • 直接アドレス指定
    • アドレス部に書かれた番号が、そのままデータのある主記憶の番地を指している方式。
  • 間接アドレス指定
    • アドレス部に書かれた番地を見に行くと、そこに「本当にデータがある別の番地」が書かれている方式。メモリに2回アクセスするため遅い。

割込み

割込み(Interrupt)とは、CPUがプログラムを処理している最中に、急用(緊急の処理)が入ったため、いまの作業を一時中断して別の処理を優先して実行する仕組みです。
人間が作業中に「電話が鳴る(緊急)」や「来客が来る(急用)」といった理由で、やっていたことを中断して対応し、終わったら元の作業に戻るのと同じです。
基本情報技術者試験(FE)では、割込みの原因がどこにあるか(内部か外部か)と、その種類・優先順位が繰り返し出題されます。

割込みの2大分類(内部割込み と 外部割込み)

試験では「この割込みは内部・外部のどちらか?」という分類が非常に狙われます。
  • 内部割込み(シンクロナス割込み / 同期割込み)
    • 原因がCPUの「内部(実行しているプログラム)」にあるものです。
    • プログラム割込み:ゼロ除算(0で割る)、オーバーフロー(桁あふれ)、無効な命令の実行など。
    • SVC割込み(スーパーバイザコール):実行中のプログラムが、意図的にOSの機能(ファイルの読み書きなど)を呼び出したとき。
    • 記憶保護割込み:アクセスが禁止されているメモリ領域に不当にアクセスしようとしたとき。
  • 外部割込み(アシンクロナス割込み / 非同期割込み)
    • 原因がCPUの「外部(ハードウェアや周辺機器、タイマー)」にあるものです。
    • 入出力割込み:キーボードが押された、マウスが動いた、プリンタの印刷が終わったなど。
    • タイマ割込み:あらかじめ設定した時間が経過したとき(OSが定期的に作業を切り替える「マルチタスク制御」で使用)。
    • 機械チェック割込み:停電やメモリのパリティエラー(ハードウェアの故障・異常)など。

割込み処理の流れ

CPUが割込みを処理するとき、元の作業へ綺麗に戻るために以下の手順を自動(ハードウェアとOS)で行います。
  1. 現在の状態を退避(セーブ)
    • いま処理していた場所を忘れないように、プログラムカウンター(PC)やレジスタ、CPUの状態を表すPSW(プログラム状態語)の値を、メモリ上のスタック領域に一時的に保存します。
  2. 割込みハンドラ(処理プログラム)の実行
    • 割込みの種類ごとに用意された専用のプログラム(割込み処理ルーチン)を呼び出し、緊急用事を片付けます。
  3. 状態を復帰(ロード)
    • 用事が終わったら、スタックに保存しておいた元のレジスタやプログラムカウンターの値を呼び戻します。
  4. 元の処理へ復帰
    • 中断していた場所から、何事もなかったかのように処理を再開します。