明 細 書
タスク処理装置
技術分野
[0001] この発明は、 OS (Operating System)の機能に関し、特に、タスクスケジューリング技 術に関する。
背景技術
[0002] パーソナルコンピュータのような汎用機器用の OSに限らず、携帯電話のような専用 機器用の OSにも高度な機能が求められつつある。特に、 1つの CPU (Central Proce ssing Unit)で複数のタスクを実行可能な OS (以下、このようなタイプの OSのことを「 マルチタスク OS」ともよぶ)が多くの電子機器に搭載されるようになってきて!/、る。
[0003] マルチタスク OSは、 CPUの処理時間を単位時間(タイムスライス)に分割し、複数 のタスクにタイムスライスを j噴番に害 ijり当てる。各タスクは、 OSからタイムスライスを与 えられたときだけ CPUを使用できる。各タイムスライスにおいては一つのタスクが実行 される。タイムスライスはユーザからみて非常に短い時間なので、複数のタスクはあた 力も同時実行されているかのようにみえる。このような処理方法によれば、タスク Aが 入力待機状態に至り CPUの処理能力を当面必要としなくなつたとき、別のタスク Bに 実行権を与えることで CPUの処理能力を有効活用できる。ここでいう実行権とは、 C PUの使用権と同義である。
[0004] マルチタスク OSがタスクの実行権の切り換えることを「タスクスィッチ」とよぶ。タスク スィッチは、タイムスライスが経過したときや、タスクが所定命令を実行したときに発生 する。マルチタスク OSは、タスクスィッチの実行タイミングに至ると、実行中のタスクの コンテキスト情報を TCB (Task Control Block)に退避させる。コンテキスト情報とは、 タスク実行時にぉ 、て CPUのレジスタに格納されて 、たデータやタスクの実行状態 に関するデータである。 TCBとは、タスク固有の情報を保持するためにメモリに確保 される領域である。マルチタスク OSは、実行中のタスクのコンテキスト情報を TCBに 退避させたあと、次に実行権を割り当てるタスクを選択し、そのタスクの TCBカゝらコン テキスト情報を読み出して、 CPUレジスタにロードする。このようにして、各タスクはタ
ィムスライスを単位として少しずつ自己の処理をすすめていく。
[0005] マルチタスク OSは、複数のタスクを効率的に実行できるというメリットがある力 コン テキスト情報の退避'ロードと 、うオーバーヘッドが新たに発生すると 、うデメリットもあ る。通常、マルチタスク OSのメリットはタスクスィッチにともなうオーバーヘッドを補って 余りある。
特許文献 1:特開平 11― 272480号公報
特許文献 2:特開 2001— 75820号公報
非特許文献 1 :森久直、坂卷佳壽美、重松宏志、「組込み制御システム向けリアルタイ ム OSのノヽ ~~ rウェ ィ匕 (Hardware implementation of a read-time operating system f or embedded control system)」、東京都立産業技術研究所研究報告、 日本、 2005 年 8月 4日(原稿受付)、 8、 p. 55 - 58
発明の開示
発明が解決しょうとする課題
[0006] 近年においては、決められた時間内に処理が完了することを厳密に要求するリアル タイム OS (以下、 「RTOS (Real-Time Operating System)」 )が組込システム(Enbede d System)を中心として普及しつつある。このような時間的要件の厳しい RTOSにお いては、タスクスィッチ時のオーバーヘッドがシステム全体のパフォーマンスに大きく 影響することがある。本発明者は、マルチタスク処理をいつそう効率ィ匕するためには、 タスクスィッチにともなうオーバーヘッドを抑制する必要があると認識した。
[0007] 本発明は、上記課題に鑑みてなされたものであり、その主たる目的は、マルチタスク 処理において、より効率的にタスクを実行制御するための技術、を提供することにあ る。
課題を解決するための手段
[0008] 本発明のある態様は、タスク処理装置である。
この装置は、処理レジスタと、メモリから処理レジスタにデータをロードし、処理レジ スタのデータにしたがってタスクを実行する実行制御回路と、複数のタスクに対してそ れぞれ対応づけられる複数の退避レジスタと、タスク制御回路を備える。
実行制御回路は、所定のシステムコール命令を実行するとき、その旨をタスク制御
回路に通知する。
タスク制御回路は、システムコール命令の実行を通知されると、実行中のタスクに対 応づけられて!/、る退避レジスタに処理レジスタのデータを退避させ、次に実行すべき タスクを選択し、選択したタスクに対応づけられて ヽる退避レジスタのデータを処理レ ジスタにロードすることにより、実行対象となるタスクを切り換える。
[0009] 処理レジスタにロードされるデータは、命令(instruction)とオペランド、オペランドを 持たない命令、あるいは、プログラムカウンタやスタックポインタのような単純なデータ であってもよい。このような処理方法によれば、タスクごとに対応づけられている退避 レジスタと、実行用の処理レジスタの間でコンテキスト情報を適宜入れ替えることで、 コンテキスト情報の退避およびロードが可能となる。処理レジスタのデータの退避'口 ードのための TCBへのアクセスが実質的に不要となるため、高速なタスクスィッチが 実現される。
[0010] なお、以上の構成要素の任意の組合せ、本発明を方法、システム、記録媒体、コン ピュータプログラムにより表現したものもまた、本発明の態様として有効である。
発明の効果
[0011] 本発明によれば、マルチタスク処理において、より効率的なタスクの実行制御が実 現される。
図面の簡単な説明
[0012] [図 1]タスクの状態遷移図である。
[図 2]—般的な RTOSの概念図である。
[図 3]ソフトウェア RTOSが実行される一般的な CPUの回路図である。
[図 4]本実施例における RTOSの概念図である。
[図 5]本実施例におけるタスク処理装置の回路図である。
[図 6]図 5の CPUの回路図である。
[図 7]実行制御回路 152が CPUクロックを停止させる仕組みを示す回路図である。
[図 8(a)]割り込み要求信号発生時における各種信号の関係をを示すタイムチャートで ある。
[図 8(b)]システムコール実行時における各種信号の関係を示すタイムチャートである
[図 9]ノ ィプライン処理における CPUクロックの停止タイミングを説明するための模式 図である。
[図 10]状態記憶部とタスク切換回路の関係を示す回路図である。
[図 11]一般的な RTOSによる RUN -タスク選択に際して利用されるタスクレディリスト を示す図である。
[図 12]実行選択回路の回路図である。
[図 13]—般的な RTOSによるセマフォ処理において利用されるウェイトセマフォリスト を示す図である。
[図 14]セマフォ選択回路の回路図である。
[図 15]タスク切換回路の状態遷移図である。
[図 16]図 5のタスク処理装置のうち、タスク制御回路を搭載しな!、タスク処理装置の回 路図である。
[図 17]図 5のタスク処理装置のうち、退避回路を搭載しないタスク処理装置の回路図 である。
発明を実施するための最良の形態
[0013] 本実施例に示すタスク処理装置 100は、マルチタスク OSのタスクスケジューリング 機能を電子回路により実現している。タスク処理装置 100の詳細を説明する前に、ま ず図 1に関連してタスクの状態遷移について説明する。ここでは一般的なマルチタス ク OSにおけるタスクの状態遷移として説明する力 タスク処理装置 100によるタスク の状態遷移についても同じである。また、タスク処理装置 100において実行されるシ ステムコールについても概説する。図 2および図 3に関連して一般的なマルチタスク OSの設計思想について述べた上で、図 4から図 10に関連して、本実施例における タスク処理装置 100の処理方法について詳述する。更に、セマフォ(Semaphore)ゃミ ユーテックス (Mutex)、イベントなどに関する処理についても、適宜、一般的な技術と 比較しながらタスク処理装置 100の特徴を説明していく。
[タスクの状態遷移]
[0014] 図 1は、タスクの状態遷移図である。
マルチタスク処理において、各タスクは「状態 (ステート)」を持つ。各タスクは、後述 する複数の状態間を遷移し、常に、いずれかの状態となっている。状態遷移の契機と なるのは、「システムコールの実行」と「割り込み要求信号の検出」である。システムコ 一ルとは各タスクが実行する命令のうちの特別な命令である。割り込み要求信号とは 、キーボードの押下やマウスのクリック、通信データの受信など、周辺機器力も所定 データを受け取ったときに発生する信号である。もちろん、各タスクに割り当てられる タイムスライスが消費されたときにも状態遷移が発生する。
[0015] タスクは「一般タスク」と「特殊タスク」の 2種類に大別される。一般タスクとは、システ ムコールを契機として実行される通常のタスクである。特殊タスクは、割り込み要求信 号の検出を契機として実行されるタスクである。いわゆる割り込みハンドラである。ま ず、各タスク状態について述べた後、各種システムコール命令について説明する。
[0016] (1) STOP状態 (休止状態)
タスクが休止状態にあることを示す。一般タスクも特殊タスクも STOP状態となり得る 。以下、 STOP状態にあるタスクのことを「STOP—タスク」とよぶ。
1 - 1.一般タスク
他のタスクが別のタスクの起動を指示するシステムコール(以下、「起動システムコ ール」とよぶ)を実行すると、 STOP状態にある一般タスクは後述の READY状態に 遷移する。
1 - 2.特殊タスク
特殊タスクは、通常、 STOP状態にある。後述のタスク切換回路 210により割り込み 要求信号が検出されると、特殊タスクは STOP状態力 後述の RUN状態に遷移する 。このとき RUN状態にあったタスクは入れ替わりに READY状態に遷移する。
[0017] (2) RUN状態 (実行状態)
タスクが実行中であることを示す。すなわち、タスクがタイムスライスを割り当てられ、 CPUの使用権を取得して ヽる状態である。一般タスクも特殊タスクも RUN状態となり 得る。以下、 RUN状態にあるタスクのことを「RUN—タスク」とよぶ。複数のタスクのう ち、 RUN状態になることができるタスクは常に 1つだけであり、同時に 2つのタスクが RUN状態となることはできな ヽ。
2- 1.一般タスク
RUN状態にある一般タスクは、所定のシステムコールを実行すると RUN状態から READY状態または後述する WAIT状態に遷移する。 RUN状態にある一般タスクは 、タイムスライスを消費したときにも、 READY状態に遷移する。いずれの場合におい ても、 RUN状態にあった一般タスクの代わりに、 READY状態にある一般タスクが R UN状態に遷移する。割り込み要求信号が検出されると、 RUN—タスクは READY 状態に遷移する。このときには、 STOP状態にある特殊タスクが RUN状態に遷移す る。
RUN—タスクが自らを終了させるシステムコール(以下、「終了システムコール」とよ ぶ)を実行すると、 RUN—タスクは STOP状態に遷移する。
2- 2.特殊タスク
割り込み要求信号により STOP状態から RUN状態に遷移した特殊タスクは、自処 理が完了すると STOP状態に戻る。特殊タスクが取り得る状態は STOP状態と RUN 状態のみである。
[0018] (3) READY状態 (実行可能状態)
タスクが実行可能な状態にあることを示す。 READY状態にあるタスクは、 OSから 実行権を与えられれば 、つでも RUN状態に遷移できる。一般タスクのみ READY状 態となり得る。以下、 READY状態にあるタスクのことを「READY—タスク」とよぶ。
RUN状態にある一般タスクがシステムコールの実行により RUN状態以外の状態に 遷移するとき、または、 RUN状態にある特殊タスクが自らの処理を終了して STOP状 態に遷移するとき、 READY—タスクが入れ替わりに RUN状態に遷移する。一般タ スクは、 READY状態からのみ RUN状態に遷移する。 READY状態にあるタスクが 複数存在するときには、コンテキスト情報の一部であるタスク優先順位に基づいて、 V、ずれか一つの READY—タスクが RUN状態に遷移する。タスク優先順位が同じと なる READY—タスクが複数存在するときには、 READY状態に移行したのが最も古 V、タスクが RUN状態に遷移する。
[0019] (4) WAIT状態 (待機状態)
タスクが所定の WAIT解除条件の成立を待って ヽる状態を示す。 WAIT解除条件
が成立すると、 WAIT状態にあるタスクは READY状態に遷移する。一般タスクのみ WAIT状態となり得る。以下、 WAIT状態にあるタスクのことを「WAIT—タスク」とよ ぶ。 WAIT解除条件に関しては後に詳述する。
[0020] 以上をまとめると、各タスクは RUN状態にあるときだけ CPUを使って自らの処理を 進めることができる。 RTOSは、複数のタスクの状態を管理しながら、適宜、 RUN—タ スクを切り換える。これにより、 CPUが常時いずれかのタスクを実行する処理形態が 実現される。
[システムコール]
[0021] 次に、システムコールについて付言しておく。システムコールは、「起動系」、「WAI T系」、「SET系」の 3種類に大別される。
(1)起動系システムコール
STOP状態と READY状態の間の遷移に関連するシステムコールである。 1 - 1.起動システムコール
RUN—タスクであるタスク Aが別の一般タスク Bを起動させるシステムコールである 。このとき、 STOP状態にある一般タスク Bは READY状態に遷移する。
1 - 2.終了システムコ一ノレ
このシステムコールを実行したタスクは、自己の処理を終了させ、 RUN状態から ST OP状態に遷移する。終了システムコールは、あるタスクが別のタスクを終了させる命 令であってもよい。
( 2) WAIT系システムコ一ノレ
RUN状態と WAIT状態の間の遷移に関連するシステムコールである。
2- 1.ウェイトセマフォシステムコール
セマフォ (後述)の獲得を要求するシステムコールである。
2- 2.ウェイトミューテクスシステムコール
ミューテクス (後述)の獲得を要求するシステムコールである。
2- 3.ウェイトイベントシステムコール
イベント(後述)の成立を待つシステムコールである。イベント IDのほ力 待機フラグ パターン (後述)やフラグ条件 (後述)を変数として実行される。
いずれの場合においても、 WAIT系システムコールにより、さまざまな WAIT解除 条件が設定される。 WAIT系システムコールの実行時において、既に WAIT解除条 件が成立する状況にあるときには、システムコールを実行した RUN—タスクは RE A DY状態に遷移する。一方、 WAIT解除条件が成立していないときには、 RUN—タ スクは、 WAIT解除条件の成立を待機する WAIT状態に遷移する。
(3) SET系システムコール
WAIT状態と READY状態の間の遷移に関連するシステムコールである。 SET系 システムコールの実行は、 WAIT解除条件の成立契機となる。
3- 1.リリースセマフォシステムコ一ノレ
セマフォを解放するシステムコールである。
3- 2.リリースミューテクスシステムコール
ミューテクスを解放するシステムコールである。
3- 3.セットイベントシステムコール
イベントのカレントフラグパターン (後述)を設定するシステムコールである。
3-4.クリアフラグシステムコール
カレントフラグパターンをゼロクリアするためのシステムコールである。
本実施例においては、以上の計 9種類のシステムコールを対象として説明するが、 これ以外にもさまざまなシステムコールを実装可能であることは 、うまでもな 、。
[一般的な RTOSの設計思想]
図 2は、一般的な 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のことを「ソフトゥ エア RTOSJとよぶ。
[0023] 図 3は、ソフトウェア RTOSが実行される一般的な CPUの回路図である。
CPU84は、メモリアクセスや命令の実行等を統括的に制御する実行制御回路 90と 、タスクのコンテキスト情報など各種データを格納する処理レジスタ 92、演算を実行 する演算回路 94を含む。処理レジスタ 92は複数種類のレジスタの集合であり、特殊 レジスタ 88と汎用レジスタ 86に大別される。特殊レジスタ 88は、プログラムカウンタ、 スタックポインタ、フラグ等を保持するレジスタである。汎用レジスタ 86は、作業用の データを保持するレジスタであり、 R0〜R15までの計 16レジスタを含む。特殊レジス タ 88は、ユーザ用とシステム用の 2面が存在する力 汎用レジスタ 86は一面のみで ある。以下、処理レジスタ 92に格納されるデータのことを「処理データ」とよぶ。
[0024] 実行制御回路 90は、出力セレクタ 98に対する制御信号 (CTRL)により、処理レジ スタ 92のうちの所望のレジスタの処理データを演算回路 94に出力させる。演算回路 94は、処理データ、すなわち、命令や変数にしたがって演算を実行する。演算結果 は入力セレクタ 96へ出力される。実行制御回路 90は、入力セレクタ 96に対する制御 信号 (CTRL)により、処理レジスタ 92のうちの所望のレジスタに演算結果を入力する
[0025] また、実行制御回路 90は、 CPUデータバスを介してメモリからデータを読み出し、 入力セレクタ 96を介して処理レジスタ 92に適宜ロードする。実行制御回路 90は、同 じく CPUデータノ スを介して処理データをメモリに適宜記録する。実行制御回路 90 は、特殊レジスタ 88のプログラムカウンタを更新しながら、タスクを実行する。
[0026] タスクスィッチが発生するときには、実行制御回路 90は処理データをメモリ上の領 域である TCBに退避させる。仮にタスク Aがシステムコールを実行し、タスク A力ゝらタ スク Bへのタスクスィッチが発生したとする。 RTOSはシステムコール実行を契機とし
て CPUの使用権を取得するので、 CPU84は一時的に RTOS用のプログラムにした 力 て動作することになる。その処理過程は以下の通りである。
くタスク Aのコンテキスト情報の退避〉
[0027] 1.実行制御回路 90は、特殊レジスタ 88をユーザ用力もシステム用に切り換える。
システム用の特殊レジスタ 88には RTOS処理用の処理データがロードされて!/ヽる。
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のコンテキスト情報のロード >
[0028] 1. RTOSは、メモリ力もタスク Bの TCBを検出し、 TCBのコンテキスト情報をスタック とユーザ用特殊レジスタ 88に書き込む。 RTOSは、タスク Bが「READY」から「RUN 」に状態遷移したことをタスク Bの TCBに記録する。
2. RTOSは、 RTOS処理用のデータを汎用レジスタ 86から図示しない記録媒体 に退避させる。
3.実行制御回路 90は、スタックのコンテキスト情報を汎用レジスタ 86にロードする 。実行制御回路 90は、特殊レジスタ 88をシステム用力もユーザ用に切り換える。こう して、タスク Bの処理データが処理レジスタ 92にロードされる。
[0029] 以上のような処理過程を経て、タスクスィッチが実現される。通常、汎用レジスタ 86 は一面構成のため、タスク用の処理データと RTOS用の処理データを切り換えるた めにスタックを使っている。汎用レジスタ 86も 2面化すれば、スタックを介して退避'口 ードする必要がなくなるため、より高速なタスクスィッチが可能である。
[0030] 本実施例においては、更に、タスクごとに退避レジスタ 110を設けることにより、いつ そう高速なタスクスィッチを実現している。退避レジスタ 110を使ったタスクスィッチに ついては図 5に関連して詳述する。図 3に関連して説明した CPU84と一般的なソフト ウェア RTOSの場合、タスクスィッチに際して、頻繁に TCBへのアクセスが発生して いることがゎカゝる。上記設例では、タスク Aからタスク Bにタスクスィッチするという前提 で説明したが、実際には、 RTOSが次に実行すべきタスク Bを選択するためにも多く の命令を実行する必要がある。このときにも、 RTOSは頻繁にメモリにアクセスするこ とになる。本実施例におけるタスク処理装置 100は、後述のタスク制御回路 200がタ スク選択処理を専用に実行するため、更に高速なタスクスィッチを実現して 、る。
[タスク処理装置 100による RTOSのハードウェア化]
[0031] 図 4は、本実施例における RTOSの概念図である。
一般的なソフトウェア RTOSと異なり、本実施例における RTOSは、主として、 CPU とは別個のハードウェアとして実現される。以下、ハードウェアによって実現される RT OSのことを、「ハードウェア RTOSJとよぶ。本実施例の RTOSは、主として、 CPUと は別個のハードウェアであるため、自らの処理を実行するためには CPUの使用権を 実質的にほとんど必要としない。いいかえれば、 RTOSとタスクは、 CPUの使用に関 してほとんど競合関係にない。図 2に示した一般的なソフトウェア RTOSの場合、 CP Uはタスク実行用回路であるとともに、 RTOS実行用回路でもあった。これに対し、本 実施例におけるハードウェア RTOSの場合、 CPUはタスク実行回路として明確ィ匕さ れ、タスクスケジューリング機能は後述の退避回路 120とタスク制御回路 200を中心 として実現することができる。
[0032] 図 5は、本実施例におけるタスク処理装置 100の回路図である。
タスク処理装置 100は、 CPU150に加えて退避回路 120とタスク制御回路 200を 含む。 CPU150はタスクの実行主体であり、退避回路 120とタスク制御回路 200が図 4に示した RTOSの役割を担う回路である。タスクススケジューリング処理は、タスク制 御回路 200により主導される。
[0033] CPU150は、実行制御回路 152、処理レジスタ 154および演算回路 160を含む。
CPU150は、図 3に関連して説明した一般的な CPUであってもよい。ただし、本実施
例における CPU150は、図 3に示した CPU84とは信号線の接続方法等が若干変更 されている。具体的な回路構成については次の図 6に関連して詳述する。
[0034] タスク制御回路 200は、タスク切換回路 210、セマフォテーブル 212、イベントテー ブル 214、タスク選択回路 230および状態記憶部 220を含む。セマフォテーブル 21 2とイベントテーブル 214については、図 13以降に関連して詳述する。状態記憶部 2 20は、タスクごとに対応づけられたユニットである。以下、タスク Aに対応する状態記 憶部 220のことを「状態記憶部 220_A」のように表記する。各状態記憶部 220は、タス クの状態データを保持する。状態データとは、コンテキスト情報のうち、特に、タスク優 先順位や状態など、タスクの属性を示す情報である。具体的なデータの内容につい ては、図 10に関連して後述する。各状態記憶部 220からは、全タスクの全状態デー タがタスク選択回路 230に常時出力している。タスク選択回路 230は、各タスクの状 態データに基づいて、 RUN—タスクの選択等、各種タスク選択を行う回路である。タ スク選択回路 230についても図 10以降に関連して詳述する。タスク切換回路 210は 、実行制御回路 152から受信するシステムコール信号 (SC)や外部装置力 の割り 込み要求信号 (INTR)を検出すると、タスクスィッチを実行する。
[0035] 実行制御回路 152はシステムコール実行時には、システムコール信号(SC)をタス ク切換回路 210に送信する。また、タスク切換回路 210が割り込み要求信号 (INTR) を検出したときには、タスク切換回路 210は実行制御回路 152に対して停止要求信 号 (HR)をアサートする。実行制御回路 152は、 CPU150の動作が停止しているとき には停止完了信号 (HC)をタスク切換回路 210にアサートする。これら 3種類の信号 によって、 CPU150とタスク制御回路 200が連係動作することになる。
[0036] 退避回路 120は、ロード選択回路 112および複数の退避レジスタ 110を含む。退 避レジスタ 110も、タスクごとに対応づけられたユニットであり、処理レジスタ 154の処 理データを退避させるためのレジスタである。したがって、退避レジスタ 110は、処理 レジスタ 154と同等以上のデータ容量を持つ。以下、タスク Aに対応する退避レジス タ 110のことを「退避レジスタ 110_A」のように表記する。ロード選択回路 112は、タス ク切換回路 210から指示されると、いずれかの退避レジスタ 110のデータ(以下、退 避レジスタ 110が保持するデータのことを「退避データ」とよぶ)を処理レジスタ 154に
ロードする。
[0037] 各退避レジスタ 110はそれぞれの退避データをロード選択回路 112に常時出力す る。タスク切換回路 210がロード選択回路 112にタスク IDを指定したタスク選択信号( TS)を入力すると、ロード選択回路 112は指定されたタスクに対応する退避レジスタ 1 10の退避データを処理レジスタ 154に出力する。更に、タスク切換回路 210が処理 レジスタ 154に対して書き込み信号 (WT)を入力すると、その退避データは処理レジ スタ 154に実際にロードされる。
[0038] 一方、処理レジスタ 154の全処理データも全退避レジスタ 110に常時出力されてい る。タスク切換回路 210が所望の退避レジスタ 110に対して書き込み信号 (WT)をァ サートすると、その退避レジスタ 110に処理データが退避される。ここで、処理レジス タ 154と各退避レジスタ 110を接続するノ スがー度に伝送可能なビット数は、処理デ ータをパラレル転送できるように設定されている。そのため、タスク切換回路 210は、 退避レジスタ 110に書き込み信号を一度送信するだけで、処理データを退避レジス タ 110に一気に書き込むことができる。また、退避レジスタ 110とロード選択回路 112 、ロード選択回路 112と CPU150を接続するバスのビット数も同様に設定されている 以下、システムコールと割り込み要求信号のそれぞれについてタスクスィッチの実 行方法を説明する。
[1]システムコール実行
[0039] CPU150の実行制御回路 152がシステムコールを実行するとき、実行制御回路 15 2は CPU150のクロック(以下、「CPUクロック(CLK)」とよぶ)を停止させる。具体的 な停止方法については、図 7等に関連して後に詳述する。実行制御回路 152は、シ ステムコールの実行を示すシステムコール信号(SC)をタスク制御回路 200のタスク 切換回路 210に送信する。また、 CLKが停止完了すると、実行制御回路 152は停止 完了信号 (HC)をタスク切換回路 210にアサートする。
[0040] CPU150とタスク切換回路 210の間には、システムコール信号伝送用に 9本の信 号線が接続されて 、る。 9本の信号線は先述した 9種類のシステムコールに対応する 。実行制御回路 152は、実行されたシステムコールの種類に応じて、いずれかのシス
テムコール信号線にてデジタルパルスを伝送する。タスク切換回路 210は、 9本のシ ステムコール信号線のうち、どの信号線カゝらデジタルパルスが検出されたかに応じて 、即座に実行されたシステムコールの種類を検出できる。タスク切換回路 210は、シ ステムコールの種類に応じて、タスク選択回路 230の出力データから必要なデータを 選択し、システムコールにより指示された処理を実行する。この処理は、 HCがアサ一 トされたことを条件として実行される。タスク切換回路 210とタスク選択回路 230の関 係については、図 10に関連して詳述する。なお、システムコールのパラメータや戻り 値は、処理レジスタ 154のうち、所定の汎用レジスタ 158に書き込まれる。タスク切換 回路 210は汎用レジスタ 158に対してパラメータの読み出しや戻り値の書き込みを実 行可能である。ここでは、 RUN—タスクであるタスク Aがウェイトセマフォシステムコ一 ルを実行したとする。したがって、まず、タスク Aの処理データを退避させる必要があ る。
くタスク Aのコンテキスト情報の退避〉
[0041] 実行制御回路 152は、ウェイトセマフォシステムコールを示す SC信号をタスク切換 回路 210に入力する。実行制御回路 152は CLKを停止させ、停止が完了すると HC をアサートする。タスク切換回路 210はタスク選択回路 230に内蔵される各種選択回 路のうち、後述のセマフォ選択回路 234に対して待機対象となるセマフォのセマフォ I Dを出力した上で、次に実行すべきタスク Bを選択する。タスク切換回路 210は、状態 記憶部 220_Aに対して所定データを書き込む。たとえば、タスク Aの状態として「RU N」から「READY」 「WAIT」に設定変更する。より具体的には、タスク切換回路 21 0は、状態データのうちタスク状態を示すデータとして rWAITjを全状態記憶部 220 に出力した上で、状態記憶部 220_Aだけに書き込み信号 (WT_A)を入力する。こう して、タスク Aの状態が設定変更される。
[0042] 次に、タスク切換回路 210は、退避レジスタ 110_Aに対して書き込み信号 (WT)を 出力する。処理レジスタ 154の処理データは、常時、各退避レジスタ 110に出力され ているので、この書き込み信号 (WT)によりタスク Aの退避レジスタ 110_Aに退避され る。
くタスク Bのコンテキスト情報のロード >
[0043] タスク切換回路 210は、タスク Aの状態データの変更、処理データの退避が完了す ると、タスク Bを指定したタスク選択信号 (TS_B)をロード選択回路 112に出力する。こ れにより、退避レジスタ 110_Bの退避データが処理レジスタ 154に出力される。タスク 切換回路 210は、処理レジスタ 154に書き込み信号 (WT)を出力すると、タスク Bの 退避データが処理レジスタ 154にロードされる。また、タスク切換回路 210は、タスク B の状態記憶部 220に対して所定データを書き込む。たとえば、タスク Bの状態を「RE ADY」から「RUN」に設定変更する。以上の処理が完了すると、実行制御回路 152 は CPUクロックを再開させる。 CPU150は、再開された CPUクロックによりタスク Bの 実行を開始する。処理方法の更なる詳細については、図 8 (b)に関連して後述する。
[2]割り込み要求信号の発生
[0044] タスク切換回路 210は周辺機器力ゝらの割り込み要求信号 (INTR)を検出する。より 具体的には、割り込み要求信号 (INTR)は、図示しない割込コントローラ力もタスク 切換回路 210に送信される。割り込み要求信号 (INTR)のレベルを示すパラメータ は、割込コントローラが内蔵するレジスタに記録される。タスク切換回路 210は実行制 御回路 152に停止要求信号 (HR)をアサートし、実行制御回路 152は CPUクロック を停止させる。システムコール実行時と同様、タスク切換回路 210は RUN—タスクの 処理データを退避レジスタ 110に退避させる。次に、タスク切換回路 210は特殊タス クを起動する。割り込み要求信号のパラメータにかかわらず起動される特殊タスクは 1 種類である。特殊タスクは、割込コントローラの内蔵レジスタから INTRのパラメータを 読み出し、ノ メータに応じた処理を実行する。特殊タスクが実行する処理は、セット イベントシステムコールやセットセマフォシステムコールの実行力、もしれな!、し、一般 タスクの起動カゝもしれない。パラメータによっては、特殊タスクは特段の処理を実行せ ずに終了する力もしれない。 INTRのパラメータによってどのような処理を実行するか は特殊タスクの実装による。特殊タスクが実行終了すると、 READY—タスクの中から 次の RUN—タスクが選択される。
[0045] タスク切換回路 210は、特殊タスクに対応した退避レジスタ 110の処理データを CP U150にロードさせる。このような一般タスクから特殊タスクへの切り換えのために要 する時間は、タスク制御回路 200の動作クロックによってあら力じめ見積もることがで
きる。 HRを実行制御回路 152にアサートして力もタスク切換回路 210の動作クロック が所定クロック分経過すると、タスク切換回路 210は CPUクロックの停止を解除する ために HRをネゲートする。実行制御回路 152は HRをネゲートされると CPUクロック を再開させる。このときには、タスク切換回路 210によって一般タスク力も特殊タスクへ のタスクスィッチが完了している。処理方法の詳細については、図 8 (a)に関連して後 述する。
[0046] いずれの場合においても、
(A)処理データの退避'ロード
(B)タスクの状態遷移および RUN—タスクの選択
t 、うタスクスィッチの中核となる処理をノヽードウエアにより実現して 、る。(A)および( B)に関し、メモリ上の TCBにアクセスする必要がなくなることもタスクスィッチの高速 化に寄与している。また、タスク処理装置 100を実現するにあたり、 CPU150につい ては、 CPUクロックを停止および再開する機能を追加するだけでよい。なお、これら の機能がすべてハードウェアによって実現されることは、本発明の範囲を限定するも のではない。たとえば、(A)または (B)の主たる機能をノヽードウエアにより実現し、ノヽ 一ドウエアの機能を補助するために RTOSの一部の機能をソフトウェアで実現しても よいことは当業者には理解されるところである。
[0047] 図 6は、図 5の CPU150の回路図である。
図 3の CPU84と異なり、処理レジスタ 154は特殊レジスタ 156と汎用レジスタ 158共 に一面だけの構成となっている。処理レジスタ 154にはそれぞれロード選択回路 112 力 の入力バス、退避レジスタ 110への出力バス、タスク切換回路 210からの書き込 み信号 (WT)用の信号線が追加されている。実行制御回路 152は、出力セレクタ 16 4に対する制御信号(CTRL)により、処理レジスタ 92のうちの所望のレジスタのデー タを演算回路 160に入力する。演算結果は入力セレクタ 162への入力となる。実行 制御回路 152は、入力セレクタ 162に対する制御信号 (CTRL)により、処理レジスタ 154のうちの所望のレジスタに演算結果を入力する。実行制御回路 152は、特殊レ ジスタ 156のプログラムカウンタを更新しながら、タスクを実行する。
[0048] 処理データは、メモリ上の TCBではなく退避レジスタ 110に退避される。処理レジス
タ 154からは常時、各退避レジスタ 110に処理データが出力されている。実際にどの 退避レジスタ 110にどのタイミングで処理データを退避させるかは、先述のようにタス ク切換回路 210によって制御される。
[0049] 処理レジスタ 154には、メモリ上の TCBではなく退避レジスタ 110から退避データが ロードされる。実際にどの退避レジスタ 110の処理データをどのタイミングでロードす るかは、先述のようにタスク切換回路 210によって制御される。
[0050] 処理レジスタ 154とロード選択回路 112、処理レジスタ 154と退避レジスタ 110を接 続するバスは、一度に処理データをパラレル転送可能なビット数のバスである。その ため、タスク切換回路 210による書き込み信号 (WT)により、一度に読み出しや書き 込みが可能となっている。一般的なソフトウェア RTOSは、タスクスィッチに際しては 処理レジスタ 154を一時的に占有する必要がある。これに対して、本実施例における ハードウェア RTOSは、タスクスィッチ処理のための特別な処理データを処理レジス タ 154にロードする必要がない。タスク A力もタスク Bの切り換えに際しては、タスク A の処理データを退避したあとにタスク Bの処理データをロードするだけなので、処理レ ジスタ 154をシステム用とユーザ用の 2面分用意したり、スタックを介したデータの入 れ替え処理を実行する必要がな 、。
[0051] 図 7は、実行制御回路 152が CPUクロックを停止させる仕組みを示す回路図である 第 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)が停止する。
[0052] 第 1ANDゲート 172の入力は、 ORゲート 176の出力と CPUビジー信号(CBUSY )で、後者は負論理である。 CBUSYは、 CPU 150の内部サイクルを発生させる既知 のステートマシンから出力される信号であり、 CPU150が停止可能な状態にあるとき
に「1」となる信号である。たとえば、演算回路 94が実行中の単一の命令またはロック されている複数の命令の最後の命令を完了させ、 CPUが停止可能な状態になった とき、または、すでに CPUクロックの供給が停止されているときに「0」となる。
[0053] ORゲート 176の入力は、命令復号器 170の出力(SC_DETECT)とタスク切換回 路 210からの停止要求信号 (HR)である。命令復号器 170は、 SC_DETECTを保持 するラッチ回路を内蔵する。命令復号器 170は、 CPU150からフェッチされたデータ (FD)を入力とし、 FDがシステムコール命令のときに SC_DETECT= 1を出力する。 内蔵ラッチ回路により、その後に FDが変化しても、命令復号器 170は SC_DETECT = 1を継続して出力する。命令復号器 170にはタスク切換回路 210の処理レジスタ 1 54に対する書き込み信号 (WT)も入力される。 WTが 0から 1に変化するとき、先述し たように退避データの処理レジスタ 154へのロードが実行される。この WTは所定時 間後に 1から 0に戻るパルス信号である。 WTが 1から 0に変化するとき、命令復号器 1 70のラッチ回路はリセットされ、命令復号器 170は SC_DETECTをネゲートする。 S C_DETECTと書き込み信号 (WT)の関係については、図 8 (b)に関連して詳述する 。本実施例における命令復号器 170は、実行対象命令がシステムコールカゝ否かを判 定するために実行制御回路 152に専用に設けられる装置である。変形例として、命 令復号器 170は CPU150のデコードステージを担当する CPUデコーダと共通化さ れてもよい。この場合、命令復号器 170は、 CPUデコーダに、復号したデータがシス テムコール命令であったときに SC_DETECT= 1を出力する機能を追加することによ り実現できる。
割り込み要求信号 (INTR)が発生したとき、タスク切換回路 210は実行制御回路 1 52に停止要求信号 (HR)をアサートする。すなわち、 ORゲート 176の出力は、シス テムコールが実行される力、、停止要求信号 (HR)がアサートされたときに「1」となる。
[0054] まとめると、システムコールが実行される力割り込み要求信号が発生し、かつ、 CPU ビジー信号が「0」となったとき、第 1ANDゲート 172の出力は「1」となり、第 2AND1 74からは CPUクロックが出力されなくなる。
[0055] 図 8 (a)は、割り込み要求信号発生時における各種信号の関係をを示すタイムチヤ ートである。
同図においては、まず、時刻 tにおいて、タスク切換回路 210は外部力もの割り込
0
み要求信号 (INTR)を検出している。タスク切換回路 210は、特殊タスクを実行させ るため、実行制御回路 152に停止要求信号 (HR)をアサートする。入力タイミング t は、検出タイミング tとほとんど同時である。時刻 tでは、 CPU150のステートマシン
0 1
は「タスク実行中」であり、 CBUSY= 1である。 HR= 1より、 ORゲート 176は「1」を出 力するが、 CBUSY= 1ゆえに CPU150は停止しない。そのため、 HR= 1が入力さ れても、しばらくは CPUクロック(CLK)は原クロック(CLK0)に同期して出力される。
[0056] 時間が経過し、時刻 tにおいて CBUSY=0に変化している。すでに HR= 1のた
2
め、第 1ANDゲート 172は HC= 1を出力し、第 2ANDゲート 174から出力される CP Uクロックは 0に固定される。一方、タスク切換回路 210は、 HCがアサートされたこと を契機として、一般タスクから特殊タスクへタスクスィッチを開始する。詳しくは後述す る力 このタスクスィッチのために要する時間はタスク制御回路 200の動作クロックに して数回分である。 HCがアサートされてから、タスク制御回路 200の動作クロックが 所定回数変化したことを条件として(時刻 t )、タスク制御回路 200は停止要求信号(
3
HR)をネゲートする。 HR=0なので、実行制御回路 152は CPUクロック(CLK)を再 開させる。 CPU150が処理を再開すると、 CPU150は CBUSYを 0から 1に変化させ る(時刻 t ) 0このように、 CPUクロックが停止する時刻 tから時刻 tの間に、一般タス
4 2 3 タカゝら特殊タスクへのタスクスィッチが実行されることになる。
なお、別の処理方法として、タスク制御回路 200の動作クロックが所定回数変化し たことを条件とする代わりに、タスク制御回路 200がタスクスィッチを完了させたことを 条件として、 HRをネゲートしてもよい。そして、実行制御回路 152が、 HRがネゲート されたことを条件として、 HCをネゲートさせてもよい。 HC = 0となると、実行制御回路 152は CPUクロック(CLK)を再開させる。こうして、タスクの実行を再開させてもよい
[0057] 図 8 (b)は、システムコール実行時における各種信号の関係を示すタイムチャートで ある。
同図においては、まず、時刻 tにおいて、命令復号器 170がシステムコールを検出
0
し、 SC_DETECTを 0から 1に変化させている。時刻 tでは、 CPU150のステートマ
シンは「タスク実行中」であり、 CBUSY= 1である。 SC_DETECT= 1より、 ORゲート 176は「1」を出力するが、 CBUSY= 1ゆえに CPU150は停止しない。そのため、 S C_DETECT= 1が出力されても、しばらくは CPUクロック(CLK)は原クロック(CLK 0)に同期して出力される。
[0058] 時間が経過し、時刻 tにおいて CBUSY=0に変化している。 SC_DETECT= 1、 かつ、 CBUSY= 1となったので、 HCはネゲートされ、 CPUクロックは停止される。タ スク切換回路 210は、 HC = 0を入力されると、タスクスィッチ処理を開始し、書き込み 信号 (WT)を CPU 150に出力する。 WTが 0から 1に変化する時刻 tに退避データが
2
処理レジスタ 154にロードされる。書き込み信号 (WT)は、パルス信号のため、所定 時間経過後の時刻 tに WT=0となる。この WT: 1→0の立ち下がり検出により命令
3
復号器 170にラッチされている SC DETECTはリセットされる(時刻 t ) 0このとき、 C
4
BUSYは 0から 1に変化する。 CBUSY= 1となったので、 HC = 0となり、 CPUクロッ クが再開される。 CPUクロックが停止する時刻 tから時刻 tの間に、タスクスィッチが
1 4
実行されること〖こなる。
なお、別の処理方法として、 WT: 1→0の立ち下がり検出を条件とする代わりに、タ スク制御回路 200がタスクスィッチを完了させ、 HRをネゲートしたことを条件として、 実行制御回路 152が、 HCをネゲートしてもよい。 HC = 0となったことを条件として、 S C_DETECTをリセットする。実行制御回路 152は CPUクロック(CLK)を再開させ、 CBUSYは 0から 1に変化する。
[0059] いずれの場合においても、 CPU150は、 CPUクロックが停止している期間に RUN —タスクの切り換えが行われたことを認識する必要はない。タスク切換回路 210は、 C PUクロックが停止し、 CPU 150がいわばフリーズしている間にタスクスィッチ処理を 行うため、 CPU150の処理とタスク制御回路 200の処理はシーケンシャルに分離さ れている。
[0060] 図 9は、パイプライン処理における CPUクロックの停止タイミングを説明するための 模式図である。
CPU150は、複数の命令をメモリから処理レジスタ 154に順次読み出しながら実行 することにより、タスクを実行する。このタスクの実行単位である命令は、以下の 4つの
フェーズに分解される。
1. F (フェッチ):メモリから命令を取り出す。
2. D (デコード):命令を解釈する。
3. E (エダゼキューシヨン):命令を実行する。
4. WB (ライトバック):実行結果をメモリに書き込む。
[0061] あるタスクが命令 1から命令 5を順次実行する場合、命令 1の Fから WBまで実行し た後、命令 2の Fを実行してもよい。しかし、より効率的な実行のために、命令 1の実 行中に命令 2の実行を開始することが多い。このような処理方法は、パイプライン処理 とよばれる。たとえば、命令 1が、 Dのフェーズに至ったとき、命令 2の Fのフェーズを 開始する。命令 1が、 Eのフェーズに至ったときには、命令 2の Dフェーズ、命令 3の F フェーズを実行する。このように、単位時間当たりに実行される命令の数を増やすこと により、タスクごとの実行時間を減少させることができる。
[0062] 更に、各フェーズを 2つのフェーズに細分化してもよい。たとえば、 Fフェーズを F1: F2という 2つのフェーズに分離される。命令 1が、 F2のフェーズに至ったとき、命令 2 の F1のフェーズを開始する。命令 1が、 D1のフェーズに至ったときには、命令 2の F2 フェーズ、命令 3の F1フェーズを実行する。フェーズの細分化により、いっそう CPU1 50の計算資源を効率的に利用できる。図 9においては、各フェーズを 2つのフェーズ に細分ィ匕して実行するノ ィプライン処理にぉ 、て、システムコールが発生したときの CPUクロック停止タイミングにつ 、て説明する。
[0063] 同図において、命令 1は CPUクロック「0」のタイミングで処理を開始されている。 CP Uクロック「4」のタイミングで、命令 1のデコードが完了する。命令 1はシステムコール であったとする。命令復号器 170は SC_DETECTを 0から 1に変化させる。次に SC— DETECTが 1から 0に戻る条件は、タスク切換回路 210から処理レジスタ 154への書 き込み信号 (WT)が 1から 0に変化することである。 SC_DETECT= 1となっても、命 令 2〜5が既に実行中または実行開始済であるため、 CBUSY= 1のままである。そ のため、第 2ANDゲート 174は CPUクロックを引き続き出力することになる。ただし、 実行制御回路 152は、 SC_DETECT= 1のときには、新たな命令がフェッチされな いようにプログラムカウンタの更新を一時停止させる。したがって、命令 6以降はメモリ
力 フ ツチされなくなる。
[0064] CPUクロック「8」のタイミングで命令 1は実行完了する力 命令 2〜5は実行中であ るため、 CPUビジー信号は「1」のままである。 CPUクロック「12」のタイミングに至ると 命令 5が実行完了する。このとき、 CPUビジー信号は「0」となる。あとは、図 8 (b)に関 連したプロセスにしたがって、 CPUクロックの供給が停止される。タスク切換回路 210 は、命令 5まで終了した段階の処理データを退避レジスタ 110に退避させる。このよう な停止方法によれば、システムコールが実行されたあとの命令の実行結果を無駄に することなくタスクスィッチできる。タスクスィッチが完了すると、 CPUビジー信号は再 び「1」にセットされ、命令復号器 170の処理も再開される。こうして、 CPUクロックが再 び供給されるようになる。
なお、別の処理方法として、システムコール命令が実行完了するタイミングで、 CP Uビジー信号を「0」とし、 CPUクロックの供給を停止してもよい。この場合、システムコ ール命令と同時に実行されていた別の命令は実行途中のまま停止する。中途停止さ れた命令の中間的な処理結果は処理レジスタ 154に記録されたあと、退避レジスタ 1 10に退避される。次回、このタスクが RUN—タスクとなるときには、中途停止された命 令の続きが実行される。たとえば、ある命令が、フェッチを終了した段階で中途停止さ れた場合、メモリから読み出された命令やオペランドは退避レジスタ 110に退避され る。タスク再開時には、退避レジスタ 110のデータが処理レジスタ 154にロードされ、 デコードステージ力 続きの処理が実行されることになる。
[0065] 図 10は、状態記憶部 220とタスク切換回路 210の関係を示す回路図である。
状態記憶部 220は、状態レジスタ 250とタイマ 252を含む、状態記憶部 220は、タ スクの状態データを保持する。また、タイマ 252は、タスクが READY状態または WA IT状態に遷移したときに開始するタイマである。タスクが READY状態に遷移してか ら経過した時間のことを「READY経過時間」、タスクが WAIT状態に遷移して力 経 過した時間のことを「WAIT経過時間」とよぶ。タイマ 252は、その値を TIM信号とし て常時出力する。タスク切換回路 210は、タスクスィッチに際して、あるタスクが REA DY状態または WAIT状態に変化したときには、そのタスクのタイマ 252を駆動して時 間計測を開始させる。
状態記憶部 220は、以下に示すレジスタの集合である。
(A)タスク IDレジスタ 254:タスク IDを保持する。タスク IDレジスタ 254からはタスク I Dを示す 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自体が自律的に自らのタイムアウト値を定期的に デクリメントしてもよい。
タスク選択回路 230は、各状態記憶部 220から出力される各種信号をもとに、タスク の選択を行う。タスク選択回路 230は、以下に示す回路を含む。
(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、 SI D、 TIMの 6種類である。出力信号は、 WAIT状態から READY状態に遷移するタス クのタスク IDである。該当するタスクが存在しなければ、 1などの所定値を出力する 。より具体的な回路構成については図 13に関連して詳述する。
(C)イベント選択回路 236 :セットイベントシステムコールの実行により、 WAIT状態 から READY状態に遷移するタスクを選択する。セットイベントシステムコールにより セットされるイベント(以下、単に「設定イベント」 )のイベント IDをタスク切換回路 210 力も入力される。状態記憶部 220からの入力信号は、 ID、 ST、 WR、 EID、 FL、 FL
Cの 6種類である。出力信号は、 WAIT状態から READY状態に遷移するタスクのタ スク IDと、そのタスクの FL、 FLCを出力する。
(D)タイムアウト検出回路 238 : WAIT状態のタスクのうち、タイムアウトカウンタ 274 のタイムアウト値がゼロとなったタスクを検出する。タイムアウト検出回路 238は、タイ ムアウト値が更新されるごとに駆動される。タイムアウト検出回路 238の入力信号は、 I D、 ST、 TOの 3種類である。出力信号は、該当するタスクのタスク IDである。該当す るタスクが存在しなければ、 1などの所定値を出力する。
(E)ミューテックス回路 240:リリースミューテックスシステムコールの実行により、 W AIT状態から READY状態に遷移するタスクを選択する。リリースミューテックスシス テムコールにより解放されるミューテックス(以下、単に「解放ミューテックス」)のミュー テックス IDをタスク切換回路 210から入力される。状態記憶部 220からの入力信号は 、 ID、 ST、 WR、 PR、 SID、 TIMの 6種類である。出力信号は、 WAIT状態から REA DY状態に遷移するタスクのタスク IDである。該当するタスクが存在しなければ、ー1 などの所定値を出力する。
(F)検索回路 242:タスク切換回路 210からタスク IDを入力されると、そのタスクの 全状態データを出力する。
[0068] 以下においては、タスクスィッチに関連し、 RUN—タスクの選択、セマフォ、イベント 、ミューテックス、タイムアウトについて、特に、タスク選択回路 230の処理を中心とし て一般的な技術と比較しながら説明する。
[RUN タスク選択]
[ 1 ]一般的なソフトウェア RTOSによる RUN -タスクの選択
[0069] 図 11は、一般的な 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 タスクの状態遷移 >
[0070] ここでは、 RUN タスクをタスク Jとして説明する。
Al. RTOSは、 RUN タスクのタスク IDをメモリに保持している。このタスク IDをも とに、タスク Jの TCBのアドレスを取得する。
A2. TCBにアクセスし、タスク Jのタスク優先順位を取得する。タスク優先順位は「0 」であったとする。
A3.図 11に示すタスクレディリストのうち、タスク Jのタスク優先順位に対応する優先 順位ポインタ 280を取得する。
A4.取得した優先順位ポインタ 280が示す TCBを検出する。ここではタスク Aの T CBが検出される。
A5.タスク Aの TCBが持つポインタをたどっていき、最後尾の TCBを検出する。同 図においては、タスク Fが最後尾である。
A6:タスク Fの TCBのポインタがタスク Jの TCBをアドレスするように設定する。こうし て、タスク Jの TCBがタスクレディリストに追加される。
A7.タスク Jの TCBに「READY」を設定する。また、処理データは、 TCBのレジス タ格納エリアにコピーされる。
< READY タスクの状態遷移 >
[0071] Bl. RTOSは、タスク優先順位「0」の優先順位ポインタ 280がいずれかの TCBを 示している力検出する。 TCBがなければ、タスク優先順位「1」の優先順位ポインタ 28 0がいずれかの TCBを示しているか検出する。 TCBが見つ力るまで、タスク優先順位
を下げながらいずれかのタスクを特定する。同図の場合、タスク Aが特定されること〖こ なる。
B2.タスク Aをタスクレディリストからはずす。具体的には、タスク順位「0」の優先順 位ポインタ 280がタスク Aではなくタスク Dの TCBをアドレスするように書き換える。ま た、タスク Aのポインタがタスク Dをアドレスしないように NULL設定する。こうして、タ スク Aの TCBがタスクレディリストから外される。
B3.タスク Aの TCBに「RUN」を設定する。また、タスク Aの TCBのレジスタ格納ェ リアに退避されていた処理データが処理レジスタにロードされる。
[0072] 一般的なソフトウェア RTOSは、このようなタスクレディリストによりタスクスィッチを行 う。すなわち、 RTOSが複数の READY—タスクの中から RUN—タスクを選択するポ リシは以下の通りである。
1. READY—タスクであること (第 1条件)。
2. READY—タスクのうち、最もタスク優先順位の高いタスクであること (第 2条件)
3.最もタスク優先順位の高いタスクが複数存在するときには、 READY状態になつ た時期が最も古 、タスクであること (第 3条件)。
このような 3つの条件のことを、まとめて「RUNタスク選択条件」とよぶことにする。タ スク処理装置 100の実行選択回路 232は、このような RTOSのタスクスケジューリング 機能をノヽードウエアにより実現して ヽる。
[2]本実施例のハードウェア RTOSによる RUN—タスクの選択
[0073] 図 12は、実行選択回路 232の回路図である。
ここでは、タスク 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は、上記 RU Nタスク選択条件のうちの第 1条件に基づく判定を行っている。第 1比較回路 290は、
2つのタスクの ID、 PR、 TIM,および、判定回路 296からの CID信号を入力とする。
[0074] 第 1比較回路 290aに着目して説明する。第 1比較回路 290aは、タスク 0とタスク 1を 比較し、上記した RUNタスク選択条件に基づいて、より好適なタスクを選択する。 第 1の判定:まず、判定回路 296aと判定回路 296bのそれぞれから出力される CID 信号を比較する。いずれか一方が「1」であれば、いいかえれば、いずれか一方のタ スクだけが READY状態であれば、第 1比較回路 290aは、そのタスクの ID、 PR、 TI Μを出力する。いずれも「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の順序管理が不要となる。
[0075] このようにして、タスク 0とタスク 1、タスク 2とタスク 3、タスク 4とタスク 5、タスク 6とタス ク 7がそれぞれ RUNタスク選択条件により比較される。第 2比較回路 292は、 2つの 第 1比較回路 290からの出力により、更に RUN—タスクの候補を絞り込む。第 2比較 回路 292aは、第 1比較回路 290aと第 1比較回路 290bの出力によりタスク選択を実 行する。このため、第 2比較回路 292aは、タスク 0〜タスク 3のうち、最も RUNタスク選 択条件に適合するタスクの ID、 PR、 TIMを出力する。第 3比較回路 294も同様であ り、第 3比較回路 294はタスク 0〜タスク 7のいずれかのタスクのタスク IDを出力する。
[0076] このような処理方法によれば、 RUNタスク選択条件をノ、一ドウ アにより実現できる 。一般的なソフトウェア RTOSは、タスクレディリストにアクセスしながら RUN—タスク
を選択していた力 本実施例における実行選択回路 232は、状態記憶部 220から常 時出力される状態データにより RUN タスクを選択している。実行選択回路 232の 処理をまとめると以下の通りである。
< RUN タスクの状態遷移 >
[0077] ここでは、 RUN タスクをタスク Jとして説明する。
A1.タスク切換回路 210は、タスク Jのタスク状態レジスタ 258に「READY」を設定 する。
A2.タスク切換回路 210は、タスク Jのタイマ 252をセットして READY経過時間の 計測を開始させる。
こうして、タスク Jは RUN→READYに状態遷移する。処理データは、先述したよう にタスク Jの退避レジスタ 110に退避される。処理レジスタ 154と退避レジスタ 110をつ なぐバスは、処理データをパラレルに伝送可能であるため、 A1と A2の処理は 1クロッ ク時間で実行可能である。
< READY タスクの状態遷移 >
[0078] B1.タスク切換回路 210は、タスク Jの状態遷移が完了したときに実行選択回路 23 2が出力するタスク IDから、 RUN—タスクを特定する。このタスクのタスク状態レジス タ 258に「RUN」を設定する。
こうして、特定されたタスクは READY→RUNに状態遷移する。特定されたタスクの 処理データは退避レジスタ 110から処理レジスタ 154にロードされる。退避レジスタ 1 10と処理レジスタ 154をつなぐバスも、処理データをパラレルに伝送可能なビット数 であるため、 B1の処理は 1クロック時間で実行可能である。
[0079] ソフトウェア RTOSは、タスクスィッチに際して、タスクレディリストへのアクセス等によ り CPUの CPUクロック時間を多く消費する。これに対し、本実施例におけるタスク制 御回路 200は、僅かな時間でタスクスィッチを完了させることができる。状態記憶部 2 20は常時状態データを実行選択回路 232に出力しているため、実行選択回路 232 は常時 、ずれかのタスクのタスク IDを出力して 、る。タスクスィッチが発生してから R UN タスクの選択処理を開始するのではなぐタスクスィッチが発生したときの実行 選択回路 232の出力により RUN タスクの選択を行う点もタスクスィッチの高速化に
寄与している。ここでは、タスクが 8つであるとして説明した力 比較回路の段数を増 やすことにより、より多くのタスクにも対応可能である。
[セマフォ処理]
[0080] 図 13は、一般的な RTOSによるセマフォ処理において利用されるウェイトセマフォリ ストを示す図である。
ウェイトセマフォリストを説明する前に、セマフォについて簡単に説明する。セマフォ テーブル 212には、セマフォ IDとセマフォカウンタが対応づけて記録される。セマフォ カウンタは、初期値として有限数に設定される。たとえば、セマフォ ID=4、セマフォ カウンタ = 3として設定されて!、るとする。 、ずれかのタスクがセマフォ ID = 4のセマフ ォを待機セマフォとしてウェイトセマフォシステムコールを実行すると、タスク切換回路 210は待機セマフォのセマフォカウンタをデクリメントする。セマフォカウンタはウェイト セマフォイベントコールにより獲得要求されるごとにデクリメントされ、 0になると獲得で きなくなる。セマフォカウンタが 0となって!/、るセマフォを待機セマフォとしてウェイトセ マフォシステムコールを実行したタスクは、 WAIT状態に状態遷移する。
[0081] 一方、いずれかのタスクがセマフォ ID=4のセマフォを解放セマフォとしてリリースセ マフオシステムコールを実行すると、タスク切換回路 210はセマフォテーブル 212の セマフォカウンタをインクリメントする。まとめると、
セマフォカウンタ〉 0のとき:ウェイトセマフォシステムコールを実行したタスクは、 RU N→READYに遷移する。このときセマフォカウンタはデクリメントされる。
セマフォカウンタ =0のとき:ウェイトセマフォシステムコールを実行したタスクは、 RU N→WAITに遷移する。セマフォカウンタはデクリメントされな!/、。
ウェイトセマフォシステムコールを実行したタスクが WAIT状態から READY状態に 遷移するためには、別のタスクがリリースセマフォシステムコールを実行する必要があ る。
[ 1 ]一般的なソフトウェア RTOSによるセマフォ処理
[0082] 一般的なソフトウェア RTOSはウェイトセマフォリストにより、セマフォ待ちを理由とし て WAIT状態にあるタスク(以下、特に、「セマフォ待ちタスク」とよぶ)の TCBを管理 する。ウェイトセマフォリストは、図 11のタスクレディリストと同等の形状のリストであり、
メモリ上に形成される。各セマフォ待ちタスクの TCBは、ポインタによって連結される。 優先順位ポインタ 280は、該当タスク優先順位のセマフォ待ちタスクの TCBの先頭ァ ドレスを指す。
一般的なソフトウェア RTOSは、リリースセマフォシステムコールが実行されたとき、 このウェイトセマフォリストを走査しながら、 WAIT状態から READY状態に遷移させ るべきセマフォ待ちタスクを選択する。ウェイトセマフォシステムコールおよびリリース セマフォシステムコール実行時における RTOSの処理は以下の通りである。
<ウェイトセマフォシステムコールの実行 >
ここでは、 RUN—タスクをタスク Jとして説明する。
Al. 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も設 定する。
くリリースセマフォシステムコールの実行 >
[0084] Bl. RTOSは、タスク優先順位「0」のタスクを順番に迪りながら、解放セマフォを待 機セマフォとするセマフォ待ちタスクを検索する。存在しなければ、タスク優先順位「1 」のタスクを検索対象とする。解放セマフォを待機セマフォとするセマフォ待ちタスクが 検出されるか否かに応じて処理は分岐する。
(検出されたとき)
B2.検出されたタスクがタスク Eであるとして説明する。タスク Eの TCBに「READY 」を設定する。また、待機セマフォのセマフォ IDをクリアする。
B3.タスク Eの TCBをウェイトセマフォリストから外す。
B4.セマフォを解放したタスクの状態を RUN→READYに状態遷移させる。このタ スクの TCBは、タスクレディリストに追加される。
(検出されなかったとき)
B2.セマフォカウンタをインクリメントする。
B3.セマフォを解放したタスクの状態を RUN→READYに状態遷移させる。このタ スクの TCBは、タスクレディリストに追加される。
[0085] 一般的なソフトウェア RTOSは、このようなウェイトセマフォリストを管理することによ つて、セマフォ関連処理を行う。セマフォの解放に際し、 RTOSが複数の WAIT—タ スクの中力も READY—タスクを選択するポリシは以下の通りである。
1. WAIT—タスクであること (第 1条件)。
2. WAIT—タスクのうち、解放セマフォを待機セマフォとするタスクであること(第 2 条件)
3.そのようなタスクが複数存在するときには、最もタスク優先順位の高いタスクであ ること (第 3条件)。
4.最もタスク優先順位の高いタスクが複数存在するときには、 WAIT状態になった 時期が最も古 、タスクであること (第 4条件)。
このような 4つの条件のことを、まとめて「セマフォ待機解除条件」とよぶことにする。
タスク処理装置 100のセマフォ選択回路 234は、このような RTOSのタスクスケジユー リング機能をノヽードウエアにより実現している。
[2]本実施例のハードウェア RTOSによるセマフォ処理
[0086] 図 14は、セマフォ選択回路 234の回路図である。
ここでも、タスク 0〜タスク 7の 8つのタスクを前提として説明する。セマフォ選択回路 234は、 4っの第1比較回路300 (300&〜300(1)、2っの第2比較回路302 (302&、 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信号を入力とする。
[0087] 第 1比較回路 300は、セマフォ待機解除条件のうち第 3条件と第 4条件についての 判定を行う回路である。第 2比較回路 302や第 3比較回路 304も同様である。すでに 明らかなように、 RUNタスク選択条件の第 2条件および第 3条件は、セマフォ待機解 除条件の第 3条件および第 4条件と同じである。実行選択回路 232の各比較回路は 、タスクの状態データ (PR、 TIM)を比較する回路である。一方、セマフォ選択回路 2 34の各比較回路も、タスクの状態データ (PR、 TIM)を比較する回路である。したが つて、実行選択回路 232の第 1比較回路 290とセマフォ選択回路 234の第 1比較回 路 300は、同等のロジックを内蔵する回路であり、共通化することができる。各タスク は判定回路 306により第 1条件と第 2条件を判定された上で、第 1比較回路 300の判 定処理に供される。あとは、実行選択回路 232と同等の判定処理により、いずれかの タスク IDが第 3比較回路 304から出力される。ウェイトセマフォシステムコールおよび リリースセマフォシステムコール実行時における処理は以下の通りである。
<ウェイトセマフォシステムコールの実行 >
[0088] ここでは、 RUN—タスクをタスク Jとして説明する。
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に状態遷移する。
くリリースセマフォシステムコールの実行 >
[0089] B1.タスク切換回路 210は、解放セマフォのセマフォ IDを各判定回路 306に入力 する。各判定回路 306は、このセマフォ IDを対象としてセマフォ待機解除条件のうち の第 1条件および第 2条件の成否を判定する。したがって、各第 1比較回路 300は、 第 3条件および第 4条件にもとづいてタスクを選択する。
(いずれかの判定回路 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に状態遷移させる
[0090] 状態記憶部 220は常時状態データをセマフォ選択回路 234に出力しているため、 タスク切換回路 210がセマフォ IDを判定回路 306に入力すると、セマフォ選択回路 2 34は直ちに選択処理を実行できる。
[ミューテックス処理]
[0091] ミューテックスもセマフォと同じぐタスク間の同期処理に利用される。ミューテックス とセマフォは以下の点において相違する。
1.セマフォカウンタは 1以上の整数を設定可能である。これに対し、ミューテックス はセマフォカウンタが 1または 0の特殊なセマフォである。セマフォカウンタが 2以上の ときには、同一セマフォを 2以上のタスクが獲得できる。しかし、ミューテックスの場合、 あるミューテックスを獲得できるタスクは常に 1つだけである。
2.リリースセマフォシステムコールによりセマフォを解放できるタスクは、ウェイトセマ フォシステムコールによりセマフォを獲得したタスクに限らない。これに対し、リリースミ ユーテックスシステムコールによりミューテックスを解放できるタスクは、ウェイトミューテ ックスシステムコールによりミューテックスを獲得したタスクだけである。
[0092] ミューテックスの解放に際し、複数の WAIT—タスクの中から READY—タスクを選 択するポリシは以下の通りである。
1. WAIT—タスクであること (第 1条件)。
2. WAIT—タスクのうち、解放ミューテックスを待機ミューテックスとするタスクである こと (第 2条件)
3.そのようなタスクが複数存在するときには、最もタスク優先順位の高いタスクであ ること (第 3条件)。
4.最もタスク優先順位の高いタスクが複数存在するときには、 WAIT状態になった
時期が最も古 、タスクであること (第 4条件)。
このような 4つの条件のことを、まとめて「ミューテックス待機解除条件」とよぶことに する。
[0093] したがって、ウェイトミューテックスシステムコールおよびリリースミューテックスシステ ムコール実行時における本実施例のハードウェア RTOSの処理は以下の通りである 。セマフォテーブル 212には、ミューテックス IDと、そのミューテックスがいずれかのタ スクに占有されて ヽるか否かを示す占有状態データが対応づけて保持されて!、る。 占有状態データは、占有されていないときには「0」であり、占有されているときにはミ ユーテックスを占有して 、るタスクのタスク IDとなる。
<ウェイトミューテックスシステムコールの実行〉
[0094] ここでは、 RUN—タスクをタスク Jとして説明する。
A1.タスク切換回路 210は、ウェイトミューテックスシステムコールにおいて指定さ れたミューテックスが占有されている力検出する。以下、ミューテックスの占有状態に 応じて処理は分岐する。
(ミューテックスが占有されて 、な 、とき)
A2.タスク切換回路 210は、ミューテックスの占有データとして、システムコールを 実行したタスクのタスク IDを記録する。
A3.タスク Jのタスク状態レジスタ 258に「READY」を設定する。このとき、タスク切 換回路 210は、 RUN—タスクのタイマ 252をセットして READY経過時間の計測を 開始させる。
(ミューテックスが占有されて 、るとき)
A2.タスク切換回路 210は、タスク Jのタスク状態レジスタ 258に「WAIT」、待機理 由レジスタ 262に「ミューテックス待ち」、ミューテックス IDレジスタ 265に待機ミューテ ッタスのミューテックス IDをセットし、タイマ 252をセットして WAIT経過時間の計測を 開始させる。
くリリースミューテックスシステムコールの実行 >
[0095] B1.タスク切換回路 210は、システムコールを実行したタスク力 解放ミューテックス を占有していることを条件として、解放セマフォ IDをミューテックス回路 240に入力す
る。ミューテックス回路 240も、図 14と同じく多段接続された比較回路とミューテックス 待機解除条件のうちの第 1条件および第 2条件の成否を判定する判定回路を含む。 この判定回路は、このミューテックスを対象としてミューテックス待機条件のうちの第 1 条件および第 2条件が共に成立したときだけ「1」を出力する。なお、解放ミューテック スを占有しないタスクがリリースミューテックスシステムコールを実行したときには、そ のタスクの状態を RUN→READYに状態遷移させる。
(いずれかの判定回路が「1」を出力し、ミューテックス回路 240からいずれかのタスク I Dを出力したとき)
B2.検出されたタスクのタスク状態レジスタ 258に「READY」を設定し、待機理由 レジスタ 262とミューテックス IDレジスタ 265をクリアし、タイマ 252を READY経過時 間を計測させる。
B3.システムコールを実行したタスクのタスク状態レジスタ 258に「READY」に設 定し、 READY経過時間の計測を開始する。
(いずれの判定回路も「1」を出力せず、ミューテックス回路 240がいずれのタスク IDも 出力しないとき)
B2.タスク切換回路 210はセマフォテーブル 212において、ミューテックスを非占 有状態に設定する。
B3.システムコールを実行したタスクの状態を RUN→READYに状態遷移させる [イベント処理]
本実施例におけるイベント管理について簡単に説明する。イベントテーブル 214に は、イベント IDにフラグパターン(以下、「カレントフラグパターン」とよぶ)が対応づけ て記録される。フラグパターンは 8ビットのビットパターンである。
セットイベントシステムコールは、カレントフラグパターンを設定変更するシステムコ ールであり、イベント IDとフラグパターン(以下、「セットフラグパターン」とよぶ)をパラ メータとする。セットイベントシステムコールが実行されると、該当イベントについて、力 レントフラグパターンは、セットフラグパターンとの論理和に変更される。たとえば、力 レントフラグパターン「00001100」、セットフラグパターン「00000101」のときには、
カレントフラグパターンは、「00001101」となる。以下、各フラグパターンについて左 力ら第 0ビット、第 1ビット、 · · ·、第 7ビットとよぶ。
[0097] ウェイトイベントシステムコールは、待機イベントのカレントフラグパターンが所定条 件を満たすのを待っためのシステムコールであり、イベント 、フラグパターン(以下 、「待機フラグパターン」とよぶ)、フラグ条件をパラメータとする。ウェイトイベントシステ ムコールが実行されると、カレントフラグパターンと待機フラグパターンの間にフラグ 条件が成立する力判定される。フラグ条件は論理和 (OR)または論理積 (AND)であ る。フラグ条件が論理積 (AND)の場合、待機フラグパターンにおいて「1」となってい るすべてのビットについて、カレントフラグパターンの該当ビットも全て「1」であること が WAIT解除条件となる。フラグ条件が論理和 (OR)の場合、待機フラグパターンに お!、て「 1」となって!/、る!/、ずれかのビットにっ 、て、カレントフラグパターンの該当ビッ トが「1」であることが WAIT解除条件となる。たとえば、カレントフラグパターン「0000 1101」、待機フラグパターン「00000011」、フラグ条件「論理和(OR)」の場合、待 機フラグパターンの第 6ビットおよび第 7ビットのうち、カレントフラグパターンの第 7ビ ットが 1なので、この場合には、ウェイトイベントシステムコールによる WAIT解除条件 は成立する。一方、フラグ条件力 ^論理積 (AND)」の場合、カレントフラグパターンの 第 6ビットが「0」なので WAIT解除条件は成立しな!、。
[ 1 ]一般的なソフトウェア RTOSによるイベント処理
[0098] ウェイトイベントシステムコールおよびセットイベントシステムコール実行時における 一般的な RTOSの処理は以下の通りである。一般的な RTOSにおいては、イベント 管理のために、メモリ上にイベントテーブルを保持する。このイベントテーブルにおい ては、イベント ID、カレントフラグパターンだけではなぐ通常、そのイベントを待機ィ ベントとして WAIT状態にあるタスク(以下、「イベント待ちタスク」とよぶ)のタスク ID、 待機フラグパターン、フラグ条件が対応づけられて保持される。
<ウェイトイベントシステムコールの実行 >
[0099] Al. RTOSは、システムコ一ノレで指定されたイベントのカレントフラグパターンをィ ベントテーブルから読み出す。
A2.カレントフラグパターンと待機フラグパターンをフラグ条件にしたがって比較し
、 WAIT解除条件の成否を判定する。
(WAIT解除条件が成立するとき)
A3.システムコールを実行したタスクのタスク状態を RUN→READYに状態遷移 させる。
(WAIT解除条件が成立しな 、とき)
A3.イベントテーブルに、システムコールを実行したタスクのタスク IDを記録する。 A4.イベントテーブルに待機フラグパターンを記録する。
A5.イベントテーブルにフラグ条件を記録する。
A6.システムコールを実行したタスクのタスク状態を RUN→WAITに状態遷移さ せる。
くセットイベントシステムコールの実行 >
Bl. RTOSは、システムコールで指定された設定イベントについて、イベントテープ ルカもカレントフラグパターン、タスク ID、待機フラグパターン、フラグ条件を読み出す
B2.カレントフラグパターンとセットフラグパターンの論理和を新たなカレントフラグ パターンとして記録する。
(設定イベントについてイベント待ちタスクが存在しないとき、または、存在したとしても 待機フラグパターンとフラグ条件力も WAIT解除条件が成立しないとき)
B3.システムコールを実行したタスクのタスク状態を RUN→READYに状態遷移さ せる。
(設定イベントについてイベント待ちタスクが存在し、 WAIT解除条件が成立するとき )
B3.イベントを待機して 、たタスクのタスク状態を WAIT→READYに状態遷移さ せる。
B4.イベントテーブルにおける待機タスク ID、待機フラグパターン、フラグ条件をク リアする。
B5.システムコールを実行したタスクのタスク状態を RUN→READYに状態遷移さ せる。また、 RUN—タスクの選択が行われる。
[0101] セットイベントシステムコールが実行されるとき、複数の WAIT—タスクの中力も RE ADY—タスクを選択するポリシは以下の通りである。
1. WAIT—タスクであること (第 1条件)。
2. WAIT—タスクのうち、設定イベントを待機イベントとするタスクであること(第 2条 件)。
3.待機フラグパターンとカレントフラグパターン、フラグ条件を比較して WAIT解除 条件が成立するタスクであること (第 3条件)
このような 3つの条件のことを、まとめて「イベント待機解除条件」とよぶことにする。
[2]本実施例のハードウェア RTOSによるイベント処理
[0102] タスク処理装置 100のウェイトイベントシステムコールおよびセットイベントシステムコ ール実行時における処理は以下の通りである。タスク処理装置 100が内蔵するセマ フォテーブル 212においては、イベント IDとカレントフラグパターンが対応づけられて いる。待機タスク IDや待機フラグパターンなどの情報は、状態記憶部 220に格納され る。
<ウェイトイベントシステムコールの実行 >
[0103] A1.タスク切換回路 210は、イベントテーブル 214からカレントフラグパターンを読 み出す。
A2.タスク切換回路 210は、カレントフラグパターンと待機フラグパターンをフラグ 条件にしたがって比較し、 WAIT解除条件の成否を判定する。
(WAIT解除条件が成立するとき)
A3.システムコールを実行したタスクのタスク状態レジスタ 258に「READY」を設 定する。
(WAIT解除条件が成立しな 、とき)
A3.タスク切換回路 210は、システムコールを実行したタスクのタスク状態レジスタ
258 「WAIT」、待機理由レジスタ 262に「イベント待ち」、イベント IDレジスタ 266に 待機イベントのイベント ID、待機フラグレジスタ 268に待機フラグパターン、フラグ条 件レジスタ 270にフラグ条件をそれぞれ設定する。
くセットイベントシステムコールの実行 >
[0104] Bl.タスク切換回路 210は、イベントテーブル 214からカレントフラグパターンを読 み出すとともに、システムコールで指定された設定イベントのイベント IDをイベント選 択回路 236に入力する。
B2.タスク切換回路 210は、イベントテーブル 214のカレントフラグパターンにセット フラグパターンを論理加算する。
B3.イベント選択回路 236は、入力されたイベント IDについて、イベント待機条件 が成立するタスクを選択する。このとき、タスク優先順位や WAIT経過時間にかかわ らず複数のタスクが選択されてもょ ヽ。
(イベント待機解除条件を満たすタスクが存在するとき)
B4.イベント待ちタスクのタスク状態レジスタ 258に「READY」を設定し、イベント I Dレジスタ 266、待機フラグレジスタ 268、フラグ条件レジスタ 270をクリアする。
B5.システムコールを実行したタスクのタスク状態を RUN→READYに状態遷移さ せる。
(イベント待機解除条件を満たすタスクが存在しないとき)
B4.システムコールを実行したタスクのタスク状態を RUN→READYに状態遷移さ せる。
[タイムアウト処理]
[0105] WAIT状態に移行したタスクは、 WAIT解除条件が成立したときに READY状態に 遷移する。し力し、何らかの外的要因やアプリケーションプログラムのバグにより、 WA IT解除条件の成立が阻害されると、タスクは WAIT状態カゝら抜け出せなくなってしま う。そこで、通常、タスクを WAIT状態に遷移させるときにはタイムアウト値を設定する 。タイムアウト値は定期的にデクリメントされ、ゼロとなったときには、 WAIT解除条件 が成立して 、なくてもタスクは WAIT状態から READY状態に遷移する。すなわち、 タイムアウト値以上の時間、タスクが WAIT状態に止まるのを防止している。
[1]一般的なソフトウェア RTOSによるタイムアウト処理
[0106] ソフトウェアによる一般的な RTOSの場合、 WAIT状態のタスクの TCBにはタイムァ ゥト値が設定され、このタイムアウト値は定期的にデクリメントされる。 RTOSは周期的 に CPUの処理に割り込みをかけ、全 TCBをチェックし、タイムアウト値がゼロに至つ
た WAIT—タスクを検出する。このようなタスクが検出されたときには、 RTOSはその タスクのタスク状態を WAIT力 READYに状態遷移させる。
[2]本実施例のハードウェア RTOSによるタイムアウト処理
[0107] 一方、本実施例の場合、タスク切換回路 210は各タイムアウトカウンタ 274のタイム アウト値を定期的にデクリメントする。タイムアウト値は、 WAIT系システムコールを実 行する時にパラメータとして設定され、タスク切換回路 210はそのシステムコールを実 行したタスクのタイムアウトカウンタ 274にタイムアウト値を設定する。
[0108] タイムアウト値のデクリメント処理に CPU150が介在しないため、タスク切換回路 21 0がタスク実行処理とは独立してタイムアウト値を更新できる。そのため、 CPU150が タスクを実行して 、る最中にも、タスク制御回路 200にお 、て自律的にタイムアウト値 の更新がなされる。タイムアウト検出回路 238には状態データが常時入力されている ので、タイムアウト検出回路 238は、タイムアウトカウント値が更新されたタイミングとほ ぼ同じタイミングにて、タイムアウトカウント値がゼロとなったタスクを検出できる。タイム アウト検出回路 238は、そのようなタスクのタスク IDを出力する。タスク切換回路 210 は、タイムアウト検出回路 238からタスク IDを入力されると、タイムアウトが発生したと 認識し、 HCをアサートして CPUクロックを供給停止させる。タスク制御回路 200は、 タイムアウトが発生した WAIT—タスクを READY状態に遷移させるとともに、 RUN— タスクを READY状態に遷移させる。タスク切換回路 210は、 READY—タスクの中 力も次に実行すべきタスクを選択する。また、タスク切換回路 210は、タイムアウトが 発生したタスクのタイマ 252をリスタートさせ、 READY経過時間を計測させる。
[0109] このような処理方法によれば、タスクの実行中、すなわち、 CPUクロックの動作中に タイムアウトが発生したときに、即時的に CPU150に割り込みをかけて、タスクスイツ チを実行できる。また、タスクの実行中において、タスク切換回路 210は CPU150の 処理能力を借りることなく独立してタイムアウト値の更新処理を実行できる。
[有限ステートマシンとしてのタスク切換回路 210]
[0110] 図 15は、タスク切換回路 210の状態遷移図である。
初期化処理 (A1)においては、全タスク力 DLE状態にある。初期化処理が完了す ると(S10)、いずれかのタスクが RUN—タスクとなりタスク実行状態 (A2)となる。割り
込み要求信号が検出されると(S12)、特殊タスクが RUN—タスクとなり、割り込み処 理 (A3)が実行される。割り込み処理が終了すると(S 14)、タスク切換回路 210は、 一般タスク力 RUN—タスクを選択し、 A2に遷移する。
[0111] また、タスク実行中(A2)において、システムコールが実行されると(S 16)、システム コール処理が実行される(A4)。タスクスィッチ、すなわち、 RUN—タスクの切り換え が発生しない場合には(S18)、 A2に戻る。一方、システムコール処理 (A4)により、 タスクスィッチが発生する場合には(S20)、タスク切換回路 210は実行選択回路 232 の出力に基づいて RUN—タスクの選択を行う(A5)。タスクスィッチが完了すると(S2 2)、処理状態は A2に移行する。
最後に、タスク処理装置 100の主要素である退避回路 120とタスク制御回路 200の うち一方のみを実装する場合にっ 、て付言する。
[タスク制御回路 200を搭載しな 、タイプのタスク処理装置 100]
[0112] 図 16は、図 5のタスク処理装置 100のうち、タスク制御回路 200を搭載しないタスク 処理装置 100の回路図である。
タスク制御回路 200を搭載しない代わりに、レジスタ切換制御回路 322と処理デー タ保持部 320を追加している。タスク制御回路 200を搭載しないため、タスクスケジュ 一リング機能はソフトウェア RTOSにより実現される。したがって、 RTOSはタスクスィ ツチに際して、 CPU150の使用権を一時的に取得する必要が生じる。処理データ保 持部 320は、通常、 RTOSのための処理データを保持する。 RTOSが CPU150の 使用権を取得するときには、処理データ保持部 320は処理データ保持部 320にある RTOS用の処理データと特殊レジスタ 156のタスク用の処理データを入れ替える。以 下、タスク Aからタスク Bへタスクスィッチするとして、その処理過程を説明する。
[0113] A1.タスク Aがシステムコール実行するとき、システムコールの変数やシステムコ一 ルの IDを汎用レジスタ 158の一部に記録する。
A2.レジスタ切換制御回路 322は、タスク Aの処理データを処理データ保持部 32 0に移動させ、処理データ保持部 320の RTOS用処理データを処理レジスタ 154〖こ ロードする。この段階で、 RTOSが CPU150の使用権を取得する。
A3.レジスタ切換制御回路 322は、退避レジスタ 110aに書き込み信号を入力し、
処理データ保持部 320のタスク A用処理データを退避レジスタ 110に退避させる。
A4. RTOSは、汎用レジスタ 158に記録されているシステムコールの変数や IDに 基づき、システムコールに対応する処理を実行する。また、タスク Aの TCBのタスク状 態データを「READY」に設定し、タスクレディリストにタスク Aの TCBを追加する。
[0114] B1.次に、 RTOSは先述した RUNタスク選択条件にしたがって、 RUN—タスク、こ こでは、タスク Bを選択する。
B2. RTOSはレジスタ切換制御回路 322に指示して、タスク Bを指定したタスク選 択信号をロード選択回路 112に入力させる。退避レジスタ 110bから処理データ保持 部 320に処理データが移動される。
B3. レジスタ切換制御回路 322は、処理データ保持部 320のタスク B用処理データ と処理レジスタ 154の RTOS用処理データを入れ替える。これにより、タスク Bが CPU 150の使用権を取得する。
[0115] このような処理方法によれば、タスク制御回路 200を搭載する図 5のタスク処理装置 100に比べて、タスク処理装置 100全体としての回路サイズをコンパクトにできる。 RT OSはソフトウェアとして実現される力 処理データのロード'退避はレジスタ切換制御 回路 322からの信号によってハードウェア制御できる。処理レジスタ 154、処理デー タ保持部 320、ロード選択回路 112、退避レジスタ 110をそれぞれつなぐバスは処理 データをパラレル転送可能なビット数に設定すれば、 TCBへの処理データの退避や TCBからの処理データのロードに比べて高速なタスクスィッチが可能となる。
[退避回路 120を搭載しな 、タイプのタスク処理装置 100]
[0116] 図 17は、図 5のタスク処理装置 100のうち、退避回路 120を搭載しないタスク処理 装置 100の回路図である。
退避回路 120を搭載しな 、代わりに、割込インタフェース回路 324を追加して 、る。 退避回路 120を搭載しないため、処理データはメモリの TCBに退避される。処理デ ータの退避'ロードに関してはソフトウェアベースの RTOSにより実現される。したがつ て、 RTOSはタスクスィッチに際して、 CPU150の使用権を一時的に取得する必要 力 S生じる。以下、タスク Aカゝらタスク Bへタスクスィッチするとして、その処理過程を説 明する。
[0117] システムコールの実行によりタスクスィッチが発生すると、まず、ソフトウェア RTOS がタスク Aの処理データをタスク Aの TCBに退避させる。そして、 RTOS用の処理デ ータを処理レジスタ 154にロードする。このときの処理方法は、図 3に関連して説明し た内容と同等となる。
[0118] ソフトウェア RTOSは、割込インタフェース回路 324にシステムコールのパラメータを 書き込む。実行制御回路 152は、 CPU150の CPUクロックを停止させる。割込インタ フェース回路 324は、タスク制御回路 200にタスクスィッチを実行させる。タスク切換 回路 210は、まず、タスク Aのタスク状態レジスタ 258を READYに設定し、タスク選 択回路 230からの出力により次の RUN—タスクであるタスク Bを選択する。タスク切換 回路 210は、割込インタフェース回路 324に指示してタスク Bの処理データをロードを 指示する。ここで、割込インタフェース回路 324は実行制御回路 152に CPUクロック を再開させる。また、割込インタフェース回路 324は、タスク Bが選択された旨をソフト ウェア RTOSに通知する。ソフトウェア RTOSは、タスク Bの TCBにアクセスし、タスク Bの処理データを処理レジスタ 154にロードする。
[0119] このような処理方法によっても、退避回路 120を搭載する図 5のタスク処理装置 100 に比べて、タスク処理装置 100全体としての回路サイズをコンパクトにできる。 RTOS の機能の一部はソフトウエアとして実現される力 タスク選択処理はタスク制御回路 2 00により実現できる。
[0120] 図 2および図 3に関連して説明したソフトウェア RTOSに比べて、図 16および図 17 のタスク処理装置 100は、 V、ずれも RTOSの機能の一部をハードウェア化することが できる。図 16に関連して説明したように、退避回路 120が存在することによって、処 理データの退避 ·ロードのために TCBにアクセスする必要がなくなる。このため、レジ スタ切換制御回路 322により処理データの退避'ロード処理を実行可能となっている 。また、図 17に関連して説明したように、タスク制御回路 200が存在することによって 、ソフトウエア RTOSはタスク選択機能をタスク制御回路 200に委譲できる。
[0121] 図 5に関連して説明したように、退避回路 120とタスク制御回路 200を搭載するタス ク処理装置 100の場合、 RTOSのタスクスケジューリング機能を完全にハードウェア 化できる。タスクスィッチに際してメモリの TCBにアクセスする必要性がなくなるため、
タスクスィッチ処理力 Sいっそう高速ィ匕される。本発明者らの実験によると、図 3等に関 連して説明した一般的なソフトウェア RTOSに比べて、本実施例におけるタスク処理 装置 100は約 100倍の速度で動作することが確認されている。
[0122] 以上、本発明を実施例をもとに説明した。実施の形態は例示であり、それらの各構 成要素や各処理プロセスの組合せに 、ろ 、ろな変形例が可能なこと、またそうした変 形例も本発明の範囲にあることは当業者に理解されるところである。
[0123] 請求項に記載のセレクタ回路の機能は、本実施例においてはロード選択回路 112 により実現されている。
このほかにも、請求項に記載の各構成要件が果たすべき機能は、本実施例におい て示された各機能ブロックの単体もしくはそれらの連係〖こよって実現されることも当業 者には理解されるところである。
[0124] 以上の実施の形態および変形例から把握される発明の!/、ろ 、ろな態様をすでに特 許請求の範囲に記載したものも含む形にて以下に例示する。タスク制御回路 200の 特徴に関連し、以下の発明が認識される。
[0125] C1.タスク実行のためのデータを一時的に保持する処理レジスタと、
命令(instruction)およびオペランドをメモリ力 前記処理レジスタにロードし、前記 処理レジスタの命令とオペランドにしたがってタスクを実行する実行制御回路と、 タスクスケジューリングのためのタスクごとの状態データを保持するレジスタであって
、複数のタスクに対してそれぞれ対応づけられる複数の状態レジスタと、
タスクの切り換えを実行するタスク切換回路と、
複数の前記状態レジスタからパラレルに出力される状態データを入力として、所定 の選択条件によりタスクを選択するタスク選択回路と、を備え、
前記実行制御回路は、システムコール命令を実行するとき、所定のシステムコール 信号を前記タスク切換回路に送信し、
前記タスク選択回路は、前記所定のシステムコール命令の有無によらず、実行可 能に待機して ヽる状態を示す READY (レディ)状態のタスクの中から実行対象となる タスクを選択し、
前記タスク切換回路は、前記システムコール信号を受信したときの前記タスク選択
回路からの出力により次の実行対象となるタスクを選択し、前記処理レジスタのデー タを所定の記憶領域に退避させるとともに、実行中のタスクに対応する前記状態レジ スタの状態データをタスク実行中を示す RUN (ラン)状態から READY状態に設定変 更し、選択したタスクにっ 、て前記記憶領域に退避されて 、たデータを前記処理レ ジスタにロードするとともにそのタスクに対応する前記状態レジスタの状態データを R
EADY状態カゝら RUN状態に変更することにより、実行対象となるタスクを切り換える ことを特徴とするタスク処理装置。
[0126] C2.前記タスク選択回路は、多段階に接続される比較回路を内蔵し、
第 1段の比較回路が、 2以上のタスクの状態データを前記所定の選択条件により比 較して、いずれかのタスクの状態データを第 2段の比較回路に出力し、
第 n (nは 2以上の自然数)段の比較回路が、第 (n— 1)段に位置する複数の比較回 路から出力された状態データを前記所定の選択条件により比較して、いずれかのタ スクの状態データを出力することにより、
最後段の比較回路により特定されたタスクを実行対象として選択することを特徴と する C1に記載のタスク処理装置。
[0127] C3.第 k(kは自然数)段の比較回路は、入力された状態データがいずれも前記所 定の選択条件を満たさないときには、いずれのタスクの状態データも出力しないこと を特徴とする C2に記載のタスク処理装置。
[0128] C4.前記状態レジスタは、状態データの一部としてタスク優先度を保持し、
前記タスク選択回路は、タスク切り換えに際して READY状態のタスクが複数あると きには、それらのタスクのうちタスク優先度が最も高いタスクを実行対象として選択す ることを特徴とする C1に記載のタスク処理装置。
[0129] C5.前記タスク選択回路は、タスク切り換えに際して READY状態のタスクが複数 存在し、かつ、それらのタスクのうちタスク優先度が最も高く設定されているタスクも複 数存在するときには、それらのタスクのうち READY状態に設定されて力ゝらの経過時 間が最も長いタスクを実行対象として選択することを特徴とする C4に記載のタスク処 理装置。
[0130] C6.複数のタスクに対してそれぞれ対応づけられる複数のタイマを更に備え、
前記タスク切換回路は、タスクを READY状態に設定するとき、そのタスクについて のタイマをセットして経過時間の計測を開始させることを特徴とする C5に記載のタス ク処理装置。
[0131] C7.セマフォ IDとセマフォカウンタを対応づけて保持するセマフォ情報保持部を更 に備え、
前記実行制御回路力 セマフォを要求するためのシステムコール命令であるウェイ トセマフォ命令をセマフォ IDを指定して実行する場合において、
前記タスク切換回路は、指定されたセマフォのセマフォカウンタが 1以上のときには セマフォカウンタをデクリメントした上で前記ウェイトセマフォ命令を実行したタスクの 状態データを READY状態に設定し、セマフォカウンタが 0以下のときには前記ゥヱ イトセマフォ命令を実行したタスクを所定条件が成立するまで実行できない状態を示 す WAIT (ゥヱイト)状態に設定するとともに、そのタスクの WAIT状態解除の条件とし て前記指定されたセマフォ IDを前記状態レジスタに設定し、
前記実行制御回路力 セマフォを解放するためのシステムコール命令であるリリー スセマフォ命令をセマフォ IDを指定して実行する場合において、
前記タスク選択回路は、指定されたセマフォ IDにつ 、て WAIT状態にあるタスクの うち、いずれかのタスクを所定の選択条件にしたがって選択し、
前記タスク切換回路は、前記タスク選択回路によりいずれかのタスクが選択されたと きにはそのタスクの状態データを READY状態に設定し、いずれのタスクも選択され な力つたときには前記指定されたセマフォのセマフォカウンタをインクリメントすること を特徴とする C1に記載のタスク処理装置。
[0132] C8.イベント IDと第 1のフラグパターンを対応づけて保持するイベント情報保持部 を更に備え、
前記実行制御回路力 イベントの成立を待ち合わせるためのシステムコール命令 であるウェイトイベント命令をイベント IDと第 2のフラグパターンを指定して実行する場 合において、
前記タスク切換回路は、指定されたイベントについて第 1のフラグパターンと第 2の フラグパターンとの間で所定の演算条件が成立するときには、前記ウェイトイベント命
令を実行したタスクの状態データを READY状態に設定し、成立しな 、ときには前記 ウェイトイベント命令を実行したタスクを所定条件が成立するまで実行できない状態を 示す WAIT状態に設定するとともにそのタスクの WAIT状態解除の条件として前記 指定されたイベント IDと第 2のフラグパターンを前記状態レジスタに設定し、
前記実行制御回路が、第 1のフラグパターンを設定するためのシステムコール命令 であるセットイベント命令をイベント IDと第 3のフラグパターンを指定して実行する場 合において、
前記タスク切換回路は、指定されたイベントについて第 1のフラグパターンに第 3の フラグパターンを論理加算し、
前記タスク選択回路は、前記指定されたイベント IDにつ 、て WAIT状態にあるタス クを選択し、
前記タスク切換回路は、前記タスク選択回路によりいずれかのタスクが選択されたと きには、そのタスクの前記状態レジスタに保持されている第 2のフラグパターンと第 1 のフラグパターンとの間で前記所定の演算条件が成立することを条件として、選択さ れたタスクを WAIT状態から READY状態に設定変更することを特徴とする C1に記 載のタスク処理装置。
[0133] C9.前記状態レジスタは、状態データの一部としてタイムアウトカウンタを保持し、 前記実行制御回路がタイムアウト条件つきのシステムコール命令を実行する場合に おいて、
前記タスク切換回路は、前記タイムアウト条件つきのシステムコール命令を実行した タスクの状態データを WAIT状態に設定するとともにタイムアウトカウンタの更新を開 始させ、
前記タスク選択回路は、 WAIT状態にあるタスクのうち、タイムアウトしたタスクを検 出し、
前記タスク切換回路は、タイムアウトしたタスクの状態データを WAIT状態から REA DY状態に設定変更することを特徴とする C1に記載のタスク処理装置。
[0134] C10.ミューテックス IDとミューテックスの取得状態を対応づけて保持するミューテツ タス情報保持部を更に備え、
前記実行制御回路力 ミューテックスを要求するためのシステムコール命令である ウェイトミューテックス命令をミューテックス IDを指定して実行する場合において、 前記タスク切換回路は、指定されたミューテックスが非占有状態のときには占有状 態に設定変更して前記ウェイトミューテックス命令を実行したタスクの状態データを R EADY状態に設定し、占有状態のときには前記ウェイトミューテックス命令を実行し たタスクを所定条件が成立するまで実行できない状態を示す WAIT状態に設定する とともにそのタスクの WAIT状態解除の条件として前記指定されたミューテックス IDを 前記状態レジスタに設定し、
前記実行制御回路力 ミューテックスを解放するためのシステムコール命令であるリ リースミューテックス命令をミューテックス IDを指定して実行する場合において、 前記タスク選択回路は、指定されたミューテックス IDにつ 、て WAIT状態にあるタス クのうち、いずれかのタスクを所定の選択条件にしたがって選択し、
前記タスク切換回路は、指定されたミューテックスを非占有状態に設定し、前記タス ク選択回路によりいずれかのタスクが選択されたときには選択されたタスクの状態デ ータを READY状態に設定することを特徴とする C1に記載のタスク処理装置。
[0135] C11.前記処理レジスタのデータを退避させるためのレジスタであって、複数のタス クに対してそれぞれ対応づけられる複数の退避レジスタを更に備え、
前記タスク切換回路は、前記所定のシステムコール信号を受信すると、実行中のタ スクに対応づけられている前記退避レジスタに前記処理レジスタのデータを退避させ 、前記タスク選択回路により選択されたタスクに対応づけられて ヽる前記退避レジス タのデータを前記処理レジスタにロードすることを特徴とする C1に記載のタスク処理 装置。
産業上の利用可能性
[0136] 本発明によれば、マルチタスク処理にぉ 、て、より効率的なタスクの実行制御が実 現される。