(57)【要約】【課題】情報処理方法において、割込み処理でのスタックへのレジスタ退避を最小限に抑えることで、使用するメモリ容量を低減するとともにレジスタ退避によるオーバーヘッドを改善する。【解決手段】命令生成装置Ａはコンパイラ２により、ユーザが記述したソースファイル１から、ＣＰＵ９のレジスタが有効であるか否かを判定するとともに、各割込み処理にて値が変更されるレジスタを判定し、判定により得られた、レジスタが有効であるか否かの情報と、割込み処理にて値が変更されるレジスタの情報から、退避するレジスタが最も少ない位置でのみ割込みを許可する。【選択図】図１
2007304926.tif 000002
【特許請求の範囲】
【請求項１】
生成された命令に従って、少なくとも１つのレジスタを有するＣＰＵを用いて処理を行う情報処理方法であって、前記ＣＰＵの前記レジスタが有効であるか否かを判定するとともに、各割込み処理内にて値が変更されるレジスタを識別し、それらの情報に基づいて、退避するレジスタが少ない位置でのみ割込みを許可することを特徴とする情報処理方法。
【請求項２】
すべての割込み処理を割込み処理群としてグループ化し、そのグループ化された割込み処理群にて前記値が変更されるレジスタと前記有効なレジスタとを比較し、１つまたは複数の特定レジスタ以外のレジスタにおいては一致するレジスタが存在しない位置（両情報の論理積結果がオールゼロの位置）でのみ、すべての割込みを許可する請求項１に記載の情報処理方法。
【請求項３】
各割込み処理では、前記特定レジスタのみを退避／復帰する請求項２に記載の情報処理方法。
【請求項４】
すべての割込み処理を割込み処理群としてグループ化し、そのグループ化された割込み処理群にて前記値が変更されるレジスタと前記有効なレジスタとを比較し、一致するレジスタが存在しない位置（両情報の論理積結果がオールゼロの位置）でのみ、すべての割込みを許可する請求項１に記載の情報処理方法。
【請求項５】
各割込み処理では、前記レジスタの退避／復帰を抑止する請求項４に記載の情報処理方法。
【請求項６】
割込み処理毎に、割込み処理にて前記値が変更されるレジスタと前記有効なレジスタとを比較し、１つまたは複数の特定レジスタ以外のレジスタにおいては一致するレジスタが存在しない位置（両情報の論理積結果がオールゼロの位置）でのみ、その割込みを許可する請求項１に記載の情報処理方法。
【請求項７】
前記受理可能となる割込み処理では、前記特定レジスタのみを退避／復帰する請求項６に記載の情報処理方法。
【請求項８】
割込み処理毎に、割込み処理にて前記値が変更されるレジスタと前記有効なレジスタとを比較し、一致するレジスタが存在しない位置（両情報の論理積結果がオールゼロの位置）でのみ、その割込みを許可する請求項１に記載の情報処理方法。
【請求項９】
各割込み処理では、前記レジスタの退避／復帰を抑止する請求項８に記載の情報処理方法。
【請求項１０】
請求項１に記載の割込みを許可するか否かの判断を行い、割込みを許可する位置にのみ割込み許可命令を挿入する命令生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、１つ以上のレジスタを有するＣＰＵ（Central Processing Unit）を用いて処理を行う情報処理方法にかかわり、特には割込みの際のレジスタ退避についての効率化を図るための技術に関する。
【背景技術】
【０００２】
近年における情報処理方法での割込み技術は、入出力装置からのリクエストやインターバル・タイマ割込みなど、イベントに対するリアルタイムな応答を行うことを目的として、種々の用途に用いられている。
【０００３】
ＣＰＵにおける基本的な割込み制御には、割込みを受け付ける状態と割込みを受け付けない状態が存在する。通常、割込みを受け付ける状態であっても、割込み毎に、予め状態レジスタに設定されたマスクビットにより、割込みを許可しないことも可能である。また、ＣＰＵが割込みを受け付ける状態か割込みを禁止する状態かを選択する場合も、状態レジスタの書き込みを経由して制御を行っている。したがって、あるプロセスの実行中に割込み要求があった場合、そのプロセスが割込みを受け付け得る状態であって、かつ割込み要求信号がマスクされていないときに割込みが発生する。割込みが発生した場合、通常はしかるべき割込みハンドラに分岐するが、このときにユーザープログラムで使用していたレジスタおよび状態レジスタなどの資源が、割込みハンドラ内での処理中に破壊された場合には、割込みハンドラからの復帰後に、元のユーザープログラムの正常な実行を再開することができなくなる。
【０００４】
このため、割込み発生時には、必ず資源の退避が必要となる。しかし、資源が有効であるか無効であるかの区別がつかないので、実質、無効な資源を含んだ全資源を割込み受付け毎に退避している。
【０００５】
ある従来技術によれば、命令生成装置にＣＰＵのレジスタが有効であるか否かを判定する手段を設け、有効なレジスタの内容を選択的に退避させることで余分なレジスタ退避を少なくしている。また、有効なレジスタが最も少ない位置でのみ割込みを受理することで、レジスタの退避を少なくし、より高速に割込み処理を行うように工夫している（例えば、特許文献１参照）。
【特許文献１】特開２００２−１４０１９９号公報（第４−６頁、第１−８図）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、有効なレジスタのみを退避する場合においても、割込み処理で値が変わらないレジスタについては、実質、退避する必要はないはずである。それにもかかわらず、従来技術においては、退避する必要のないレジスタについても退避および復帰処理を行っている。その結果として、スタック消費量の増加に伴うメモリ容量の増加化とともに、割込み処理の効率低下を招いている。
【０００７】
したがって、本発明の目的は、割込み処理におけるスタックへのレジスタ退避を最小限に抑えることで使用するメモリ容量を低減し、またレジスタ退避によるオーバーヘッドを改善してシステム性能を向上させる情報処理方法を提供することにある。
【課題を解決するための手段】
【０００８】
本発明による情報処理方法は、生成された命令に従って、少なくとも１つのレジスタを有するＣＰＵを用いて処理を行う情報処理方法であって、前記ＣＰＵの前記レジスタが有効であるか否かを判定するとともに、各割込み処理内にて値が変更されるレジスタを識別し、それらの情報に基づいて、退避するレジスタが少ない位置でのみ割込みを許可することを特徴とするものである。
【０００９】
この情報処理方法において、レジスタが有効であることを示す情報と割込み処理で値が変更されるレジスタの情報との２系統の情報に基づいて、退避するレジスタが少ない位置（好ましくは退避するレジスタがゼロの位置）を割り出し、その位置でのみ割込みを許可するようになっている。有効なレジスタであってかつ値が変更されるレジスタの場合には、そのレジスタを退避しておく必要がある。これに対して、無効なレジスタは退避する必要がなく、加えて、有効なレジスタであるが値が変更されることのないレジスタの場合も退避する必要がない。レジスタが有効であることを示す情報と割込み処理で値が変更されるレジスタの情報とが一致するレジスタの場合には、退避／復帰命令の挿入位置の善し悪しを判断する必要がある。これに対して、レジスタが有効であることを示す情報と割込み処理で値が変更されるレジスタの情報とが一致しないレジスタの場合には、退避／復帰命令の挿入位置についてその善し悪しを判断する必要性が少ない。そこで、前記２つの情報が一致するレジスタが存在しない位置（両情報の論理積結果がオールゼロの位置）に限っては、すべての割込みを随時に許可してよいことになる。前記２つの情報が一致するレジスタが少ない位置を対象としてもよい。こうすることにより、より高速な割込み処理を実現することができる。
【００１０】
上記の情報処理方法において、すべての割込み処理を割込み処理群としてグループ化し、そのグループ化された割込み処理群にて前記値が変更されるレジスタと前記有効なレジスタとを比較し、１つまたは複数の特定レジスタ以外のレジスタにおいては一致するレジスタが存在しない位置（両情報の論理積結果がオールゼロの位置）でのみ、すべての割込みを許可するという態様がある。この態様においては、各割込み処理では、前記特定レジスタのみを退避／復帰することが好ましい。
【００１１】
これは、割込みの許可の判断において、特定レジスタと特定レジスタ以外とに分けて判断するものである。特定レジスタについては、そのレジスタの退避／復帰の命令を適用するが、特定レジスタ以外については、そのレジスタの退避／復帰を抑止する。こうすることにより、割込みの際に余分なレジスタまでも退避してしまうことに起因する性能劣化を回避することができる。その結果、スタック消費量を削減することが可能となり、使用するメモリ容量を低減することが可能となる。そして、ＣＰＵの状況に応じて、割込み処理の最適化を期待できる。
【００１２】
また、上記の情報処理方法において、すべての割込み処理を割込み処理群としてグループ化し、そのグループ化された割込み処理群にて前記値が変更されるレジスタと前記有効なレジスタとを比較し、一致するレジスタが存在しない位置（両情報の論理積結果がオールゼロの位置）でのみ、すべての割込みを許可するという態様がある。この態様においては、各割込み処理では、前記レジスタの退避／復帰を抑止することが好ましい。
【００１３】
これは、割込みの許可の判断において、上述のような特定レジスタと特定レジスタ以外とに分けることをせず、すべてのレジスタについて一律に判断するものである。レジスタが有効であることを示す情報と割込み処理で値が変更されるレジスタの情報とが一致するレジスタが存在しない位置（両情報の論理積結果がオールゼロの位置）では、退避／復帰命令の挿入位置についてその善し悪しを判断する必要性がなく、すべての割込みを許可するものである。
【００１４】
また、上記の情報処理方法において、割込み処理毎に、割込み処理にて前記値が変更されるレジスタと前記有効なレジスタとを比較し、１つまたは複数の特定レジスタ以外のレジスタにおいては一致するレジスタが存在しない位置でのみ、その割込みを許可するという態様がある。この態様においては、前記受理可能となる割込み処理では、前記特定レジスタのみを退避／復帰することが好ましい。
【００１５】
これは、すべての割込み処理をグループ化して一括管理することに代えて、割込み処理毎に管理するものであって、割込みの許可の判断において、特定レジスタと特定レジスタ以外とに分けて判断するものである。
【００１６】
また、上記の情報処理方法において、割込み処理毎に、割込み処理にて前記値が変更されるレジスタと前記有効なレジスタとを比較し、一致するレジスタが存在しない位置でのみ、その割込みを許可するという態様がある。この態様においては、各割込み処理では、前記レジスタの退避／復帰を抑止することが好ましい。
【００１７】
これは、すべての割込み処理をグループ化して一括管理することに代えて、割込み処理毎に管理するものであって、割込みの許可の判断において、上述のような特定レジスタと特定レジスタ以外とに分けることをせず、すべてのレジスタについて一律に判断するものである。
【００１８】
さらに、上記の情報処理方法において割込みを許可するか否かの判断を行い、割込みを許可する位置にのみ割込み許可命令を挿入するという命令生成方法も技術的に有用である。
【発明の効果】
【００１９】
本発明によれば、レジスタが有効であるか否かの情報と、割込み処理内にて値が変更されるレジスタの情報を用いて、例えば退避させるべきレジスタが存在しない位置でのみ割込みを許可することにより、割込み処理でのスタックへのレジスタ退避を回避することができる。その結果、スタック消費量を削減することが可能となり、使用するメモリ容量を低減することが可能となる。また、レジスタ退避を回避することで、より高速な割込み処理を実現することができる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明にかかわる情報処理方法の実施の形態について図面に基づいて詳細に説明する。
【００２１】
図１は本発明の一実施形態による情報処理方法を示す図である。
【００２２】
図１において、Ａは命令生成装置であり、ユーザにより記述されたソースファイル１と、ソースファイル１を翻訳するコンパイラ２と、コンパイラ２によりコンパイルして生成されるオブジェクトファイル３と、コンパイラ２により生成されるところの、割込み処理にて値が変更されるレジスタをまとめた変更レジスタ情報テーブル４と、レジスタが有効か否かをまとめた有効レジスタ情報テーブル５と、オブジェクトファイル３をリンクさせるリンカ６と、リンカ６により生成される実行形式ファイル７とからなる。
【００２３】
実行形式ファイル７は、命令メモリ８にロードされ、ＣＰＵ９により実行される。なお、命令生成装置Ａ以外の装置は一般的な構成をとるものとする。
【００２４】
（実施の形態１）
図２は実施の形態１における図１のソースファイル１の内容を模式的に示す図である。ここで、図２で示した機械語命令の意味は以下の通りである。
【００２５】
ＡＤＤ ＯＰ１，ＯＰ２：ＯＰ１＋ＯＰ２の内容をＯＰ２に転送
ＡＤＤ ＯＰ１，ＯＰ２，ＯＰ３：ＯＰ１＋ＯＰ２の内容をＯＰ３に転送
ＣＬＲ ＯＰ：ＯＰの内容を「０」にする
ＭＯＶ ＯＰ１，ＯＰ２：ＯＰ１の内容をＯＰ２に転送
ＭＯＶ ＯＰ,(ａｄｄｒ）：ＯＰの内容をａｄｄｒの指すアドレスに転送
ＩＮＣ４ ＯＰ：ＯＰの内容を４加算
ＮＯＰ：Ｎｏ Ｏｐｅｒａｔｉｏｎ
ＲＴＩ：割込みプログラムからの復帰
図２では、割込み処理の先頭と最後はそれぞれ（＿ＩＮＴ＿ＳＴＡＲＴ）、（＿ＩＮＴ＿ＥＮＤ）により明示させる。なお、割込み処理と非割込み処理の区別がつけられる方法であれば他の方法でもよい。
【００２６】
図２の機械語命令列から、コンパイラ２は、既存技術である命令毎の有効レジスタを判定する。命令毎の有効レジスタの判定の結果、図４に示す有効レジスタ情報テーブル５を作成する。図４において、ＣＰＵ９はレジスタＤ０，Ｄ１，Ｄ２，Ｄ３，Ａ０，Ａ１，Ａ２，Ａ３を有し、テーブル中「１」はレジスタが有効であることを、「０」は無効であることを示している。
【００２７】
また、図２の機械語命令列に対して、コンパイラ２は、（＿ＩＮＴ＿ＳＴＡＲＴ）から（＿ＩＮＴ＿ＥＮＤ）までの区間において、値が変更される可能性のあるレジスタを判定する手段を有し、その判定手順を図３に示す。
【００２８】
まず、図３において、（＿ＩＮＴ＿ＳＴＡＲＴ）を検出する（Ｓ１）と、次の命令から、命令毎にレジスタの値が変更される命令か否かを判定する（Ｓ２）。値が変更される命令であるとき、値が変更されるレジスタが、変更レジスタデータに登録済かどうか判定（Ｓ３）し、登録されていない場合は変更レジスタデータに登録する（Ｓ４）。そしてこれらの処理を（＿ＩＮＴ＿ＥＮＤ）が検出されるまで繰り返す。
【００２９】
コンパイラ２は、図２の機械語命令列に対して上記操作を施した結果、変更レジスタデータから図５に示す変更レジスタ情報テーブル４を作成する。図５において、ＣＰＵ９はレジスタＤ０，Ｄ１，Ｄ２，Ｄ３，Ａ０，Ａ１，Ａ２，Ａ３を有し、テーブル中「１」はレジスタの値が変更されることを、「０」はレジスタの値が変更されないことを示している。
【００３０】
コンパイラ２は、オブジェクトファイル３とともに、これらの変更レジスタ情報テーブル４と有効レジスタ情報テーブル５をリンカ６に渡す。
【００３１】
変更レジスタ情報テーブル４と、有効レジスタ情報テーブル５の情報を基に、リンカ６は、命令列中の既存技術である割込み許可命令（ＩＮＴ＿ＰＥＲＭＩＴ）に対して、配置する位置を以下のように決定する。ここで、割込み許可命令とは、この命令がデコードされた場合にのみ割込みが許可される制御が行われる命令である。
【００３２】
リンカ６は、図５の変更レジスタ情報テーブル４から得られる値と図４の有効レジスタ情報テーブル５から得られる値からレジスタ毎に論理積を計算する。その結果を図６に示す。そして図６において、すべての値が「０」になる位置を選出し、選ばれた命令の直前の位置に割込み許可命令ＩＮＴ＿ＰＥＲＭＩＴを挿入する。このとき、各割込み処理においては、レジスタの退避／復帰命令を挿入しなくてよい。
【００３３】
なお、リンカ６は図６において、例えばＤ０，Ａ３レジスタ以外のレジスタの値がすべて「０」になる位置を選出し、選ばれた命令の直前の位置に割込み許可命令ＩＮＴ＿ＰＥＲＭＩＴを挿入してもよい。この場合、各割込み処理においては、Ｄ０，Ａ３レジスタの退避／復帰命令を挿入し、その他のレジスタの退避／復帰命令は挿入しなくてよい。
【００３４】
実施の形態１では、すべての割込み処理をグループ化して一括管理するが、割込み処理毎に管理することも可能である。その方法を実施の形態２に説明する。
【００３５】
（実施の形態２）
図７は実施の形態２における図１のソースファイル１の内容を模式的に示す図である。
【００３６】
まず、ソースファイル作成時には、割込み処理の先頭と最後はそれぞれ（＿ＩＮＴ＿ＳＴＡＲＴ＿［ＩＮＴ＿ＮＯ］）、（＿ＩＮＴ＿ＥＮＤ＿［ＩＮＴ＿ＮＯ］）により割込み処理毎の処理を明示させる。ここで、［ＩＮＴ＿ＮＯ］は割込み番号を示し、それぞれの割込み処理毎に対応する割込み番号を付ける。
【００３７】
コンパイラ２は、既存技術である、命令毎の有効レジスタを判定する。命令毎の有効レジスタの判定の結果、図４に示す有効レジスタ情報テーブル５を作成する。図４において、ＣＰＵ９はレジスタＤ０，Ｄ１，Ｄ２，Ｄ３，Ａ０，Ａ１，Ａ２，Ａ３を有し、テーブル中「１」はレジスタが有効であることを、「０」は無効であることを示している。
【００３８】
また、図７の機械語命令列に対して、コンパイラ２は、ソースファイルをコンパイルする際、（＿ＩＮＴ＿ＳＴＡＲＴ＿［ＩＮＴ＿ＮＯ］）から（＿ＩＮＴ＿ＥＮＤ＿［ＩＮＴ＿ＮＯ］）までの区間において、値が変更される可能性のあるレジスタを判定する手段を有する。このとき、値が変更される可能性のあるレジスタは割込み番号毎に別々に判定する。その判定手段は図３に示される実施の形態１と同様である。
【００３９】
コンパイラ２は、図７の機械語命令列に対して上記操作を施した結果、変更レジスタデータから図８に示す変更レジスタ情報テーブル４を作成する。図８において、ＣＰＵ９はレジスタＤ０，Ｄ１，Ｄ２，Ｄ３，Ａ０，Ａ１，Ａ２，Ａ３を有し、テーブル中「１」はレジスタの値が変更されることを、「０」はレジスタの値が変更されないことを示している。
【００４０】
コンパイラ２は、オブジェクトファイル３とともに、これらの変更レジスタ情報テーブル４と有効レジスタ情報テーブル５をリンカ６に渡す。
【００４１】
変更レジスタ情報テーブル４と有効レジスタ情報テーブル５の情報を基に、リンカ６は、割込み許可命令に対して、配置する位置を以下のように決定する。ここで、割込み許可命令とは、この命令がデコードされた場合にのみ割込みが許可される制御が行われる命令である。
【００４２】
リンカ６は割込み処理毎に図８の変更レジスタ情報テーブル４から得られる値と図４の有効レジスタ情報テーブル５から得られる値からレジスタ毎に論理積を計算する。その結果を図９に示す。そして図９において、割込み番号毎にすべての値が「０」になる位置を選出し、選ばれた命令の直前の位置に割込み許可命令ＩＮＴ＿ＰＥＲＭＩＴ＿［ＩＮＴ＿ＮＯ］を挿入する。ここで、ＩＮＴ＿ＰＥＲＭＩＴ＿［ＩＮＴ＿ＮＯ］は、［ＩＮＴ＿ＮＯ］で示された割込み番号から、許可する割込み処理を特定し、該当割込みを許可する命令である。このとき、各割込み処理においては、レジスタの退避／復帰命令を挿入しなくてよい。
【００４３】
なお、リンカ６は図９において、割込み処理毎に、例えばint_handler1についてはＤ０レジスタ以外のレジスタの値がすべて「０」になる位置を選出し、int_handler2についてはＡ０レジスタ以外のレジスタの値がすべて「０」になる位置を選出し、選ばれた命令の直前の位置に割込み許可命令ＩＮＴ＿ＰＥＲＭＩＴ＿［ＩＮＴ＿ＮＯ］を挿入してもよい。この場合、それぞれの割込み処理にて、int_handler1についてはＤ０レジスタを、int_handler2についてはＡ０レジスタの退避／復帰命令を挿入し、その他のレジスタの退避／復帰命令は挿入しなくてよい。
【産業上の利用可能性】
【００４４】
本発明の情報処理方法は、レジスタを有するＣＰＵを搭載したシステムにおいて、例えば割込み処理でのレジスタ退避を回避することでスタック消費量を削減することが可能となり、使用メモリの削減が可能となるため、特に組込用途のマイクロコンピュータの省メモリ組込型システムにおいて、セットのコスト削減に繋がる。また、レジスタ退避を回避することにより、より高速に割込み処理を行うことができるため、特にリアルタイム性を求められるシステムにおいて有効である。
【図面の簡単な説明】
【００４５】
【図１】本発明の実施の形態における情報処理装置の概略構成を示す図
【図２】本発明の実施の形態１における、図１のソースファイルの内容を機械語命令列で模式的に示す図
【図３】図１のコンパイラによる変更レジスタの情報を判定する手順を示すフローチャート
【図４】図２の機械語命令列の有効レジスタ情報テーブルを示す図
【図５】本発明の実施の形態１における、図３の判定手順の結果得られた変更レジスタ情報テーブルを示す図
【図６】本発明の実施の形態１における、図４の有効レジスタ情報テーブルと、図５の結果の論理積を施した結果を示す図
【図７】本発明の実施の形態２における、図１のソースファイルの内容を機械語命令列で模式的に示す図
【図８】本発明の実施の形態２における、図３の判定手順の結果得られた変更レジスタ情報テーブルを示す図
【図９】本発明の実施の形態２における、図４の有効レジスタ情報テーブルと、図８の結果の論理積を施した結果を示す図
【符号の説明】
【００４６】
Ａ  命令生成装置
１  ソースファイル
２  コンパイラ
３  オーディオファイル
４  変更レジスタ情報テーブル
５  有効レジスタ情報テーブル
６  リンカ
７  実行形式ファイル
８  命令メモリ
９  ＣＰＵ
【図１】
2007304926.tif 000003
【図２】
2007304926.tif 000004
【図３】
2007304926.tif 000005
【図４】
2007304926.tif 000006
【図５】
2007304926.tif 000007
【図６】
2007304926.tif 000008
【図７】
2007304926.tif 000009
【図８】
2007304926.tif 000010
【図９】
2007304926.tif 000011