割り込み(わりこみ)とは、コンピュータがその周辺機器などから受け取る要求の一種である。現在の多くのCPUは、割り込みを処理するための機能を備えている。割り込みの主な目的は周辺機器からの情報を、他の作業をしながらも取り落とすことなく受け取ることであり、具体的な効果として次のようなものがあるCPUの割り込みは、大きくわけて「ハードウェア割り込み」(外部割り込み)と「ソフトウェア割り込み」(内部割り込み)に分類できる。一言で「割り込み」と言った場合、前者を指すことが多いため、後者のことをSWI (SoftWare Interrupt) と呼び区別する場面がある。ハードウェア割り込みは、CPUの外部から要求されるものであり、CPUの割り込み要求 (Interrupt ReQuest, IRQ) 端子をアサートする(例えば端子の電圧をHIからLOWにする)場合に発生する。ソフトウェア割り込みはCPU内部において、自分自身が実行した命令やCPUの命令実行に関わるモジュール(例えば、キャッシュ)の変化によって起きるものである。ソフトウェア割り込みの一部は例外 (Exception) やトラップ (Trap) と呼ばれる。まとめると以下のように分類できる。割り込み要求端子は、ソフトウェアからマスク不可能な割り込み (Non-Maskable Interrupt, NMI) と、マスク可能な割り込み(NMIに対して狭義のIRQ)の2種類の端子を備えている場合が多い。割り込みのマスクの設定は主にフラグレジスタに格納されており、割り込みの許可/禁止 (Enable/Disable) を操作するCPUの命令が用意されている。またこれらの端子が同時にアサートされた場合、優先順位がありNMIが優先される。NMIはデバッグやハードウェアエラーなどの特殊な用途に使われ、通常のペリフェラルからの割り込み要求はマスカブル割り込み(以下IRQ)に接続して用いる。CPUのIRQは1本もしくは複数用意され、CPUの種類や実装によって異なる。複数のペリフェラルからの割り込み要求が発生可能な場合、1つの割り込みハンドラ(後述)で処理を行うと、どのペリフェラルがどのような割り込み要求を発生させたのか判別する処理を、プログラム側で行う必要がある。これに対し、ハードウェアとして複数のIRQ端子を用意して、割り込み要因毎に異なるハンドラに処理を移すことができるようにした構成をとれるようにしたものがある。この機能を持った回路のことを割り込みコントローラ (Interrupt Controller) と呼び、CPUのIRQ端子を外部で拡張し、制御するものである。IRQ端子のアサート方法は、信号の変化点を検出するエッジトリガと、信号のレベルで検出するレベルトリガがある。エッジトリガでは、立上がり又は立下りといった片方向の変化だけを検出する「片エッジ検出」と、両方ともを検出する「両エッジ検出」がある。PCIバスではレベルトリガ方式の割り込み信号線が取り入れられている。狭義にいうSWIは、割り込みを起こすための命令(ソフトウェア割り込み命令)によって発生するものである。SWI、CPUのモードを遷移させることができるため、可能な処理の範囲がモードによって制限されるようなCPUにおいて、システムコールを実現するために用いられる(通常のアプリケーションが動作するモードであるユーザモードでは実行できない命令であっても、SWIの後では実行可能になる)。また、例外は、ゼロ除算、オーバーフロー、ページフォルトなどによって生じる。特にページフォルトはOSがメモリ空間を管理するのに重要な役割を果たす。どちらの割り込みにせよ、CPUに割り込みが生じると、現在実行している処理(命令)を停止して別の処理を実行する。割り込み後に実行される処理は、割り込みハンドラもしくは割り込みサービスルーチン (Interrupt Service Routine, ISR) と呼ばれる。また、割込処理が終了しても、元の処理(割り込みが生じた時点に実行していた処理)に戻ってこられるように、元の処理の場所(アドレス)に関する情報(および元の処理の作業状態、コンテキストと呼ばれる)を(多くの場合スタックに)保存しておく。割込処理を実行するために、どこの場所(アドレス)に飛べば良いかを示す情報は、割り込みベクタと呼ばれるテーブルに書かれている。割り込みベクタには、飛び先の命令のアドレスを書くこともあれば、ジャンプ命令を書くこともある。割り込み処理ではイベントドリブンな処理を行うことができるため、割り込み処理に割り当てられたタスクについては効率的な処理が行える。しかしその一方、割り込み発生時には、CPUのレジスタの退避/復帰やプロセッサの特権レベル移行の処理など、少なからず処理にオーバーヘッドが生ずることとなる。このため、割り込みの発生頻度が高いシステムの場合、その処理によってシステム資源が占有されてしまい、本来の処理の応答性や処理速度に影響を与える場合がある。状況によっては割り込みを使わず、ポーリングでフラグを定期的に確認するなどして、本来の処理との折り合いをつける方が、全体的なパフォーマンスが向上する場合が多い。なお、一部のデバイスドライバでは、通常は割り込み動作を行い高負荷時にはポーリングで動作する仕組みを持ったものもある。また、RISCプロセッサでは、割り込みが発生すると実行中のパイプラインが乱れ処理性能が低下するため、旧来の8ビットCISCプロセッサなどに比べると、割り込みによる相対的なパフォーマンス低下の影響が大きくなる。また投機的実行のペナルティなど複雑化したプロセッサ機能も、割り込みの際のオーバーヘッドを増大させる要因となる。コンピュータのこの意味での「割込み」という語は、インタラプトの訳ではなく、独立に作ったものである。和田英一によれば、1959年の夏、パラメトロン計算機において、出力装置が直前の処理を終えたことを計算機に知らせる方法を議論していてアイディアを得た、という。
出典:wikipedia
LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。