スポンサーリンク

【応用情報技術者試験】コンピュータ構成要素とハードウェアを学ぼう!     ~第4章~割込み

割込みとは、周辺機器やプログラムからの要求に基づき、CPUが現在実行中の処理を一時中断し、緊急性の高い別の処理(割込みハンドラ)を優先して実行する仕組みです。終了後は元の処理へ戻り、効率的なイベント駆動型処理(ハードウェア・ソフトウェア)を実現し、システム全体の応答性を高めます。 

画像参照:https://www.cyclonis.com/ja/system-interrupts-causing-high-cpu-usage-issue/

仕組みと重要性

  • 概要: 外部機器(キーボード入力、通信終了など)や内部イベント(エラー、システムコール)が発生した際、CPUに即時処理を通知する合図。
  • 処理の流れ:
    1. 要求: 周辺機器などが割込みコントローラを経由して信号を送る。
    2. 中断と待避: CPUは実行中プログラムを止め、コンテキスト(作業状態)をスタックに保存。
    3. ハンドラ実行: 割込みベクタを参照し、該当する割込みサービスルーチン (ISR) を実行。
    4. 再開: 待避情報を戻し、中断したプログラムを再開。
  • メリット: CPUが周期的に入出力ポートをチェックする必要がなくなり、無駄な処理を減らして効率化できる。 

割込みベクタ
CPUに発生する割込み処理について、その種類と実行すべきコードのメモリ上の位置(アドレス)の対応関係を記録したもの。 メモリ上の割込みベクタテーブルと呼ばれる領域に格納される。

割込みサービスルーチン
CPUが実行中のプログラムを一時中断し、ハードウェア(キーボード、タイマー、周辺機器など)からの優先要求に基づいて特定の処理を即座に行うプログラムです。別名「割込みハンドラ」とも呼ばれ、処理終了後に元のプログラムへ復帰する仕組みです。 

内部割込み

内部割込みは、実行中のプログラム自身が原因で発生する強制的な処理中断です。主な要因は「プログラムの例外(ゼロ除算、オーバーフロー、ページフォルト、不正なメモリアクセスなど)」や「OSの機能呼び出し(SVC命令)」であり、外部要因のハードウェア割込みとは対比される。ソフトウェアが自身の不正処理を検知して対処する仕組みです。 

主な分類

  • プログラム割込み: 0除算、演算のオーバーフロー、不正な命令の実行などエラーに起因する 。
  • SVC割込み : プログラムが意図的にOSのシステムコールを呼び出す際に発生。
  • ページフォルト: 仮想記憶において、メモリ上に必要なデータが存在しない(ページ不在)場合に発生。
  • 特権命令違反: ユーザーモードで特権命令を実行した際に発生するエラー。 

システムコール
アプリケーションがOS(オペレーティングシステム)のカーネルが持つ機能(ファイル操作、ネットワーク通信、プロセス管理など)を利用するためのインターフェース(窓口)であり、プログラムからOSへ「〜してほしい」と依頼する仕組みです。

特徴

  • 発生要因: CPU内部の命令実行結果(ソフトウェア起因)。
  • タイミング: 同期的に発生(特定の命令実行時に必ず発生)。
  • 目的: エラーハンドリングやOSへのサービス依頼。 

エラーハンドリング
プログラム実行時の予想外の事態(ファイル不在、入力不正など)に対し、システムを停止・クラッシュさせず、事前に用意した処理(通知、リトライ、クリーンアップ)で安全に対処する仕組みです。

プログラム割込み

プログラム割込みとは、CPUが実行中の処理を一時中断し、発生したイベント(キー入力、タイマー切れ、エラーなど)に対応する特別な処理(割込み処理/ISR)を強制的に実行させる仕組みです。処理が終わると、中断した元のプログラムに戻って処理を再開するため、効率的なシステム応答やリアルタイム処理に不可欠で、ハードウェア割込み(外部機器)とソフトウェア割込み(プログラム内部のエラーやシステムコール)の2種類があります。

仕組み

  1. イベント発生:キーボード入力、タイマーからの信号、ゼロ除算エラーなど、何らかのイベントが発生します。
  2. CPUへの通知:イベント発生源(周辺機器コントローラやプログラム)がCPUに割込み信号を送ります。
  3. 処理の中断と保存:CPUは現在の処理を一時停止し、後で再開できるよう実行状態(レジスタ情報など)をメモリ(スタック)に保存します(待避)。
  4. 割込み処理の実行:割込みの種類に対応するプログラム(割込みハンドラ/ISR)が起動され、イベント処理が行われます。
  5. 処理の再開:割込み処理が終わると、保存した情報(復帰)を元に戻し、中断した元の処理を再開します。

種類

  • ハードウェア割込み(外部割込み):
    • 外部機器からの信号:キーボード、マウス、ネットワークカード、タイマーなどからの要求。
    • :キーを押したとき、タイマーが時間になったとき。
  • ソフトウェア割込み(内部割込み):
    • 実行中のプログラム内で発生:プログラムのエラーやOS機能の呼び出し。
    • :ゼロ除算、メモリ保護違反、OSの機能(システムコール)呼び出し。

なぜ割込みが必要か

  • 効率性:周辺機器からのデータ入力を常に監視(ポーリング)する代わりに、データが来たときだけ処理するため、CPUリソースを有効活用できます。
  • 応答性:優先度の高いタスク(緊急のデータ処理など)が発生した際に、現在の長時間処理を中断して即座に対応できます(リアルタイム処理)。

SVC割込み

SVC割込み(スーパーバイザコール割込み)とは、プログラム自身がオペレーティングシステム(OS)の機能(ファイル入出力やメモリ管理など)を使いたいときに、意図的に発生させる内部割込みです。これは、一般プログラムが直接行えない特権的なOS機能へのアクセスを、OSの監視プログラム(カーネル)に依頼し、カーネルが代わりに実行させるための仕組みで、システムコールとも呼ばれます。

ポイント

  • 目的:OSの機能(入出力処理、タスク切り替えなど)を、一般プログラムから安全に呼び出すため。
  • 発生源:プログラム(処理中)自身が、特定の命令(SVC命令)を実行することで発生させる。
  • 種類:プログラムが原因で発生する「内部割込み」の一種。
  • 仕組み:
    • プログラムが「この処理はOSに頼みたい」とSVC命令を発行。
    • CPUは実行中のプログラムを中断し、OS(カーネル)に処理を切り替える。
    • カーネルが特権命令を使って、実際の入出力やメモリ管理などの処理を実行。
    • 処理が終わると、元のプログラムに戻る。

具体例

ファイルを読み書きしたいとき、メモリを確保・解放したいとき、 新しいプロセスを生成したいとき。

外部割込みとの違い

  • SVC割込み(内部):プログラムの要求で発生(例: ファイルアクセス要求)。
  • 外部割込み:ハードウェアからの要求で発生(例: キーボード入力完了、タイマー時間経過)。

ページフォルト

ページフォールトは、実行中のプログラムが必要とするデータ(ページ)が物理メモリ上に存在しない場合に発生する内部割込み(例外)です。この時OSがストレージからデータを読み込み、処理を再開させます。 

ページフォールトと内部割込みの要点

  • ページフォールトの定義: 仮想記憶(ページング方式)において、アクセスしたページが物理メモリにない状態。
  • 内部割込み(トラップ)に分類: プログラム実行に起因する要因(例外)であり、CPUが検知してOSへ処理を移す。
  • 発生時の処理: OSがストレージから該当ページを物理メモリに読み込み(スワップイン)、中断したプログラムを再開する。
  • 主な原因: メモリ不足によるスワップ、初期読み込みなど。
  • 他の内部割込み例: 0による除算(0除算)、オーバーフロー、システムコール(SVC)。 

ページフォールトはエラーではなく、仮想メモリ管理における正常なプロセスの一環です。 

スワップ
物理メモリ(RAM)が不足した際に、OSがデータの一部をHDDやSSD(ストレージ)の専用領域へ一時的に退避させる仕組みです。

特権命令違反

特権命令違反は、一般ユーザープログラムがシステム管理用の「特権命令」を不正に実行しようとした際に発生する、ハードウェア検知による「内部割込み(例外)」です。この発生により、プログラムはOSに制御を戻し、不正な動作を阻止するため異常終了(セグメンテーションフォールトなど)させられます。 

詳細な解説は以下の通りです。

  • 内部割込みの要因: 特権命令違反は、CPUがプログラム実行中に発生させる内部割込み(プログラム例外)の一つです。
  • 特権命令とは: OSの動作モード(カーネルモード/スーパーバイザモード)でしか実行できない、ハードウェアのステータス変更や入出力などの命令。

スーパーバイザモード
特権命令を含む全命令の実行を可能にする一部プロセッサが持つ実行モード。

  • 発生の仕組み:
    1. ユーザープログラムがシステム管理命令(特権命令)を実行しようとする。
    2. CPUが現在の動作モードが「ユーザーモード(特権なし)」であることを検知する。
    3. CPUが直ちに「特権命令違反」として内部割込みを発生させる。
    4. OSのカーネルが制御を受け取り、該当プログラムを強制終了させる。 

ゼロ除算やページフォールトと同様に、実行中のプログラム自体が起因するエラーとなります。 

外部割込み

外部割込みとは、プログラム以外の要因(キーボード入力、タイマー、ネットワーク通信など)で発生し、実行中の処理を一時中断して、CPUに別の優先的な処理(割込み処理)を行わせる仕組みです。ハードウェアの要求によって引き起こされるためハードウェア割込みとも呼ばれ、内部割込み(プログラム内のエラーや例外)と対比されます。 

具体例

仕組み

  1. 要求: 外部機器(キーボード、タイマーなど)が割込みコントローラを通じてCPUに割込み信号を送ります。
  2. 一時中断: CPUは実行中のプログラムを中断し、現在の状態(レジスタ値など)を保存します。
  3. 処理: 割込み要求に応じた「割込みサービスルーチン(ISR)」と呼ばれる専用プログラムを実行します。
  4. 復帰: 割込み処理が終わると、保存しておいた状態を復元し、中断した元のプログラムの処理を再開します。 

種類(制御方法による分類)

内部割込みとの違い

  • 外部割込み: ハードウェア(外部要因)が原因。いつ発生するか予測不能(例:電話の着信)。
  • 内部割込み: 実行中のプログラム(ソフトウェア)が原因(例:ゼロ除算、メモリ保護違反)。 

キーボード割込み

キーボード割込みは、ユーザーがキーを押した際にキーボードコントローラがCPUへ信号を送り、実行中のプログラムを一時中断させて文字入力処理を優先的に実行させるハードウェア技術です。これにより効率的な入力処理(I/O)を実現し、システムは常にキー入力を監視する必要がなくなり、応答時間も短縮されます。 

  • 動作原理: キーが押されると信号が発生し、CPUは現在の処理を中断して「割込みハンドラ(ISR)」を起動し、データを読み込みます。
  • 特徴: 非同期的であり、実行中のコードに関わらず、いつでも発生します。
  • 利点: カーネルが定期的に入力を確認する必要がなく、効率的です。
  • 関連用語: 割込みコントローラ(PIC)、キーボードドライバ、カーネルモード。
  • ソフトウェア視点: PythonなどではCtrl+Cで発生するシグナル(SIGINT)を指すこともあります。 

割込みハンドラ
オペレーティングシステム(OS)内のプログラムの一部で、割込みが発生したときに起動され、対応する処理を行うもの。 メモリ上に常駐しており、割込みの種類ごとに用意される。

タイマー割込み

タイマー割込みとは、マイコンなどで設定した時間間隔で自動的に発生させ、メインプログラムの実行を一時中断して特定の処理(割込みハンドラ)を実行する機能です。これにより、正確なタイミングでのLED点滅、センサーデータの定期取得、時計機能、機械制御など、メイン処理とは独立して時間管理が必要な処理を安定して実現でき、プログラムの効率的な並行処理を可能にします。

仕組み

  1. タイマー設定:マイコン内部のタイマー(タイマカウンタ)に、クロック信号を元に「何カウント後に割込みを発生させるか」を設定します。
  2. 割込み発生:設定したカウント数に達すると、タイマー回路がCPUに「割込み要求」を送ります。
  3. メイン処理の中断:CPUは現在実行中のメインプログラムを一時停止し、実行中の命令を保存します。
  4. 割込みハンドラ実行:事前に登録された「割込みハンドラ(ISR)」と呼ばれるコードブロック(LED点滅、データ読み取りなど)を実行します。
  5. メイン処理の再開:割込みハンドラの処理が終わると、CPUは中断した時点からメインプログラムの実行を再開します。

コードブロック
プログラミングコードやテキストを等幅フォントでハイライト表示し、Markdownやチャットツール(Teams, Slack, Discord)で文書を見やすく装飾する機能です。

主な用途

  • 定周期処理:一定時間ごとのLEDの点滅、センサー値のサンプリング。
  • 時間計測:ストップウォッチ機能。
  • 機械制御:PWM信号生成、パルス信号の制御。
  • システム監視:ウォッチドッグタイマー(WDT)によるプログラム暴走検知。

PWM信号(パルス幅変調)
一定周期のパルス波において、オン(”H”)とオフ(”L”)の時間比率(デューティ比)を変化させることで、負荷へ供給する平均電力を効率的に制御する技術です。

メリット

  • 高精度・安定性:メイン処理の負荷に影響されず、正確な時間間隔で処理を実行できる。
  • 効率的な並列処理:複数のタスクを擬似的に同時に実行しているように見せられる。

欠点・注意点

  • 割込みハンドラ内では、処理時間を長くする(時間がかかる)処理は避け、最小限の処理に留めるのが基本です。

入出力(I/O)割込み

入出力(I/O)割込みは、キーボード、マウス、ディスク、通信ポートなどの周辺機器が、データ転送の完了や異常発生をCPUに通知するハードウェア割込みの一種。CPUは処理の完了を待たずに他のタスクを並行処理でき、入出力完了の通知を受けてからデータ処理を行うため、効率的なシステム運用が可能。 

仕組みと特徴

  • 処理の仕組み: 入出力装置から処理の要求(I/Oリクエスト)がCPUに送信され、CPUは実行中のプログラムを一時的に中断し、専用の割込みハンドラ(割込み処理ルーチン)を実行。
  • 目的: 比較的低速なI/Oデバイスからのデータ到着を待たず、CPUは別のプロセスを実行し、データが準備できた時点で処理を行うため、システム全体の性能が向上する。
  • 用途: キーボードの入力、ディスクへの読み書き完了、通信異常、周辺機器のタイマーなど、様々な現場でリアルタイムに処理を行うために利用。
  • 管理: 外部割込みの1つであり、CPUが検知するハードウェア割込みの1種として、特定の割込み信号(IRQ:Interrupt Request)を用いて実行。 

この機構により、コンピュータは低速な外部機器と効率的に連携し、効率の良いデータ処理を実現します。

機械チェック割込み

機械チェック割込みは、CPU、メモリ、電源などのハードウェアに故障や異常が検出された際に、最優先(No.1)で発生するハードウェア割込みです。システムを瞬時に停止させてデータ破壊を防ぐための仕組みで、瞬時停電やメモリパリティエラーなどが主な原因です。 

特徴と概要

  • 発生要因: ハードウェアの誤動作、電源異常(瞬間停電)、メモリ故障(パリティエラー)など、ハードウェア自体が検知する深刻なエラー。
  • 優先順位: 最も優先順位が高い(最高位)。
  • 分類: 外部割込み(ハードウェア割込み)。
  • 目的: 障害の拡大を防ぎ、即座に処理を中断・対応する。 

具体例

  • メモリパリティエラー: 記憶装置(RAM)で発生したデータ破損。
  • 電源異常: 商用電源の瞬時停電による電圧低下。
  • CPUや周辺機器の故障: ハードウェアの物理的な破損。 

プログラム上のミスで発生する「プログラム割込み(内部割込み)」とは異なり、ハードウェアの健康状態に関わるエラーです。 

コメント