(57)【特許請求の範囲】
【請求項１】
処理を実行するスレッドが処理を実行する時に使用する汎用レジスタを含む複数の汎用レジスタと、汎用レジスタを使用可能なレジスタとして割り当てるレジスタウィンドウと、上記スレッドが処理を実行する時に、上記レジスタウィンドウに使用可能なレジスタとして割り当てられた汎用レジスタを上記スレッドに使用させるプロセッサとを備えるオペレーティングシステムの処理方式において、
上記複数の汎用レジスタのうちスレッドが処理を実行する時に使用する汎用レジスタを少なくとも含むレジスタを使用可能レジスタとして定義し、上記使用可能レジスタ以外のレジスタを予約レジスタとして定義するレジスタ設定定義ファイルと、
上記レジスタ設定定義ファイルをプロセッサにより読み込み、スレッドが上記レジスタ設定定義ファイルで定義された使用可能レジスタを使用するように上記レジスタ設定定義ファイルで定義された使用可能レジスタを上記レジスタウィンドウに使用可能なレジスタとして割り当て、スレッドが上記レジスタ設定定義ファイルで定義された予約レジスタを使用しないように上記レジスタ設定定義ファイルで定義された予約レジスタを上記レジスタウィンドウの使用可能のレジスタの割り当てから外すことをプロセッサにより行なうスレッド初期化処理部を有する使用レジスタ設定部と、
スレッドの切り替えが行なわれる場合に、上記スレッド初期化処理部が上記レジスタウィンドウに割り当てた使用可能なレジスタに記憶されたデータのスタックへの待避と、スタックからの復帰とをプロセッサにより行なうコンテキストスイッチ処理を行なうコンテキストスイッチ処理部と
を備えたことを特徴とするオペレーティングシステムの処理方式。
【請求項２】
上記オペレーティングシステムの処理方式は、さらに、上記予約レジスタの一部をオペレーティングシステムのグローバル変数に割り当てる設定をプロセッサにより行なうオペレーティングシステム初期化処理部を備えたことを特徴とする請求項１記載のオペレーティングシステムの処理方式。
【請求項３】
上記オペレーティングシステムの処理方式は、さらに、上記予約レジスタの一部を特定のスレッドに割り当てる設定をプロセッサにより行なうオペレーティングシステム初期化処理部を備え、
上記コンテキストスイッチ処理部は、上記特定のスレッドに割り当てられた予約レジスタの待避及び復帰は行なわず、上記特定のスレッドへ他のスレッドからコンテキストスイッチ処理を行なう場合には、他のスレッドが使用していた使用可能レジスタのスタックへの待避をプロセッサにより行ない、上記特定のスレッドから上記特定スレッド以外の他のスレッドへコンテキストスイッチ処理を行なう場合には、他のスレッドが使用していた使用可能レジスタのスタックからの復帰をプロセッサにより行なうことを特徴とする請求項１記載のオペレーティングシステムの処理方式。
【請求項４】
上記オペレーティングシステムの処理方式は、さらに、スレッドが上記コンテキストスイッチ処理によって切り替えられた回数をスレッド毎にカウントするスイッチカウンタを保持し、
上記スイッチカウンタを参照して特定スレッドをプロセッサにより選択し、現在の特定スレッドと異なる場合には、特定スレッドをプロセッサにより変更する優先スレッド選択処理部を備えたことを特徴とする請求項３記載のオペレーティングシステムの処理方式。
【請求項５】
上記オペレーティングシステムの処理方式は、さらに、上記予約レジスタの一部を割込みにより起動される割込みスレッドに割り当てる設定をプロセッサにより行なう割込み管理処理部を備え、
上記コンテキストスイッチ処理部は、上記割込みスレッドへ他のスレッドからコンテキストスイッチ処理を行なう場合には、他のスレッドが使用していた使用可能レジスタのスタックへの待避をプロセッサにより行ない、上記割込みスレッドから上記割込みスレッド以外の他のスレッドへコンテキストスイッチ処理を行なう場合には、他のスレッドが使用していた使用可能レジスタのスタックからの復帰をプロセッサにより行なうことを特徴とする請求項３記載のオペレーティングシステムの処理方式。
【請求項６】
上記レジスタ設定定義ファイルは、上記使用するレジスタを複数に分割して複数のレジスタセットを定義し、
上記使用レジスタ設定部は、上記複数の汎用レジスタを上記レジスタ設定ファイルで定義された複数のレジスタセットに分割し、異なるスレッドに割り当てる設定をプロセッサにより行なうオペレーション初期化処理部を備え、
上記コンテキストスイッチ処理部は、起動するスレッドが上記複数のレジスタセットのうちいずれかのレジスタセットを割り当てられたスレッドであるか否かをプロセッサにより判断し、割り当てられたスレッドでないことを判断した場合は、上記複数のレジスタセットから１つのレジスタセットをプロセッサにより選択して、選択したレジスタセットのレジスタに記憶されたデータのスタックへの待避及び起動するスレッドのスタックへ待避したデータの復帰をプロセッサにより行ない、
割り当てられたスレッドであることを判断した場合は、起動するスレッドに割り当てられたレジスタセットのレジスタに記憶されたデータのスタックへの待避及び復帰を行なわない
ことを特徴とする請求項１記載のオペレーティングシステムの処理方式。
【請求項７】
上記レジスタ設定定義ファイルは、使用するレジスタを二つに分割して二個のレジスタセットを定義することを特徴とする請求項６記載のオペレーティングシステムの処理方式。
【請求項８】
上記オペレーティングシステムの処理方式は、さらに、複数の浮動小数点レジスタと、
浮動小数点レジスタを上記複数のレジスタセットに対応させて複数に分割して複数の浮動小数点レジスタセットを定義する浮動小数点レジスタ設定定義ファイルとを備え、
上記オペレーション初期化処理部は、さらに、上記レジスタ設定定義ファイルで定義されたレジスタセットに対応して上記浮動小数点レジスタ設定定義ファイルで定義された浮動小数点レジスタセットを異なるスレッドに割り当てる設定をプロセッサにより行ない、
上記コンテキストスイッチ処理部は、上記レジスタセットのスタックへの待避及びスタックからの復帰に伴って、対応する浮動小数点レジスタセットに記憶されたデータのスタックへの待避及びスタックからの復帰をプロセッサにより行なうことを特徴とする請求項６記載のオペレーティングシステムの処理方式。
【請求項９】
上記スレッドは、タスクとプロセスとを含むことを特徴とする請求項１から８のいずれかに記載のオペレーティングシステムの処理方式。
【請求項１０】
処理を実行するスレッドが処理を実行する時に使用する汎用レジスタを含む複数の汎用レジスタと、汎用レジスタを使用可能なレジスタとして割り当てるレジスタウィンドウと、上記スレッドが処理を実行する時に、上記レジスタウィンドウに使用可能なレジスタとして割り当てられた汎用レジスタを上記スレッドに使用させるプロセッサと、上記複数の汎用レジスタのうちスレッドが処理を実行する時に使用する汎用レジスタを少なくとも含むレジスタを使用可能レジスタとして定義する記述と、上記使用可能レジスタ以外のレジスタを予約レジスタとして定義する記述とを有するレジスタ設定定義ファイルとを備えるオペレーティングシステムの処理方法であって、
上記プロセッサが、上記レジスタ設定定義ファイルを読み込み、スレッドが上記レジスタ設定定義ファイルで定義された使用可能レジスタを使用するように上記レジスタ設定定義ファイルで定義された使用可能レジスタを上記レジスタウィンドウに使用可能なレジスタとして割り当て、スレッドが上記レジスタ設定定義ファイルで定義された予約レジスタを使用しないように上記レジスタ設定定義ファイルで定義された予約レジスタを上記レジスタウィンドウのレジスタの割り当てから外すことを行なう使用レジスタ設定工程と、
スレッドの切り替えが行なわれる場合に、上記プロセッサが、上記使用レジスタ設定工程により上記レジスタウィンドウに割り当てた使用可能なレジスタに記憶されたデータのスタックへの待避と、スタックからの復帰とを行なうコンテキストスイッチ処理を行なうコンテキストスイッチ処理工程と
を備えたことを特徴とするオペレーティングシステムの処理方法。
【請求項１１】
上記スレッドは、タスクとプロセスとを含むことを特徴とする請求項１０記載のオペレーティングシステムの処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、多数の汎用レジスタまたは浮動小数点レジスタを持つプロセッサを使用した情報処理装置上のオペレーティングシステム特にリアルタイムオペレーティングシステムにおけるスレッド間のコンテキストスイッチ時間の短縮化に関するオペレーティングシステムの処理方式及び処理方法である。
【０００２】
【従来の技術】
従来、多数の汎用レジスタを持つプロセッサを使用した情報処理装置上のリアルタイムオペレーティングシステムの処理方式しては、例えば、特開平９−６６３０号公報に示されるようなものがあった。図２１は、このようなリアルタイムオペレーティングシステムの汎用レジスタ管理の構成の一例を表す図である。
【０００３】
多数の汎用レジスタは図２１の１９０２ａ、１９０２ｂのようなレジスタウィンドウによって管理されており、実行中のスレッドが関数を呼び出す度に、レジスタウィンドウを切り替える。本従来例では、このレジスタウィンドウをユーザ用（「ユーザモード」ともいう）レジスタウィンドウ１９０２ｂとオペレーティングシステム用（「カーネルモード」ともいう）レジスタウィンドウ１９０２ａに分けている。実行中のスレッドがユーザモードの場合は１９０２ｂのレジスタウィンドウ中の汎用レジスタを使い、カーネルモードに遷移した場合は１９０２ａのレジスタウィンドウ中の汎用レジスタに切り替え、レジスタウィンドウ中の汎用レジスタを使う。このようにして、レジスタウィンドウを有効に利用して汎用レジスタの待避、復帰処理をなくし、スレッドのユーザモードからカーネルモードへの遷移を高速化することができる。
【０００４】
【発明が解決しようとする課題】
上記のようなリアルタイムオペレーティングシステムの処理方式では、１スレッドのユーザモード、カーネルモード間の遷移は高速化できる。しかし、実行中のスレッドが他のスレッドへ実行を切り替えるコンテキストスイッチ処理には効果がないという問題点があった。従って、この方法ではスレッド間のコンテキストスイッチ時にはプロセッサの持つ全ての汎用レジスタの待避、復帰処理を行わなければならず、レジスタウィンドウのような多数の汎用レジスタを持つプロセッサの場合は、そのために大きなオーバヘッドが発生するという問題点があった。
【０００５】
また、上記のようなリアルタイムオペレーティングシステムの処理方式では、浮動小数点レジスタに対する考慮がない。このため、浮動小数点レジスタを多数持つプロセッサの場合、コンテキストスイッチ処理は、全ての浮動小数点レジスタの待避、復帰処理のために、さらに大きなオーバヘッドが発生するという問題点があった。
【０００６】
この発明は上記のような問題点を解消するためになされたもので、実行モジュールの使用する汎用レジスタを限定することにより、スレッド間のコンテキストスイッチにおいて、待避、復帰するレジスタ数を少なくし、コンテキストスイッチのオーバヘッド時間を短縮することを目的とする。
【０００７】
また、この発明は、プロセッサの持つレジスタウィンドウ制御機構、もしくは類似した機構を操作し、一部の汎用レジスタを使用しないようにすることにより、スレッド間のコンテキストスイッチにおいて、待避、復帰するレジスタ数を少なくし、コンテキストスイッチのオーバヘッド時間を短縮することを目的とする。
【０００８】
さらに、この発明は、上記の発明により、使用しないように設定した汎用レジスタを、頻繁にアクセスするオペレーティングシステムのグローバル変数として利用することにより、オペレーティングシステムの処理を高速化することを目的とする。
【０００９】
この発明は、上記の発明により、使用しないように設定した汎用レジスタを、特定のスレッドのコンテキストとして固定的に割り当てることにより、特定スレッドへのコンテキストスイッチ時には、スレッドのコンテキストを持つ汎用レジスタの待避、復帰処理を行わずに、特定のスレッドへのコンテキストスイッチのオーバヘッド時間を短縮することを目的とする。
【００１０】
この発明は、上記の発明で、固定的に割り当てていた特定スレッドを、オペレーティングシステム実行中の各スレッドのスイッチ回数のカウントにより、もっともスイッチ回数の多いスレッドを動的に選択し、それを特定スレッドとすることにより、高速にコンテキストスイッチが行える特定スレッドをオペレーティングシステムの動作状況に応じて有効に選択できるようにすることを目的とする。
【００１１】
この発明は、上記の発明により、使用しないように設定した汎用レジスタを、割込み処理より起動される割込みスレッドのコンテキストとして割り当て、割込みスレッド間で使い廻すようにすることにより、割込み発生時のコンテキストスイッチにおける汎用レジスタの待避、復帰処理をなくす、もしくは待避、復帰するコンテキスト量を限定し、割込み処理におけるコンテキストスイッチのオーバヘッド時間を短縮することを目的とする。
【００１２】
この発明は、上記の発明により、汎用レジスタを２つのセットに分割し、それぞれに独立したスレッドのコンテキストを割り当て、コンテキストスイッチ処理において、前に実行したスレッドのコンテキストを保持したままにしておくことにより、２つのスレッド間の交互のコンテキストスイッチ時の汎用レジスタの待避、復帰処理をなくし、コンテキストスイッチのオーバヘッド時間を短縮することを目的とする。
【００１３】
この発明は、上記発明の方法により、汎用レジスタをｎ個のセットに分割し、それぞれに独立したスレッドのコンテキストを割り当て、ｎ個のレジスタセット間でそれぞれに独立したスレッドのコンテキストを割り当て、コンテキストスイッチ処理において、前に実行したスレッドのコンテキストを保持したままにしておく動作を行うことにより、ｎ個のスレッド間のコンテキストスイッチ時の汎用レジスタの待避、復帰処理をなくし、コンテキストスイッチ時間を短縮することを目的とする。
【００１４】
この発明は、多数の浮動小数点レジスタを持つプロセッサ上のリアルタイムオペレーティングシステムに対し、それぞれに独立したスレッドのコンテキストを割り当て、コンテキストスイッチ処理において、前に実行したスレッドのコンテキストを保持したままにしておく動作を汎用レジスタだけでなく浮動小数点レジスタに対しても行い、浮動小数点コンテキストを持つスレッド間でのコンテキストスイッチ時の浮動小数点レジスタの待避、復帰処理を行う回数を減らし、コンテキストスイッチ時間を短縮することを目的とする。
【００１５】
【課題を解決するための手段】
この発明に係るオペレーティングシステムの処理方式は、処理を実行するスレッドが使用可能な複数の汎用レジスタを有するオペレーティングシステムの処理方式において、汎用レジスタのうち使用するレジスタを定義するレジスタ設定定義ファイルと、上記レジスタ設定定義ファイルを読み込み、スレッドが上記レジスタ設定定義ファイルで定義されたレジスタを使用するように設定する使用レジスタ設定部と、上記レジスタ設定定義ファイルで定義された使用するレジスタに記憶されたデータの待避、復帰を行なうコンテキストスイッチ処理を行なうコンテキストスイッチ処理部とを備えたことを特徴とする。
【００１６】
上記レジスタ設定定義ファイルは、定義された使用可能なレジスタを使用可能レジスタとして定義し、上記使用可能レジスタ以外のレジスタを予約レジスタとして定義し、上記使用レジスタ設定部は、使用可能レジスタを使用して実行するスレッドを作成するコンパイラを備えたことを特徴とする。
【００１７】
上記オペレーティングシステムの処理方式は、プロセッサ上に汎用レジスタを有し、上記レジスタ設定定義ファイルは、定義された使用可能なレジスタを使用可能レジスタとして定義し、上記使用可能レジスタ以外のレジスタを予約レジスタとして定義し、上記使用レジスタ設定部は、使用可能レジスタを使用するようにプロセッサの設定を行なうスレッド初期化処理部を備えたことを特徴とする。
【００１８】
上記オペレーティングシステムの処理方式は、さらに、上記予約レジスタの一部をオペレーティングシステムのグローバル変数に割り当てる設定を行なうオペレーティングシステム初期化処理部を備えたことを特徴とする。
【００１９】
上記オペレーティングシステムの処理方式は、さらに、上記予約レジスタの一部を特定のスレッドに割り当てる設定を行なうオペレーティングシステム初期化処理部を備え、上記コンテキストスイッチ処理部は、上記特定のスレッドに割り当てられた予約レジスタの待避及び復帰は行なわず、上記特定のスレッドへ他のスレッドからコンテキストスイッチ処理を行なう場合には、他のスレッドが使用していた使用可能レジスタの待避を行ない、上記特定のスレッドから上記特定スレッド以外の他のスレッドへコンテキストスイッチ処理を行なう場合には、他のスレッドが使用していた使用可能レジスタの復帰を行うことを特徴とする。
【００２０】
上記オペレーティングシステムの処理方式は、さらに、スレッドが上記コンテキストスイッチ処理によって変更される回数をスレッド毎にカウントするスイッチカウンタを保持し、上記スイッチカウンタを参照して特定スレッドを選択し、現在の特定スレッドと異なる場合には、特定スレッドを変更する優先スレッド選択処理部を備えたことを特徴とする。
【００２１】
上記オペレーティングシステムの処理方式は、さらに、上記予約レジスタの一部を割込みにより起動される割込みスレッドに割り当てる設定を行なう割込み管理処理部を備え、上記コンテキストスイッチ処理部は、上記割込みスレッドへ他のスレッドからコンテキストスイッチ処理を行なう場合には、他のスレッドが使用していた使用可能レジスタの待避を行ない、上記割込みスレッドから上記割込みスレッド以外の他のスレッドへコンテキストスイッチ処理を行なう場合には、他のスレッドが使用していた使用可能レジスタの復帰を行うことを特徴とする。
【００２２】
上記レジスタ設定定義ファイルは、使用するレジスタを複数に分割して複数のレジスタセットを定義し、上記使用レジスタ設定部は、複数の汎用レジスタを上記レジスタ設定ファイルで定義された複数のレジスタセットを分割し独立したスレッドに割り当てる設定をするオペレーション初期化処理部を備え、上記コンテキストスイッチ処理部は、起動するスレッドが上記複数のレジスタセットのうちいずれかのレジスタセットを使用したスレッドであるかを判断し、上記複数のレジスタセットのうちいずれかのレジスタセットを使用したスレッド以外のスレッドを起動する場合は、レジスタに記憶されたデータの待避及び復帰をすることを特徴とする。
【００２３】
上記レジスタ設定定義ファイルは、使用するレジスタを二つに分割して二個のレジスタセットを定義することを特徴とする。
【００２４】
上記オペレーティングシステムの処理方式は、さらに、複数の浮動小数点レジスタと、浮動小数点レジスタを上記複数のレジスタセットに対応させて複数に分割して複数の浮動小数点レジスタセットを定義する浮動小数点レジスタ設定定義ファイルとを備え、上記オペレーション初期化処理部は、さらに、上記レジスタ設定定義ファイルで定義されたレジスタセットに対応して上記浮動小数点レジスタ設定定義ファイルで定義された浮動小数点レジスタセットを独立したスレッドに割り当てる設定を行ない、上記コンテキストスイッチ処理部は、上記レジスタセットの待避及び復帰に伴って、対応する浮動小数点レジスタセットに記憶されたデータの待避及び復帰を行なうことを特徴とする。
【００２５】
この発明に係るオペレーティングシステムの処理方法は、処理を実行するスレッドが使用可能な複数の汎用レジスタを有するオペレーティングシステムの処理方法において、汎用レジスタのうち使用するレジスタをレジスタ設定定義ファイルへ定義する工程と、上記レジスタ設定定義ファイルを読み込み、スレッドが上記レジスタ設定定義ファイルで定義されたレジスタを使用するように設定する使用レジスタ設定工程と、上記レジスタ設定定義ファイルで定義された使用するレジスタに記憶されたデータの待避、復帰を行なうコンテキストスイッチ処理を行なうコンテキストスイッチ処理工程とを備えたことを特徴とする。
【００２６】
【発明の実施の形態】
実施の形態１．
以下、この発明の一例である実施の形態１を図に従って説明する。図１はこの発明の実施の形態１によるリアルタイムオペレーティングシステムの処理方式の一例を表した構成図である。１０１はレジスタ設定定義ファイルである。レジスタ設定定義ファイルは、「使用可能レジスタ」、「予約レジスタ」を定義する。１０２は本リアルタイムオペレーティングシステム上で動作する実行モジュールすなわちスレッドを生成するコンパイラである。１０３はプロセッサの持つ汎用レジスタを示したものである。汎用レジスタはレジスタ設定定義ファイルにより、使用可能レジスタ１０３ａ、予約レジスタ１０３ｂに分けられる。１０４はオペレーティングシステムの持つコンテキストスイッチ処理部である。１０５は、コンパイラ１０２で生成した実行モジュールである。１０６はレジスタの割付に応じて汎用レジスタの名前を変更するプロセッサの持つレジスタリネーミング機構である。１０７は、上記レジスタ設定定義ファイルを読み込み、スレッドが上記レジスタ設定定義ファイルで定義されたレジスタを使用するように設定する使用レジスタ設定部である。また、この実施の形態では、使用レジスタ設定部として１０２に示すコンパイラである場合を説明する。
尚、この明細書内では、レジスタに記憶されたデータを待避、復帰することを、レジスタを待避、復帰する、ということもあるが同様の動作を意味する。
【００２７】
この発明の実施の形態１の動作を示す。レジスタ設定定義ファイル１０１では、本リアルタイムオペレーティングシステム内でアプリケーションソフトウェアのスレッドが通常使用できるプロセッサの汎用レジスタを「使用可能レジスタ」として定義し、アプリケーションソフトウェアのスレッドが使用できないプロセッサの汎用レジスタを「予約レジスタ」として定義する。アプリケーションソフトウェアを生成するコンパイラ１０２はレジスタ設定定義ファイル１０１を参照し、「使用可能レジスタ」を使用するが「予約レジスタ」を使用しないアプリケーションソフトウェアの実行モジュールを作る。このように設定された状態で、オペレーティングシステムの持つコンテキストスイッチ処理部１０４の動作を図２に示す。コンテキストスイッチ処理部１０４は、コンテキストスイッチの初期化Ｓ１０１においてレジスタ設定定義ファイル１０１を参照し、「使用可能レジスタ」と「予約レジスタ」の定義を読み込む（Ｓ１０１）。これにより、以降でコンテキストスイッチ処理部１０４が呼び出されると、通常のコンテキストスイッチの処理の他にＳ１０２以下の動作を行う。ここで、通常のコンテキストスイッチ処理とは、現在実行中のスレッドから別のスレッドに切り替えることをいう。
【００２８】
Ｓ１０２では従来とは異なり、実行中のスレッドのコンテキストとなる汎用レジスタのうちの、「使用可能レジスタ」に設定されたレジスタに記憶されたデータをスタックに待避する。「予約レジスタ」に設定されたレジスタは待避しない。Ｓ１０３では従来通り、実行中のスレッドの持つ汎用レジスタ以外のコンテキストをスタックに待避する。Ｓ１０４ではＳ１０３に対応し、新しく起動するスレッドの汎用レジスタ以外のコンテキストをスタックから復帰する。Ｓ１０５ではＳ１０２に対応し、新しく起動するスレッドのコンテキストである汎用レジスタのうちの、「使用可能レジスタ」に設定されたレジスタをスタックから復帰する。この動作をコンテキストスイッチが発生するごとに繰り返す。
【００２９】
この実施の形態１によるオペレーティングシステム、特にリアルタイムオペレーティングシステムの処理方式によれば、アプリケーションソフトウェアのスレッドが使用する汎用レジスタ数を実行モジュールの生成時に限定するようにしたので、多数の汎用レジスタを持つプロセッサ上のリアルタイムオペレーティングシステムにおけるコンテキストスイッチ処理において、待避、復帰が必要なレジスタ数を少なくすることができ、コンテキストスイッチ処理のオーバヘッド時間を削減することができる。
【００３０】
この発明のポイントは、コンテキストスイッチ処理部で実施するコンテキストスイッチ処理でレジスタを待避、または復帰するレジスタを限定することにある。
従って、この実施の形態では、レジスタ定義設定ファイルにおいて、汎用レジスタを「使用可能レジスタ」と「予約レジスタ」の二種類に分割して定義する場合を示したが、「使用可能レジスタファイル」を汎用レジスタの一部に限定する定義であれば、「使用可能レジスタ」と「予約レジスタ」の二種類に分割する場合には限られない。従って、その他のレジスタを定義して二種類以上の定義を行なっても、「使用可能レジスタファイル」を汎用レジスタの一部に限定する定義であれば、本発明の実施の形態の一例として考えられる。
また、上記のことは、以下の実施の形態２から６においても同様である。
【００３１】
以上のように、多数の汎用レジスタを持つプロセッサ上のリアルタイムオペレーティングシステムにおいて、使用する汎用レジスタ設定を定義するレジスタ設定定義ファイルとレジスタ設定定義ファイルを読み込み、レジスタ設定定義ファイルで「予約レジスタ」と、指定された汎用レジスタを使用しない実行モジュールを生成するコンパイラと、汎用レジスタ設定定義ファイルを読み込み、汎用レジスタ設定定義ファイルで「予約レジスタ」と指定された汎用レジスタの待避、復帰を行わないコンテキストスイッチ処理部とを備えることによりリアルタイムオペレーティングシステムが実現できる。
【００３２】
実施の形態２．
以下は、この発明の一例である実施の形態２を図に従って説明する。図３はこの発明の実施の形態２によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表した図である。実施の形態２では、使用レジスタ設定部１０７として上記実施の形態１のコンパイラ１０２の代わりに、オペレーティングシステム内のスレッド初期化処理部２０１を追加する。スレッド初期化処理部は、「使用可能レジスタ」を使用するようにプロセッサの設定を行う。図３において、図１と同じ番号を持つものは、同じ構成要素である。
【００３３】
この発明の実施の形態２の動作を示す。実施の形態２では、アプリケーションソフトウェアを生成するコンパイラに代わり、オペレーティングシステム内のスレッド初期化処理部２０１がオペレーティングシステム起動時に、通常のスレッド初期化処理に加えて図４の動作を行う。ここで、通常のスレッド初期化処理とは、新しいスレッドを生成する処理をいう。具体的な処理はオペレーティングシステムによって異なる。Ｓ２０１でスレッド初期化処理部２０１はレジスタ設定定義ファイル１０１を読み込む。Ｓ２０２で、プロセッサの持つレジスタウィンドウを制御し、「予約レジスタ」に設定されたプロセッサの汎用レジスタを、レジスタウィンドウの割り当てから外す。Ｓ２０２の動作はレジスタウィンドウを持つプロセッサでなくても、プロセッサの持つ類似した汎用レジスタ割当て機構の制御により行ってもよい。これにより、アプリケーションソフトウェアのスレッドからは、「予約レジスタ」に設定されたレジスタを使用することがなくなる。この状態で、オペレーティングシステムのコンテキストスイッチ処理部１０４は、実施の形態１と同様に、図２で示した動作を行う。これによりコンテキストスイッチ処理において「予約レジスタ」に設定されたレジスタの待避、復帰を行わない。
【００３４】
この実施の形態２によるリアルタイムオペレーティングシステムの処理方式によれば、スレッド初期化時に、プロセッサのレジスタウィンドウに対する制御、または類似した汎用レジスタ割当て機構に対する制御により、アプリケーションソフトウェアのスレッドが使用する汎用レジスタを限定するようにしたので、多数の汎用レジスタを持つプロセッサ上のリアルタイムオペレーティングシステムにおけるコンテキストスイッチ処理において、待避、復帰が必要なレジスタ数を少なくすることができ、コンテキストスイッチ処理のオーバヘッド時間を削減することができる。
【００３５】
以上のように、多数の汎用レジスタを持ち、関数呼出しごとに汎用レジスタの名前を変更し、アクセス可能な汎用レジスタを限定する機能を持つプロセッサ上のリアルタイムオペレーティングシステムにおいて、スレッドの初期化処理によりプロセッサを操作し、一部の汎用レジスタを使用しないようにプロセッサの設定を行うスレッド初期化処理部と、使用しないように設定した汎用レジスタの待避、復帰を行わないコンテキストスイッチ処理部とを備えることによりリアルタイムオペレーティングシステムを実施する。
【００３６】
実施の形態３．
以下は、この発明の実施の形態３を図に従って説明する。図５はこの発明の実施の形態３によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表す図である。実施の形態３では、上記実施の形態１、もしくは実施の形態２の構成に加え、オペレーティングシステム（以下、「ＯＳ」（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）ともいう）の初期化処理部３０１を追加する。また、オペレーティングシステム処理内で頻繁にアクセスするＯＳグローバル変数３０２を定義する。図５に表していない構成要素については実施の形態１、もしくは実施の形態２の構成と同様の構成となるが、図５では省略している。
【００３７】
実施の形態３では、実施の形態１、または実施の形態２の動作と同様に、プロセッサの持つ汎用レジスタの一部を「予約レジスタ」と設定し、アプリケーションソフトウェアのスレッドに使用させない。また、コンテキストスイッチ処理においても、「予約レジスタ」と設定したレジスタの待避、復帰処理を行わない。実施の形態３では、この「予約レジスタ」に対し、オペレーティングシステムの初期化処理部（図５では「ＯＳ初期化処理部」と表示）３０１において、オペレーティングシステム全体の通常の初期化処理の他に図６の動作を行う。オペレーティングシステム処理内で頻繁にアクセスし性能上影響を与えるグローバル変数のいくつかをＯＳグローバル変数３０２として定義する。Ｓ３０１では、このＯＳグローバル変数３０２を「予約レジスタ」にコピーする。これ以降、ＯＳグローバル変数３０２に対するアクセスは、「予約レジスタ」に対し行う。
【００３８】
この実施の形態３によるリアルタイムオペレーティングシステムの処理方式によれば、実施の形態１、または実施の形態２の特徴に加え、ＯＳグローバル変数３０２を常にレジスタ参照によりアクセスできるので、プロセッサの持つ多数の汎用レジスタを有効に利用でき、オペレーティングシステムの動作を高速化することができる。
【００３９】
以上のように、リアルタイムオペレーティングシステムにおいて、「予約レジスタ」としてリザーブした汎用レジスタを、頻繁にアクセスするオペレーティングシステムのグローバル変数に割り当てるように設定するオペレーティングシステムの初期化処理を持ち、設定したグローバル変数に対しては、オペレーティングシステム内の全て処理において、メモリでなく割り当てたレジスタを直接参照することによりリアルタイムオペレーティングシステムを実現する。
【００４０】
実施の形態４．
以下、この発明の実施の形態４を図に従って説明する。図７はこの発明の実施の形態４によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表す図である。実施の形態４では、実施の形態１、または実施の形態２に加え、オペレーティングシステムの初期化処理部（図７では「ＯＳ初期化処理部」と表示）４０１、コンテキストスイッチ処理部４０２を変更する。また、オペレーティングシステム設計時にリアルタイムオペレーティングシステムの実行性能上重要なスレッドを一つ選択する。ＯＳ初期化処理部４０１は、選択されたスレッドを特定スレッドとしてスレッドのコンテキスト４０３を別管理する。また、１０６はプロセッサの汎用レジスタの名前付けを変更するレジスタリネーミング機構である。図７に表していない構成要素については実施の形態１、もしくは実施の形態２の構成と同様の構成となるが、図７では省略している。
【００４１】
実施の形態４では、実施の形態１、または実施の形態２の動作と同様に、プロセッサの持つ汎用レジスタの一部を「予約レジスタ」と設定し、通常のアプリケーションソフトウェアのスレッドに使用させない。実施の形態４では、ＯＳ初期化処理部４０１において、選択された特定スレッドのコンテキスト４０３を「予約レジスタ」に固定的に割り当てる（図８のＳ４０１）。特定スレッドは、オペレーティングシステムの設計時に、性能上重要となるスレッドを１つ固定的に選択する。この後、コンテキストスイッチ処理部４０２は図９の動作を行う。コンテキストスイッチ処理は、初期化処理において従来のコンテキストスイッチ処理の他に、Ｓ４０２でレジスタ設定定義ファイルを読み込み、実施の形態１または実施の形態２と同様に、プロセッサの汎用レジスタの「使用可能レジスタ」と「予約レジスタ」の設定を行う。それ以降、コンテキストスイッチ処理が発生すると、Ｓ４０３で現在実行中のスレッドが特定スレッドか否かをチェックする。実行中のスレッドが特定スレッドでない場合には、従来どおりＳ４０４で実行中のスレッドのコンテキストとなる汎用レジスタのうちの、「使用可能レジスタ」に設定されたレジスタをスタックに待避する。特定スレッドの場合には、Ｓ４０４の動作を行わなわず、代わりにＳ４１０で、プロセッサの使用するレジスタを「予約レジスタ」から「使用可能レジスタ」に変更する。Ｓ４１０の処理は後述するＳ４０９の逆処理で、プロセッサの持つレジスタリネーミング機構１０６、または類似した機構により、特定スレッド実行中に使用しているレジスタである「予約レジスタ」の名前を元の「予約レジスタ」に戻し、「使用可能レジスタ」の名前を「使用可能レジスタ」に戻すことにより実現する。次に従来通りＳ４０５で、実行中のスレッドの汎用レジスタ以外のその他のコンテキストをスタックに待避する。Ｓ４０６ではＳ４０５と対応して、新しく起動するスレッドの汎用レジスタ以外のコンテキストをスタックから復帰する。Ｓ４０７では新しく起動するスレッドが特定スレッドかどうかをチェックし、新しく起動するスレッドが特定スレッドでない場合には、Ｓ４０８で起動するスレッドのコンテキストである汎用レジスタのうちの、「使用可能レジスタ」に設定されたレジスタをスタックから復帰する。Ｓ４０７で新しく起動するスレッドが特定スレッドの場合には、Ｓ４０８の動作を行わず、Ｓ４０９で「予約レジスタ」の方を使用レジスタに設定し、コンテキストスイッチ処理を完了させる。Ｓ４０９の処理はプロセッサの持つレジスタリネーミング機構１０６、または類似した機構により、「予約レジスタ」の汎用レジスタ名を変更し、「予約レジスタ」の名前を「使用可能レジスタ」と同じにするとともに、「使用可能レジスタ」の名前を「予約レジスタ」のレジスタの名前にすることにより実現する。これにより、特定スレッドも通常のスレッドと同じ汎用レジスタの名前を使うことができる。
【００４２】
この実施の形態４によるリアルタイムオペレーティングシステムの処理方式によれば、実施の形態１、または実施の形態２の特徴に加え、特定スレッドのコンテキストを常に汎用レジスタ上に保持するようにしたので、特定スレッドへのコンテキストスイッチ、または特定スレッドからその他のスレッドへのコンテキストスイッチ時には、汎用レジスタ内のコンテキストの待避、復帰処理が不要になり、コンテキストスイッチ時間が短縮できる。
【００４３】
以上のように、リアルタイムオペレーティングシステムにおいて、「予約レジスタ」としてリザーブした汎用レジスタを、特定のスレッドのコンテキストに固定的に割り当てるＯＳ初期化処理を持つ。
選択した特定のスレッドへコンテキストスイッチする場合には、汎用レジスタの「使用可能レジスタ」と指定したレジスタの待避のみを行い、復帰処理を行わないコンテキストスイッチ処理を持つ。
一方、選択した特定のスレッドから別のスレッドへコンテキストスイッチする場合には、汎用レジスタの「使用可能レジスタ」と指定したレジスタの待避処理を行わず、復帰処理のみを行うコンテキストスイッチ処理を持つ。このようにしてリアルタイムオペレーティングシステムを実現する。
【００４４】
実施の形態５．
以下、この発明の実施の形態５を図に従って説明する。図１０はこの発明の実施の形態５によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表す図である。実施の形態５では、実施の形態４の構成に加え、一定時間ごとにサービスを行う周期起床処理を呼び出すタイマ処理５０１、特定スレッドを決定する手段である優先スレッド選択処理部５０２、各スレッドがコンテキストスイッチ処理によって変更されるスイッチ回数を記録するスイッチカウンタ５０３を持つ。スイッチカウンタ５０３は、スレッドＩＤ５０３ａとカウンタ５０３ｂで構成された表である。５０４はオペレーティングシステム内に存在するスレッドのコンテキストのスレッド汎用レジスタを示している。５０５は実施の形態５におけるコンテキストスイッチ処理部である。図１０に表していない構成要素については実施の形態１、もしくは実施の形態２の構成と同様の構成となるが、図１０では省略している。
【００４５】
実施の形態５のコンテキストスイッチ処理部５０５では、実施の形態４のコンテキストスイッチ処理部４０２の図９の動作に対し、図１１のように処理を加える。図１１中、図９と同じ符号の処理は、同一のものを表している。具体的には、Ｓ４０２からＳ４１０の動作の後で、Ｓ５１１でスイッチカウンタ５０３内の、新しく起動するスレッドを示すスレッドＩＤ５０３ａに対応するカウンタ５０３ｂをカウントアップする。これにより、各スレッドのスイッチ回数を保持する。また、特定スレッドの選択方法は、実施の形態４のＯＳ初期化処理で行うのでなく、図１２に示す優先スレッド選択処理部５０２で実施する優先スレッド選択処理の動作により行う。優先スレッド選択処理部５０２は、タイマ処理５０１より、一定周期でごとに呼び出される。優先スレッド選択処理部５０２はＳ５０１で、スレッドカウンタを参照し、もっともスイッチ回数が多いスレッドを選択する。さらに、Ｓ５０２で、選択したスレッドが現在の特定スレッドと同じかどうかをチェックする。選択したスレッドが現在の特定スレッドと異なる場合には、Ｓ５０３で、「予約レジスタ」に入っている特定スレッドのコンテキストを待避し、代わりに新しく選択したスレッドのコンテキストを「予約レジスタ」に復帰する。Ｓ５０２で、選択したスレッドが現在の特定スレッドと同じ場合には、何もしない。この動作をタイマ処理５０１より呼び出されるごとに繰り返す。この動作と実施の形態４の動作により、特定スレッドとその他のスレッド間のコンテキストスイッチにおける汎用レジスタの待避、復帰処理をなくす。
【００４６】
この実施の形態５によるリアルタイムオペレーティングシステムの処理方式では、実施の形態４において固定的に行っていた特定スレッドの選択を、オペレーティングシステム実行中の各スレッドのスイッチカウンタでカウントしているスイッチ回数のカウントにより、もっともスイッチ回数の多いスレッドを動的に選択するようにしたので、高速にコンテキストスイッチを行える特定スレッドをオペレーティングシステムの動作状況に応じて有効に選択することができる。
【００４７】
以上のように、リアルタイムオペレーティングシステムにおいて、オペレーティングシステム内で動作しているスレッドがコンテキストスイッチ処理により変換されるスイッチ回数を保持する各スレッドごとのスイッチカウンタを持つ。スイッチカウンタを参照し、もっとも値の大きいものを特定スレッドとして選択し、上記実施の形態４の動作を行わせる優先スレッド選択処理部を持つ。また優先スレッド選択処理部の動作をオペレーティングシステム動作中に定期に実行するタイマ処理を持つ。このようにしてリアルタイムオペレーティングシステムを実現する。
【００４８】
実施の形態６．
以下、この発明の実施の形態６を図に従って説明する。図１３はこの発明の実施の形態６によるリアルタイムオペレーティングシステムの処理方式の構成図である。実施の形態６では、実施の形態４に加え、割込み処理より起動されるスレッドである割込みスレッドのコンテキスト管理を行う割込み管理処理部６０１を持つ。６０３は割込みにより直接起動される割込みハンドラ、６０４は本実施の形態におけるコンテキストスイッチ処理部である。６０２は割込み処理を行うスレッド、すなわち割込みスレッドのコンテキストを示す。また、割込みスレッドは割込みハンドラ６０３からの継続処理として呼び出されるスレッドで、オペレーティングシステム内で別管理し、割込みスレッド用コンテキスト６０２内にコンテキストを保持しておく。図１３に表していない構成要素については実施の形態１、もしくは実施の形態２の構成と同様の構成となるが、図１３では省略している。
【００４９】
実施の形態６では、割込みハンドラ６０３の継続処理として呼び出される割込みスレッド用コンテキスト６０２を割込み管理処理部６０１で別に管理する。実施の形態６におけるコンテキストスイッチ処理部６０４、および割込み管理処理部６０１の動作を図１４に示す。コンテキストスイッチ処理部６０４は、実施の形態４と同様に初期化処理において、Ｓ６０１でレジスタ設定定義ファイルを読み込み、プロセッサの汎用レジスタの「使用可能レジスタ」と「予約レジスタ」の設定を行う。それ以降、コンテキストスイッチ処理部６０４は、コンテキストスイッチ処理が発生すると、Ｓ６０２で割込み発生による割込みスレッドへのコンテキストスイッチかをチェックする。Ｓ６０２で割込みスレッドへのコンテキストスイッチの場合には、割込み管理処理６０１を呼び出し、それにより処理を行う。Ｓ６０２でそれ以外のスレッドへのコンテキストスイッチの場合には、Ｓ６０９で、現在「使用可能レジスタ」を保持しているのが、これから新しく起動するスレッドかどうかをチェックする。「使用可能レジスタ」を保持しているのが新しく起動するスレッドの場合は、コンテキストの復帰の必要がないのでコンテキストスイッチ処理を完了する。Ｓ６０９で、「使用可能レジスタ」を保持しているのが新しく起動するスレッドでない場合には、従来と同様に、Ｓ６１０で現在実行中のスレッドの汎用レジスタの内容をスタックへ待避し、Ｓ６１１で汎用レジスタ以外のコンテキストを待避し、Ｓ６１２で新しく起動するスレッドのＳ６１１に対応したその他のコンテキストをスタックから復帰し、Ｓ６１３で新しく起動するスレッドのＳ６１３に対応した汎用レジスタの内容をスタックから復帰し、コンテキストスイッチ処理を完了する。
【００５０】
Ｓ６０２で、新しく起動するスレッドが割込みスレッドの場合は、割込み管理処理部６０１を呼び出し、以下のように動作する。まず、Ｓ６０３で現在「予約レジスタ」を保持しているのは、新しく起動する割込みスレッドかをチェックする。「予約レジスタ」を保持しているのが新しく起動する割込みスレッドでない場合は、Ｓ６０４で現在の「予約レジスタ」の内容をスタックへ待避する。さらにＳ６０５で起動する割込みスレッドの汎用レジスタのコンテキストを「予約レジスタ」に復帰した後、Ｓ６０６の動作を行う。Ｓ６０３で「予約レジスタ」を保持しているのが新しく起動する割込みスレッドの場合は、Ｓ６０４、Ｓ６０５の動作は行わず、Ｓ６０６に移る。Ｓ６０６では「予約レジスタ」の方を使用するレジスタに設定する。この処理は、レジスタリネーミング機構１０６、または類似した機構により、「予約レジスタ」の汎用レジスタ名を変更し、「予約レジスタ」の名前を「使用可能レジスタ」と同じにすることにより実現する。その後、Ｓ６０７では割込みスレッドの処理を実行する。割込みスレッドの処理実行完了後、Ｓ６０８で「使用可能レジスタ」の方を使用するレジスタに設定する。この処理は、Ｓ６０６の逆操作として、レジスタリネーミング機構１０６、または類似した機構により「予約レジスタ」、「使用可能レジスタ」の名前を元に戻すことにより実現する。これにより、割込み管理処理でのコンテキストスイッチ処理が完了する。このコンテキストスイッチ処理部６０４、割込み管理処理６０１の動作を、コンテキストスイッチが必要になるごとに繰り返す。
【００５１】
この実施の形態６によるリアルタイムオペレーティングシステムの処理方式によれば、実施の形態４では特定の１つのスレッドへのコンテキストスイッチが高速に行えるのに対し、リアルタイムオペレーティングシステムの実行性能上重要となる割込みスレッドのコンテキストを「予約レジスタ」に保持するようにしたので、割込みスレッドへのスイッチが高速に行えるようになる。さらに、割込みスレッドのコンテキストは「予約レジスタ」のみを使用するので、待避、復帰が必要な汎用レジスタ数が少なく、複数の割込みスレッド間でコンテキストスイッチが必要になり、「予約レジスタ」の内容を切り替える場合でも、通常のスレッド間のコンテキストスイッチよりも少ないオーバヘッドで行うことができる。割込みスレッドの処理は、通常のアプリケーションソフトウェアのスレッドよりも処理が単純で短いことが想定されるので、大量のレジスタを割り当てなくても性能低下がない。
【００５２】
以上のように、リアルタイムオペレーティングシステムにおいて、「予約レジスタ」によってリザーブした汎用レジスタを、割込み処理より起動されるシステムスレッドに割り当てる割込み管理処理部を持つ。割込み処理用の割込みスレッドへコンテキストスイッチする場合は、「予約レジスタ」と指定した汎用レジスタのみの待避、復帰を行い、他の汎用レジスタの待避、復帰を行わないコンテキストスイッチ処理を持つ。一方、割込み処理用の割込みスレッドから、割込まれたスレッドへ復帰する場合は、汎用レジスタの待避、復帰を行わないコンテキストスイッチ処理を持つ。このようにしてリアルタイムオペレーティングシステムを実現する。
【００５３】
実施の形態７．
以下、この発明の実施の形態７を図に従って説明する。図１５はこの発明の実施の形態７によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表す図である。実施の形態７では、使用レジスタ設定部１０７として、オペレーティングシステムの初期化処理部（図１５では「ＯＳ初期化処理」と表示）７０５を備える。また、プロセッサの汎用レジスタ７０２を２つに分割し、レジスタセット１（７０２ａ）と、レジスタセット２（７０２ｂ）とする。またレジスタセットの定義のため、レジスタ設定定義ファイル７０１では、それぞれのレジスタセットを構成するレジスタ名を定義する。コンテキストスイッチ処理部７０３はこの２つのレジスタセットを管理する。また、７０４ａは現在実行中のスレッドのコンテキスト、７０４ｂは次に新しく起動するスレッドのコンテキストである。１０６はレジスタリネーミング機構であり、実施の形態１または２と同様のものである。
【００５４】
実施の形態７では、実施の形態１、または実施の形態２の方法と同様に、レジスタ設定定義ファイル７０１で定義し、オペレーティングシステムの初期化処理部７０５で、プロセッサの持つ汎用レジスタ７０２を２つに分割し、レジスタセット１（７０２ａ）とレジスタセット２（７０２ｂ）とする。さらに、オペレーティングシステムの初期化処理部７０５は、この２つのレジスタセットをそれぞれ独立したスレッドに割り当てられるように設定する。レジスタセット１（７０２ａ）、レジスタセット２（７０２ｂ）は、レジスタリネーミング機構１０６により汎用レジスタの名前を変更することにより、どちらか一方を使用するレジスタに設定する。この２つのレジスタセットを使い、コンテキストスイッチ処理部７０３は図１６のように動作する。コンテキストスイッチ処理部７０３は、初期化処理においてＳ７０１でレジスタ設定定義ファイルを読み込み、レジスタセット１、レジスタセット２の構成定義を設定する。それ以降、コンテキストスイッチ処理が発生すると、以下のような動作を行う。ここではレジスタセット１を現在使用している汎用レジスタとして説明する。Ｓ７０２で使用していないレジスタセットであるレジスタセット２が保持している内容が、これから新たに起動するスレッドのコンテキストであるかをチェックする。レジスタセット２が保持している内容が新たに起動するスレッドのコンテキストでない場合には、Ｓ７０５でレジスタセット２の内容をスタックに待避する。次にＳ７０６で現在実行中のスレッドの汎用レジスタ以外のコンテキストをスタックへ待避する。Ｓ７０７でＳ７０６と対応する新たに起動するスレッドの汎用レジスタ以外のコンテキストをスタックから復帰する。Ｓ７０８で起動するスレッドの汎用レジスタのコンテキストを現在使用していないレジスタセットであるレジスタセット２に復帰する。その後Ｓ７０９で、使用するレジスタセットをレジスタセット１からレジスタセット２に切り替えることにより、コンテキストスイッチ処理を完了する。
使用するレジスタセットの切り替えはレジスタリネーミング機構１０６、または類似した機構により、レジスタセット２の汎用レジスタ名をレジスタセット１のものに変更することにより実現する。
【００５５】
この処理ではレジスタセット１にはまだ実行中だったスレッドのコンテキストを保持している。Ｓ７０２で、レジスタセット２の内容が新たに起動するスレッドのコンテキストである場合には、Ｓ７０３で、Ｓ７０６と同様に、現在実行中のスレッドの汎用レジスタ以外のコンテキストをスタックへ待避する。次にＳ７０４で、Ｓ７０７と同様に、新たに起動するスレッドの汎用レジスタ以外のコンテキストをスタックから復帰する。この後、Ｓ７０９に戻り、使用するレジスタセットをレジスタセット１からレジスタセット２に切り替える。この場合には汎用レジスタの待避、復帰処理は行っていない。使用している汎用レジスタがレジスタセット２の場合には、上記の説明のレジスタセット１とレジスタセット２を読み替える。これらの動作により、レジスタセット１とレジスタセット２にはコンテキストスイッチによりスイッチする前のスレッドのコンテキスト７０４ａと、スイッチした後のスレッドのコンテキスト７０４ｂが保持されていることになる。スイッチした後のスレッドからスイッチする前のスレッドに戻る場合は、汎用レジスタの待避、復帰処理が不要になる。
【００５６】
この実施の形態７によるリアルタイムオペレーティングシステムの処理方式によれば、コンテキストスイッチ前後のスレッドのコンテキストを２つのレジスタセットで持つようにしたので、あるスレッドが別のスレッドに実行をプリエンプションされた後、元のスレッドに復帰するような２つのスレッド間で交互に発生するコンテキストスイッチなどの実行の遷移を、汎用レジスタの待避、復帰処理を行わずに実現でき、コンテキストスイッチ処理のオーバヘッド時間を短縮することができる。
【００５７】
この発明のポイントは、コンテキストスイッチ処理部で実施するコンテキストスイッチ処理でレジスタを待避、または復帰するレジスタを限定することにある。
この実施の形態では、一つのスレッドが使用できる「使用可能レジスタ」のレジスタの数を限定し、更に、一つのスレッドが使用できる「使用可能レジスタ」のセットを二つ定義した点に特徴がある。
従って、この実施の形態では、レジスタ定義設定ファイルにおいて、汎用レジスタを二つのレジスタセットに分割して定義する場合を示したが、二つのレジスタセット以外のレジスタが存在しても構わない。
【００５８】
以上のようにリアルタイムオペレーティングシステムにおいて、汎用レジスタを「使用可能レジスタ」と「予約レジスタ」とに分けることにより、汎用レジスタを２つのセットに分割し、それぞれに独立したスレッドコンテキストを持たせるオペレーティングシステム初期化処理を持つ。
コンテキストスイッチを行う場合、現在使用していない汎用レジスタセットの保持しているコンテキストの内容を待避し、そのレジスタセットに対し起動するスレッドのコンテキストの復帰を行い、現在使用している汎用レジスタセットの内容はそのまま保持し、使用する汎用レジスタセットを変更するコンテキストスイッチ処理を持つ。
一方、コンテキストスイッチを行う場合、現在使用していない汎用レジスタセットに保持しているコンテキストの所有者が、これから起動するスレッドである場合には、汎用レジスタの待避、復帰を行わないコンテキストスイッチ処理を持つ。このようにしてリアルタイムオペレーティングシステムを実現する。
【００５９】
実施の形態８．
以下、この発明の実施の形態８を図に従って説明する。図１７はこの発明の実施の形態８によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表す図である。実施の形態８では、実施の形態７における汎用レジスタの分割を２個からｎ個に変更する。これによりレジスタ設定定義ファイル８０１では、１からｎまでのレジスタセットの構成定義を設定する。オペレーティングシステムの初期化処理部７０５は実施の形態７と同様にレジスタセットの設定を行う。プロセッサの汎用レジスタ８０２はレジスタ設定定義ファイル８０１により、レジスタセット１（８０２ａ）、レジスタセット２（８０２ｂ）、レジスタセット３（８０２ｃ）、・・・、レジスタセットｎ（８０２ｎ）、というように分割される。複数のレジスタセットに分割する方法は、実施の形態１、または実施の形態２の方法を応用し、選択したレジスタセットを「使用可能レジスタ」、それ以外のレジスタセットを「予約レジスタ」とし、その「使用可能レジスタ」と「予約レジスタ」の構成をレジスタセットの選択を変えるごとに変更することにより実現する。コンテキストスイッチ処理部８０３はこれらのレジスタセットを管理する。８０４ａ、８０４ｂ、８０４ｃ、・・・、は各レジスタセットに保持されているスレッドのコンテキストである。
【００６０】
実施の形態８のコンテキストスイッチ処理部８０３は図１８のように動作する。コンテキストスイッチ処理部８０３は、初期化処理においてＳ８０１でレジスタ設定定義ファイル８０１を読み込み、レジスタセット１からレジスタセットｎまでの構成定義を設定する。それ以降、コンテキストスイッチ処理が発生すると、以下のような動作を行う。Ｓ８０２で、新たに起動するスレッドのコンテキストがレジスタセット１からレジスタセットｎまでに割り当てられているかをチェックする。新たに起動するスレッドのコンテキストがレジスタセットのどれかに割り当てられている場合には、Ｓ８０３で現在実行中のスレッドの汎用レジスタ以外のコンテキストをスタックに待避し、Ｓ８０４で新たに起動するスレッドの汎用レジスタ以外のコンテキストをスタックから復帰する。この場合は、汎用レジスタの待避、復帰処理は行わない。その後、Ｓ８１０を行う。Ｓ８０２で新たに起動するスレッドのコンテキストがレジスタセットに割り当てられていない場合は、Ｓ８０５でレジスタセット１からレジスタセットｎの中から一つのレジスタセットを選択する。
【００６１】
本実施の形態では、もっとも最近使用していないレジスタセットを選択しているが、他のアルゴリズムによりレジスタセットを選択しても良い。その後は実施の形態７の動作と同様に、Ｓ８０６で選択したレジスタセットの内容をスタックに待避し、Ｓ８０７で現在実行中のスレッドの汎用レジスタ以外のコンテキストをスタックへ待避し、Ｓ８０８で新たに起動するスレッドの汎用レジスタ以外のコンテキストをスタックから復帰し、Ｓ８０９で新たに起動するスレッドの汎用レジスタのコンテキストを、Ｓ８０５で選択したレジスタセットに復帰する。Ｓ８１０で、使用レジスタセットを現在実行中のスレッドのコンテキストを保持しているレジスタセットから、Ｓ８０５で選択したレジスタセットに切り替える。使用するレジスタセットの変更の方法はレジスタリネーミング機構１０６、または類似した機構により、汎用レジスタ名を切り替えることにより実現する。これにより、スレッドのコンテキスト８０４ａ、８０４ｂ、８０４ｃ、・・・８０４ｎがキャッシングされることになり、このスレッド間でコンテキストスイッチする場合は、汎用レジスタの待避、復帰処理が不要になる。
【００６２】
この実施の形態８によるリアルタイムオペレーティングシステムの処理方式によれば、汎用レジスタをｎ個のレジスタセットに分割し、それをスレッドの汎用レジスタのコンテキストのキャッシュとするようにしたので、実施の形態７の特徴である２つのスレッド間での交互に発生するコンテキストスイッチの高速化を、ｎ個のスレッド間で実現でき、その間の実行の遷移では、汎用レジスタの待避、復帰処理を行わないことにより、コンテキストスイッチ処理のオーバヘッド時間を短縮することができる。
【００６３】
この発明のポイントは、コンテキストスイッチ処理部で実施するコンテキストスイッチ処理でレジスタを待避、または復帰するレジスタを限定することにある。
この実施の形態では、一つのスレッドが使用できる「使用可能レジスタ」のレジスタの数を限定し、更に、一つのスレッドが使用できる「使用可能レジスタ」のセットを複数定義した点に特徴がある。
従って、この実施の形態では、レジスタ定義設定ファイルにおいて、汎用レジスタを複数のレジスタセットに分割して定義する場合を示したが、定義したレジスタセット以外のレジスタが存在しても構わない。
また、上記のことは、以下の実施の形態９においても同様である。
【００６４】
実施の形態９．
以下、この発明の実施の形態９を図に従って説明する。図１９はこの発明の実施の形態９によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表す図である。実施の形態９では、実施の形態８の構成に加え、プロセッサが多数の浮動小数点レジスタ９０１を保持することを想定している。浮動小数点レジスタは、実施の形態１、または実施の形態２と同様の方法を用いて、浮動小数点レジスタ設定定義ファイル９０５に示される定義に従い、ｎ個のレジスタセット９０１ａ、９０１ｂ、９０１ｃ、・・・、９０１ｎに分割する。オペレーティングシステムの初期化処理部９０６は、レジスタ設定定義ファイル８０１と浮動小数点レジスタ設定定義ファイル９０５に基づいて、汎用レジスタのレジスタセットを浮動小数点のレジスタセットの設定を行う。コンテキストスイッチ処理部９０２では、実施の形態８の汎用レジスタのレジスタセット８０２ａ、８０２ｂ、８０２ｃ、・・・、８０３ｎに加え、浮動小数点レジスタのレジスタセット９０１ａ、９０１ｂ、９０１ｃ、・・・、９０１ｎを管理する。９０４は１０６と同様に浮動小数点レジスタの名前を制御するために、プロセッサの持つ浮動小数点レジスタリネーミング機構である。オペレーティングシステム内のスレッドは、浮動小数点演算を行うものに関しては、汎用レジスタのコンテキストの他に、浮動小数点レジスタのコンテキストを保持する。図１９の例では、スレッド１とスレッド３は浮動小数点レジスタコンテキストも持つコンテキスト９０３ａ、９０３ｃを保持し、スレッド２は汎用レジスタコンテキストのみを持つコンテキスト９０３ｂを保持している。９０３ａ、９０３ｂ、９０３ｃ、・・・、は汎用レジスタセット、浮動小数点レジスタセットに保持されているスレッドのコンテキストである。
【００６５】
実施の形態９のコンテキストスイッチ処理部９０２は図２０のように動作する。コンテキストスイッチ処理部９０２は、初期化処理においてＳ９０１でレジスタ設定定義ファイル８０１と、浮動小数点レジスタ設定定義ファイル９０５を読み込み、汎用レジスタ８０２のレジスタセット１からレジスタセットｎまでの構成定義と、浮動小数点レジスタ９０１のレジスタセット１からレジスタセットｎまでの構成定義を設定する。それ以降、コンテキストスイッチ処理が発生すると、以下のような動作を行う。Ｓ９０２で新たに起動するスレッドが浮動小数点レジスタコンテキストを保持しているかどうかチェックする。起動するスレッドが浮動小数点レジスタコンテキストを保持していない場合は、図１８のＳ８０２からＳ８１０の動作を行い、実施の形態８と同様にコンテキストスイッチ処理を行う。Ｓ９０２で新たに起動するスレッドが浮動小数点レジスタコンテキストを保持している場合には、Ｓ９０３で、新たに起動するスレッドの浮動小数点レジスタコンテキストが、浮動小数点レジスタのレジスタセット１からレジスタセットｎまでに割り当てられているかをチェックする。新たに起動するスレッドの浮動小数点レジスタコンテキストが浮動小数点レジスタのレジスタセットのどれかに割り当てられている場合は、浮動小数点レジスタの待避、復帰処理は行わず、Ｓ９０７を行う。Ｓ９０３で新たに起動するスレッドの浮動小数点レジスタコンテキストが浮動小数点レジスタのレジスタセットに割当てられていない場合は、Ｓ９０４で浮動小数点のレジスタセット１からレジスタセットｎの中から一つのレジスタセットを選択する。
【００６６】
本実施の形態では、もっとも最近使用していない浮動小数点レジスタセットを選択しているが、他のアルゴリズムによりレジスタセットを選択しても良い。次にＳ９０５で選択した浮動小数点レジスタのレジスタセットをスタックへ待避し、Ｓ９０６で新たに起動するスレッドの浮動小数点レジスタコンテキストを、Ｓ９０４で選択したレジスタセットに復帰する。Ｓ９０７で使用する浮動小数点レジスタのレジスタセットを、現在、浮動小数点レジスタを保持しているスレッドのレジスタセットから、Ｓ９０５で選択したレジスタセットに切り替える。使用する浮動小数点レジスタのレジスタセットの変更は、汎用レジスタの場合と同様に、浮動小数点レジスタリネーミング機構９０４、または類似した機構により、浮動小数点レジスタ名を切り替えることにより実現する。この処理の後、Ｓ９０８に移り、実施の形態８の動作により、汎用レジスタのコンテキストの切り替え処理を行う。これにより、汎用レジスタに加え、浮動小数点レジスタコンテキストも９０３ａ、９０３ｃ、・・・、９０３ｎのようにキャッシングされることになり、このスレッド間でコンテキストスイッチする場合は、浮動小数点レジスタの待避、復帰処理も不要になる。
尚、この実施の形態では浮動少数点レジスタについて説明したが、この他のレジスタに適用できることは言うまでもない。
【００６７】
この実施の形態９によるリアルタイムオペレーティングシステムの処理方式では、実施の形態８に加え、浮動小数点レジスタもｎ個のレジスタセットに分割し、それを浮動小数点レジスタコンテキストのキャッシュとするようにしたので、ｎ個の浮動小数点レジスタコンテキストを持つスレッド間でコンテキストスイッチする場合には、浮動小数点コンテキストの待避、復帰処理もなくなり、実施の形態８よりもさらにコンテキストスイッチ処理のオーバヘッド時間を短縮することができる。
【００６８】
以上のように、多数の浮動小数点レジスタを持つプロセッサ上のリアルタイムオペレーティングシステムにおいて、浮動小数点レジスタに対しても本発明の処理方式を適用し、浮動小数点レジスタの一部を使用しないようにし、浮動小数点レジスタを使用するスレッドに対し、上記実施の形態８の動作を汎用レジスタと共に浮動小数点レジスタに対して行うオペレーティングシステムの初期化処理とコンテキストスイッチ処理を持つ。このようにしてリアルタイムオペレーティングシステムを実現する。
【００６９】
実施の形態１０．
上記実施の形態１〜９では、リアルタイムオペレーションシステムについて説明したが、オペレーションシステムであれば、この処理方式を適用することも可能である。
また、上記の実施の形態１〜９では、汎用レジスタのうち、使用する汎用レジスタを制限することにより、コンテキストスイッチ処理のオーバヘッド時間の短縮する処理方式について説明したが、汎用レジスタ以外のレジスタについてこの処理方式を適用することも可能である。
更に、レジスタのみでなく、この他のメモリ等についても、この処理方式を適用することも考えられる。
【００７０】
【発明の効果】
この発明に係るオペレーティングシステムの処理方式及びオペレーティングシステムの処理方法によれば、実行モジュールの使用する汎用レジスタを限定することにより、スレッド間のコンテキストスイッチにおいて、待避、復帰するレジスタ数を少なくし、コンテキストスイッチのオーバヘッド時間を短縮することができる。
【００７１】
さらに、この発明によれば、一部の汎用レジスタを使用しないようにすることにより、スレッド間のコンテキストスイッチにおいて、待避、復帰するレジスタ数を少なくし、コンテキストスイッチのオーバヘッド時間を短縮することができる。
【００７２】
この発明によれば、使用しないように設定した汎用レジスタを、頻繁にアクセスするオペレーティングシステムのグローバル変数として利用することにより、オペレーティングシステムの処理を高速化することができる。
【００７３】
この発明によれば、特定スレッドへのコンテキストスイッチ時には、スレッドのコンテキストを持つ汎用レジスタの待避、復帰処理を行わずに、特定のスレッドへのコンテキストスイッチのオーバヘッド時間を短縮することができる。
【００７４】
この発明によれば、高速にコンテキストスイッチが行える特定スレッドをオペレーティングシステムの動作状況に応じて有効に選択できるようにすることができる。
【００７５】
この発明によれば、割込み発生時のコンテキストスイッチにおける汎用レジスタの待避、復帰処理をなくす、もしくは待避、復帰するコンテキスト量を限定し、割込み処理におけるコンテキストスイッチのオーバヘッド時間を短縮することができる。
【００７６】
この発明によれば、複数個のスレッド間のコンテキストスイッチ時の汎用レジスタの待避、復帰処理をなくし、コンテキストスイッチ時間を短縮することができる。
【００７７】
この発明によれば、２つのスレッド間の交互のコンテキストスイッチ時の汎用レジスタの待避、復帰処理をなくし、コンテキストスイッチのオーバヘッド時間を短縮することができる。
【００７８】
この発明によれば、浮動小数点コンテキストを持つスレッド間でのコンテキストスイッチ時の浮動小数点レジスタの待避、復帰処理を行う回数を減らし、コンテキストスイッチ時間を短縮することができる。
【図面の簡単な説明】
【図１】  この発明の実施の形態１によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表した図である。
【図２】  この発明の実施の形態１のコンテキストスイッチ処理部で実施する処理のフロー図である。
【図３】  この発明の実施の形態２によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表した図である。
【図４】  この発明の実施の形態２のスレッド初期化処理部で実施するスレッド初期化処理のフロー図である。
【図５】  この発明の実施の形態３によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表す図である。
【図６】  この発明の実施の形態３のＯＳ初期化処理部で実施するＯＳ初期化処理のフロー図である。
【図７】  この発明の実施の形態４によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表す図である。
【図８】  この発明の実施の形態４のＯＳ初期化処理部で実施するＯＳ初期化処理のフロー図である。
【図９】  この発明の実施の形態４のコンテキストスイッチ処理部で実施する処理のフロー図である。
【図１０】  この発明の実施の形態５によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表す図である。
【図１１】  この発明の実施の形態５のコンテキストスイッチ処理部で実施する処理のフロー図である。
【図１２】  この発明の実施の形態５の優先スレッド選択処理部で実施する優先スレッド選択処理のフロー図である。
【図１３】  この発明の実施の形態６によるリアルタイムオペレーティングシステムの処理方式の構成図である。
【図１４】  この発明の実施の形態６のコンテキストスイッチ処理部と割込み管理処理部で実施する処理のフロー図である。
【図１５】  この発明の実施の形態７によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表す図である。
【図１６】  この発明の実施の形態７のコンテキストスイッチ処理部で実施する処理のフロー図である。
【図１７】  この発明の実施の形態８によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表す図である。
【図１８】  この発明の実施の形態８のコンテキストスイッチ処理部で実施する処理のフロー図である。
【図１９】  この発明の実施の形態９によるリアルタイムオペレーティングシステムの処理方式の構成の一例を表す図である。
【図２０】  この発明の実施の形態９のコンテキストスイッチ処理部で実施する処理のフロー図である。
【図２１】  従来のリアルタイムオペレーティングシステムの汎用レジスタ管理の構成の一例を表す図である。
【符号の説明】
１０１，７０１，８０１  レジスタ設定定義ファイル、１０２  コンパイラ、１０３，１０３ａ，１０３ｂ，７０２，７０２ａ，７０２ｂ，８０２，８０２ａ〜８０２ｎ  プロセッサの汎用レジスタ、１０４，４０２，５０５，６０４，７０３，８０３，９０２  コンテキストスイッチ処理部、１０５  実行モジュール、１０６  レジスタリネーミング機構、１０７  使用レジスタ設定部、２０１  スレッド初期化処理部、３０１，４０１，７０５，９０６  オペレーティングシステムの初期化処理部（ＯＳ初期化処理部）、３０２  ＯＳグローバル変数、４０３  特定スレッド用汎用レジスタ、５０１  タイマ処理、５０２  優先スレッド選択処理部、５０３  スイッチカウンタ、５０３ａ  スレッドＩＤ、５０３ｂカウンタ、５０４  スレッド汎用レジスタ、６０１  割込み管理処理部、６０２  割込みスレッド用コンテキスト、６０３  割込ハンドラ、７０４ａ  現実行スレッドコンテキスト、７０４ｂ  スイッチするスレッドコンテキスト、８０４ａ〜８０４ｎ  スレッドコンテキスト、９０１，９０１ａ〜９０１ｎ  浮動小数点レジスタ、９０４  浮動小数点レジスタリネーミング機構、９０５  浮動小数点レジスタ設定定義ファイル、１９０１，１９０２ａ，１９０２ｂ  レジスタウィンドウ、１９０３ａ，１９０３ｂ  無効マスク、１９０４  カレントウィンドウポインタ。
【図１】
0003880739.tif 000002
【図２】
0003880739.tif 000003
【図３】
0003880739.tif 000004
【図４】
0003880739.tif 000005
【図５】
0003880739.tif 000006
【図６】
0003880739.tif 000007
【図７】
0003880739.tif 000008
【図８】
0003880739.tif 000009
【図９】
0003880739.tif 000010
【図１０】
0003880739.tif 000011
【図１１】
0003880739.tif 000012
【図１２】
0003880739.tif 000013
【図１３】
0003880739.tif 000014
【図１４】
0003880739.tif 000015
【図１５】
0003880739.tif 000016
【図１６】
0003880739.tif 000017
【図１７】
0003880739.tif 000018
【図１８】
0003880739.tif 000019
【図１９】
0003880739.tif 000020
【図２０】
0003880739.tif 000021
【図２１】
0003880739.tif 000022