日別アーカイブ: 2016年7月2日

マイクロコンピュータの割り込み処理について

マイコンでは、割り込み処理に関する知識は、とても重要です。割り込み処理に入るトリガーとなるものが、割り込み信号でして、英語で書けば「Interrupt」や「Interrupt signal」とかになると思います。CPUの足の説明などでは「INT」と記述される信号線です。

私が初めて、割り込み処理について勉強をしたのは、高校の1年の夏頃でして、昭和52年頃だった様に思います。

<2種類の割り込み処理>
まず、割り込みシグナルの信号線は、大概のCPUには存在しています。この信号線を通じてCPUに突発的最優先処理課題の発生を通知するのが、ハードウェア割り込みと、言うんだそうです。

それに対して、ソフトウェア割り込みってのがあるそうなんですが、これが、なかなか便利な機能です。

<ハードウェア割り込み>
デバイスへの依頼とその応答について、CPUの時間感覚と、デバイスの時間感覚がかなり違いまして、超高速で動作するCPU内部と、ものすごい遅いデバイスの世界での時間の感覚的相違が、存在します。FDDやHDDに作業依頼をしたあと、CPUのはFDDやHDDからの応答をずっと待っている間どうするか?ですが、まだかな?まだかな?とずっと待つループを組んで、回っていても良いんですが、そう言う事をすると、他の作業が、中断したままになります。

CPUをただ空転させて、デバイスからの応答を待たせるのはもったいないので、デバイスからの応答が帰ってくるまではCPUに他の仕事をさせることが出来ると、限られた時間の中で多くの作業をこなすことが出来ます。

そこで、他の処理をしながら、デバイスとも通信をするには、どうすれば良いか?ですが、②個ほど列挙しますと。

①デバイスが返事を返してきた時にCPUに知らせる仕組みを入れる。

②定期的にデバイスの様子を見に行く。

などが考えられます。

割り込み処理は、上記の①の「デバイスが返事を返したよと、CPUに知らせる仕組み」で使われます。

で、この仕組みを説明する時に、もうひとつDMAと言う言葉が出て来ます。

DMAとはダイレクト・メモリー・アクセスの略でして、これが、何かと言いますと、デバイスや、デバイス制御装置がメモリにアクセスする仕組みです。メモリーへの読み書きはCPUだけがやるのではなくて、デバイスまたは、デバイス制御装置もメモリーに読み書きを行います。

デバイスからの応答と割り込み処理とDMAがセットになるケースが多いと思います。DMAがない場合もあるとは思いますが、かなりの確率で、この3個のキーワードはセットになります。

雑駁な説明ですが、デバイスにはFDDや、HDDや、TAPEやAUDIOや、LANや、ブザーや、USBやその他、たくさん有ります。しかし、CPUに、デバイス毎の割り込み信号線「INT」があるかと言いますと、そんなに何本もありません。

じゃ、どうやって、多くの種類のデバイスの応答を識別するのか?というと、CPUじゃなくて、CPUを補佐する周辺回路で上手に、原因デバイスをCPUに伝えるような仕組みが組まれています。仮にFDDを1番、HDDを2番、TAPEを3番と言う番号で呼ぶとします。そうしますと、CPUへの通知としては、割り込みの何番が発生したかを、通知できれば、どのデバイスからの応答が来ているかをCPUが判断できます。上記の例なら、割り込み原因デバイスの番号が2番だったとしたら、割り込み原因はHDDだとわかります。

そこで、CPUの周辺回路は、割り込みの交通整理をしてメモリの何処かに何番の割り込みが来たかを書いてから、CPUの割り込み信号線をLOからHIにすれば、CPUは現在実行中の処理を中断し、その後、割り込み制御回路が、何番の割り込みだったかを書き残したメモリーをみて、割り込み原因デバイスを特定して、データの受領等の処理を行います。

例えば、HDDの所定のセクター読み出しの依頼をしてあってその処理結果として、読み出し成功と、読みだしたデータをデバイスから受け取るシーンを考えてみます。

まず、デバイスは応答として、処理結果OKと、読み出し要求の処理をして得た、読みだしたデータを、メモリーの所定の場所に書き込みます。この時デバイスやデバイス制御回路が用いるメカニズムがDMAです。

そして、デバイスやデバイス制御回路は、CPUのINT(割り込み信号線)をHIにしてあげます。そうしますと、CPUは所定のメモリーの記述にデバイス番号と、処理結果がOKかNGかをみて、OKなら、所定の場所に読み出されたデータがあるので、これを読み、これを処理するルーチンにデータを引き継ぎます。

過去の具体的な例として、ちょうど、そのへんの質疑がネットに見つかりましたので
そのWEBへのリンクを掲載します。IOポート番号とIRQについてのWEBです。ちなみにIRQとはInterrupt ReQuestだそうです。
http://oshiete.goo.ne.jp/qa/3859633.html

<ソフトウェア割り込み>
ソフトウェア割り込みは、OS(オペレーティングシステム等)でのシステムコール関連で使われるメカニズムです。

<割り込みに関する知識は、コンピュータの挙動を知る上で結構重要>
と言う事で、マイコンに限らずとも、コンピュータ全般における、ハード割り込みとソフト割り込みについての知識は、基軸の知識と言う事になりますが、この知識がないと、ソフトを記述することは出来ないのか?と言えば、そんな事は無くって、そんな事一切知らずとも出来るソフト関連の業務領域は広大です。

<割り込み処理を知っていると、なにが優位なの?>
割り込みに関する知識が必要な領域は何処なのか?といえば、セキュリティー領域とか、システムアナリストや、システム・アドミニストレータの高度な部分では、割り込み関連の知識を知らないとまずいでしょうね、と言う領域があると思います。

いわゆる、コンピューターの本質的挙動を理解する上では避けて通れない、知識領域の一つが割り込み処理なのですが、本質的挙動等は考えず、隠蔽されたブラックボックス内部の出来事として片付けてしまって、最終的に目に見える部分でのソフト業務従事者にとっては、不必要な知識領域です。

割り込み処理関連の知識領域とは、そういうものです。

ちなみに、TK-80でのワンステップ動作を実現するために使われている、割り込み処理について、具体的な解説がWIKIペディアでなされているのに気づきましたので、その場所を記します。

TK-80 Wikipedia  の記載の中で「シングルステップ実行」と言う章がありまして、そこで具体的な解説がなされていました。ちなみにこの解説の中でTK-80の回路図について若干言及されているようですので回路図に関するURLも記します。