割込みの解説(基本情報技術者シラバス用語)

目次

割込みとは

割込み(インタラプト)とは、コンピュータのプロセッサ(CPU)が現在実行している処理を一時的に中断し、より優先度の高い別の処理を優先して実行させる仕組みのことです。コンピュータが様々な外部機器からの要求に素早く反応したり、重大なエラーが発生したときに即座に対処したりするために不可欠な機能です。割込みには、タイマーの満了やキーボード入力といったコンピュータ外部の要因で発生する「外部割込み」と、ゼロ除算(ゼロで割る計算)や存在しないメモリへのアクセスなど、実行中のプログラムが原因で発生する「内部割込み」の2種類があります。

具体例

例えば、パソコンで文章を入力している最中にマウスを動かすと、画面上のカーソルが即座に動きます。これは、マウスの移動という「外部割込み」が発生し、CPUが文字の入力処理を一時的に中断してマウスカーソルを描画する処理を優先的に実行したからです。プログラムの例としては、以下のようにゼロで割り算をしようとしたときに発生するエラー(ゼロ除算)も内部割込みの一種です。

int x = 10;
int y = 0;
int result = x / y; // ここで内部割込み(ゼロ除算エラー)が発生します

もう少し詳しく

割込み処理の背後にある仕組みは、コンピュータが複数のタスクを効率的に切り替えて処理するために精巧に作られています。CPUが割込み要求を受け取ると、直ちに現在実行中のプログラムの作業状態を保存するプロセスに入ります。具体的には、次に実行すべき命令のアドレスを保持しているプログラムカウンタや、計算途中の値を保持している各種レジスタの内容を、主記憶装置上の「スタック」と呼ばれる特別なデータ領域に退避させます。この一連の動作を「コンテキストの退避」と呼びます。

退避が完了すると、CPUは発生した割込みの種類を判定し、それに対応する専用の処理プログラムである「割込みハンドラ(割込みサービスルーチン)」を呼び出して実行します。例えばマウスが動かされたならマウス用の処理プログラム、ネットワークからデータが届いたならネットワーク用の処理プログラムが即座に実行されるわけです。割込みハンドラの処理が無事に完了すると、CPUは先ほどスタックに退避させておいた元のプログラムの作業状態を取り出して復元(コンテキストの復帰)させ、まるで何事もなかったかのように中断していた箇所からプログラムの処理を再開します。

さらに、割込みには大きく分けて「外部割込み」と「内部割込み」の二つのカテゴリが存在し、これらは発生源の明確な違いによって区別されます。

  • 外部割込み:CPUの外部にあるハードウェアが引き金となる割込みです。一定時間ごとにOSに処理を切り替えるタイミングを知らせるタイマー割込み、キーボードやマウスなどの入力装置からデータが届いたことを知らせる入出力割込み、さらには電源異常などの深刻なハードウェア障害を知らせる機械チェック割込みなどが該当します。
  • 内部割込み:CPUで実行中のソフトウェア自身が引き金となる割込みです。プログラムのバグによるゼロ除算や未定義命令の実行(プログラム割込み)、OSの特権機能を呼び出すために意図的に発生させるSVC(スーパーバイザコール)割込み、仮想記憶システムにおいて必要なデータが実メモリ上に存在しない場合に発生するページフォールト(ページ割込み)などがあります。

このように、現代のコンピュータシステムは多種多様な割込みを高速にさばきながら、ユーザーに快適で並行的な操作環境を提供しているのです。

試験でのポイント

基本情報技術者試験などの情報処理技術者試験において、割込みは頻出テーマの一つです。特によく問われるのは、具体的な事象が「外部割込み」と「内部割込み」のどちらに分類されるかを判定させる問題です。判定の大きなポイントは、「プログラムの実行そのものが直接の原因となっているか否か」です。

例えば、「ゼロ除算によるエラー」や「存在しないメモリ領域へのアクセス(ページフォールト)」、「システムコールの発行(SVC)」は、すべて実行中の命令が引き金となっているため内部割込みに分類されます。一方で、「キーボードからの入力」や「タイマーの満了」、さらには「磁気ディスクの読み書き完了」などは、CPUが実行しているプログラムの内容とは無関係なタイミングで外部の機器から要求されるため、外部割込みとなります。試験では、これらの具体例が一覧になっており、正しい組み合わせを選ばせる形式が非常に多く見られます。

また、複数の割込みが同時に発生した場合の処理順序を決定する「割込み優先順位(優先度)」に関する知識もよく問われます。一般的には、システム全体を揺るがすような電源異常などのハードウェア障害(機械チェック割込み)が最も優先度が高く設定されています。次いで、システムを一定の周期で動作させるためのタイマー割込み、周辺機器とのやり取りを行う入出力割込み、そして最後にプログラム上のエラーなどのソフトウェア的な割込みと続くのが標準的なモデルです。高い優先度の割込み処理を行っている最中は、それより優先度の低い割込み要求は待機状態にされる(マスクされる)という仕組みも併せて覚えておくと良いでしょう。

関連する用語

割込みの仕組みを理解する上で、CPUが次に実行すべき命令のアドレスを記憶しているプログラムカウンタや、割込み時に現在の状態を一時的に保存しておくデータ構造であるスタックの働きは欠かせません。また、OSの中核機能を利用するためにプログラムから意図的に割込みを発生させるSVC(スーパーバイザコール)も関連が深い用語です。

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ