JP4127848B2 - タスク処理装置 - Google Patents
タスク処理装置 Download PDFInfo
- Publication number
- JP4127848B2 JP4127848B2 JP2007538207A JP2007538207A JP4127848B2 JP 4127848 B2 JP4127848 B2 JP 4127848B2 JP 2007538207 A JP2007538207 A JP 2007538207A JP 2007538207 A JP2007538207 A JP 2007538207A JP 4127848 B2 JP4127848 B2 JP 4127848B2
- Authority
- JP
- Japan
- Prior art keywords
- task
- state
- circuit
- semaphore
- register
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Description
この装置は、処理レジスタと、メモリから処理レジスタにデータをロードし、処理レジスタのデータにしたがってタスクを実行する実行制御回路と、タスクごとの状態データを保持する複数の状態レジスタと、タスク切換を実行するタスク切換回路と、所定の選択条件によりタスクを選択するタスク選択回路と、を備える。
実行制御回路は、システムコール命令を実行するとき、その旨をタスク切換回路に通知する。タスク選択回路は、システムコール命令の有無によらず、実行可能に待機している状態を示すREADY(レディ)状態のタスクの中から実行対象となるタスクを選択する。
タスク切換回路は、システムコール命令実行時にタスク選択回路からの出力により次の実行対象となるタスクを選択し、処理レジスタのデータを所定の記憶領域に退避させるとともに、実行中のタスクに対応する状態レジスタの状態データを設定変更し、選択したタスクについて記憶領域に退避されていたデータを処理レジスタにロードするとともにそのタスクに対応する状態レジスタの状態データをREADY状態からRUN(ラン)状態に変更することにより、実行対象となるタスクを切り換える。
[タスクの状態遷移]
マルチタスク処理において、各タスクは「状態(ステート)」を持つ。各タスクは、後述する複数の状態間を遷移し、常に、いずれかの状態となっている。状態遷移の契機となるのは、「システムコールの実行」と「割り込み要求信号の検出」である。システムコールとは各タスクが実行する命令のうちの特別な命令である。割り込み要求信号とは、キーボードの押下やマウスのクリック、通信データの受信など、周辺機器から所定データを受け取ったときに発生する信号である。もちろん、各タスクに割り当てられるタイムスライスが消費されたときにも状態遷移が発生する。
タスクが休止状態にあることを示す。一般タスクも特殊タスクもSTOP状態となり得る。以下、STOP状態にあるタスクのことを「STOP−タスク」とよぶ。
1−1.一般タスク
他のタスクが別のタスクの起動を指示するシステムコール(以下、「起動システムコール」とよぶ)を実行すると、STOP状態にある一般タスクは後述のREADY状態に遷移する。
1−2.特殊タスク
特殊タスクは、通常、STOP状態にある。後述のタスク切換回路210により割り込み要求信号が検出されると、特殊タスクはSTOP状態から後述のRUN状態に遷移する。このときRUN状態にあったタスクは入れ替わりにREADY状態に遷移する。
タスクが実行中であることを示す。すなわち、タスクがタイムスライスを割り当てられ、CPUの使用権を取得している状態である。一般タスクも特殊タスクもRUN状態となり得る。以下、RUN状態にあるタスクのことを「RUN−タスク」とよぶ。複数のタスクのうち、RUN状態になることができるタスクは常に1つだけであり、同時に2つのタスクがRUN状態となることはできない。
2−1.一般タスク
RUN状態にある一般タスクは、所定のシステムコールを実行するとRUN状態からREADY状態または後述するWAIT状態に遷移する。RUN状態にある一般タスクは、タイムスライスを消費したときにも、READY状態に遷移する。いずれの場合においても、RUN状態にあった一般タスクの代わりに、READY状態にある一般タスクがRUN状態に遷移する。割り込み要求信号が検出されると、RUN−タスクはREADY状態に遷移する。このときには、STOP状態にある特殊タスクがRUN状態に遷移する。
RUN−タスクが自らを終了させるシステムコール(以下、「終了システムコール」とよぶ)を実行すると、RUN−タスクはSTOP状態に遷移する。
2−2.特殊タスク
割り込み要求信号によりSTOP状態からRUN状態に遷移した特殊タスクは、自処理が完了するとSTOP状態に戻る。特殊タスクが取り得る状態はSTOP状態とRUN状態のみである。
タスクが実行可能な状態にあることを示す。READY状態にあるタスクは、OSから実行権を与えられればいつでもRUN状態に遷移できる。一般タスクのみREADY状態となり得る。以下、READY状態にあるタスクのことを「READY−タスク」とよぶ。
RUN状態にある一般タスクがシステムコールの実行によりRUN状態以外の状態に遷移するとき、または、RUN状態にある特殊タスクが自らの処理を終了してSTOP状態に遷移するとき、READY−タスクが入れ替わりにRUN状態に遷移する。一般タスクは、READY状態からのみRUN状態に遷移する。READY状態にあるタスクが複数存在するときには、コンテキスト情報の一部であるタスク優先順位に基づいて、いずれか一つのREADY−タスクがRUN状態に遷移する。タスク優先順位が同じとなるREADY−タスクが複数存在するときには、READY状態に移行したのが最も古いタスクがRUN状態に遷移する。
タスクが所定のWAIT解除条件の成立を待っている状態を示す。WAIT解除条件が成立すると、WAIT状態にあるタスクはREADY状態に遷移する。一般タスクのみWAIT状態となり得る。以下、WAIT状態にあるタスクのことを「WAIT−タスク」とよぶ。WAIT解除条件に関しては後に詳述する。
[システムコール]
(1)起動系システムコール
STOP状態とREADY状態の間の遷移に関連するシステムコールである。
1−1.起動システムコール
RUN−タスクであるタスクAが別の一般タスクBを起動させるシステムコールである。このとき、STOP状態にある一般タスクBはREADY状態に遷移する。
1−2.終了システムコール
このシステムコールを実行したタスクは、自己の処理を終了させ、RUN状態からSTOP状態に遷移する。終了システムコールは、あるタスクが別のタスクを終了させる命令であってもよい。
(2)WAIT系システムコール
RUN状態とWAIT状態の間の遷移に関連するシステムコールである。
2−1.ウェイトセマフォシステムコール
セマフォ(後述)の獲得を要求するシステムコールである。
2−2.ウェイトミューテクスシステムコール
ミューテクス(後述)の獲得を要求するシステムコールである。
2−3.ウェイトイベントシステムコール
イベント(後述)の成立を待つシステムコールである。イベントIDのほか、待機フラグパターン(後述)やフラグ条件(後述)を変数として実行される。
いずれの場合においても、WAIT系システムコールにより、さまざまなWAIT解除条件が設定される。WAIT系システムコールの実行時において、既にWAIT解除条件が成立する状況にあるときには、システムコールを実行したRUN−タスクはREADY状態に遷移する。一方、WAIT解除条件が成立していないときには、RUN−タスクは、WAIT解除条件の成立を待機するWAIT状態に遷移する。
(3)SET系システムコール
WAIT状態とREADY状態の間の遷移に関連するシステムコールである。SET系システムコールの実行は、WAIT解除条件の成立契機となる。
3−1.リリースセマフォシステムコール
セマフォを解放するシステムコールである。
3−2.リリースミューテクスシステムコール
ミューテクスを解放するシステムコールである。
3−3.セットイベントシステムコール
イベントのカレントフラグパターン(後述)を設定するシステムコールである。
3−4.クリアフラグシステムコール
カレントフラグパターンをゼロクリアするためのシステムコールである。
本実施例においては、以上の計9種類のシステムコールを対象として説明するが、これ以外にもさまざまなシステムコールを実装可能であることはいうまでもない。
[一般的なRTOSの設計思想]
このRTOSはマルチタスクOSである。一般的なRTOSはソフトウェアとして実現される。タスクAからタスクBへRUN−タスクを切り換える場合を例として説明する。タスクAがCPUを占有しているので、RTOSはCPUに割り込みをかけて、CPUの使用権をタスクAから取り上げる。その上で、タスクAのコンテキスト情報をTCBに退避させる。RTOSは、次のRUN−タスクとしてタスクBを選択し、タスクBのTCBからコンテキスト情報をCPUのレジスタにロードする。ロードが完了すると、RTOSはCPUの使用権をタスクBに渡す。このように、RTOSは、一時的にCPUの使用権を取得することにより、タスクAからタスクBへのタスクスイッチを実行する。特殊タスクの実行に関しても同様である。この場合にも、RUN−タスクのコンテキスト情報をTCBに退避させたあと、特殊タスクにCPUの使用権を渡すことによりタスクスイッチを実現している。
RTOSは、ソフトウェアとして実現されるため、自らの処理を実行するためにはCPUの使用権を必要とする。いいかえれば、RTOSとタスクは、CPUの使用に関して競合関係にある。以下、このようにソフトウェアによって実現されるRTOSのことを「ソフトウェアRTOS」とよぶ。
CPU84は、メモリアクセスや命令の実行等を統括的に制御する実行制御回路90と、タスクのコンテキスト情報など各種データを格納する処理レジスタ92、演算を実行する演算回路94を含む。処理レジスタ92は複数種類のレジスタの集合であり、特殊レジスタ88と汎用レジスタ86に大別される。特殊レジスタ88は、プログラムカウンタ、スタックポインタ、フラグ等を保持するレジスタである。汎用レジスタ86は、作業用のデータを保持するレジスタであり、R0〜R15までの計16レジスタを含む。特殊レジスタ88は、ユーザ用とシステム用の2面が存在するが、汎用レジスタ86は一面のみである。以下、処理レジスタ92に格納されるデータのことを「処理データ」とよぶ。
<タスクAのコンテキスト情報の退避>
2.実行制御回路90は、汎用レジスタ86のデータを図示しないスタックに退避させる。
3.実行制御回路90は、図示しない記憶媒体、たとえば、別のレジスタから、RTOSのための処理データを汎用レジスタ86にロードする。この段階で、処理レジスタ92の処理データは、完全にRTOS用の処理データに入れ替わる。
4.RTOSは、メモリからタスクAのTCBを検出し、スタックに退避されている処理データをTCBに書き込む。また、ユーザ用特殊レジスタ88の処理データもコンテキスト情報の一部としてTCBに書き込む。こうして、タスクAの処理データがTCBに退避される。RTOSは、タスクAが「RUN」から「READY(またはWAIT)」に状態遷移したことをタスクAのTCBに記録する。
<タスクBのコンテキスト情報のロード>
2.RTOSは、RTOS処理用のデータを汎用レジスタ86から図示しない記録媒体に退避させる。
3.実行制御回路90は、スタックのコンテキスト情報を汎用レジスタ86にロードする。実行制御回路90は、特殊レジスタ88をシステム用からユーザ用に切り換える。こうして、タスクBの処理データが処理レジスタ92にロードされる。
[タスク処理装置100によるRTOSのハードウェア化]
一般的なソフトウェアRTOSと異なり、本実施例におけるRTOSは、主として、CPUとは別個のハードウェアとして実現される。以下、ハードウェアによって実現されるRTOSのことを、「ハードウェアRTOS」とよぶ。本実施例のRTOSは、主として、CPUとは別個のハードウェアであるため、自らの処理を実行するためにはCPUの使用権を実質的にほとんど必要としない。いいかえれば、RTOSとタスクは、CPUの使用に関してほとんど競合関係にない。図2に示した一般的なソフトウェアRTOSの場合、CPUはタスク実行用回路であるとともに、RTOS実行用回路でもあった。これに対し、本実施例におけるハードウェアRTOSの場合、CPUはタスク実行回路として明確化され、タスクスケジューリング機能は後述の退避回路120とタスク制御回路200を中心として実現することができる。
タスク処理装置100は、CPU150に加えて退避回路120とタスク制御回路200を含む。CPU150はタスクの実行主体であり、退避回路120とタスク制御回路200が図4に示したRTOSの役割を担う回路である。タスクススケジューリング処理は、タスク制御回路200により主導される。
以下、システムコールと割り込み要求信号のそれぞれについてタスクスイッチの実行方法を説明する。
[1]システムコール実行
<タスクAのコンテキスト情報の退避>
<タスクBのコンテキスト情報のロード>
[2]割り込み要求信号の発生
(A)処理データの退避・ロード
(B)タスクの状態遷移およびRUN−タスクの選択
というタスクスイッチの中核となる処理をハードウェアにより実現している。(A)および(B)に関し、メモリ上のTCBにアクセスする必要がなくなることもタスクスイッチの高速化に寄与している。また、タスク処理装置100を実現するにあたり、CPU150については、CPUクロックを停止および再開する機能を追加するだけでよい。なお、これらの機能がすべてハードウェアによって実現されることは、本発明の範囲を限定するものではない。たとえば、(A)または(B)の主たる機能をハードウェアにより実現し、ハードウェアの機能を補助するためにRTOSの一部の機能をソフトウェアで実現してもよいことは当業者には理解されるところである。
図3のCPU84と異なり、処理レジスタ154は特殊レジスタ156と汎用レジスタ158共に一面だけの構成となっている。処理レジスタ154にはそれぞれロード選択回路112からの入力バス、退避レジスタ110への出力バス、タスク切換回路210からの書き込み信号(WT)用の信号線が追加されている。実行制御回路152は、出力セレクタ164に対する制御信号(CTRL)により、処理レジスタ92のうちの所望のレジスタのデータを演算回路160に入力する。演算結果は入力セレクタ162への入力となる。実行制御回路152は、入力セレクタ162に対する制御信号(CTRL)により、処理レジスタ154のうちの所望のレジスタに演算結果を入力する。実行制御回路152は、特殊レジスタ156のプログラムカウンタを更新しながら、タスクを実行する。
第2ANDゲート174の入力は原クロック(CLK0)と第1ANDゲート172の出力で、後者は負論理である。第1ANDゲート172の出力は停止完了信号(HC)である。停止完了信号(HC)は通常は0なので、第2ANDゲート174は、入力された原クロック(CLK0)をCPUクロック(CLK)としてそのまま出力する。CPU150は、第2ANDゲート174の出力するCPUクロックを受けて動作する。第1ANDゲート172の出力が「1」のとき、いいかえれば、停止完了信号(HC)=1のときには、第2ANDゲート174の出力はゼロに固定され、CPUクロック(CLK)が停止する。
割り込み要求信号(INTR)が発生したとき、タスク切換回路210は実行制御回路152に停止要求信号(HR)をアサートする。すなわち、ORゲート176の出力は、システムコールが実行されるか、停止要求信号(HR)がアサートされたときに「1」となる。
同図においては、まず、時刻t0において、タスク切換回路210は外部からの割り込み要求信号(INTR)を検出している。タスク切換回路210は、特殊タスクを実行させるため、実行制御回路152に停止要求信号(HR)をアサートする。入力タイミングt1は、検出タイミングt0とほとんど同時である。時刻t1では、CPU150のステートマシンは「タスク実行中」であり、CBUSY=1である。HR=1より、ORゲート176は「1」を出力するが、CBUSY=1ゆえにCPU150は停止しない。そのため、HR=1が入力されても、しばらくはCPUクロック(CLK)は原クロック(CLK0)に同期して出力される。
なお、別の処理方法として、タスク制御回路200の動作クロックが所定回数変化したことを条件とする代わりに、タスク制御回路200がタスクスイッチを完了させたことを条件として、HRをネゲートしてもよい。そして、実行制御回路152が、HRがネゲートされたことを条件として、HCをネゲートさせてもよい。HC=0となると、実行制御回路152はCPUクロック(CLK)を再開させる。こうして、タスクの実行を再開させてもよい。
同図においては、まず、時刻t0において、命令復号器170がシステムコールを検出し、SC_DETECTを0から1に変化させている。時刻t0では、CPU150のステートマシンは「タスク実行中」であり、CBUSY=1である。SC_DETECT=1より、ORゲート176は「1」を出力するが、CBUSY=1ゆえにCPU150は停止しない。そのため、SC_DETECT=1が出力されても、しばらくはCPUクロック(CLK)は原クロック(CLK0)に同期して出力される。
なお、別の処理方法として、WT:1→0の立ち下がり検出を条件とする代わりに、タスク制御回路200がタスクスイッチを完了させ、HRをネゲートしたことを条件として、実行制御回路152が、HCをネゲートしてもよい。HC=0となったことを条件として、SC_DETECTをリセットする。実行制御回路152はCPUクロック(CLK)を再開させ、CBUSYは0から1に変化する。
CPU150は、複数の命令をメモリから処理レジスタ154に順次読み出しながら実行することにより、タスクを実行する。このタスクの実行単位である命令は、以下の4つのフェーズに分解される。
1.F(フェッチ):メモリから命令を取り出す。
2.D(デコード):命令を解釈する。
3.E(エグゼキューション):命令を実行する。
4.WB(ライトバック):実行結果をメモリに書き込む。
なお、別の処理方法として、システムコール命令が実行完了するタイミングで、CPUビジー信号を「0」とし、CPUクロックの供給を停止してもよい。この場合、システムコール命令と同時に実行されていた別の命令は実行途中のまま停止する。中途停止された命令の中間的な処理結果は処理レジスタ154に記録されたあと、退避レジスタ110に退避される。次回、このタスクがRUN−タスクとなるときには、中途停止された命令の続きが実行される。たとえば、ある命令が、フェッチを終了した段階で中途停止された場合、メモリから読み出された命令やオペランドは退避レジスタ110に退避される。タスク再開時には、退避レジスタ110のデータが処理レジスタ154にロードされ、デコードステージから続きの処理が実行されることになる。
状態記憶部220は、状態レジスタ250とタイマ252を含む、状態記憶部220は、タスクの状態データを保持する。また、タイマ252は、タスクがREADY状態またはWAIT状態に遷移したときに開始するタイマである。タスクがREADY状態に遷移してから経過した時間のことを「READY経過時間」、タスクがWAIT状態に遷移してから経過した時間のことを「WAIT経過時間」とよぶ。タイマ252は、その値をTIM信号として常時出力する。タスク切換回路210は、タスクスイッチに際して、あるタスクがREADY状態またはWAIT状態に変化したときには、そのタスクのタイマ252を駆動して時間計測を開始させる。
(A)タスクIDレジスタ254:タスクIDを保持する。タスクIDレジスタ254からはタスクIDを示すID信号がタスク選択回路230に常時出力される。以下、タスクAのタスクIDレジスタ254からタスク選択回路230に出力されるID信号のことを「ID_A信号」と表記する。状態記憶部220から出力される他の信号についても同様である。
(B)タスク優先順位レジスタ256:タスク優先順位を保持する。タスク優先順位レジスタ256からはタスク優先順位を示すPR信号が常時出力される。「0」が最高優先順位であり、値が大きいほどタスク優先順位が低いことを示す。
(C)タスク状態レジスタ258:タスク状態を示す。STOP、READY、RUN、WAIT、IDLEのいずれかがST信号として常時出力される。なお、IDLEとは、タスクが初期化される前の状態である。
(D)タスク起動アドレスレジスタ260:メモリにおけるタスクのTCBアドレスを示す。出力はAD信号である。
(E)待機理由レジスタ262:タスクがWAIT状態にあるとき、WAIT解除条件の一部として待機の理由を示す。待機理由は、「セマフォ待ち」、「イベント待ち」、「ミューテックス待ち」のいずれかである。出力はWR信号である。
(F)セマフォIDレジスタ264:タスクがセマフォ待ちを理由として、WAIT状態にあるとき、待ち対象のセマフォ(以下、単に「待機セマフォ」)のセマフォIDを保持する。出力はSID信号である。
(G)ミューテックスIDレジスタ265:タスクがミューテックス待ちを理由として、WAIT状態にあるとき、待ち対象のミューテックス(以下、単に「待機ミューテックス」)のミューテックスIDを保持する。出力はMID信号である。
(H)イベントIDレジスタ266:タスクがイベント待ちを理由として、WAIT状態にあるとき、待ち対象のイベント(以下、単に「待機イベント」)のイベントIDを保持する。出力はEID信号である。
(I)待機フラグレジスタ268:タスクがイベント待ちを理由として、WAIT状態にあるとき、待機フラグパターンを保持する。出力はFL信号である。
(J)フラグ条件レジスタ270:タスクがイベント待ちを理由として、WAIT状態にあるとき、フラグ条件を保持する。出力はFLC信号である。待機フラグパターンやフラグ条件については後述する。
(K)フラグ初期化レジスタ272:待機フラグパターンの有無を示すデータを保持する。出力はFLI信号である。
(L)タイムアウトカウンタ274:WAIT系システムコールにおいてはタイムアウト値が変数として指定される。タイムアウトカウンタ274は、タイムアウト値を保持する。タスク切換回路210は、各タイムアウトカウンタ274のタイムアウト値を定期的にデクリメントする。出力はTO信号である。タスク切換回路210がタイムアウト値をデクリメントする代わりに、タイムアウトカウンタ274自体が自律的に自らのタイムアウト値を定期的にデクリメントしてもよい。
(A)実行選択回路232:タスクスイッチに際して、次のRUN−タスクを選択する。実行選択回路232は、状態記憶部220から常時出力される状態データにより常にいずれかのタスクをRUN−タスクとして選択している。実行選択回路232の入力信号は、ID、ST、PR、TIMの4種類である。出力は、次のRUN−タスクのタスクIDである。詳細な回路構成については図12に関連して詳述する。
(B)セマフォ選択回路234:リリースセマフォシステムコールの実行により、WAIT状態からREADY状態に遷移すべきタスクを選択する。リリースセマフォシステムコールにより解放されるセマフォ(以下、単に「解放セマフォ」)のセマフォIDをタスク切換回路210から入力される。状態記憶部220からの入力信号は、ID、ST、WR、PR、SID、TIMの6種類である。出力信号は、WAIT状態からREADY状態に遷移するタスクのタスクIDである。該当するタスクが存在しなければ、−1などの所定値を出力する。より具体的な回路構成については図13に関連して詳述する。
(C)イベント選択回路236:セットイベントシステムコールの実行により、WAIT状態からREADY状態に遷移するタスクを選択する。セットイベントシステムコールによりセットされるイベント(以下、単に「設定イベント」)のイベントIDをタスク切換回路210から入力される。状態記憶部220からの入力信号は、ID、ST、WR、EID、FL、FLCの6種類である。出力信号は、WAIT状態からREADY状態に遷移するタスクのタスクIDと、そのタスクのFL、FLCを出力する。
(D)タイムアウト検出回路238:WAIT状態のタスクのうち、タイムアウトカウンタ274のタイムアウト値がゼロとなったタスクを検出する。タイムアウト検出回路238は、タイムアウト値が更新されるごとに駆動される。タイムアウト検出回路238の入力信号は、ID、ST、TOの3種類である。出力信号は、該当するタスクのタスクIDである。該当するタスクが存在しなければ、−1などの所定値を出力する。
(E)ミューテックス回路240:リリースミューテックスシステムコールの実行により、WAIT状態からREADY状態に遷移するタスクを選択する。リリースミューテックスシステムコールにより解放されるミューテックス(以下、単に「解放ミューテックス」)のミューテックスIDをタスク切換回路210から入力される。状態記憶部220からの入力信号は、ID、ST、WR、PR、SID、TIMの6種類である。出力信号は、WAIT状態からREADY状態に遷移するタスクのタスクIDである。該当するタスクが存在しなければ、−1などの所定値を出力する。
(F)検索回路242:タスク切換回路210からタスクIDを入力されると、そのタスクの全状態データを出力する。
[RUN−タスク選択]
[1]一般的なソフトウェアRTOSによるRUN−タスクの選択
タスクレディリストは、メモリ上に形成され、各READY−タスクのTCBをポインタによって連結したリストである。優先順位ポインタ280は、タスク優先順位ごとに設けられ、該当タスク優先順位のタスクのTCBの先頭アドレスを指す。同図のタスクレディリストの場合、タスク優先順位「0」の優先順位ポインタ280は、タスクAのTCBをアドレスし、タスク優先順位「1」の優先順位ポインタ280は、タスクBのTCBをアドレスしている。タスクAのTCBは、更に、タスクDのTCBをアドレスしている。 一般的なソフトウェアRTOSは、このタスクレディリストを走査しながら、次のRUN−タスクを選択する。このとき、RTOSは、
A.RUN−タスクをRUNからREADYに状態遷移させる。
B.次のRUN−タスクを選択し、そのタスクのタスク状態をREADYからRUNに状態遷移させる。
という2段階の処理を行う。ソフトウェアRTOSによる各処理を分解すると以下の通りである。
<RUN−タスクの状態遷移>
A1.RTOSは、RUN−タスクのタスクIDをメモリに保持している。このタスクIDをもとに、タスクJのTCBのアドレスを取得する。
A2.TCBにアクセスし、タスクJのタスク優先順位を取得する。タスク優先順位は「0」であったとする。
A3.図11に示すタスクレディリストのうち、タスクJのタスク優先順位に対応する優先順位ポインタ280を取得する。
A4.取得した優先順位ポインタ280が示すTCBを検出する。ここではタスクAのTCBが検出される。
A5.タスクAのTCBが持つポインタをたどっていき、最後尾のTCBを検出する。同図においては、タスクFが最後尾である。
A6:タスクFのTCBのポインタがタスクJのTCBをアドレスするように設定する。こうして、タスクJのTCBがタスクレディリストに追加される。
A7.タスクJのTCBに「READY」を設定する。また、処理データは、TCBのレジスタ格納エリアにコピーされる。
<READY−タスクの状態遷移>
B2.タスクAをタスクレディリストからはずす。具体的には、タスク順位「0」の優先順位ポインタ280がタスクAではなくタスクDのTCBをアドレスするように書き換える。また、タスクAのポインタがタスクDをアドレスしないようにNULL設定する。こうして、タスクAのTCBがタスクレディリストから外される。
B3.タスクAのTCBに「RUN」を設定する。また、タスクAのTCBのレジスタ格納エリアに退避されていた処理データが処理レジスタにロードされる。
1.READY−タスクであること(第1条件)。
2.READY−タスクのうち、最もタスク優先順位の高いタスクであること(第2条件)。
3.最もタスク優先順位の高いタスクが複数存在するときには、READY状態になった時期が最も古いタスクであること(第3条件)。
このような3つの条件のことを、まとめて「RUNタスク選択条件」とよぶことにする。タスク処理装置100の実行選択回路232は、このようなRTOSのタスクスケジューリング機能をハードウェアにより実現している。
[2]本実施例のハードウェアRTOSによるRUN−タスクの選択
ここでは、タスク0〜タスク7の8つのタスクから、RUN−タスクを選択するとして説明する。実行選択回路232は、4つの第1比較回路290(290a〜290d)、2つの第2比較回路292(292a、292b)、1つの第3比較回路294を含む。また、8つの判定回路296(296a〜296h)も含む。
判定回路296は、タスクの状態を示すST信号を入力とし、READYであれば「1」、READY以外であれば「0」を示すCID信号を出力する。判定回路296は、上記RUNタスク選択条件のうちの第1条件に基づく判定を行っている。第1比較回路290は、2つのタスクのID、PR、TIM、および、判定回路296からのCID信号を入力とする。
第1の判定:まず、判定回路296aと判定回路296bのそれぞれから出力されるCID信号を比較する。いずれか一方が「1」であれば、いいかえれば、いずれか一方のタスクだけがREADY状態であれば、第1比較回路290aは、そのタスクのID、PR、TIMを出力する。いずれも「0」であれば、すなわち、いずれのタスクもREADY状態でなければ、第1比較回路290aは、ID=PR=TIM=NULLを出力する。これは、いずれのタスクも選択されなかったことを示す。いすれも「1」であれば、すなわち、いずれのタスクもREADY状態であれば、次の第2の判定が実行される。
第2の判定:タスク0のPR信号とタスク1のPR信号を比較し、タスク優先順位が上位となるタスクを選択する。たとえば、タスク0のタスク優先順位が「1」、タスク1のタスク優先順位が「2」であれば、タスク0のID、PR、TIMを出力する。第2の判定により、タスク優先順位が上位のタスクがRUN−タスクの候補として選択されることになる。タスク0とタスク1のタスク優先順位が同じであれば、次の第3の判定が実行される。
第3の判定:タスク0のTIM信号とタスク1のTIM信号を比較し、READY経過時間が長い方のタスクを選択する。READY経過時間が同じであれば、タスク0を選択するものとする。経過時間の大小を比較するだけで判定できるため、タスクレディリストのようなTCBの順序管理が不要となる。
<RUN−タスクの状態遷移>
A1.タスク切換回路210は、タスクJのタスク状態レジスタ258に「READY」を設定する。
A2.タスク切換回路210は、タスクJのタイマ252をセットしてREADY経過時間の計測を開始させる。
こうして、タスクJはRUN→READYに状態遷移する。処理データは、先述したようにタスクJの退避レジスタ110に退避される。処理レジスタ154と退避レジスタ110をつなぐバスは、処理データをパラレルに伝送可能であるため、A1とA2の処理は1クロック時間で実行可能である。
<READY−タスクの状態遷移>
こうして、特定されたタスクはREADY→RUNに状態遷移する。特定されたタスクの処理データは退避レジスタ110から処理レジスタ154にロードされる。退避レジスタ110と処理レジスタ154をつなぐバスも、処理データをパラレルに伝送可能なビット数であるため、B1の処理は1クロック時間で実行可能である。
[セマフォ処理]
ウェイトセマフォリストを説明する前に、セマフォについて簡単に説明する。セマフォテーブル212には、セマフォIDとセマフォカウンタが対応づけて記録される。セマフォカウンタは、初期値として有限数に設定される。たとえば、セマフォID=4、セマフォカウンタ=3として設定されているとする。いずれかのタスクがセマフォID=4のセマフォを待機セマフォとしてウェイトセマフォシステムコールを実行すると、タスク切換回路210は待機セマフォのセマフォカウンタをデクリメントする。セマフォカウンタはウェイトセマフォイベントコールにより獲得要求されるごとにデクリメントされ、0になると獲得できなくなる。セマフォカウンタが0となっているセマフォを待機セマフォとしてウェイトセマフォシステムコールを実行したタスクは、WAIT状態に状態遷移する。
セマフォカウンタ>0のとき:ウェイトセマフォシステムコールを実行したタスクは、RUN→READYに遷移する。このときセマフォカウンタはデクリメントされる。
セマフォカウンタ=0のとき:ウェイトセマフォシステムコールを実行したタスクは、RUN→WAITに遷移する。セマフォカウンタはデクリメントされない。
ウェイトセマフォシステムコールを実行したタスクがWAIT状態からREADY状態に遷移するためには、別のタスクがリリースセマフォシステムコールを実行する必要がある。
[1]一般的なソフトウェアRTOSによるセマフォ処理
一般的なソフトウェアRTOSは、リリースセマフォシステムコールが実行されたとき、このウェイトセマフォリストを走査しながら、WAIT状態からREADY状態に遷移させるべきセマフォ待ちタスクを選択する。ウェイトセマフォシステムコールおよびリリースセマフォシステムコール実行時におけるRTOSの処理は以下の通りである。
<ウェイトセマフォシステムコールの実行>
A1.RTOSは、RUN−タスクのタスクIDをメモリに保持している。このタスクIDをもとに、タスクJのTCBのアドレスを取得する。
A2.ウェイトセマフォシステムコールにおいて指定された待機セマフォのセマフォカウンタを検出する。以下、セマフォカウンタの値に応じて処理は分岐する。
(セマフォカウンタ>0のとき)
A3.RTOSは、待機セマフォのセマフォカウンタをデクリメントする。
A4.タスクJのTCBに「READY」を設定する。この場合、タスクJのTCBはタスクレディリストに追加される。
(セマフォカウンタ=0のとき)
A3.TCBにアクセスし、タスクJのタスク優先順位を取得する。タスク優先順位は「0」であったとする。
A4.ウェイトセマフォリストのうち、タスクJのタスク優先順位に対応する優先順位ポインタを取得する。
A5.取得した優先順位ポインタが示すTCBを検出する。ここではタスクAのTCBが検出される。
A6.タスクAのTCBが持つポインタをたどっていき、最後尾のTCBを検出する。同図においては、タスクFが最後尾である。
A7:タスクFのTCBのポインタがタスクJのTCBをアドレスするように設定する。こうして、タスクJのTCBがウェイトセマフォリストに追加される。
A8.タスクJのTCBに「WAIT」を設定する。また、待機セマフォのセマフォIDも設定する。
<リリースセマフォシステムコールの実行>
(検出されたとき)
B2.検出されたタスクがタスクEであるとして説明する。タスクEのTCBに「READY」を設定する。また、待機セマフォのセマフォIDをクリアする。
B3.タスクEのTCBをウェイトセマフォリストから外す。
B4.セマフォを解放したタスクの状態をRUN→READYに状態遷移させる。このタスクのTCBは、タスクレディリストに追加される。
(検出されなかったとき)
B2.セマフォカウンタをインクリメントする。
B3.セマフォを解放したタスクの状態をRUN→READYに状態遷移させる。このタスクのTCBは、タスクレディリストに追加される。
1.WAIT−タスクであること(第1条件)。
2.WAIT−タスクのうち、解放セマフォを待機セマフォとするタスクであること(第2条件)
3.そのようなタスクが複数存在するときには、最もタスク優先順位の高いタスクであること(第3条件)。
4.最もタスク優先順位の高いタスクが複数存在するときには、WAIT状態になった時期が最も古いタスクであること(第4条件)。
このような4つの条件のことを、まとめて「セマフォ待機解除条件」とよぶことにする。タスク処理装置100のセマフォ選択回路234は、このようなRTOSのタスクスケジューリング機能をハードウェアにより実現している。
[2]本実施例のハードウェアRTOSによるセマフォ処理
ここでも、タスク0〜タスク7の8つのタスクを前提として説明する。セマフォ選択回路234は、4つの第1比較回路300(300a〜300d)、2つの第2比較回路302(302a、302b)、1つの第3比較回路304を含む。また、8つの判定回路306(306a〜306h)も含む。
判定回路306は、状態記憶部220からのST、WR、SID信号とタスク切換回路210からのセマフォIDを示す信号を入力とする回路である。ここで入力されるセマフォIDは、解放セマフォのセマフォIDである。判定回路306は、解放セマフォを待機セマフォとするセマフォ待ちタスクであれば「1」、そうでなければ「0」を示すCID信号を出力する。判定回路306は、上記セマフォ待機解除条件のうちの第1条件と第2条件に関する判定結果を出力する回路である。第1比較回路300は、2つのタスクのID、PR、TIM、および、判定回路306からのCID信号を入力とする。
<ウェイトセマフォシステムコールの実行>
A1.タスク切換回路210は、ウェイトセマフォシステムコールにおいて指定されたセマフォのセマフォカウンタをセマフォテーブル212から検出する。以下、セマフォカウンタの値に応じて処理は分岐する。
(セマフォカウンタ>0のとき)
A2.タスク切換回路210は、セマフォテーブル212のセマフォカウンタをデクリメントする。
A3.タスクJのタスク状態レジスタ258に「READY」を設定する。このとき、タスク切換回路210は、RUN−タスクのタイマ252をセットしてREADY経過時間の計測を開始させる。
(セマフォカウンタ=0のとき)
A2.タスク切換回路210は、タスクJのタスク状態レジスタ258に「WAIT」、待機理由レジスタ262に「セマフォ待ち」、セマフォIDレジスタ264に待機セマフォのセマフォIDをセットし、タイマ252をセットしてWAIT経過時間の計測を開始させる。
こうして、ウェイトセマフォシステムコールを実行したタスクはRUN→READYまたはWAITに状態遷移する。
<リリースセマフォシステムコールの実行>
(いずれかの判定回路306が「1」を出力し、第3比較回路304がいずれかのタスクIDを出力したとき)
B2.検出されたタスクのタスク状態レジスタ258に「READY」を設定し、待機理由レジスタ262とセマフォIDレジスタ264をクリアし、タイマ252にREADY経過時間を計測させる。
B3.システムコールを実行したタスクのタスク状態レジスタ258に「READY」に設定し、READY経過時間の計測を開始する。
(いずれの判定回路306も「1」を出力せず、第3比較回路304がいずれのタスクIDも出力しないとき)
B2.タスク切換回路210はセマフォテーブル212のセマフォカウンタをインクリメントする。
B3.システムコールを実行したタスクの状態をRUN→READYに状態遷移させる。
[ミューテックス処理]
1.セマフォカウンタは1以上の整数を設定可能である。これに対し、ミューテックスはセマフォカウンタが1または0の特殊なセマフォである。セマフォカウンタが2以上のときには、同一セマフォを2以上のタスクが獲得できる。しかし、ミューテックスの場合、あるミューテックスを獲得できるタスクは常に1つだけである。
2.リリースセマフォシステムコールによりセマフォを解放できるタスクは、ウェイトセマフォシステムコールによりセマフォを獲得したタスクに限らない。これに対し、リリースミューテックスシステムコールによりミューテックスを解放できるタスクは、ウェイトミューテックスシステムコールによりミューテックスを獲得したタスクだけである。
1.WAIT−タスクであること(第1条件)。
2.WAIT−タスクのうち、解放ミューテックスを待機ミューテックスとするタスクであること(第2条件)
3.そのようなタスクが複数存在するときには、最もタスク優先順位の高いタスクであること(第3条件)。
4.最もタスク優先順位の高いタスクが複数存在するときには、WAIT状態になった時期が最も古いタスクであること(第4条件)。
このような4つの条件のことを、まとめて「ミューテックス待機解除条件」とよぶことにする。
<ウェイトミューテックスシステムコールの実行>
A1.タスク切換回路210は、ウェイトミューテックスシステムコールにおいて指定されたミューテックスが占有されているか検出する。以下、ミューテックスの占有状態に応じて処理は分岐する。
(ミューテックスが占有されていないとき)
A2.タスク切換回路210は、ミューテックスの占有データとして、システムコールを実行したタスクのタスクIDを記録する。
A3.タスクJのタスク状態レジスタ258に「READY」を設定する。このとき、タスク切換回路210は、RUN−タスクのタイマ252をセットしてREADY経過時間の計測を開始させる。
(ミューテックスが占有されているとき)
A2.タスク切換回路210は、タスクJのタスク状態レジスタ258に「WAIT」、待機理由レジスタ262に「ミューテックス待ち」、ミューテックスIDレジスタ265に待機ミューテックスのミューテックスIDをセットし、タイマ252をセットしてWAIT経過時間の計測を開始させる。
<リリースミューテックスシステムコールの実行>
(いずれかの判定回路が「1」を出力し、ミューテックス回路240からいずれかのタスクIDを出力したとき)
B2.検出されたタスクのタスク状態レジスタ258に「READY」を設定し、待機理由レジスタ262とミューテックスIDレジスタ265をクリアし、タイマ252をREADY経過時間を計測させる。
B3.システムコールを実行したタスクのタスク状態レジスタ258に「READY」に設定し、READY経過時間の計測を開始する。
(いずれの判定回路も「1」を出力せず、ミューテックス回路240がいずれのタスクIDも出力しないとき)
B2.タスク切換回路210はセマフォテーブル212において、ミューテックスを非占有状態に設定する。
B3.システムコールを実行したタスクの状態をRUN→READYに状態遷移させる。
[イベント処理]
セットイベントシステムコールは、カレントフラグパターンを設定変更するシステムコールであり、イベントIDとフラグパターン(以下、「セットフラグパターン」とよぶ)をパラメータとする。セットイベントシステムコールが実行されると、該当イベントについて、カレントフラグパターンは、セットフラグパターンとの論理和に変更される。たとえば、カレントフラグパターン「00001100」、セットフラグパターン「00000101」のときには、カレントフラグパターンは、「00001101」となる。以下、各フラグパターンについて左から第0ビット、第1ビット、・・・、第7ビットとよぶ。
[1]一般的なソフトウェアRTOSによるイベント処理
<ウェイトイベントシステムコールの実行>
A2.カレントフラグパターンと待機フラグパターンをフラグ条件にしたがって比較し、WAIT解除条件の成否を判定する。
(WAIT解除条件が成立するとき)
A3.システムコールを実行したタスクのタスク状態をRUN→READYに状態遷移させる。
(WAIT解除条件が成立しないとき)
A3.イベントテーブルに、システムコールを実行したタスクのタスクIDを記録する。
A4.イベントテーブルに待機フラグパターンを記録する。
A5.イベントテーブルにフラグ条件を記録する。
A6.システムコールを実行したタスクのタスク状態をRUN→WAITに状態遷移させる。
<セットイベントシステムコールの実行>
B2.カレントフラグパターンとセットフラグパターンの論理和を新たなカレントフラグパターンとして記録する。
(設定イベントについてイベント待ちタスクが存在しないとき、または、存在したとしても待機フラグパターンとフラグ条件からWAIT解除条件が成立しないとき)
B3.システムコールを実行したタスクのタスク状態をRUN→READYに状態遷移させる。
(設定イベントについてイベント待ちタスクが存在し、WAIT解除条件が成立するとき)
B3.イベントを待機していたタスクのタスク状態をWAIT→READYに状態遷移させる。
B4.イベントテーブルにおける待機タスクID、待機フラグパターン、フラグ条件をクリアする。
B5.システムコールを実行したタスクのタスク状態をRUN→READYに状態遷移させる。また、RUN−タスクの選択が行われる。
1.WAIT−タスクであること(第1条件)。
2.WAIT−タスクのうち、設定イベントを待機イベントとするタスクであること(第2条件)。
3.待機フラグパターンとカレントフラグパターン、フラグ条件を比較してWAIT解除条件が成立するタスクであること(第3条件)
このような3つの条件のことを、まとめて「イベント待機解除条件」とよぶことにする。
[2]本実施例のハードウェアRTOSによるイベント処理
<ウェイトイベントシステムコールの実行>
A2.タスク切換回路210は、カレントフラグパターンと待機フラグパターンをフラグ条件にしたがって比較し、WAIT解除条件の成否を判定する。
(WAIT解除条件が成立するとき)
A3.システムコールを実行したタスクのタスク状態レジスタ258に「READY」を設定する。
(WAIT解除条件が成立しないとき)
A3.タスク切換回路210は、システムコールを実行したタスクのタスク状態レジスタ258に「WAIT」、待機理由レジスタ262に「イベント待ち」、イベントIDレジスタ266に待機イベントのイベントID、待機フラグレジスタ268に待機フラグパターン、フラグ条件レジスタ270にフラグ条件をそれぞれ設定する。
<セットイベントシステムコールの実行>
B2.タスク切換回路210は、イベントテーブル214のカレントフラグパターンにセットフラグパターンを論理加算する。
B3.イベント選択回路236は、入力されたイベントIDについて、イベント待機条件が成立するタスクを選択する。このとき、タスク優先順位やWAIT経過時間にかかわらず複数のタスクが選択されてもよい。
(イベント待機解除条件を満たすタスクが存在するとき)
B4.イベント待ちタスクのタスク状態レジスタ258に「READY」を設定し、イベントIDレジスタ266、待機フラグレジスタ268、フラグ条件レジスタ270をクリアする。
B5.システムコールを実行したタスクのタスク状態をRUN→READYに状態遷移させる。
(イベント待機解除条件を満たすタスクが存在しないとき)
B4.システムコールを実行したタスクのタスク状態をRUN→READYに状態遷移させる。
[タイムアウト処理]
[1]一般的なソフトウェアRTOSによるタイムアウト処理
[2]本実施例のハードウェアRTOSによるタイムアウト処理
[有限ステートマシンとしてのタスク切換回路210]
初期化処理(A1)においては、全タスクがIDLE状態にある。初期化処理が完了すると(S10)、いずれかのタスクがRUN−タスクとなりタスク実行状態(A2)となる。割り込み要求信号が検出されると(S12)、特殊タスクがRUN−タスクとなり、割り込み処理(A3)が実行される。割り込み処理が終了すると(S14)、タスク切換回路210は、一般タスクからRUN−タスクを選択し、A2に遷移する。
最後に、タスク処理装置100の主要素である退避回路120とタスク制御回路200のうち一方のみを実装する場合について付言する。
[タスク制御回路200を搭載しないタイプのタスク処理装置100]
タスク制御回路200を搭載しない代わりに、レジスタ切換制御回路322と処理データ保持部320を追加している。タスク制御回路200を搭載しないため、タスクスケジューリング機能はソフトウェアRTOSにより実現される。したがって、RTOSはタスクスイッチに際して、CPU150の使用権を一時的に取得する必要が生じる。処理データ保持部320は、通常、RTOSのための処理データを保持する。RTOSがCPU150の使用権を取得するときには、処理データ保持部320は処理データ保持部320にあるRTOS用の処理データと特殊レジスタ156のタスク用の処理データを入れ替える。以下、タスクAからタスクBへタスクスイッチするとして、その処理過程を説明する。
A2.レジスタ切換制御回路322は、タスクAの処理データを処理データ保持部320に移動させ、処理データ保持部320のRTOS用処理データを処理レジスタ154にロードする。この段階で、RTOSがCPU150の使用権を取得する。
A3.レジスタ切換制御回路322は、退避レジスタ110aに書き込み信号を入力し、処理データ保持部320のタスクA用処理データを退避レジスタ110に退避させる。
A4.RTOSは、汎用レジスタ158に記録されているシステムコールの変数やIDに基づき、システムコールに対応する処理を実行する。また、タスクAのTCBのタスク状態データを「READY」に設定し、タスクレディリストにタスクAのTCBを追加する。
B2.RTOSはレジスタ切換制御回路322に指示して、タスクBを指定したタスク選択信号をロード選択回路112に入力させる。退避レジスタ110bから処理データ保持部320に処理データが移動される。
B3.レジスタ切換制御回路322は、処理データ保持部320のタスクB用処理データと処理レジスタ154のRTOS用処理データを入れ替える。これにより、タスクBがCPU150の使用権を取得する。
[退避回路120を搭載しないタイプのタスク処理装置100]
退避回路120を搭載しない代わりに、割込インタフェース回路324を追加している。退避回路120を搭載しないため、処理データはメモリのTCBに退避される。処理データの退避・ロードに関してはソフトウェアベースのRTOSにより実現される。したがって、RTOSはタスクスイッチに際して、CPU150の使用権を一時的に取得する必要が生じる。以下、タスクAからタスクBへタスクスイッチするとして、その処理過程を説明する。
Claims (11)
- CPUと、
前記CPUの外部に設置されるレジスタであって、タスクスケジューリングのためのタスクごとの状態データを保持し、複数のタスクに対してそれぞれ対応づけられる複数の状態レジスタと、
前記CPUの外部に設置され、タスクの切り換えを実行するタスク切換回路と、
前記CPUの外部に設置され、複数の前記状態レジスタから出力される状態データを入力として、所定の選択条件によりタスクを選択するタスク選択回路と、を備え、
前記CPUは、
タスク実行のためのデータを一時的に保持する処理レジスタと、
命令(instruction)およびオペランドをメモリから前記処理レジスタにロードし、前記処理レジスタの命令とオペランドにしたがってタスクを実行する実行制御回路と、を内蔵し、
前記CPUに内蔵される実行制御回路は、実行対象となる命令が所定のシステムコール命令であるか命令復号器により判定し、前記所定のシステムコール命令であるときには所定のシステムコール信号を前記タスク切換回路に送信し、
前記タスク選択回路は、実行可能に待機している状態を示すREADY(レディ)状態のタスクの中から実行対象となるタスクを選択し、
前記タスク切換回路は、前記処理レジスタのデータを所定の記憶領域に退避させ、実行中のタスクに対応する前記状態レジスタの状態データをタスク実行中を示すRUN(ラン)状態から別の状態に設定変更するとともに前記タスク選択回路からの出力により次の実行対象となるタスクを選択し、選択したタスクについて前記記憶領域に退避されていたデータを前記処理レジスタにロードするとともにそのタスクに対応する前記状態レジスタの状態データをREADY状態からRUN状態に変更することにより、実行対象となるタスクを切り換えることを特徴とするタスク処理装置。 - 前記タスク選択回路は、多段階に接続される比較回路を内蔵し、
第1段の比較回路が、2以上のタスクの状態データを前記所定の選択条件により比較して、いずれかのタスクの状態データを第2段の比較回路に出力し、
第n(nは2以上の自然数)段の比較回路が、第(n−1)段に位置する複数の比較回路から出力された状態データを前記所定の選択条件により比較して、いずれかのタスクの状態データを出力することにより、
最後段の比較回路により特定されたタスクを実行対象として選択することを特徴とする請求項1に記載のタスク処理装置。 - 第k(kは自然数)段の比較回路は、入力された状態データがいずれも前記所定の選択条件を満たさないときには、いずれのタスクの状態データも出力しないことを特徴とする請求項2に記載のタスク処理装置。
- 前記状態レジスタは、状態データの一部としてタスク優先度を保持し、
前記タスク選択回路は、タスク切り換えに際してREADY状態のタスクが複数あるときには、それらのタスクのうちタスク優先度が最も高いタスクを実行対象として選択することを特徴とする請求項1から3のいずれかに記載のタスク処理装置。 - 前記タスク選択回路は、タスク切り換えに際してREADY状態のタスクが複数存在し、かつ、それらのタスクのうちタスク優先度が最も高く設定されているタスクも複数存在するときには、それらのタスクのうちREADY状態に設定されてからの経過時間が最も長いタスクを実行対象として選択することを特徴とする請求項4に記載のタスク処理装置。
- 複数のタスクに対してそれぞれ対応づけられる複数のタイマを更に備え、
前記タスク切換回路は、タスクをREADY状態に設定するとき、そのタスクについてのタイマをセットして経過時間の計測を開始させることを特徴とする請求項5に記載のタスク処理装置。 - セマフォIDとセマフォカウンタを対応づけて保持するセマフォ情報保持部を更に備え、
前記実行制御回路が、セマフォを要求するためのシステムコール命令であるウェイトセマフォ命令をセマフォIDを指定して実行する場合において、
前記タスク切換回路は、指定されたセマフォのセマフォカウンタが1以上のときにはセマフォカウンタをデクリメントした上で前記ウェイトセマフォ命令を実行したタスクの状態データをREADY状態に設定し、セマフォカウンタが0以下のときには前記ウェイトセマフォ命令を実行したタスクを所定条件が成立するまで実行できない状態を示すWAIT(ウェイト)状態に設定するとともに、そのタスクのWAIT状態解除の条件として前記指定されたセマフォIDを前記状態レジスタに設定し、
前記実行制御回路が、セマフォを解放するためのシステムコール命令であるリリースセマフォ命令をセマフォIDを指定して実行する場合において、
前記タスク選択回路は、指定されたセマフォIDについてWAIT状態にあるタスクのうち、いずれかのタスクを所定の選択条件にしたがって選択し、
前記タスク切換回路は、前記タスク選択回路によりいずれかのタスクが選択されたときにはそのタスクの状態データをREADY状態に設定し、いずれのタスクも選択されなかったときには前記指定されたセマフォのセマフォカウンタをインクリメントすることを特徴とする請求項1から6のいずれかに記載のタスク処理装置。 - イベントIDと第1のフラグパターンを対応づけて保持するイベント情報保持部を更に備え、
前記実行制御回路が、イベントの成立を待ち合わせるためのシステムコール命令であるウェイトイベント命令をイベントIDと第2のフラグパターンを指定して実行する場合において、
前記タスク切換回路は、指定されたイベントについて第1のフラグパターンと第2のフラグパターンとの間で所定の演算条件が成立するときには、前記ウェイトイベント命令を実行したタスクの状態データをREADY状態に設定し、成立しないときには前記ウェイトイベント命令を実行したタスクを所定条件が成立するまで実行できない状態を示すWAIT状態に設定するとともにそのタスクのWAIT状態解除の条件として前記指定されたイベントIDと第2のフラグパターンを前記状態レジスタに設定し、
前記実行制御回路が、第1のフラグパターンを設定するためのシステムコール命令であるセットイベント命令をイベントIDと第3のフラグパターンを指定して実行する場合において、
前記タスク切換回路は、指定されたイベントについて第1のフラグパターンに第3のフラグパターンを論理加算し、
前記タスク選択回路は、前記指定されたイベントIDについてWAIT状態にあるタスクを選択し、
前記タスク切換回路は、前記タスク選択回路によりいずれかのタスクが選択されたときには、そのタスクの前記状態レジスタに保持されている第2のフラグパターンと第1のフラグパターンとの間で前記所定の演算条件が成立することを条件として、選択されたタスクをWAIT状態からREADY状態に設定変更することを特徴とする請求項1から7のいずれかに記載のタスク処理装置。 - 前記状態レジスタは、状態データの一部としてタイムアウトカウンタを保持し、
前記実行制御回路がタイムアウト条件つきのシステムコール命令を実行する場合において、
前記タスク切換回路は、前記タイムアウト条件つきのシステムコール命令を実行したタスクの状態データをWAIT状態に設定するとともにタイムアウトカウンタの更新を開始させ、
前記タスク選択回路は、WAIT状態にあるタスクのうち、タイムアウトしたタスクを検出し、
前記タスク切換回路は、タイムアウトしたタスクの状態データをWAIT状態からREADY状態に設定変更することを特徴とする請求項1から8のいずれかに記載のタスク処理装置。 - ミューテックスIDとミューテックスの取得状態を対応づけて保持するミューテックス情報保持部を更に備え、
前記実行制御回路が、ミューテックスを要求するためのシステムコール命令であるウェイトミューテックス命令をミューテックスIDを指定して実行する場合において、
前記タスク切換回路は、指定されたミューテックスが非占有状態のときには占有状態に設定変更して前記ウェイトミューテックス命令を実行したタスクの状態データをREADY状態に設定し、占有状態のときには前記ウェイトミューテックス命令を実行したタスクを所定条件が成立するまで実行できない状態を示すWAIT状態に設定するとともにそのタスクのWAIT状態解除の条件として前記指定されたミューテックスIDを前記状態レジスタに設定し、
前記実行制御回路が、ミューテックスを解放するためのシステムコール命令であるリリースミューテックス命令をミューテックスIDを指定して実行する場合において、
前記タスク選択回路は、指定されたミューテックスIDについてWAIT状態にあるタスクのうち、いずれかのタスクを所定の選択条件にしたがって選択し、
前記タスク切換回路は、指定されたミューテックスを非占有状態に設定し、前記タスク選択回路によりいずれかのタスクが選択されたときには選択されたタスクの状態データをREADY状態に設定することを特徴とする請求項1から9のいずれかに記載のタスク処理装置。 - 前記処理レジスタのデータを退避させるためのレジスタであって、複数のタスクに対してそれぞれ対応づけられる複数の退避レジスタを更に備え、
前記タスク切換回路は、前記所定のシステムコール信号を受信すると、実行中のタスクに対応づけられている前記退避レジスタに前記処理レジスタのデータを退避させ、前記タスク選択回路により選択されたタスクに対応づけられている前記退避レジスタのデータを前記処理レジスタにロードすることを特徴とする請求項1から10のいずれかに記載のタスク処理装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2006/316656 WO2008023427A1 (fr) | 2006-08-24 | 2006-08-24 | Dispositif de traitement de tâche |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008101029A Division JP2008269597A (ja) | 2008-04-09 | 2008-04-09 | タスク処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP4127848B2 true JP4127848B2 (ja) | 2008-07-30 |
JPWO2008023427A1 JPWO2008023427A1 (ja) | 2010-01-07 |
Family
ID=39106521
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007538207A Active JP4127848B2 (ja) | 2006-08-24 | 2006-08-24 | タスク処理装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8327379B2 (ja) |
JP (1) | JP4127848B2 (ja) |
TW (1) | TWI426451B (ja) |
WO (1) | WO2008023427A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013175610A1 (ja) | 2012-05-24 | 2013-11-28 | カーネロンシリコン株式会社 | タスク処理装置 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8106680B1 (en) * | 2008-07-11 | 2012-01-31 | Altera Corporation | Programmable logic device with a self-power down mechanism |
JP4965638B2 (ja) * | 2009-12-25 | 2012-07-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | タスクの切り換えを制御するシステムおよび方法 |
CN102122160B (zh) * | 2010-12-31 | 2012-11-28 | 重庆新媒农信科技有限公司 | 多业务状态控制、加载和卸载方法 |
WO2012104898A1 (ja) * | 2011-01-31 | 2012-08-09 | トヨタ自動車株式会社 | 安全制御装置および安全制御方法 |
JP6214142B2 (ja) * | 2012-10-09 | 2017-10-18 | キヤノン株式会社 | 情報処理装置、情報処理方法およびプログラム |
KR20150128680A (ko) * | 2013-03-12 | 2015-11-18 | 마이크로칩 테크놀로지 인코포레이티드 | 프로그램 가능한 cpu 레지스터 하드웨어 컨텍스트 스왑 메커니즘 |
WO2016110954A1 (ja) * | 2015-01-07 | 2016-07-14 | 富士通株式会社 | タスク切替支援方法、タスク切替支援プログラム、及び情報処理装置 |
US10768984B2 (en) * | 2015-06-11 | 2020-09-08 | Honeywell International Inc. | Systems and methods for scheduling tasks using sliding time windows |
US10095541B2 (en) * | 2016-09-21 | 2018-10-09 | International Business Machines Corporation | Executing memory access while performing task switching |
JP2020144606A (ja) * | 2019-03-06 | 2020-09-10 | 株式会社リコー | 情報処理システム、情報処理方法、情報処理装置及びプログラム |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6021425A (en) * | 1992-04-03 | 2000-02-01 | International Business Machines Corporation | System and method for optimizing dispatch latency of tasks in a data processing system |
JPH0916409A (ja) | 1995-06-30 | 1997-01-17 | Matsushita Electric Ind Co Ltd | マイクロコンピュータ |
JPH1139171A (ja) * | 1997-07-18 | 1999-02-12 | Masaharu Imai | マルチタスク処理装置、マルチタスク処理制御方法及び制御プログラム記憶媒体 |
JPH11272480A (ja) | 1998-03-24 | 1999-10-08 | Nippon Telegr & Teleph Corp <Ntt> | オンチップリアルタイムos |
JP2001075820A (ja) | 1999-09-07 | 2001-03-23 | Oki Electric Ind Co Ltd | リアルタイムos装置 |
JP3813930B2 (ja) | 2002-01-09 | 2006-08-23 | 松下電器産業株式会社 | プロセッサ及びプログラム実行方法 |
JP2004220070A (ja) | 2003-01-09 | 2004-08-05 | Japan Science & Technology Agency | コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体 |
KR100960095B1 (ko) * | 2003-10-23 | 2010-05-31 | 마이크로칩 테크놀로지 인코포레이티드 | 마이크로컨트롤러 명령어 셋트 |
DE10353267B3 (de) * | 2003-11-14 | 2005-07-28 | Infineon Technologies Ag | Multithread-Prozessorarchitektur zum getriggerten Thread-Umschalten ohne Zykluszeitverlust und ohne Umschalt-Programmbefehl |
TWI240531B (en) * | 2003-12-24 | 2005-09-21 | Inst Information Industry | Multitasking system level system for Hw/Sw co-verification |
JP2006092042A (ja) * | 2004-09-21 | 2006-04-06 | Sanyo Electric Co Ltd | 情報処理装置及びコンテキスト切り替え方法 |
US7600101B2 (en) * | 2005-01-13 | 2009-10-06 | Hewlett-Packard Development Company, L.P. | Multithreaded hardware systems and methods |
-
2006
- 2006-08-24 US US12/281,331 patent/US8327379B2/en active Active
- 2006-08-24 JP JP2007538207A patent/JP4127848B2/ja active Active
- 2006-08-24 WO PCT/JP2006/316656 patent/WO2008023427A1/ja active Application Filing
-
2007
- 2007-08-23 TW TW096131160A patent/TWI426451B/zh active
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013175610A1 (ja) | 2012-05-24 | 2013-11-28 | カーネロンシリコン株式会社 | タスク処理装置 |
US9753779B2 (en) | 2012-05-24 | 2017-09-05 | Renesas Electronics Corporation | Task processing device implementing task switching using multiple state registers storing processor id and task state |
Also Published As
Publication number | Publication date |
---|---|
TW200825923A (en) | 2008-06-16 |
WO2008023427A1 (fr) | 2008-02-28 |
US8327379B2 (en) | 2012-12-04 |
US20090183163A1 (en) | 2009-07-16 |
JPWO2008023427A1 (ja) | 2010-01-07 |
TWI426451B (zh) | 2014-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4119945B2 (ja) | タスク処理装置 | |
US10949249B2 (en) | Task processor | |
JP4088335B1 (ja) | 仮想キュー処理回路およびタスク処理装置 | |
JP4127848B2 (ja) | タスク処理装置 | |
JP6153925B2 (ja) | タスク処理装置 | |
JP5155336B2 (ja) | タスク処理装置 | |
JP2018180768A (ja) | 半導体装置 | |
JP5204740B2 (ja) | タスク処理装置 | |
JP2017123190A (ja) | タスク処理装置 | |
JP2008269597A (ja) | タスク処理装置 | |
JP2019003710A (ja) | タスク処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A529 | Written submission of copy of amendment under article 34 pct |
Free format text: JAPANESE INTERMEDIATE CODE: A5211 Effective date: 20070813 |
|
A975 | Report on accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A971005 Effective date: 20080219 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080311 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080409 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20080507 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080512 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110523 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4127848 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110523 Year of fee payment: 3 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: R3D02 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110523 Year of fee payment: 3 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110523 Year of fee payment: 3 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110523 Year of fee payment: 3 |
|
R360 | Written notification for declining of transfer of rights |
Free format text: JAPANESE INTERMEDIATE CODE: R360 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110523 Year of fee payment: 3 |
|
R370 | Written measure of declining of transfer procedure |
Free format text: JAPANESE INTERMEDIATE CODE: R370 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110523 Year of fee payment: 3 |
|
R360 | Written notification for declining of transfer of rights |
Free format text: JAPANESE INTERMEDIATE CODE: R360 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110523 Year of fee payment: 3 |
|
R370 | Written measure of declining of transfer procedure |
Free format text: JAPANESE INTERMEDIATE CODE: R370 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110523 Year of fee payment: 3 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110523 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120523 Year of fee payment: 4 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120523 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130523 Year of fee payment: 5 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130523 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140523 Year of fee payment: 6 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070925 |
|
A871 | Explanation of circumstances concerning accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A871 Effective date: 20070925 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: R3D02 |