割り込み
出典: フリー百科事典『ウィキペディア(Wikipedia)』
割り込み(わりこみ)
- 行列などの途中に強引に押し入ること。 割り込み運転など。
- 劇場などで、同伴者でない人と桝席に相席になること、またはその席。
- コンピュータ用語。(後述)
- 刃物の製造法の一種で、極軟鋼の地金をタガネで割り、間に鋼材を挟んで鍛接する技法のこと。
目次 |
[編集] 割り込み (コンピュータ)
割り込みとは、コンピュータがその周辺機器などから受け取る要求の一種である。コンピュータは割り込みに応じて現在の処理を中断して、別の処理(割り込み処理)を行う。現在のCPUは、全て割り込みを処理するための機能を備えている。
[編集] 目的
割り込みの主な目的は周辺機器からの情報を、他の作業をしながらも取り落とすことなく受け取ることであり、具体的な効果として次のようなものがある
- CPU資源の有効利用 - 周辺機器の速度はCPUの処理速度より格段に遅いため、周辺機器が処理を行っている間、CPUが他の処理を行ったほうが効率がよい。その場合、周辺機器の処理の終了をCPU側から定期的にチェックする(ポーリングと呼ぶ)のは、他の処理の効率を落とすため望ましくない。このため、周辺機器の側から割り込みによって処理の終了を通知する方法がとられる。しかしながら、近年のCPUの高速化に伴い、GHz クラスのCPUを利用した場合は、1msec単位程度の周期的なポーリングを行う方式も研究されている。
- 応答性の向上 - キーボード、マウスなどのユーザインターフェースは入力の遅延や入力漏れが致命的な欠陥になる。この場合は割り込みを使ってユーザからの入力を確実に処理する必要がある。コンピュータがフリーズした場合でもマウスカーソルの移動だけが反応することがあるが、これは割り込み処理だけが生きていることになる。
- 例外処理の効率化 - 周辺機器に障害が生じた場合、割り込みを用いることでプログラム側に障害を速やかに伝えることが可能になる。またプログラム上でも例外処理を本来の処理と分離して記述することを容易にする。
- 正確なタイミングの取得 - 画像表示、音楽の演奏や時計など、正確なタイミングで処理を行う必要がある機器を制御する場合、その機器が搭載している正確なタイマーによりタイマー割り込みを行い、CPU側に処理のタイミングを指示する。
[編集] CPUの割り込み
[編集] 分類
CPUの割り込みは、大きくわけて「ハードウェア割り込み(HWI)」と「ソフトウェア割り込み(SWI)」に分類できる。ハードウェア割り込みは、CPUの外部から要求されるものであり、CPUのピンの電位が変化(例えばHIからLOW)した場合に起きる。ソフトウェア割り込みはCPU内部において、自分自身が実行した命令やCPUの命令実行に関わるモジュール(例えば、キャッシュ)の変化によって起きるものである。ソフトウェア割り込みの一部は例外と呼ばれる。
まとめると以下のように分類できる。
- ハードウェア割り込み(CPU外部からの影響によりピンの状態が変化することにより発生)
- ソフトウェア割り込み(CPU内部の要因で発生)
- (狭義の)ソフトウェア割り込み(CPUの割り込み命令によって発生)
- 例外(割り込み命令以外の要因で発生)
[編集] ハードウェア割り込み
HWIはピンの状態の変化を検知するものであるが、ピンの状態はHIかLOWかの2値でしかない。そのため詳しい変化を知る必要がある場合には、検知した後に確認することになる。多くの場合、ピンの変化のタイプとして、立上がり又は立下りといった片方向の変化だけを検出する「片エッジ検出」と、両方ともを検出する「両エッジ検出」とを選ぶことができる。また、HWIにも優先順位をつけたいという要求に応えるため、HWIをさらに「ノンマスカブル割り込み」(NMI)、「高速割り込み」(FIQ)、「通常の割り込み」(IRQ)に分類し、割り込みを発生させたピンの種類によって割り込みの優先度を設定できるものもある。また、CPU内部のモジュールであってもタイマやDMAなど、CPUの命令実行と無関係なモジュールによって生じる割り込みは、内部的な処理はピンの変化で生じる割り込みと同じなので、HWIと呼ばれる。
[編集] ソフトウェア割り込み
狭義のSWIとは、割り込みを起こすための命令(ソフトウェア割り込み命令)によって発生させる。SWI、CPUのモードを遷移させることができるため、可能な処理の範囲がモードによって制限されるようなCPUにおいて、システムコールを実現するために用いられる(通常のアプリケーションが動作するモードであるユーザモードでは実行できない命令であっても、SWIの後では実行可能になる)。また、例外は、ゼロ除算、オーバーフロー、ページフォルトなどによって生じる。特にページフォルトはOSがメモリ空間を管理するのに重要な役割を果たす。
[編集] 割込処理
どちらの割り込みにせよ、CPUに割り込みが生じると、現在実行している処理(命令)を停止して別の処理を実行する。割り込み後に実行される処理は、「割り込みハンドラ」もしくは「割り込みサービスルーチン」(ISR)と呼ばれる。また、割込処理が終了しても、元の処理(割り込みが生じた時点に実行していた処理)に戻ってこられるように、元の処理の場所(アドレス)に関する情報(および元の処理の作業状態、「コンテキスト」と呼ばれる)を(多くの場合スタックに)保存しておく。割込処理を実行するために、どこの場所(アドレス)に飛べば良いかを示す情報は、「割り込みベクタ」と呼ばれるテーブルに書かれている。割り込みベクタには、飛び先の命令のアドレスを書くこともあれば、ジャンプ命令を書くこともある。