(57)【要約】【課題】シグナル番号が小さいほど優先度を高くみなして処理をするという制限を廃し、シグナル番号に任意の優先度を設定することができるようにする。【解決手段】シグナルを処理する際に、プロセスを管理する構造体に備わったシグナル番号と優先度との関係を管理するデータを参照する手順と、前記データに基づき前記シグナルを処理する手順とを備え、任意の優先度順に前記シグナルを処理することを特徴とするシグナル処理方法等、を提供する。【選択図】図１
2007280149.tif 000002
【特許請求の範囲】
【請求項１】
シグナルを処理する際に、プロセスを管理する構造体に備わったシグナル番号と優先度との関係を管理するデータを参照する手順と、
前記データに基づき前記シグナルを処理する手順とを備え、
任意の優先度順に前記シグナルを処理することを特徴とするシグナル処理方法。
【請求項２】
前記シグナル番号と優先度との関係を管理するデータの設定をプロセス毎に変更する手順を備え、
プロセス毎に任意の優先度順に前記シグナルを処理することを特徴とする請求項１に記載のシグナル処理方法。
【請求項３】
前記シグナルを受信した際は、前記シグナル番号に基づいて前記シグナルを管理する複数のキューにシグナル番号別に格納する手順を備えることを特徴とする請求項１または２に記載のシグナル処理方法。
【請求項４】
前記キューの先頭と終端とを管理するデータを参照する手順と、
簡易に未処理のシグナルの有無を判別する手順とを備えることを特徴とする請求項３に記載のシグナル処理方法。
【請求項５】
前記シグナルを受信した際は前記シグナル番号と優先度との関係を管理するデータを参照して、前記優先度に基づき優先度順に前記シグナルを管理する複数のキューに格納する手順を備えることを特徴とする請求項１または２に記載のシグナル処理方法。
【請求項６】
前記キューの先頭と終端とを管理するデータを参照する手順と、
優先度順に並んでいる複数のキューのうち前記シグナルが保留されているキューで最も優先度の高いものから処理する手順とを備え、
優先度別に保留されているシグナルの有無を管理するデータを参照することなく前記シグナルを処理することを特徴とする請求項５に記載のシグナル処理方法。
【請求項７】
前記シグナル番号と優先度との関係を管理するデータを変更した際、前記キューを前記シグナル番号と優先度との関係を管理するデータに基づき入れ替えることを特徴とする請求項５または６に記載のシグナル処理方法。
【請求項８】
プロセスを管理する構造体に、シグナル番号と優先度との関係を管理するデータを備え、
シグナルを処理する際に前記データを参照する手段と、
前記データに基づきシグナルを処理する手段とを備え、
任意の優先度順にシグナルを処理することを特徴とするシグナル処理装置。
【請求項９】
前記シグナル番号と優先度との関係を管理するデータの設定をプロセス毎に変更する手段を備え、
プロセス毎に任意の優先度順に前記シグナルを処理することを特徴とする請求項８に記載のシグナル処理装置。
【請求項１０】
前記シグナル番号に基づいて前記シグナルを管理するキューを複数備え、
前記シグナルを受信した際はシグナル番号別にキューに格納する手段を備えることを特徴とする請求項８または９に記載のシグナル処理装置。
【請求項１１】
前記キューの先頭と終端とを管理するデータを参照する手段と、
簡易に未処理のシグナルの有無を判別する手段とを備えることを特徴とするシグナル処理装置。
【請求項１２】
優先度順に前記シグナルを管理する複数のキューを備え、
前記シグナルを受信した際は前記シグナル番号と優先度との関係を管理するデータを参照して優先度に基づき前記キューに格納する手段を備えることを特徴とする請求項８または９に記載のシグナル処理装置。
【請求項１３】
前記キューの先頭と終端とを管理するデータを参照する手段と、
優先度順に並んでいる複数のキューのうちシグナルが保留されているキューで最も優先度の高いものから処理する手段とを備え、
優先度別に保留されているシグナルの有無を管理するデータを参照することなく前記シグナルを処理することを特徴とする請求項１２に記載のシグナル処理装置。
【請求項１４】
前記シグナル番号と優先度との関係を管理するデータを変更した際、前記キューを前記シグナル番号と優先度との関係を管理するデータに基づき入れ替えることを特徴とする請求項１２または１３に記載のシグナル処理装置。
【請求項１５】
シグナルを処理する際に、プロセスを管理する構造体に備わったシグナル番号と優先度との関係を管理するデータを参照する手順と、
前記データに基づき前記シグナルを処理する手順とを備え、
任意の優先度順に前記シグナルを処理するシグナル処理方法をコンピュータに実行させることを特徴とするプログラム。
【請求項１６】
前記シグナル番号と優先度との関係を管理するデータの設定をプロセス毎に変更する手順を備え、
プロセス毎に任意の優先度順にシグナルを処理するシグナル処理方法をコンピュータに実行させることを特徴とする請求項１５に記載のプログラム。
【請求項１７】
前記シグナルを受信した際は、前記シグナル番号に基づいてシグナルを管理する複数のキューにシグナル番号別に格納する手順を備えるシグナル処理方法をコンピュータに実行させることを特徴とする請求項１５または１６に記載のプログラム。
【請求項１８】
前記キューの先頭と終端とを管理するデータを参照する手順と、
簡易に未処理のシグナルの有無を判別する手順とを備えたシグナル処理方法をコンピュータに実行させることを特徴とする請求項１７に記載のプログラム。
【請求項１９】
前記シグナルを受信した際は、前記シグナル番号と優先度との関係を管理するデータを参照して優先度に基づき優先度順に前記シグナルを管理する複数のキューに格納する手順を備えるシグナル処理方法をコンピュータに実行させることを特徴とする請求項１５または１６に記載のプログラム。
【請求項２０】
前記キューの先頭と終端とを管理するデータを参照する手順と、
優先度順に並んでいる複数のキューのうち前記シグナルが保留されているキューで最も優先度の高いものから処理する手順とを備え、
優先度別に保留されているシグナルの有無を管理するデータを参照することなく前記シグナルを処理するシグナル処理方法をコンピュータに実行させることを特徴とする請求項１９に記載のプログラム。
【請求項２１】
前記シグナル番号と優先度との関係を管理するデータを変更した際、前記キューを前記シグナル番号と優先度との関係を管理するデータに基づき入れ替えるシグナル処理方法をコンピュータに実行させることを特徴とする請求項１９または２０に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はシグナル処理方法、シグナル処理装置及びプログラムに関し、例えば、優先度を考慮したシグナル処理を行うために用いて好適な技術に関する。
【背景技術】
【０００２】
従来のコンピュータ技術、例えばLinuxにおいては、シグナル処理は通常のシグナルの処理とリアルタイムシグナルの処理に分かれる。以下、Linux2.4および非特許文献１を参照し、シグナル処理について記す。
【０００３】
シグナルはプロセスやプロセスのグループに送信する短いメッセージである。プロセスに渡す情報は、通常、シグナル番号のみである。例えば、Intel80x86アーキテクチャ用Linuxでは、シグナルに１番から６３番までの番号を割り当てている。プロセスは、シグナル番号を受信し、その番号を処理するプログラム（普通、ハンドラもしくはシグナルハンドラと呼ばれる）でシグナル番号に応じた処理を行う。
【０００４】
Linuxでは１から３１の番号のシグナルは、受信後キューイングされることなく処理される。しかし、キューイングされないため、例えば同一番号の２つ以上のシグナルがほぼ同時に送信された場合、処理されない可能性がある。
【０００５】
シグナルの一種として、リアルタイムシグナルが規定されている。リアルタイムシグナルはIEEE（Institute of Electrical and Electronic Engineers、http://www.ieee.org）が策定したPOSIX（Portable Operating System Interface for UNIX（登録商標）、http://posixcertified.ieee.org/）内で規定されている。リアルタイムシグナルは、通常のシグナルと異なり、同じ種類のシグナルでもキューイングされるので、２つ以上を受信可能である。
【０００６】
Linuxではリアルタイムシグナルに３２から６３のシグナル番号が割り当てられ、POSIXに準拠した実装がなされている。Linux 2.4.20-8におけるシグナル関連のデータ構造を図１６に示す。図中の破線は構造体を実体として持つことを示すとし、矢印はポインタとして持つことを示す。
【０００７】
プロセスディスクリプタには、sighand_struct構造体へのポインタであるsighandと、sigpending構造体であるpendingがある。sighandには、シグナルを共有しているプロセス数を示すcount、シグナルごとの処理方法が記述されているactionが含まれる。actionは６４個の配列である。pendingには、処理待ちしているリアルタイムシグナルが保持される。pending中のsignalは、保留中のリアルタイムシグナルをシグナル番号毎にビットマップで管理する。
【０００８】
保留中のリアルタイムシグナルは、sigqueue構造体を用いたキュー（連結リスト）で管理される。このキューの最大長は、デフォルトで１０２４である。sigqueue構造体中のinfoには、シグナル番号など、リアルタイムシグナルに関する情報が格納される。Linuxにおいて、リアルタイムシグナルは小さい番号を優先して処理される。すなわち、ペンディング中のsignalを参照し、もっとも小さいシグナル番号を検索し、そのシグナル番号を持つリアルタイムシグナルについて処理を行う。ペンディング中のsignalにおいて立ったビットがなくなるまで、すなわち保留中のリアルタイムシグナルがなくなるまで、処理は継続される。
【０００９】
コンピュータにおいて優先度を考慮した処理はよく行われる。例えば、特許文献１では、プロセス間で通信を行うプロセス間通信方式において、メッセージについて優先度を考慮した処理を行っている。送信プロセスがメッセージキューにメッセージを送信したのち、送信プロセスが受信プロセスにシグナルを送信する。受信プロセスはシグナルをきっかけとし、シグナルを受信したらメッセージキューを探索する。
【００１０】
受信プロセスはメッセージキューからメッセージを取得し、メッセージの優先度を解析し、優先度に応じた処理を行う。特許文献１において、シグナルはメッセージを処理するよう受信プロセスに通知するのみであり、シグナル自体を優先度別に処理するという提案ではない。
【００１１】
【特許文献１】特開平７−８４８０４号公報
【非特許文献１】Daniel P. Bovet, Marco Cesati著、高橋  浩和  監訳、  "１０章  シグナル"、  詳解Linuxカーネル第２版、pp.351-384、発行所：株式会社オライリー・ジャパン、発売元：株式会社オーム社、ISBN4-87311-133-1（2004）
【発明の開示】
【発明が解決しようとする課題】
【００１２】
以上述べたように、従来はリアルタイムシグナルの処理について、制限のある優先度処理が行われていた。つまり、シグナル番号が小さいほうが優先度は高いとして処理していた。このため、例えばシグナル番号が大きいリアルタイムシグナルについて優先度を高くして処理を行う、というニーズに対して応えることができなかった。
【００１３】
また、既存のリアルタイムシグナルの処理については、全てのプロセスで同じアルゴリズムを用いていた。つまり、全てのプロセスでは、シグナル番号が小さいほうを優先的に処理しており、プロセス毎にシグナル番号についての優先度を変えて処理するということができなかった。
【００１４】
本発明は前述の問題点に鑑み、シグナル番号が小さいほど優先度を高くみなして処理をするという制限を廃し、シグナル番号に任意の優先度を設定することができるようにすることを目的としている。
【課題を解決するための手段】
【００１５】
前記課題を解決するために本発明は、シグナルを処理する際に、プロセスを管理する構造体に備わったシグナル番号と優先度との関係を管理するデータを参照する手順と、前記データに基づき前記シグナルを処理する手順とを備え、任意の優先度順に前記シグナルを処理することを特徴とするシグナル処理方法等、を提供する。
【発明の効果】
【００１６】
本発明によれば、シグナル番号と優先度の関係を管理するデータを設け、該データに従ってリアルタイムシグナルを優先的に処理することが可能となり、シグナル番号が小さいほど優先度が高いと見なしてしか処理しない、という制限を撤廃し、シグナル番号に任意の優先度を設定可能になる、という効果が得られる。
【００１７】
また、該データを各プロセスに備えることにより、プロセス毎にシグナル番号と優先度の関係を設定することが可能となり、プロセス毎に同一のシグナル番号でも異なった優先度で処理することが可能となる、という効果が得られる。上記処理により、例えば、リアルタイムシグナルを用いるアプリケーションにおいて、プロセス毎に、任意に、特定のシグナルに対するレスポンスの向上を図ることなどが可能となる。
【発明を実施するための最良の形態】
【００１８】
（第１の実施形態）
以下、本発明の実施形態を、図面を参照しながら説明する。先に、本項で用いるシグナル処理端末（機器）の一般的な構成について説明し、後に、該端末上で動作する実施形態について説明する。
【００１９】
図１は、本実施携帯におけるシグナル処理端末（機器）の一般的な構成を示すブロック図である。
ＣＰＵ１０１がシグナル処理端末１の全体の動作を制御する。ＲＡＭ１０２は一時記憶装置（Random Access Memory）であり、ＲＯＭ１０３はプログラムなど、消去不可能なデータが組み込まれている不揮発性メモリ（Read Only Memory）である。
【００２０】
バス１０４は、各モジュールを接続する内部バスである。ネットワークインタフェース１０５は、端末１が外部機器とデータ送受信を行う際に使用するインタフェースである。記録装置１０６は、例えばハードディスクなどであり、読み書きが可能で、電源を落としても記録された内容は消えないものとする。記録装置１０６には、文書データやコンテンツデータなどが記録されているものとする。さらに、ディスプレイやキーボード、マウス、プリントアウト部といった入出力機器用のインタフェースなどを備えていてもよい。
【００２１】
シグナル処理端末１において、本実施形態を実行するオペレーティングシステム（以下ＯＳ）が動作する。図２に、キューを１本用いて本本実施形態のデータ構造の例を示す。プロセスディスクリプタおよびsigqueue構造体の構成については、従来例において述べたものと同様であるとする。通常、図２に示すデータは、機器１のＲＡＭ１０２内にて管理される。
【００２２】
プロセスディスクリプタ２０１には、保留中のリアルタイムシグナルを保存する構造体２０２がある。構造体２０２の構成を、構造体２１１にて示す。図中の破線は構造体がポインタではなく実体として実装されていることを示している。なお、本実施形態では、プロセスディスクリプタ内に実体として実装しているが、ポインタとして実装してもよい。
【００２３】
構造体２１１は、シグナル番号と優先度の関係を管理するデータ２１２と、どの優先度のシグナルがキューに入ったかを管理するデータ２１３と、キューの先頭となるsigqueue構造体を指し示すポインタ２１４と、キューの終端となるsigqueue構造体を指し示すポインタ２１５とから成る。
【００２４】
図２においては、ポインタ２１４はsigqueue構造体２２１を指し、sigqueue構造体２２１のnextポインタは、次のsigqueue構造体２２２を指す。sigqueue構造体２２２のnextポインタはNULLとする。ポインタ２１５はリストの終端のsigqueue構造体２２２を指す。
【００２５】
本実施形態では、仮に、sigqueue構造体２２１にはシグナル番号３２のリアルタイムシグナルが記録されているとし、同様にsigqueue構造体２２２にはシグナル番号３３が記録されているとする。また、図２では、infoの後のかっこ内の数字が、リアルタイムシグナルのシグナル番号を示すとする。
【００２６】
シグナル番号と優先度との関係を管理するデータ２１２の例を、図３に示す。図３に示すような、シグナル番号と優先度との関係を管理するデータを、仮に「優先度配列」と本実施形態では呼称することとする。
本実施形態では、図３に示す優先度配列は、図２のデータ２１２の箇所に格納される。図３に示すものは、整数３２個の要素からなる配列である。３２個という個数は、Linuxにおけるリアルタイムシグナルの番号の個数が３２個のためである。つまり、リアルタイムシグナルの番号と優先度を１対１に関連づけるため、リアルタイムシグナルの番号の個数と同数の要素を用意する。
【００２７】
管理する番号の個数が３２個と異なる場合、配列の要素数を増減させることは何ら問題ない。また、整数３２個から成る配列としたが、シグナル番号を管理できればよいため、char型でもunsigned型でも、全てのシグナル番号を管理可能ならば型の制限はない。図３の配列において、インデクスが小さいほど優先度が高いとする。
【００２８】
インデクスは、図３においてかぎ括弧（[]）内の番号である。例えば、図３ではインデクス０の要素として６３が、インデクス１の要素として３２が、以下省略してインデクス３１の要素として３３が格納されている。また、６３、３２、３３はシグナル番号を示す。
【００２９】
図３によれば、シグナル番号６３はインデクス０に格納されているため、他の（リアルタイムシグナルの）番号よりも優先されることを示すとする。同様に、シグナル番号３３はインデクス３１の要素として格納されているため、最低の優先度と見なされる。
【００３０】
図４に、プロセスがリアルタイムシグナルを受信したときの動作を表したフローチャートを示し、受信時の動作について説明する。
ステップＳ１０１にて開始後、ステップＳ１０２において、ＣＰＵ１０１はプロセスに送信されてきたリアルタイムシグナルに関する情報を、ＲＡＭ１０２内のキューに格納する。格納方法としては、単にキューの終端に新しいsigqueue構造体を追加するものとする。図２においては、ＣＰＵ１０１はsigqueue構造体２２２の次に、受信したリアルタイムシグナルに関するsigqueue構造体を追加する。
【００３１】
ＣＰＵ１０１は、新しいsigqueue構造体を追加すると、キューの最後のsigqueue構造体を指し示すポインタ２１５とsigqueue構造体２２２のnextポインタを、新しく追加したsigqueue構造体を指すよう修正する。ステップＳ１０２の処理を図２に対して行った結果のデータ構造を、図５に示す。新しく追加した構造体をsigqueue構造体２２３とする。
【００３２】
ステップＳ１０３において、ＣＰＵ１０１は、ＲＡＭ１０２内にある図３に示す優先度配列を参照し、キューに格納されたシグナルに関する情報のうち、シグナル番号をキーとして、それに応じた優先度を取得する。本実施形態では、配列のインデクスを得るとする。例えば、シグナル番号６３のリアルタイムシグナルが新規に受信されたとすると、図３ではシグナル番号６３は[０]に格納されているため、ＣＰＵ１０１は配列のインデクスを参照して０を得る。本実施形態では、このインデクスが優先度を示す。
【００３３】
ステップＳ１０４において、ＣＰＵ１０１は、ステップＳ１０３において取得したインデクスに応じたデータを加える。本実施形態では、図２のデータ２１３はビットマップであるとし、その構成例を図６に示す。このビットマップを、本実施形態では「優先度ビットマップ」と呼称することとする。
【００３４】
図６に示す優先度ビットマップは３２ビットからなるビットマップであり、ビット０がシグナル番号３２のリアルタイムシグナルの有無を、ビット１がシグナル番号３３のリアルタイムシグナルの有無を、以下同様にビット３１がシグナル番号６３のリアルタイムシグナルの有無を示すとする。リアルタイムシグナルがある場合、ビットを立て（普通、値を１にする）、ない場合、ビットを落とす（普通、値を０にする）。図６では、黒く塗った箇所のビットの値が１であるとする。
【００３５】
本実施形態の場合、ビット０、１のビットが立っており、ステップＳ１０４の操作でビット３１のビットが立つこととなる。ＣＰＵ１０１の操作としては、ステップＳ１０３において取得したインデクスと同じビットに、値１を書き込むこととなる。以上の操作を行い、ステップＳ１０５に遷移し終了となる。
【００３６】
次に、図７を用いて、優先度順にリアルタイムシグナルを処理する手順について説明する。
図７のステップＳ２０１にて開始後、ステップＳ２０２において、ＣＰＵ１０１は保留中のリアルタイムシグナルがあるか否かをチェックする。本実施形態では、図６に示した優先度ビットマップのビットが立っているかどうかチェックする。具体的にはＣＰＵ１０１が優先度ビットマップについて、同じビットサイズ（本実施形態では３２ビット）で全てのビットが１の値とＡＮＤを取り、０でなければビットが立っていることとなる。
【００３７】
このチェックの結果、ビットが１つも立っていない場合、ステップＳ２０３に遷移し、何もせず終了となる。一方、ビットが立っている場合、ステップＳ２０４に遷移する。図６に示すように３つのビットが立っている場合は、ステップＳ２０４に遷移する。
【００３８】
ステップＳ２０４において、保留中のリアルタイムシグナルのうち、優先度の最も高いもののシグナル番号を取得する。具体的には、ＣＰＵ１０１が優先度ビットマップとＡＮＤを取ることで実現できる。図６に示す優先度ビットマップでは、もっともビットが小さいものが優先度が高いとしたので、ビット０にあたるシグナル番号を取得することとなる。
【００３９】
ビット０にあたるシグナル番号は、図３に例示した優先度配列において、ビットの番号をインデクスと見なすことより、インデクス０に格納されている値をシグナル番号と見なすこととなる。図３より、ＣＰＵ１０１はビット０すなわちインデクス０に格納されている値を参照し、６３という値を取得する。シグナル番号を取得後、ステップＳ２０５に遷移する。
【００４０】
ステップＳ２０５において、キューに格納されているシグナルについて処理を行う。本実施形態では、ステップＳ２０４においてシグナル番号６３を取得したので、この番号について処理を行う。具体的には、図５におけるsigqueue構造体から成るキューを走査し、sigqueue構造体２２３がシグナル番号６３にあたるので、sigqueue構造体２２３についてＣＰＵ１０１が処理を行う。ＲＡＭ１０２内のsigqueue構造体２２３について、キューから取り外してから処理を行ってもいいし、処理を行ってから取り外してもよい。一般には、取り外してから処理を行う。シグナルについて処理を行ったら、ステップＳ２０６に遷移する。
【００４１】
ステップＳ２０６において、キューに同じシグナル番号で、未処理のシグナルがあるか否かをチェックする。本実施形態では、ＣＰＵ１０１がキューを走査してsigqueue構造体内のシグナル番号と、処理した（本実施形態の場合、シグナル番号６３）シグナル番号を比較することとする。このチェックの結果、同一のシグナルがあればＹＥＳとなりステップＳ２０２に遷移し、なければＮＯとなりステップＳ２０７に遷移する。
【００４２】
ステップＳ２０７において、処理完了後の操作を行う。本実施形態では、図６に示した優先度ビットマップのビット０のビットを落とす。具体的には、ＣＰＵ１０１がビット０に値０を書き込む。ステップＳ２０７において終了後、ステップＳ２０２に遷移する。
【００４３】
以下、本実施形態において、新たなリアルタイムシグナルを受信しないとすると、上記と同様にしてシグナル番号３２、次にシグナル番号３３のリアルタイムシグナルが処理され、ステップＳ２０３に遷移して終了となる。
【００４４】
ステップＳ２０６およびステップＳ２０７の処理は、アトミックに行う必要がある。例えばあるシグナル番号（例えば４０番とする）のシグナルについて全て処理し、ステップＳ２０７にてビットを落とす直前に新しく同じ（４０番の）リアルタイムシグナルを受信し、その直後にビットを落とした場合、新しく受信したリアルタイムシグナルは、もう１つ同じシグナル番号のリアルタイムシグナルを受信しないかぎり処理されない。
【００４５】
また、本実施形態では受信した各シグナル番号のリアルタイムシグナルの個数を管理しなかったが、してもよい。その場合、ステップＳ２０６における処理は、その個数を参照することで処理が可能である。さらに、図３で示した優先度配列と図６で示した優先度ビットマップを書き換えることにより、ＯＳが動作中でも優先度の変更が可能である。以上のようにして、優先度に応じた処理がなされる。
【００４６】
（第２の実施形態）
前記第１の実施形態では、単一のキューを用いた場合について説明した。本実施形態では複数のキューを用意し、シグナル番号を用いてキューを管理する場合について説明する。
本実施形態で用いるデータ構造の例を図８に示す。２０１から２１３までは図２と同じため、説明を省略する。
【００４７】
データ３０１からデータ３０４までは、シグナルをシグナル番号順に格納するためのデータである。例えば、データ３０１はシグナル番号３２のシグナルを格納するためのデータであり、図８に示すとおり、キューの先頭と終端を示すポインタを格納するデータ３１１とデータ３１２へのポインタが格納される。データ３１１とデータ３１２はsigqueue構造体へのポインタであり、図８ではsigqueue構造体３１３を指す。データ３０２、データ３２１、データ３２２、データ３２３の組みも同じ構造である。
【００４８】
格納するsigqueue構造体がない場合、データ３３１およびデータ３３２のように先頭と終端を指すポインタにはNULLが格納される。図８ではシグナル番号３２、３３のリアルタイムシグナルが１つずつ保留されている場合を示している。
【００４９】
図９に、プロセスがリアルタイムシグナルを受信したときの動作を表したフローチャートを示し、動作について説明する。ステップＳ３０１以外は図４の場合と同様のため、ステップＳ３０１についてのみ説明する。
ステップＳ３０１において、ＣＰＵ１０１は受信したシグナルのシグナル番号を参照し、対応するキューに新たなsigqueue構造体を追加する。例えば、新たにシグナル番号６３のリアルタイムシグナルを受信した場合、図１０に示すように、sigqueue構造体３３３が追加される。
【００５０】
リアルタイムシグナルを処理する手順について図７を参照しながら説明する。本実施形態において、処理の流れは図７に示したのと同じであるが、具体的な処理が異なる点があるので、その点について説明する。ステップＳ２０４まで、およびステップＳ２０７以降は同じであるため、説明を省略する。
【００５１】
ステップＳ２０５において、キューに格納されているシグナルについて処理を行う。本実施形態では図８や図１０に示すように、シグナル番号別にキューに格納されている。そのため、ＣＰＵ１０１は、ステップＳ２０４において取得したシグナル番号より、リアルタイムシグナルについての情報が格納されているキューを選択し、そのキュー内のsigqueue構造体を参照して処理を行う。前記第１の実施形態と同じ優先度ビットマップと優先度配列を用いた場合、図１０において、ステップＳ２０４で取得したシグナル番号は６３なので、sigqueue構造体３３３について処理を行うこととなる。処理を行ったらステップＳ２０６に遷移する。
【００５２】
ステップＳ２０６において、キューに同じシグナル番号で、未処理のシグナルがあるか否かをチェックする。本実施形態では、sigqueue構造体の有無は、sigqueue構造体へのポインタをチェックすれば容易に判別可能である。この場合、データ３３１と３３２を参照し、sigqueue構造体を指していないので未処理のシグナルがないことがわかる。このように、同一のシグナル番号について、保留中のシグナルの有無の確認が容易になるため、前記第１の実施形態で注記した保留中のシグナルの個数を管理しなくともよくなる。
【００５３】
以上、複数のキューを用意し、シグナル番号順にキューを管理する場合について説明した。前記第１の実施形態と比較し、シグナル番号別にキューを分けて管理するため、未処理のシグナルの有無を確認する処理が簡易となる。
【００５４】
（第３の実施形態）
本実施形態では複数のキューを用意し、優先度順にキューを管理する場合について説明する。本実施形態で用いるデータ構造の例を図１１に示す。２０１から２１３までは図２と同じため、説明を省略する。
【００５５】
データ４０１からデータ４０４までは、シグナルを優先度別に格納するためのデータである。例えば、データ４０１は優先度０、すなわち優先度が最も高いシグナルについてのキューを格納するデータであり、データ４０２は優先度１、つまり優先度が２番目に高いシグナルについてのキューを格納する。以下同様に続き、データ４０４では優先度３１、つまり最低の優先度のシグナルを格納する。図１１では、図３に示した優先度配列に基づいて、シグナル番号３２、３３のリアルタイムシグナルが１つずつ保留されている場合を示している。
【００５６】
図１２を用いて、プロセスがリアルタイムシグナルを受信したときの動作を表したフローチャートを示す。図１２において、ステップＳ１０１、ステップＳ１０４、ステップＳ１０５の処理は図４と同じため、その部分の説明は省略する。
【００５７】
図１２において、ステップＳ１０１にて開始後、ステップＳ４０１において、ＣＰＵ１０１は受信したシグナルのシグナル番号を参照し、それに応じた優先度を取得する。前記第１の実施形態と同じ優先度配列（図３）を用いるとすると、例えばシグナル番号６３のリアルタイムシグナルを受信した場合、図３を参照して優先度０を取得する。取得後、ステップＳ４０２に遷移する。
【００５８】
ステップＳ４０２において、優先度に応じたキューに格納する。シグナル番号６３のリアルタイムシグナルを受信した場合、ステップＳ４０１において優先度０を取得したので、図１１のデータ４０１が指すキューに格納することとなる。格納後のデータ構造を、図１３に示す。
【００５９】
次に、図１４を用いてリアルタイムシグナルを処理する手順について説明する。図１４はほぼ図７と同様であるが、図７のステップＳ２０４とステップＳ２０５がステップＳ５０１に置き換わったので、その点について説明する。
【００６０】
図７のステップＳ２０４では保留中のリアルタイムシグナルのうち、優先度の最も高いもののシグナル番号を取得した。また、ステップＳ２０５ではキューに格納されているシグナルについて処理を行っていた。本実施形態では、シグナルについての情報は優先度別にキューに分かれているため、図７のステップＳ２０４およびステップＳ２０５で行っていた、優先度配列を参照する処理が必要ない。
【００６１】
ステップＳ５０１において、図６で示す優先度ビットマップを参照し、ビットが立っている中で優先度が最も高いキューを参照し、そのキューに格納されているsigqueue構造体に基づき、シグナルを処理する。シグナル番号はsigqueue構造体にて管理されているので、それを参照すればシグナル番号別の処理が行える。
【００６２】
本実施形態において、ＯＳ起動中に優先度を変更する場合、図３で例示した優先度配列、図６で示した優先度ビットマップの変更に加え、キューの入れ替えを行う必要がある。ただし、キューそのものはポインタを用いて指定されているため、図１１および図１３のデータ４０１〜４０４のポインタを、新たな優先度に基づいて指定しなおすのみで、キューの入れ替えは実現できる。キューの入れ替えを行う際は、新たなリアルタイムシグナルを受信しないようにロックを行う必要がある。
【００６３】
以上、複数のキューを用意し、優先度順にキューを管理する場合について説明した。本実施形態では優先度順にキューが並んでいるため、sigqueue構造体を指すポインタ（図１１および図１３の４１１、４１２、４２１、４２２、４３１、４３２）を優先度順にNULLかどうか判別すれば、例えば図６で示したような優先度ビットマップを参照せずとも優先度順にシグナルの処理が行える。
【００６４】
（第４の実施形態）
前記第１から第３の実施形態において、優先度を管理するデータはプロセスディスクリプタに付加されていた。このため、プロセス毎に優先度を設定することは可能であった。本実施形態では、プロセス毎に優先度が異なる場合について説明する。
【００６５】
プロセスＡとプロセスＢがあり、プロセスＡでは図３に例示する優先度配列を、プロセスＢでは図１５に例示する優先度配列を用いるとする。それぞれ、インデクスが０の箇所に入る値が最も優先度が高いと見なし、逆にインデクスが３１の箇所に入る値が最も優先度が低いと見なすとする。
【００６６】
以上のように優先度について設定したとすると、同じシグナル番号６３番を受信しても、プロセスＡでは最も優先度が高いとして処理されるのに対し、プロセスＢでは最も優先度が低いとして処理される。このようにして、プロセス毎に、任意の優先度をもってシグナル処理を行うことが可能となる。
【００６７】
（本発明に係る他の実施形態）
前述した本発明の実施形態におけるシグナル処理装置を構成する各手段、並びにシグナル処理方法の各手順は、コンピュータのＲＡＭやＲＯＭなどに記憶されたプログラムが動作することによって実現できる。このプログラム及び前記プログラムを記録したコンピュータ読み取り可能な記録媒体は本発明に含まれる。
【００６８】
また、本発明は、例えば、システム、装置、方法、プログラムもしくは記録媒体等としての実施形態も可能であり、具体的には、複数の機器から構成されるシステムに適用してもよいし、また、一つの機器からなる装置に適用してもよい。
【００６９】
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラム（実施形態では図４、７、９、１２、１４に示すフローチャートに対応したプログラム）を、システムまたは装置に直接、または遠隔から供給する。そして、そのシステムまたは装置のコンピュータが前記供給されたプログラムコードを読み出して実行することによっても達成される場合を含む。
【００７０】
したがって、本発明の機能処理をコンピュータで実現するために、前記コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
【００７１】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等の形態であってもよい。
【００７２】
プログラムを供給するための記録媒体としては、例えば、フロッピー（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスクなどがある。さらに、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ、ＤＶＤ−Ｒ）などもある。
【００７３】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続する方法がある。そして、前記ホームページから本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。
【００７４】
また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも、本発明に含まれるものである。
【００７５】
また、その他の方法として、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記録媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせる。そして、その鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
【００７６】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。さらに、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【００７７】
さらに、その他の方法として、まず記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。そして、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現される。
【図面の簡単な説明】
【００７８】
【図１】本発明の第１の実施形態のシグナル処理端末（機器）の機能構成例を示すブロック図である。
【図２】本発明の第１の実施形態において、キューが１本の場合のデータ構造の例を示す図である。
【図３】本発明の第１の実施形態において、シグナル番号と優先度との関係を管理するデータの一例を示す図である。
【図４】本発明の第１の実施形態において、プロセスがリアルタイムシグナルを受信したときの動作の一例を示すフローチャートである。
【図５】図２のデータ構造に、新たにsigqueue構造体を追加した場合のデータ構造の例を示す図である。
【図６】本発明の第１の実施形態において、優先度別に、保留されているシグナルの有無を管理するデータの一例を示す図である。
【図７】本発明の第１の実施形態において、リアルタイムシグナルを処理する手順の一例を示すフローチャートである。
【図８】本発明の第２の実施形態において、複数のキューを用い、シグナル番号を用いてキューを管理する場合のデータ構造の例を示す図である。
【図９】本発明の第２の実施形態において、複数のキューを用い、シグナル番号を用いてキューを管理する場合に、プロセスがリアルタイムシグナルを受信したときの動作の一例を示すフローチャートである。
【図１０】図８のデータ構造に、新たにsigqueue構造体を追加した場合のデータ構造の例を示す図である。
【図１１】本発明の第３の実施形態において、複数のキューを用い、優先度を用いてキューを管理する場合のデータ構造の例を示す図である。
【図１２】本発明の第３の実施形態において、複数のキューを用い、優先度を用いてキューを管理する場合に、プロセスがリアルタイムシグナルを受信したときの動作の一例を示すフローチャートである。
【図１３】図１１のデータ構造に、新たにsigqueue構造体を追加した場合のデータ構造の例を示す図である。
【図１４】本発明の第３の実施形態において、複数のキューを用い、優先度を用いてキューを管理する場合に、リアルタイムシグナルを処理する手順の一例を示すフローチャートである。
【図１５】本発明の第４の実施形態において、図３のデータと異なる、シグナル番号と優先度との関係を管理するデータの一例を示す図である。
【図１６】Linux 2.4.20-8でのシグナル関連のデータ構造を示す図である。
【符号の説明】
【００７９】
１  シグナル処理端末（機器）
１０１  ＣＰＵ
１０２  ＲＡＭ
１０３  ＲＯＭ
１０４  バス
１０５  ネットワークインタフェース
１０６  記録装置
２０１  プロセスディスクリプタ
２０２、２１１  構造体
２１２  データ（シグナル番号と優先度との関係を管理するデータ）
２１３  データ（優先度別に、保留されているシグナルの有無を管理するデータ）
２１４  ポインタ（キューの先頭のsigqueue構造体を指すポインタ）
２１５  ポインタ（キューの終端のsigqueue構造体を指すポインタ）
２２１、２２２、２２３  sigqueue構造体
３０１、３０２、３０３、３０４  ポインタ（シグナル番号順にキューを管理するポインタ）
３１１、３２１、３３１  ポインタ（キューの先頭のsigqueue構造体を指すポインタ）
３１２、３２２、３３２  ポインタ（キューの終端のsigqueue構造体を指すポインタ）
３１３、３２３、３３３  sigqueue構造体
４０１、４０２、４０３、４０４  ポインタ（シグナル番号順にキューを管理するポインタ）
４１１、４２１、４３１  ポインタ（キューの先頭のsigqueue構造体を指すポインタ）
４１２、４２２、４３２  ポインタ（キューの終端のsigqueue構造体を指すポインタ）
４１３、４２３、４３３  sigqueue構造体
【図１】
2007280149.tif 000003
【図２】
2007280149.tif 000004
【図３】
2007280149.tif 000005
【図４】
2007280149.tif 000006
【図５】
2007280149.tif 000007
【図６】
2007280149.tif 000008
【図７】
2007280149.tif 000009
【図８】
2007280149.tif 000010
【図９】
2007280149.tif 000011
【図１０】
2007280149.tif 000012
【図１１】
2007280149.tif 000013
【図１２】
2007280149.tif 000014
【図１３】
2007280149.tif 000015
【図１４】
2007280149.tif 000016
【図１５】
2007280149.tif 000017
【図１６】
2007280149.tif 000018