(57)【特許請求の範囲】
【請求項１】
対称型マルチプロセッサに対応可能なオペレーティングシステムをシングルプロセッサによって動作させる場合においてオペレーティングシステムのカーネルの実時間タスクと非実時間タスクのうち、実時間タスクがミューテックスロックによって他のタスクよりブロックされることを回避する方法において、
前記シングルプロセッサによって、実時間タスクの実行を開始することと、
前記シングルプロセッサによって、割込み禁止処理を実行することと、
前記シングルプロセッサによって、前記実時間タスクから、ユーザが予め指定した所定の処理を取り出して他の非実時間タスクに加えることと、
前記シングルプロセッサによって、前記割込み禁止を解除する処理を実行することと、
前記シングルプロセッサによって、前記実時間タスクから前記所定の処理を取り出した残りの処理を実行することと、
を含み、
前記所定の処理は、ミューテックスロックによって他の処理よりブロックされる可能性が高いとユーザが判定したものであることを特徴とする実時間タスクに対するブロック回避方法。
【請求項２】
請求項１記載の実時間タスクに対するブロック回避方法において、
前記シングルプロセッサによって、前記他の非実時間タスクの実行を開始することと、
前記シングルプロセッサによって、前記他の非実時間タスクに加えられた前記所定の処理を実行することと、
前記シングルプロセッサによって、前記他の非実時間タスクに加えられた前記所定の処理の実行中は、ミューテックスロックによって他のタスクをブロックすることと、
を含むことを特徴とする実時間タスクに対するブロック回避方法。
【請求項３】
請求項１記載の実時間タスクに対するブロック回避方法において、
前記実時間タスクから前記所定の処理を取り出すことは、前記所定の処理及び前記所定の処理に必要なデータを所定のメモリに格納する処理であることを特徴とする実時間タスクに対するブロック回避方法。
【請求項４】
請求項１記載の実時間タスクに対するブロック回避方法において、
前記所定の処理を他の非実時間タスクに加えることは、前記所定の処理及び前記所定の処理に必要なデータを所定のメモリから読み出す処理であることを特徴とする実時間タスクに対するブロック回避方法。
【請求項５】
請求項１記載の実時間タスクに対するブロック回避方法において、前記オペレーティングシステムはシングルプロセッサを備えたコンピュータシステムによって動作させることを特徴とする実時間タスクに対するブロック回避方法。
【請求項６】
請求項１から５のいずれか１項記載の実時間タスクに対するブロック回避方法をシングルプロセッサを有するコンピュータ上で実行させるためのコンピュータによって読み取り可能なプログラム。
【請求項７】
対称型マルチプロセッサに対応可能なオペレーティングシステムと、該オペレーティングシステムを動作させるシングルプロセッサと、メモリと、を有する実時間情報処理装置において、
前記シングルプロセッサによって、前記オペレーティングシステムのカーネルの実時間タスクと非実時間タスクのうち、実時間タスクの実行を開始し、割込み禁止処理を実行し、前記実時間タスクから、ユーザが予め指定した所定の処理を取り出して他の非実時間タスクに加え、前記割込み禁止を解除する処理を実行し、前記実時間タスクから前記所定の処理を取り出した残りの処理を実行し、
前記所定の処理は、ミューテックスロックによって他の処理よりブロックされる可能性が高いとユーザが判定したものであることを特徴とする実時間情報処理装置。
【請求項８】
請求項７記載の実時間情報処理装置において、
前記シングルプロセッサによって、前記他の非実時間タスクの実行を開始し、前記他の非実時間タスクに加えられた前記所定の処理を実行し、
前記他の非実時間タスクに加えられた前記所定の処理の実行中は、ミューテックスロックによって他のタスクをブロックすることを特徴とする実時間情報処理装置。
【請求項９】
請求項７記載の実時間情報処理装置において、
前記所定の処理を前記実時間タスクから取り出すことは、前記所定の処理及び前記所定の処理に必要なデータを前記メモリに格納する処理であることを特徴とする実時間情報処理装置。
【請求項１０】
請求項７記載の実時間情報処理装置において、
前記所定の処理を他の非実時間タスクに加えることは、前記所定の処理及び前記所定の処理に必要なデータを前記メモリから読み出す処理であることを特徴とする実時間情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、対称型マルチプロセッサ（ＳＭＰ）に対応可能なオペレーティングシステムに関し、特に、そのようなオペレーティングシステムをシングルプロセッサによって動作させる場合において実時間タスクに対するブロック回避方法に関する。
【背景技術】
【０００２】
コンピュータに内蔵される組込み機器では、実時間処理が必要になる場合が多い。一方、組込み機器の高度化が求められ、内蔵されるコンピュータが大規模化され、その上で動作するソフトウエアの複雑化が進んでいる。従って、組込み用オペレーティングシステムには、実時間処理機能に加えて、ファイルシステム、ネットワーク、グラフィックス、ユーザインターフェース等の汎用機能が必要となる。
【０００３】
そこで、実時間処理機能と汎用機能を併せ持つオペレーティングシステムの開発方法として、ＵＮＩＸ（登録商標）やウインドウズ（登録商標）等の汎用のオペレーティングシステムに、実時間処理機能を付加する手法が用いられている。
【０００４】
ＵＮＩＸの一種であるリナックス（Linux）は、アプリケーション、ライブラリ、デバイスドライバなどのソフトウエア部品が多数揃っているため、利便性が高い。また、殆どがオープンソースであり、仕様に合わない場合には、修正を加えることが可能である。
【０００５】
リナックスのカーネルは本来実時間処理機能を有さない。本願発明者は、リナックスに実時間処理機能を付加する試みを行なってきた。リナックスオペレーティングシステムは、カーネルとアプリケーションからなる。カーネルは絶対に必要のコア部分と、取り外し可能なオプション部分からなる。コア部分は、タスクスケジューリング機能、アプリケーションとのインターフェースを取るシステムコール等を有する。オプション部分は、デバイスドライバ、ファイルシステム等を有する。リナックスのカーネルのコア部分を実時間処理用に変更することにより、実時間処理機能を有するリナックスオペレーティングシステム、即ち、実時間リナックスが得られる。
【０００６】
本願発明の発明者らは、１９９８年に、Intel（登録商標）のx86アーキテクチャ用のリナックスカーネル2.0に対応した実時間リナックスであるART-Linux2.0を開発した。本願発明の発明者らは、２０００年に、リナックスカーネル2.2に対応したART-Linux2.2を開発し、２００４年に、リナックスカーネル2.4に対応したART-Linux2.4を開発した。ART-Linuxは本願発明者が開発した実時間リナックスの名称である。
【０００７】
一般に実時間オペレーティングシステムは、次の機能と性能を持つことが一般的である。
（１）固定優先度に基づくタスクスケジューリング
（２）プリエンプティブカーネル
（３）十分に小さい割り込みレイテンシ
ART-Linux2.4における、実時間処理機能について説明する。
【０００８】
（１）ミューテックスロックによるスピンロックの置換
最大割込みレイテンシを小さくするためには、最長プリエンプト禁止期間を短くする必要がある。リナックスカーネルでは、プリエンプトを禁止するクリティカルセクション（複数の処理が同時期に実行されると、破綻をきたす部分）が全ソースコードに偏在するため、最長プリエンプト禁止期間の特定は困難である。最長プリエンプト禁止期間を短くするために、ART-Linux2.4では、リナックスカーネルで排他制御を行うスピンロックを、多段階優先度承継機能付きミューテックスロック（実時間ロックと呼ぶ）に置換した。それによって、リナックスカーネルに遍在するプリエンプト禁止期間全てプリエンプト可能となる。最大割込みレイテンシは、ART-Linux2.4固有のタスクスケジューラや実時間ロックの処理中等にだけ偏在するプリエンプト禁止の最長値によって決まるようになる。よって、リナックスカーネルのどのような機能を利用しても、最大割込みレイテンシを保証することができる。
【０００９】
（２）多段階優先度承継機能
実時間処理においてタスク間に依存関係があると、優先度逆転が発生する。上述のように、ミューテックスロックをロックしたままタスクがスイッチし、別のタスクがこのミューテックスロックによってブロックされ、優先度逆転が発生する。そこで、上述のように、多段階優先度承継機能を付加した。また、あるミューテックスロックをロックしたタスクが、別のミューテックスロックにブロックされることがある。そのため、優先度を多段階に継承する機能を実装した。
【００１０】
（３）割込みハンドラタスク
実時間タスクより割込みハンドラを優先した場合、割込みハンドラの実行時間が終了するまで、実時間タスクの実行開始が遅れるので、割込みレイテンシが大きくなる。一方、割込みハンドラより実時間タスクを優先した場合、ある実時間タスクが割込みハンドラの処理待ちになったとき、優先度逆転が発生する。
【００１１】
よって、割込みハンドラにも優先度を割り当て、実時間タスクと依存関係のある割込みハンドラの優先度を高く設定する必要がある。ART-Linux2.4では、割込みハンドラを実時間処理タスク上で実行することにより、優先度を割り当てている。また、実時間ロックの優先度承継機能により、依存関係のある実時間タスクと同じ優先度が自動的に割り当てられるので、ユーザアプリケーションが割込みハンドラの優先度を設定する必要はない。
【００１２】
（４）対称型マルチプロセッサ（ＳＭＰ）に対して非対応
リナックスカーネルのＳＭＰ対応において最も基本的な機能として、タスクスケジューラと、排他制御を行うスピンロックがある。ART-Linux2.4では、実時間タスク用に独自のスケジューラがあり、スピンロックを実時間ロックに置換している。しかしながら、これらはＳＭＰに対応していない。そのため、マルチコアプロセッサをふくめたＳＭＰハードウエア上で動作させても、１つのプロセッサしか動作しない。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
対称型マルチプロセッサ（ＳＭＰ）に対応可能なオペレーティングシステムをシングルプロセッサによって動作させる場合に、実時間タスクがミューテックスロック（実時間ロック）に排他制御（ブロック）されることがある。実時間タスクがミューテックスロックにブロックされると、実時間処理機能が低下する。
【００１４】
本発明の目的は、対称型マルチプロセッサ（ＳＭＰ）に対応可能な実時間オペレーティングシステムをシングルプロセッサによって動作させるとき、実時間タスクがミューテックスロックにブロックされて、実時間処理機能が低下することを防止する技術を提供することにある。
【課題を解決するための手段】
【００１５】
本発明によると、実時間タスクの処理を別の非実時間タスクに受け渡すことによって、実時間タスクがミューテックスロックによって排他制御（ブロック）されることを回避する。非実時間タスクに受け渡す処理は、比較的優先度が低い処理であり、ユーザが予め指定する必要がある。こうして、比較的優先度が高い処理は、実時間タスクにて行い、比較的優先度が低い処理は、非実時間タスクが行なう。
【発明の効果】
【００１６】
本発明によると、実時間タスクがミューテックスロックにブロックされることが回避されるから、実時間処理機能の低下を防止することができる。
【発明を実施するための最良の形態】
【００１７】
本願の発明者らは、実時間リナックカーネルを開発する過程で、リナックスカーネルを対称型マルチプロセッサ（ＳＭＰ）に対応させることと、実時間リナックカーネルを安定化させることが、同一の手法により解決できることを見出した。そこで、ＳＭＰ対応のリナックスカーネルにおいて、プロセッサをタスクに置き換えることにした。こうして、ＳＭＰ対応のリナックスカーネルは、シングルプロセッサシステムで実時間リナックスカーネルとして利用可能となった。以下では、ＳＭＰ対応のリナックスカーネルを、シングルプロセッサシステムにて実時間リナックスカーネルとして動作させる場合を説明する。
【００１８】
本願発明者は、リナックスカーネル2.6に対応したART-Linux2.6を開発した。ART-Linux2.6では、「仮想プロセッサ番号に基づく排他制御」と「キューによる実時間タスクのブロック回避」が導入された。本発明は、「キューによる実時間タスクのブロック回避」に対応する。
【００１９】
以下では、ＳＭＰ対応のリナックスカーネルを、シングルプロセッサシステムにて実時間リナックスカーネルとして動作させる場合を説明する。しかしながら、リナックスカーネルは例として説明するのであって、本発明は、リナックスカーネルに限定されるものではない。本発明は、ＳＭＰ対応のオペレーティングシステムであれば、どのようなものであってもよい。
【００２０】
図１を参照して本願発明の発明者らが開発したART-Linux2.4における実時間タスクについて説明する。ＳＭＰ対応のリナックスカーネルでは、タスク間の共有データにアクセスするクリティカルセクションは、スピンロックによって排他制御を行っていた。ART-Linux2.4では、上述のように、スピンロックの代替としてミューテックスロックを用いる。即ち、ART-Linux2.4では、タスクは、ミューテックスロックによって排他制御される。
【００２１】
図１は、シングルプロセッサ１０を備えたコンピュータシステムでの主要部のみを図示する。このコンピュータシステムは、シングルプロセッサ１０以外に、実時間リナックスカーネルを格納したハードディスク、それを動作させるときに用いるメモリ等を備えるが、ここでは省略する。
【００２２】
図示のように、実時間リナックスカーネルをシングルプロセッサシステムにて動作させる。例えば、実時間タスク１１が、タスク間の共有データ１５にアクセスしているとき、他のタスク１２は、ミューテックスロック１４によって排他制御される。即ち、実時間タスク１１の実行中、他のタスク１２は、ミューテックスロック１４によって排他制御（ブロック）され、共有データ１５のうち、実時間タスク１１が使用している領域にアクセスすることはできない。更に、割込みハンドラ１３も同様に、ミューテックスロック１４によって排他制御（ブロック）される。ミューテックスロックは、一般的には異なるタスク間での排他制御であり、同時に一つのタスクしかクリティカルセクションに入ることを許されない。ミューテックスロックは、ロックしたタスクのみがアンロックできる。
【００２３】
ミューテックスロック１４によって排他制御（ブロック）されたタスク１２や割込みハンドラ１３の実行は中断され、休眠状態になる。その後、実時間タスク１１がミューテックスロックを解除したときに、タスク１２か割込みハンドラ１３のいずれかの実行が再開され、実行状態に戻る。
【００２４】
図２を参照して本発明の概念を説明する。実時間リナックスカーネルのうち、比較的優先度が高い実時間タスク２１にも、比較的重要でない処理２３が含まれる。この処理２３は、ミューテックスロックによって排他制御（ブロック）される可能性が高い。このような処理２３を、実時間タスク２１から非実時間タスク２２に受け渡す。それによって、実時間タスク２１は、ミューテックスロックによって排他制御されることなく実行される。一方、非実時間タスク２２では、処理２３がミューテックスロックによって排他制御される可能性がある。しかしながら、処理２３がミューテックスロックによって排他制御されても、実時間タスク２１の実時間性能が低下することはない。非実時間タスク２２では、例えば、実時間タスク２１が終了したとき、処理２３を実行する。
【００２５】
図３及び図４を参照して本発明による排他制御回避方法を説明する。図３は、比較的優先度が高い実時間タスク内の処理を実行する場合を示す。この処理は、ミューテックスロックによって排他制御される可能性があるものとする。先ず、ステップＳ１０１にて、このタスクは、ミューテックスロックの処理を行なう。ミューテックスロックの処理前に、他のタスクが、このミューテックスロックをロックしていなかった場合には、次のステップＳ１０２に進む。他のタスクが、このミューテックスロックをロックしていた場合には、このタスクは休眠状態となり、他のタスクにスイッチする。他のタスクがロックを解除したら、このタスクは実行状態となり、次のステップＳ１０２に進む。ステップＳ１０２にて、処理ｆを実行する。この処理ｆでは、データ３１を使用する。処理ｆが終了してから、ステップＳ１０３にて、ミューテックスロック処理を解除する。このように、処理ｆは、ステップＳ１０１にて、他のタスクによるミューテックスロックのロックによって排他制御される可能性がある。そこで、図３のプロシージャ０を、図４に示す２つのプロシージャ１、２に分解する。
【００２６】
図４に示すように、プロシージャ１は優先度が高い実時間タスク２１における処理である。プロシージャ１では、先ず、ステップＳ２０１にて、割込み禁止をかける。割込み禁止は、スケジューラを呼び出さない排他制御であり、スピンロック等であってもよい。ステップＳ２０２にて、処理ｆを受け渡す。処理ｆの受け渡しは、例えば、処理ｆ及びデータをキュー３２に入れる。キュー３２はメモリの領域を意味する。処理ｆの受け渡しが終わると、ステップＳ２０３にて、割込み禁止を解除する。割込み禁止期間中は、割込み処理に分岐しないので、他のタスクや割込みハンドラが実行されることは無く、他のタスクや割込みハンドラが共有データにアクセスすることは無い。
【００２７】
プロシージャ２は優先度が低い非実時間タスク２２の処理である。先ず、ステップＳ３０１にて、割込み禁止をかける。ステップＳ３０２にて、処理ｆを受け取る。即ち、キュー３２から処理ｆとデータを取り出す。処理ｆの受け取りが終わると、ステップＳ３０３にて、割込み禁止を解除する。ステップＳ３０４からステップＳ３０６は、プロシージャ０と同様である。即ち、ステップＳ３０４にて、ミューテックスロック処理を行なう。次に、ステップＳ３０５にて、処理ｆを実行する。この処理ｆでは、データ３１を使用する。処理ｆが終了してから、ステップＳ３０６にて、ミューテックスロックのロックを解除する。
【００２８】
上述のように、処理ｆの実行前に、ステップＳ３０４にて、非実時間タスク２２は、他のタスクによるミューテックスロックのロックによって中断される可能性がある。しかしながら、非実時間タスク２２は重要性が少ないので、処理の中断が起きても不都合はない。処理ｆの実行前に、非実時間タスク２２がミューテックスロックによってブロックされても、実時間タスクの実時間性能を低下させることはない。
【００２９】
上述のように、本発明では、実時間タスクの処理のうち、比較的重要度が低い処理、即ち、ミューテックスロックによってブロックされ易い処理を、非実時間タスクに移転し、そこで実行する。それによって、実時間タスクが、ミューテックスロックによってブロックされることが回避され、実時間タスクの実行を効率化することができる。
【００３０】
従って、実時間タスクの処理のうち、比較的重要度が低い処理を予めユーザが選定する必要がある。例えば、ユーザが、非実時間処理のコードを探し出してもよい。このような比較的重要度が低い処理として次の２つの例が挙げられる。
【００３１】
（１）タスクの終了処理
タスクの終了処理は、ＳＭＰ対応のリナックスカーネルにおいて問題を起こし易い処理の１つである。タスクが終了すると、それを親タスクに通知し、スケジューラを実行して別のタスクにスイッチする。親タスクは、終了したタスクのタスク構造体のメモリ領域を開放する。終了したタスクのスイッチより後に、親タスクのメモリの開放処理が実行される必要があるが、別のプロセッサで実行されていた場合、その順序が保証されない。それが問題である。
【００３２】
リナックスカーネル2.6では、親プロセスによるメモリ開放よりも終了プロセスのスイッチが遅かった場合、親プロセスでは、処理されず、スイッチした次のタスクがメモリを開放する処理を行なうことで、問題を回避している。この処理が、ART-Linux2.6で行なわれた場合、次のタスクが実時間タスクである可能性がある。従って、メモリ開放処理に必要な実時間ロック（ミューテックスロック）にブロックされる可能性がある。そこで、本発明によると、メモリ開放処理を、次に実行される非実時間タスクに受け渡すことによって、実時間処理性能の低下を防止する。
【００３３】
（２）ラン・キュー間の移動処理
ART-Linux2.6では、Ｏ（１）スケジューラが導入された。タスクの優先度に応じて複数のラン・キュー（run queue）と、実行可能タスクを含むラン・キューに応じたビットが１となるビットマップ変数あり、これらから最高優先度タスクの検索を、Ｏ（１）の処理量で実行するスケジューラである。ART-Linux2.6では、リナックスのスケジューラは実時間タスクを管理しない。リナックスのラン・キューから実時間タスクを削除すべきだが、ART-Linux2.4では、削除していなかった。しかし、Ｏ（１）スケジューラと整合しないので、実時間タスクをリナックスのラン・キューから削除することにした。
【００３４】
すると、実時間タスクが非実時間タスクに戻ったとき、リナックスのラン・キューに再挿入しなければならない場合がある。即ち、その処理を実時間タスクが行なう可能性がある。ラン・キューは共有データであり、アクセス時には対応する実時間ロック（ミューテックスロック）による排他制御が必要である。そこで、本発明によると、ラン・キューを、次に実行される非実時間タスクに受け渡すことによって、実時間処理性能の低下を防止する。
【００３５】
以上本発明の例を説明したが本発明は上述の例に限定されるものではなく、特許請求の範囲に記載された発明の範囲にて様様な変更が可能であることは当業者に容易に理解されよう。
【００３６】
例えば、以上にて、ＳＭＰ対応のリナックスカーネルをシングルプロセッサシステムにて動作させる場合を説明した。しかしながら、リナックスカーネルは例として説明するのであって、本発明は、リナックスカーネルに限定されるものではない。本発明は、ＳＭＰ対応のオペレーティングシステムであれば、どのようなものであってもよい。
【図面の簡単な説明】
【００３７】
【図１】実時間オペレーティングシステムにおける実時間タスクに対するブ排他制御（ブロック）を説明する説明図である。
【図２】本発明による実時間タスクに対するブロック回避方法を示す概念図である。
【図３】本発明による実時間タスクに対するブロック回避方法の処理を説明する図である。
【図４】本発明による実時間タスクに対するブロック回避方法の処理を説明する図である
【符号の説明】
【００３８】
１０…ＣＰＵ、１１，１２…タスク、１３…割込みハンドラ、１４…ミューテックロック、１５…共有データ、２１、２２…タスク、２３…処理、３１…データ、３２…キュー
【図１】
0004984153.tif 000002
【図２】
0004984153.tif 000003
【図３】
0004984153.tif 000004
【図４】
0004984153.tif 000005