JP4119945B2 - タスク処理装置 - Google Patents

タスク処理装置 Download PDF

Info

Publication number
JP4119945B2
JP4119945B2 JP2007538204A JP2007538204A JP4119945B2 JP 4119945 B2 JP4119945 B2 JP 4119945B2 JP 2007538204 A JP2007538204 A JP 2007538204A JP 2007538204 A JP2007538204 A JP 2007538204A JP 4119945 B2 JP4119945 B2 JP 4119945B2
Authority
JP
Japan
Prior art keywords
task
register
processing
data
executed
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
Application number
JP2007538204A
Other languages
English (en)
Other versions
JPWO2008023426A1 (ja
Inventor
修孝 丸山
Original Assignee
ネットクリアスシステムズ株式会社
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ネットクリアスシステムズ株式会社 filed Critical ネットクリアスシステムズ株式会社
Application granted granted Critical
Publication of JP4119945B2 publication Critical patent/JP4119945B2/ja
Publication of JPWO2008023426A1 publication Critical patent/JPWO2008023426A1/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30079Pipeline control instructions, e.g. multicycle NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Description

この発明は、OS(Operating System)の機能に関し、特に、タスクスケジューリング技術に関する。
パーソナルコンピュータのような汎用機器用のOSに限らず、携帯電話のような専用機器用のOSにも高度な機能が求められつつある。特に、1つのCPU(Central Processing Unit)で複数のタスクを実行可能なOS(以下、このようなタイプのOSのことを「マルチタスクOS」ともよぶ)が多くの電子機器に搭載されるようになってきている。
マルチタスクOSは、CPUの処理時間を単位時間(タイムスライス)に分割し、複数のタスクにタイムスライスを順番に割り当てる。各タスクは、OSからタイムスライスを与えられたときだけCPUを使用できる。各タイムスライスにおいては一つのタスクが実行される。タイムスライスはユーザからみて非常に短い時間なので、複数のタスクはあたかも同時実行されているかのようにみえる。このような処理方法によれば、タスクAが入力待機状態に至りCPUの処理能力を当面必要としなくなったとき、別のタスクBに実行権を与えることでCPUの処理能力を有効活用できる。ここでいう実行権とは、CPUの使用権と同義である。
マルチタスクOSがタスクの実行権の切り換えることを「タスクスイッチ」とよぶ。タスクスイッチは、タイムスライスが経過したときや、タスクが所定命令を実行したときに発生する。マルチタスクOSは、タスクスイッチの実行タイミングに至ると、実行中のタスクのコンテキスト情報をTCB(Task Control Block)に退避させる。コンテキスト情報とは、タスク実行時においてCPUのレジスタに格納されていたデータやタスクの実行状態に関するデータである。TCBとは、タスク固有の情報を保持するためにメモリに確保される領域である。マルチタスクOSは、実行中のタスクのコンテキスト情報をTCBに退避させたあと、次に実行権を割り当てるタスクを選択し、そのタスクのTCBからコンテキスト情報を読み出して、CPUレジスタにロードする。このようにして、各タスクはタイムスライスを単位として少しずつ自己の処理をすすめていく。
マルチタスクOSは、複数のタスクを効率的に実行できるというメリットがあるが、コンテキスト情報の退避・ロードというオーバーヘッドが新たに発生するというデメリットもある。通常、マルチタスクOSのメリットはタスクスイッチにともなうオーバーヘッドを補って余りある。
特開平11−272480号公報 特開2001−75820号公報 森久直、坂巻佳壽美、重松宏志、「組込み制御システム向けリアルタイムOSのハードウェア化(Hardware implementation of a read-time operating system for embedded control system)」、東京都立産業技術研究所研究報告、日本、2005年8月4日(原稿受付)、8、p.55−58
近年においては、決められた時間内に処理が完了することを厳密に要求するリアルタイムOS(以下、「RTOS(Real-Time Operating System)」)が組込システム(Enbeded System)を中心として普及しつつある。このような時間的要件の厳しいRTOSにおいては、タスクスイッチ時のオーバーヘッドがシステム全体のパフォーマンスに大きく影響することがある。本発明者は、マルチタスク処理をいっそう効率化するためには、タスクスイッチにともなうオーバーヘッドを抑制する必要があると認識した。
本発明は、上記課題に鑑みてなされたものであり、その主たる目的は、マルチタスク処理において、より効率的にタスクを実行制御するための技術、を提供することにある。
本発明のある態様は、タスク処理装置である。
この装置は、処理レジスタと、メモリから処理レジスタにデータをロードし、処理レジスタのデータにしたがってタスクを実行する実行制御回路と、複数のタスクに対してそれぞれ対応づけられる複数の退避レジスタと、タスク制御回路を備える。
実行制御回路は、所定のシステムコール命令を実行するとき、その旨をタスク制御回路に通知する。
タスク制御回路は、システムコール命令の実行を通知されると、実行中のタスクに対応づけられている退避レジスタに処理レジスタのデータを退避させ、次に実行すべきタスクを選択し、選択したタスクに対応づけられている退避レジスタのデータを処理レジスタにロードすることにより、実行対象となるタスクを切り換える。
処理レジスタにロードされるデータは、命令(instruction)とオペランド、オペランドを持たない命令、あるいは、プログラムカウンタやスタックポインタのような単純なデータであってもよい。このような処理方法によれば、タスクごとに対応づけられている退避レジスタと、実行用の処理レジスタの間でコンテキスト情報を適宜入れ替えることで、コンテキスト情報の退避およびロードが可能となる。処理レジスタのデータの退避・ロードのためのTCBへのアクセスが実質的に不要となるため、高速なタスクスイッチが実現される。
なお、以上の構成要素の任意の組合せ、本発明を方法、システム、記録媒体、コンピュータプログラムにより表現したものもまた、本発明の態様として有効である。
本発明によれば、マルチタスク処理において、より効率的なタスクの実行制御が実現される。
タスクの状態遷移図である。 一般的なRTOSの概念図である。 ソフトウェアRTOSが実行される一般的なCPUの回路図である。 本実施例におけるRTOSの概念図である。 本実施例におけるタスク処理装置の回路図である。 図5のCPUの回路図である。 実行制御回路152がCPUクロックを停止させる仕組みを示す回路図である。 割り込み要求信号発生時における各種信号の関係をを示すタイムチャートである。 システムコール実行時における各種信号の関係を示すタイムチャートである。 パイプライン処理におけるCPUクロックの停止タイミングを説明するための模式図である。 状態記憶部とタスク切換回路の関係を示す回路図である。 一般的なRTOSによるRUN−タスク選択に際して利用されるタスクレディリストを示す図である。 実行選択回路の回路図である。 一般的なRTOSによるセマフォ処理において利用されるウェイトセマフォリストを示す図である。 セマフォ選択回路の回路図である。 タスク切換回路の状態遷移図である。 図5のタスク処理装置のうち、タスク制御回路を搭載しないタスク処理装置の回路図である。 図5のタスク処理装置のうち、退避回路を搭載しないタスク処理装置の回路図である。
本実施例に示すタスク処理装置100は、マルチタスクOSのタスクスケジューリング機能を電子回路により実現している。タスク処理装置100の詳細を説明する前に、まず図1に関連してタスクの状態遷移について説明する。ここでは一般的なマルチタスクOSにおけるタスクの状態遷移として説明するが、タスク処理装置100によるタスクの状態遷移についても同じである。また、タスク処理装置100において実行されるシステムコールについても概説する。図2および図3に関連して一般的なマルチタスクOSの設計思想について述べた上で、図4から図10に関連して、本実施例におけるタスク処理装置100の処理方法について詳述する。更に、セマフォ(Semaphore)やミューテックス(Mutex)、イベントなどに関する処理についても、適宜、一般的な技術と比較しながらタスク処理装置100の特徴を説明していく。
[タスクの状態遷移]
図1は、タスクの状態遷移図である。
マルチタスク処理において、各タスクは「状態(ステート)」を持つ。各タスクは、後述する複数の状態間を遷移し、常に、いずれかの状態となっている。状態遷移の契機となるのは、「システムコールの実行」と「割り込み要求信号の検出」である。システムコールとは各タスクが実行する命令のうちの特別な命令である。割り込み要求信号とは、キーボードの押下やマウスのクリック、通信データの受信など、周辺機器から所定データを受け取ったときに発生する信号である。もちろん、各タスクに割り当てられるタイムスライスが消費されたときにも状態遷移が発生する。
タスクは「一般タスク」と「特殊タスク」の2種類に大別される。一般タスクとは、システムコールを契機として実行される通常のタスクである。特殊タスクは、割り込み要求信号の検出を契機として実行されるタスクである。いわゆる割り込みハンドラである。まず、各タスク状態について述べた後、各種システムコール命令について説明する。
(1)STOP状態(休止状態)
タスクが休止状態にあることを示す。一般タスクも特殊タスクもSTOP状態となり得る。以下、STOP状態にあるタスクのことを「STOP−タスク」とよぶ。
1−1.一般タスク
他のタスクが別のタスクの起動を指示するシステムコール(以下、「起動システムコール」とよぶ)を実行すると、STOP状態にある一般タスクは後述のREADY状態に遷移する。
1−2.特殊タスク
特殊タスクは、通常、STOP状態にある。後述のタスク切換回路210により割り込み要求信号が検出されると、特殊タスクはSTOP状態から後述のRUN状態に遷移する。このときRUN状態にあったタスクは入れ替わりにREADY状態に遷移する。
(2)RUN状態(実行状態)
タスクが実行中であることを示す。すなわち、タスクがタイムスライスを割り当てられ、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状態のみである。
(3)READY状態(実行可能状態)
タスクが実行可能な状態にあることを示す。READY状態にあるタスクは、OSから実行権を与えられればいつでもRUN状態に遷移できる。一般タスクのみREADY状態となり得る。以下、READY状態にあるタスクのことを「READY−タスク」とよぶ。
RUN状態にある一般タスクがシステムコールの実行によりRUN状態以外の状態に遷移するとき、または、RUN状態にある特殊タスクが自らの処理を終了してSTOP状態に遷移するとき、READY−タスクが入れ替わりにRUN状態に遷移する。一般タスクは、READY状態からのみRUN状態に遷移する。READY状態にあるタスクが複数存在するときには、コンテキスト情報の一部であるタスク優先順位に基づいて、いずれか一つのREADY−タスクがRUN状態に遷移する。タスク優先順位が同じとなるREADY−タスクが複数存在するときには、READY状態に移行したのが最も古いタスクがRUN状態に遷移する。
(4)WAIT状態(待機状態)
タスクが所定のWAIT解除条件の成立を待っている状態を示す。WAIT解除条件が成立すると、WAIT状態にあるタスクはREADY状態に遷移する。一般タスクのみWAIT状態となり得る。以下、WAIT状態にあるタスクのことを「WAIT−タスク」とよぶ。WAIT解除条件に関しては後に詳述する。
以上をまとめると、各タスクはRUN状態にあるときだけCPUを使って自らの処理を進めることができる。RTOSは、複数のタスクの状態を管理しながら、適宜、RUN−タスクを切り換える。これにより、CPUが常時いずれかのタスクを実行する処理形態が実現される。
[システムコール]
次に、システムコールについて付言しておく。システムコールは、「起動系」、「WAIT系」、「SET系」の3種類に大別される。
(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の設計思想]
図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のことを「ソフトウェアRTOS」とよぶ。
図3は、ソフトウェアRTOSが実行される一般的なCPUの回路図である。
CPU84は、メモリアクセスや命令の実行等を統括的に制御する実行制御回路90と、タスクのコンテキスト情報など各種データを格納する処理レジスタ92、演算を実行する演算回路94を含む。処理レジスタ92は複数種類のレジスタの集合であり、特殊レジスタ88と汎用レジスタ86に大別される。特殊レジスタ88は、プログラムカウンタ、スタックポインタ、フラグ等を保持するレジスタである。汎用レジスタ86は、作業用のデータを保持するレジスタであり、R0〜R15までの計16レジスタを含む。特殊レジスタ88は、ユーザ用とシステム用の2面が存在するが、汎用レジスタ86は一面のみである。以下、処理レジスタ92に格納されるデータのことを「処理データ」とよぶ。
実行制御回路90は、出力セレクタ98に対する制御信号(CTRL)により、処理レジスタ92のうちの所望のレジスタの処理データを演算回路94に出力させる。演算回路94は、処理データ、すなわち、命令や変数にしたがって演算を実行する。演算結果は入力セレクタ96へ出力される。実行制御回路90は、入力セレクタ96に対する制御信号(CTRL)により、処理レジスタ92のうちの所望のレジスタに演算結果を入力する。
また、実行制御回路90は、CPUデータバスを介してメモリからデータを読み出し、入力セレクタ96を介して処理レジスタ92に適宜ロードする。実行制御回路90は、同じくCPUデータバスを介して処理データをメモリに適宜記録する。実行制御回路90は、特殊レジスタ88のプログラムカウンタを更新しながら、タスクを実行する。
タスクスイッチが発生するときには、実行制御回路90は処理データをメモリ上の領域であるTCBに退避させる。仮にタスクAがシステムコールを実行し、タスクAからタスクBへのタスクスイッチが発生したとする。RTOSはシステムコール実行を契機としてCPUの使用権を取得するので、CPU84は一時的にRTOS用のプログラムにしたがって動作することになる。その処理過程は以下の通りである。
<タスクAのコンテキスト情報の退避>
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のコンテキスト情報のロード>
1.RTOSは、メモリからタスクBのTCBを検出し、TCBのコンテキスト情報をスタックとユーザ用特殊レジスタ88に書き込む。RTOSは、タスクBが「READY」から「RUN」に状態遷移したことをタスクBのTCBに記録する。
2.RTOSは、RTOS処理用のデータを汎用レジスタ86から図示しない記録媒体に退避させる。
3.実行制御回路90は、スタックのコンテキスト情報を汎用レジスタ86にロードする。実行制御回路90は、特殊レジスタ88をシステム用からユーザ用に切り換える。こうして、タスクBの処理データが処理レジスタ92にロードされる。
以上のような処理過程を経て、タスクスイッチが実現される。通常、汎用レジスタ86は一面構成のため、タスク用の処理データとRTOS用の処理データを切り換えるためにスタックを使っている。汎用レジスタ86も2面化すれば、スタックを介して退避・ロードする必要がなくなるため、より高速なタスクスイッチが可能である。
本実施例においては、更に、タスクごとに退避レジスタ110を設けることにより、いっそう高速なタスクスイッチを実現している。退避レジスタ110を使ったタスクスイッチについては図5に関連して詳述する。図3に関連して説明したCPU84と一般的なソフトウェアRTOSの場合、タスクスイッチに際して、頻繁にTCBへのアクセスが発生していることがわかる。上記設例では、タスクAからタスクBにタスクスイッチするという前提で説明したが、実際には、RTOSが次に実行すべきタスクBを選択するためにも多くの命令を実行する必要がある。このときにも、RTOSは頻繁にメモリにアクセスすることになる。本実施例におけるタスク処理装置100は、後述のタスク制御回路200がタスク選択処理を専用に実行するため、更に高速なタスクスイッチを実現している。
[タスク処理装置100によるRTOSのハードウェア化]
図4は、本実施例におけるRTOSの概念図である。
一般的なソフトウェアRTOSと異なり、本実施例におけるRTOSは、主として、CPUとは別個のハードウェアとして実現される。以下、ハードウェアによって実現されるRTOSのことを、「ハードウェアRTOS」とよぶ。本実施例のRTOSは、主として、CPUとは別個のハードウェアであるため、自らの処理を実行するためにはCPUの使用権を実質的にほとんど必要としない。いいかえれば、RTOSとタスクは、CPUの使用に関してほとんど競合関係にない。図2に示した一般的なソフトウェアRTOSの場合、CPUはタスク実行用回路であるとともに、RTOS実行用回路でもあった。これに対し、本実施例におけるハードウェアRTOSの場合、CPUはタスク実行回路として明確化され、タスクスケジューリング機能は後述の退避回路120とタスク制御回路200を中心として実現することができる。
図5は、本実施例におけるタスク処理装置100の回路図である。
タスク処理装置100は、CPU150に加えて退避回路120とタスク制御回路200を含む。CPU150はタスクの実行主体であり、退避回路120とタスク制御回路200が図4に示したRTOSの役割を担う回路である。タスクススケジューリング処理は、タスク制御回路200により主導される。
CPU150は、実行制御回路152、処理レジスタ154および演算回路160を含む。CPU150は、図3に関連して説明した一般的なCPUであってもよい。ただし、本実施例におけるCPU150は、図3に示したCPU84とは信号線の接続方法等が若干変更されている。具体的な回路構成については次の図6に関連して詳述する。
タスク制御回路200は、タスク切換回路210、セマフォテーブル212、イベントテーブル214、タスク選択回路230および状態記憶部220を含む。セマフォテーブル212とイベントテーブル214については、図13以降に関連して詳述する。状態記憶部220は、タスクごとに対応づけられたユニットである。以下、タスクAに対応する状態記憶部220のことを「状態記憶部220_A」のように表記する。各状態記憶部220は、タスクの状態データを保持する。状態データとは、コンテキスト情報のうち、特に、タスク優先順位や状態など、タスクの属性を示す情報である。具体的なデータの内容については、図10に関連して後述する。各状態記憶部220からは、全タスクの全状態データがタスク選択回路230に常時出力している。タスク選択回路230は、各タスクの状態データに基づいて、RUN−タスクの選択等、各種タスク選択を行う回路である。タスク選択回路230についても図10以降に関連して詳述する。タスク切換回路210は、実行制御回路152から受信するシステムコール信号(SC)や外部装置からの割り込み要求信号(INTR)を検出すると、タスクスイッチを実行する。
実行制御回路152はシステムコール実行時には、システムコール信号(SC)をタスク切換回路210に送信する。また、タスク切換回路210が割り込み要求信号(INTR)を検出したときには、タスク切換回路210は実行制御回路152に対して停止要求信号(HR)をアサートする。実行制御回路152は、CPU150の動作が停止しているときには停止完了信号(HC)をタスク切換回路210にアサートする。これら3種類の信号によって、CPU150とタスク制御回路200が連係動作することになる。
退避回路120は、ロード選択回路112および複数の退避レジスタ110を含む。退避レジスタ110も、タスクごとに対応づけられたユニットであり、処理レジスタ154の処理データを退避させるためのレジスタである。したがって、退避レジスタ110は、処理レジスタ154と同等以上のデータ容量を持つ。以下、タスクAに対応する退避レジスタ110のことを「退避レジスタ110_A」のように表記する。ロード選択回路112は、タスク切換回路210から指示されると、いずれかの退避レジスタ110のデータ(以下、退避レジスタ110が保持するデータのことを「退避データ」とよぶ)を処理レジスタ154にロードする。
各退避レジスタ110はそれぞれの退避データをロード選択回路112に常時出力する。タスク切換回路210がロード選択回路112にタスクIDを指定したタスク選択信号(TS)を入力すると、ロード選択回路112は指定されたタスクに対応する退避レジスタ110の退避データを処理レジスタ154に出力する。更に、タスク切換回路210が処理レジスタ154に対して書き込み信号(WT)を入力すると、その退避データは処理レジスタ154に実際にロードされる。
一方、処理レジスタ154の全処理データも全退避レジスタ110に常時出力されている。タスク切換回路210が所望の退避レジスタ110に対して書き込み信号(WT)をアサートすると、その退避レジスタ110に処理データが退避される。ここで、処理レジスタ154と各退避レジスタ110を接続するバスが一度に伝送可能なビット数は、処理データをパラレル転送できるように設定されている。そのため、タスク切換回路210は、退避レジスタ110に書き込み信号を一度送信するだけで、処理データを退避レジスタ110に一気に書き込むことができる。また、退避レジスタ110とロード選択回路112、ロード選択回路112とCPU150を接続するバスのビット数も同様に設定されている。
以下、システムコールと割り込み要求信号のそれぞれについてタスクスイッチの実行方法を説明する。
[1]システムコール実行
CPU150の実行制御回路152がシステムコールを実行するとき、実行制御回路152はCPU150のクロック(以下、「CPUクロック(CLK)」とよぶ)を停止させる。具体的な停止方法については、図7等に関連して後に詳述する。実行制御回路152は、システムコールの実行を示すシステムコール信号(SC)をタスク制御回路200のタスク切換回路210に送信する。また、CLKが停止完了すると、実行制御回路152は停止完了信号(HC)をタスク切換回路210にアサートする。
CPU150とタスク切換回路210の間には、システムコール信号伝送用に9本の信号線が接続されている。9本の信号線は先述した9種類のシステムコールに対応する。実行制御回路152は、実行されたシステムコールの種類に応じて、いずれかのシステムコール信号線にてデジタルパルスを伝送する。タスク切換回路210は、9本のシステムコール信号線のうち、どの信号線からデジタルパルスが検出されたかに応じて、即座に実行されたシステムコールの種類を検出できる。タスク切換回路210は、システムコールの種類に応じて、タスク選択回路230の出力データから必要なデータを選択し、システムコールにより指示された処理を実行する。この処理は、HCがアサートされたことを条件として実行される。タスク切換回路210とタスク選択回路230の関係については、図10に関連して詳述する。なお、システムコールのパラメータや戻り値は、処理レジスタ154のうち、所定の汎用レジスタ158に書き込まれる。タスク切換回路210は汎用レジスタ158に対してパラメータの読み出しや戻り値の書き込みを実行可能である。ここでは、RUN−タスクであるタスクAがウェイトセマフォシステムコールを実行したとする。したがって、まず、タスクAの処理データを退避させる必要がある。
<タスクAのコンテキスト情報の退避>
実行制御回路152は、ウェイトセマフォシステムコールを示すSC信号をタスク切換回路210に入力する。実行制御回路152はCLKを停止させ、停止が完了するとHCをアサートする。タスク切換回路210はタスク選択回路230に内蔵される各種選択回路のうち、後述のセマフォ選択回路234に対して待機対象となるセマフォのセマフォIDを出力した上で、次に実行すべきタスクBを選択する。タスク切換回路210は、状態記憶部220_Aに対して所定データを書き込む。たとえば、タスクAの状態として「RUN」から「READY」や「WAIT」に設定変更する。より具体的には、タスク切換回路210は、状態データのうちタスク状態を示すデータとして「WAIT」を全状態記憶部220に出力した上で、状態記憶部220_Aだけに書き込み信号(WT_A)を入力する。こうして、タスクAの状態が設定変更される。
次に、タスク切換回路210は、退避レジスタ110_Aに対して書き込み信号(WT)を出力する。処理レジスタ154の処理データは、常時、各退避レジスタ110に出力されているので、この書き込み信号(WT)によりタスクAの退避レジスタ110_Aに退避される。
<タスクBのコンテキスト情報のロード>
タスク切換回路210は、タスクAの状態データの変更、処理データの退避が完了すると、タスクBを指定したタスク選択信号(TS_B)をロード選択回路112に出力する。これにより、退避レジスタ110_Bの退避データが処理レジスタ154に出力される。タスク切換回路210は、処理レジスタ154に書き込み信号(WT)を出力すると、タスクBの退避データが処理レジスタ154にロードされる。また、タスク切換回路210は、タスクBの状態記憶部220に対して所定データを書き込む。たとえば、タスクBの状態を「READY」から「RUN」に設定変更する。以上の処理が完了すると、実行制御回路152はCPUクロックを再開させる。CPU150は、再開されたCPUクロックによりタスクBの実行を開始する。処理方法の更なる詳細については、図8(b)に関連して後述する。
[2]割り込み要求信号の発生
タスク切換回路210は周辺機器からの割り込み要求信号(INTR)を検出する。より具体的には、割り込み要求信号(INTR)は、図示しない割込コントローラからタスク切換回路210に送信される。割り込み要求信号(INTR)のレベルを示すパラメータは、割込コントローラが内蔵するレジスタに記録される。タスク切換回路210は実行制御回路152に停止要求信号(HR)をアサートし、実行制御回路152はCPUクロックを停止させる。システムコール実行時と同様、タスク切換回路210はRUN−タスクの処理データを退避レジスタ110に退避させる。次に、タスク切換回路210は特殊タスクを起動する。割り込み要求信号のパラメータにかかわらず起動される特殊タスクは1種類である。特殊タスクは、割込コントローラの内蔵レジスタからINTRのパラメータを読み出し、パラメータに応じた処理を実行する。特殊タスクが実行する処理は、セットイベントシステムコールやセットセマフォシステムコールの実行かもしれないし、一般タスクの起動かもしれない。パラメータによっては、特殊タスクは特段の処理を実行せずに終了するかもしれない。INTRのパラメータによってどのような処理を実行するかは特殊タスクの実装による。特殊タスクが実行終了すると、READY−タスクの中から次のRUN−タスクが選択される。
タスク切換回路210は、特殊タスクに対応した退避レジスタ110の処理データをCPU150にロードさせる。このような一般タスクから特殊タスクへの切り換えのために要する時間は、タスク制御回路200の動作クロックによってあらかじめ見積もることができる。HRを実行制御回路152にアサートしてからタスク切換回路210の動作クロックが所定クロック分経過すると、タスク切換回路210はCPUクロックの停止を解除するためにHRをネゲートする。実行制御回路152はHRをネゲートされるとCPUクロックを再開させる。このときには、タスク切換回路210によって一般タスクから特殊タスクへのタスクスイッチが完了している。処理方法の詳細については、図8(a)に関連して後述する。
いずれの場合においても、
(A)処理データの退避・ロード
(B)タスクの状態遷移およびRUN−タスクの選択
というタスクスイッチの中核となる処理をハードウェアにより実現している。(A)および(B)に関し、メモリ上のTCBにアクセスする必要がなくなることもタスクスイッチの高速化に寄与している。また、タスク処理装置100を実現するにあたり、CPU150については、CPUクロックを停止および再開する機能を追加するだけでよい。なお、これらの機能がすべてハードウェアによって実現されることは、本発明の範囲を限定するものではない。たとえば、(A)または(B)の主たる機能をハードウェアにより実現し、ハードウェアの機能を補助するためにRTOSの一部の機能をソフトウェアで実現してもよいことは当業者には理解されるところである。
図6は、図5のCPU150の回路図である。
図3のCPU84と異なり、処理レジスタ154は特殊レジスタ156と汎用レジスタ158共に一面だけの構成となっている。処理レジスタ154にはそれぞれロード選択回路112からの入力バス、退避レジスタ110への出力バス、タスク切換回路210からの書き込み信号(WT)用の信号線が追加されている。実行制御回路152は、出力セレクタ164に対する制御信号(CTRL)により、処理レジスタ92のうちの所望のレジスタのデータを演算回路160に入力する。演算結果は入力セレクタ162への入力となる。実行制御回路152は、入力セレクタ162に対する制御信号(CTRL)により、処理レジスタ154のうちの所望のレジスタに演算結果を入力する。実行制御回路152は、特殊レジスタ156のプログラムカウンタを更新しながら、タスクを実行する。
処理データは、メモリ上のTCBではなく退避レジスタ110に退避される。処理レジスタ154からは常時、各退避レジスタ110に処理データが出力されている。実際にどの退避レジスタ110にどのタイミングで処理データを退避させるかは、先述のようにタスク切換回路210によって制御される。
処理レジスタ154には、メモリ上のTCBではなく退避レジスタ110から退避データがロードされる。実際にどの退避レジスタ110の処理データをどのタイミングでロードするかは、先述のようにタスク切換回路210によって制御される。
処理レジスタ154とロード選択回路112、処理レジスタ154と退避レジスタ110を接続するバスは、一度に処理データをパラレル転送可能なビット数のバスである。そのため、タスク切換回路210による書き込み信号(WT)により、一度に読み出しや書き込みが可能となっている。一般的なソフトウェアRTOSは、タスクスイッチに際しては処理レジスタ154を一時的に占有する必要がある。これに対して、本実施例におけるハードウェアRTOSは、タスクスイッチ処理のための特別な処理データを処理レジスタ154にロードする必要がない。タスクAからタスクBの切り換えに際しては、タスクAの処理データを退避したあとにタスクBの処理データをロードするだけなので、処理レジスタ154をシステム用とユーザ用の2面分用意したり、スタックを介したデータの入れ替え処理を実行する必要がない。
図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)が停止する。
第1ANDゲート172の入力は、ORゲート176の出力とCPUビジー信号(CBUSY)で、後者は負論理である。CBUSYは、CPU150の内部サイクルを発生させる既知のステートマシンから出力される信号であり、CPU150が停止可能な状態にあるときに「1」となる信号である。たとえば、演算回路94が実行中の単一の命令またはロックされている複数の命令の最後の命令を完了させ、CPUが停止可能な状態になったとき、または、すでにCPUクロックの供給が停止されているときに「0」となる。
ORゲート176の入力は、命令復号器170の出力(SC_DETECT)とタスク切換回路210からの停止要求信号(HR)である。命令復号器170は、SC_DETECTを保持するラッチ回路を内蔵する。命令復号器170は、CPU150からフェッチされたデータ(FD)を入力とし、FDがシステムコール命令のときにSC_DETECT=1を出力する。内蔵ラッチ回路により、その後にFDが変化しても、命令復号器170はSC_DETECT=1を継続して出力する。命令復号器170にはタスク切換回路210の処理レジスタ154に対する書き込み信号(WT)も入力される。WTが0から1に変化するとき、先述したように退避データの処理レジスタ154へのロードが実行される。このWTは所定時間後に1から0に戻るパルス信号である。WTが1から0に変化するとき、命令復号器170のラッチ回路はリセットされ、命令復号器170はSC_DETECTをネゲートする。SC_DETECTと書き込み信号(WT)の関係については、図8(b)に関連して詳述する。本実施例における命令復号器170は、実行対象命令がシステムコールか否かを判定するために実行制御回路152に専用に設けられる装置である。変形例として、命令復号器170はCPU150のデコードステージを担当するCPUデコーダと共通化されてもよい。この場合、命令復号器170は、CPUデコーダに、復号したデータがシステムコール命令であったときにSC_DETECT=1を出力する機能を追加することにより実現できる。
割り込み要求信号(INTR)が発生したとき、タスク切換回路210は実行制御回路152に停止要求信号(HR)をアサートする。すなわち、ORゲート176の出力は、システムコールが実行されるか、停止要求信号(HR)がアサートされたときに「1」となる。
まとめると、システムコールが実行されるか割り込み要求信号が発生し、かつ、CPUビジー信号が「0」となったとき、第1ANDゲート172の出力は「1」となり、第2AND174からはCPUクロックが出力されなくなる。
図8(a)は、割り込み要求信号発生時における各種信号の関係をを示すタイムチャートである。
同図においては、まず、時刻tにおいて、タスク切換回路210は外部からの割り込み要求信号(INTR)を検出している。タスク切換回路210は、特殊タスクを実行させるため、実行制御回路152に停止要求信号(HR)をアサートする。入力タイミングtは、検出タイミングtとほとんど同時である。時刻tでは、CPU150のステートマシンは「タスク実行中」であり、CBUSY=1である。HR=1より、ORゲート176は「1」を出力するが、CBUSY=1ゆえにCPU150は停止しない。そのため、HR=1が入力されても、しばらくはCPUクロック(CLK)は原クロック(CLK0)に同期して出力される。
時間が経過し、時刻tにおいてCBUSY=0に変化している。すでにHR=1のため、第1ANDゲート172はHC=1を出力し、第2ANDゲート174から出力されるCPUクロックは0に固定される。一方、タスク切換回路210は、HCがアサートされたことを契機として、一般タスクから特殊タスクへタスクスイッチを開始する。詳しくは後述するが、このタスクスイッチのために要する時間はタスク制御回路200の動作クロックにして数回分である。HCがアサートされてから、タスク制御回路200の動作クロックが所定回数変化したことを条件として(時刻t)、タスク制御回路200は停止要求信号(HR)をネゲートする。HR=0なので、実行制御回路152はCPUクロック(CLK)を再開させる。CPU150が処理を再開すると、CPU150はCBUSYを0から1に変化させる(時刻t)。このように、CPUクロックが停止する時刻tから時刻tの間に、一般タスクから特殊タスクへのタスクスイッチが実行されることになる。
なお、別の処理方法として、タスク制御回路200の動作クロックが所定回数変化したことを条件とする代わりに、タスク制御回路200がタスクスイッチを完了させたことを条件として、HRをネゲートしてもよい。そして、実行制御回路152が、HRがネゲートされたことを条件として、HCをネゲートさせてもよい。HC=0となると、実行制御回路152はCPUクロック(CLK)を再開させる。こうして、タスクの実行を再開させてもよい。
図8(b)は、システムコール実行時における各種信号の関係を示すタイムチャートである。
同図においては、まず、時刻tにおいて、命令復号器170がシステムコールを検出し、SC_DETECTを0から1に変化させている。時刻tでは、CPU150のステートマシンは「タスク実行中」であり、CBUSY=1である。SC_DETECT=1より、ORゲート176は「1」を出力するが、CBUSY=1ゆえにCPU150は停止しない。そのため、SC_DETECT=1が出力されても、しばらくはCPUクロック(CLK)は原クロック(CLK0)に同期して出力される。
時間が経過し、時刻tにおいてCBUSY=0に変化している。SC_DETECT=1、かつ、CBUSY=1となったので、HCはネゲートされ、CPUクロックは停止される。タスク切換回路210は、HC=0を入力されると、タスクスイッチ処理を開始し、書き込み信号(WT)をCPU150に出力する。WTが0から1に変化する時刻tに退避データが処理レジスタ154にロードされる。書き込み信号(WT)は、パルス信号のため、所定時間経過後の時刻tにWT=0となる。このWT:1→0の立ち下がり検出により命令復号器170にラッチされているSC_DETECTはリセットされる(時刻t)。このとき、CBUSYは0から1に変化する。CBUSY=1となったので、HC=0となり、CPUクロックが再開される。CPUクロックが停止する時刻tから時刻tの間に、タスクスイッチが実行されることになる。
なお、別の処理方法として、WT:1→0の立ち下がり検出を条件とする代わりに、タスク制御回路200がタスクスイッチを完了させ、HRをネゲートしたことを条件として、実行制御回路152が、HCをネゲートしてもよい。HC=0となったことを条件として、SC_DETECTをリセットする。実行制御回路152はCPUクロック(CLK)を再開させ、CBUSYは0から1に変化する。
いずれの場合においても、CPU150は、CPUクロックが停止している期間にRUN−タスクの切り換えが行われたことを認識する必要はない。タスク切換回路210は、CPUクロックが停止し、CPU150がいわばフリーズしている間にタスクスイッチ処理を行うため、CPU150の処理とタスク制御回路200の処理はシーケンシャルに分離されている。
図9は、パイプライン処理におけるCPUクロックの停止タイミングを説明するための模式図である。
CPU150は、複数の命令をメモリから処理レジスタ154に順次読み出しながら実行することにより、タスクを実行する。このタスクの実行単位である命令は、以下の4つのフェーズに分解される。
1.F(フェッチ):メモリから命令を取り出す。
2.D(デコード):命令を解釈する。
3.E(エグゼキューション):命令を実行する。
4.WB(ライトバック):実行結果をメモリに書き込む。
あるタスクが命令1から命令5を順次実行する場合、命令1のFからWBまで実行した後、命令2のFを実行してもよい。しかし、より効率的な実行のために、命令1の実行中に命令2の実行を開始することが多い。このような処理方法は、パイプライン処理とよばれる。たとえば、命令1が、Dのフェーズに至ったとき、命令2のFのフェーズを開始する。命令1が、Eのフェーズに至ったときには、命令2のDフェーズ、命令3のFフェーズを実行する。このように、単位時間当たりに実行される命令の数を増やすことにより、タスクごとの実行時間を減少させることができる。
更に、各フェーズを2つのフェーズに細分化してもよい。たとえば、FフェーズをF1:F2という2つのフェーズに分離される。命令1が、F2のフェーズに至ったとき、命令2のF1のフェーズを開始する。命令1が、D1のフェーズに至ったときには、命令2のF2フェーズ、命令3のF1フェーズを実行する。フェーズの細分化により、いっそうCPU150の計算資源を効率的に利用できる。図9においては、各フェーズを2つのフェーズに細分化して実行するパイプライン処理において、システムコールが発生したときのCPUクロック停止タイミングについて説明する。
同図において、命令1はCPUクロック「0」のタイミングで処理を開始されている。CPUクロック「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以降はメモリからフェッチされなくなる。
CPUクロック「8」のタイミングで命令1は実行完了するが、命令2〜5は実行中であるため、CPUビジー信号は「1」のままである。CPUクロック「12」のタイミングに至ると命令5が実行完了する。このとき、CPUビジー信号は「0」となる。あとは、図8(b)に関連したプロセスにしたがって、CPUクロックの供給が停止される。タスク切換回路210は、命令5まで終了した段階の処理データを退避レジスタ110に退避させる。このような停止方法によれば、システムコールが実行されたあとの命令の実行結果を無駄にすることなくタスクスイッチできる。タスクスイッチが完了すると、CPUビジー信号は再び「1」にセットされ、命令復号器170の処理も再開される。こうして、CPUクロックが再び供給されるようになる。
なお、別の処理方法として、システムコール命令が実行完了するタイミングで、CPUビジー信号を「0」とし、CPUクロックの供給を停止してもよい。この場合、システムコール命令と同時に実行されていた別の命令は実行途中のまま停止する。中途停止された命令の中間的な処理結果は処理レジスタ154に記録されたあと、退避レジスタ110に退避される。次回、このタスクがRUN−タスクとなるときには、中途停止された命令の続きが実行される。たとえば、ある命令が、フェッチを終了した段階で中途停止された場合、メモリから読み出された命令やオペランドは退避レジスタ110に退避される。タスク再開時には、退避レジスタ110のデータが処理レジスタ154にロードされ、デコードステージから続きの処理が実行されることになる。
図10は、状態記憶部220とタスク切換回路210の関係を示す回路図である。
状態記憶部220は、状態レジスタ250とタイマ252を含む、状態記憶部220は、タスクの状態データを保持する。また、タイマ252は、タスクがREADY状態またはWAIT状態に遷移したときに開始するタイマである。タスクがREADY状態に遷移してから経過した時間のことを「READY経過時間」、タスクがWAIT状態に遷移してから経過した時間のことを「WAIT経過時間」とよぶ。タイマ252は、その値をTIM信号として常時出力する。タスク切換回路210は、タスクスイッチに際して、あるタスクがREADY状態またはWAIT状態に変化したときには、そのタスクのタイマ252を駆動して時間計測を開始させる。
状態記憶部220は、以下に示すレジスタの集合である。
(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自体が自律的に自らのタイムアウト値を定期的にデクリメントしてもよい。
タスク選択回路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、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−タスクの選択、セマフォ、イベント、ミューテックス、タイムアウトについて、特に、タスク選択回路230の処理を中心として一般的な技術と比較しながら説明する。
[RUN−タスク選択]
[1]一般的なソフトウェアRTOSによるRUN−タスクの選択
図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−タスクの状態遷移>
ここでは、RUN−タスクをタスクJとして説明する。
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−タスクの状態遷移>
B1.RTOSは、タスク優先順位「0」の優先順位ポインタ280がいずれかのTCBを示しているか検出する。TCBがなければ、タスク優先順位「1」の優先順位ポインタ280がいずれかのTCBを示しているか検出する。TCBが見つかるまで、タスク優先順位を下げながらいずれかのタスクを特定する。同図の場合、タスクAが特定されることになる。
B2.タスクAをタスクレディリストからはずす。具体的には、タスク順位「0」の優先順位ポインタ280がタスクAではなくタスクDのTCBをアドレスするように書き換える。また、タスクAのポインタがタスクDをアドレスしないようにNULL設定する。こうして、タスクAのTCBがタスクレディリストから外される。
B3.タスクAのTCBに「RUN」を設定する。また、タスクAのTCBのレジスタ格納エリアに退避されていた処理データが処理レジスタにロードされる。
一般的なソフトウェアRTOSは、このようなタスクレディリストによりタスクスイッチを行う。すなわち、RTOSが複数のREADY−タスクの中からRUN−タスクを選択するポリシは以下の通りである。
1.READY−タスクであること(第1条件)。
2.READY−タスクのうち、最もタスク優先順位の高いタスクであること(第2条件)。
3.最もタスク優先順位の高いタスクが複数存在するときには、READY状態になった時期が最も古いタスクであること(第3条件)。
このような3つの条件のことを、まとめて「RUNタスク選択条件」とよぶことにする。タスク処理装置100の実行選択回路232は、このようなRTOSのタスクスケジューリング機能をハードウェアにより実現している。
[2]本実施例のハードウェアRTOSによるRUN−タスクの選択
図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は、上記RUNタスク選択条件のうちの第1条件に基づく判定を行っている。第1比較回路290は、2つのタスクのID、PR、TIM、および、判定回路296からのCID信号を入力とする。
第1比較回路290aに着目して説明する。第1比較回路290aは、タスク0とタスク1を比較し、上記したRUNタスク選択条件に基づいて、より好適なタスクを選択する。
第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の順序管理が不要となる。
このようにして、タスク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を出力する。
このような処理方法によれば、RUNタスク選択条件をハードウェアにより実現できる。一般的なソフトウェアRTOSは、タスクレディリストにアクセスしながらRUN−タスクを選択していたが、本実施例における実行選択回路232は、状態記憶部220から常時出力される状態データによりRUN−タスクを選択している。実行選択回路232の処理をまとめると以下の通りである。
<RUN−タスクの状態遷移>
ここでは、RUN−タスクをタスクJとして説明する。
A1.タスク切換回路210は、タスクJのタスク状態レジスタ258に「READY」を設定する。
A2.タスク切換回路210は、タスクJのタイマ252をセットしてREADY経過時間の計測を開始させる。
こうして、タスクJはRUN→READYに状態遷移する。処理データは、先述したようにタスクJの退避レジスタ110に退避される。処理レジスタ154と退避レジスタ110をつなぐバスは、処理データをパラレルに伝送可能であるため、A1とA2の処理は1クロック時間で実行可能である。
<READY−タスクの状態遷移>
B1.タスク切換回路210は、タスクJの状態遷移が完了したときに実行選択回路232が出力するタスクIDから、RUN−タスクを特定する。このタスクのタスク状態レジスタ258に「RUN」を設定する。
こうして、特定されたタスクはREADY→RUNに状態遷移する。特定されたタスクの処理データは退避レジスタ110から処理レジスタ154にロードされる。退避レジスタ110と処理レジスタ154をつなぐバスも、処理データをパラレルに伝送可能なビット数であるため、B1の処理は1クロック時間で実行可能である。
ソフトウェアRTOSは、タスクスイッチに際して、タスクレディリストへのアクセス等によりCPUのCPUクロック時間を多く消費する。これに対し、本実施例におけるタスク制御回路200は、僅かな時間でタスクスイッチを完了させることができる。状態記憶部220は常時状態データを実行選択回路232に出力しているため、実行選択回路232は常時いずれかのタスクのタスクIDを出力している。タスクスイッチが発生してからRUN−タスクの選択処理を開始するのではなく、タスクスイッチが発生したときの実行選択回路232の出力によりRUN−タスクの選択を行う点もタスクスイッチの高速化に寄与している。ここでは、タスクが8つであるとして説明したが、比較回路の段数を増やすことにより、より多くのタスクにも対応可能である。
[セマフォ処理]
図13は、一般的なRTOSによるセマフォ処理において利用されるウェイトセマフォリストを示す図である。
ウェイトセマフォリストを説明する前に、セマフォについて簡単に説明する。セマフォテーブル212には、セマフォIDとセマフォカウンタが対応づけて記録される。セマフォカウンタは、初期値として有限数に設定される。たとえば、セマフォID=4、セマフォカウンタ=3として設定されているとする。いずれかのタスクがセマフォID=4のセマフォを待機セマフォとしてウェイトセマフォシステムコールを実行すると、タスク切換回路210は待機セマフォのセマフォカウンタをデクリメントする。セマフォカウンタはウェイトセマフォイベントコールにより獲得要求されるごとにデクリメントされ、0になると獲得できなくなる。セマフォカウンタが0となっているセマフォを待機セマフォとしてウェイトセマフォシステムコールを実行したタスクは、WAIT状態に状態遷移する。
一方、いずれかのタスクがセマフォID=4のセマフォを解放セマフォとしてリリースセマフォシステムコールを実行すると、タスク切換回路210はセマフォテーブル212のセマフォカウンタをインクリメントする。まとめると、
セマフォカウンタ>0のとき:ウェイトセマフォシステムコールを実行したタスクは、RUN→READYに遷移する。このときセマフォカウンタはデクリメントされる。
セマフォカウンタ=0のとき:ウェイトセマフォシステムコールを実行したタスクは、RUN→WAITに遷移する。セマフォカウンタはデクリメントされない。
ウェイトセマフォシステムコールを実行したタスクがWAIT状態からREADY状態に遷移するためには、別のタスクがリリースセマフォシステムコールを実行する必要がある。
[1]一般的なソフトウェアRTOSによるセマフォ処理
一般的なソフトウェアRTOSはウェイトセマフォリストにより、セマフォ待ちを理由としてWAIT状態にあるタスク(以下、特に、「セマフォ待ちタスク」とよぶ)のTCBを管理する。ウェイトセマフォリストは、図11のタスクレディリストと同等の形状のリストであり、メモリ上に形成される。各セマフォ待ちタスクのTCBは、ポインタによって連結される。優先順位ポインタ280は、該当タスク優先順位のセマフォ待ちタスクのTCBの先頭アドレスを指す。
一般的なソフトウェアRTOSは、リリースセマフォシステムコールが実行されたとき、このウェイトセマフォリストを走査しながら、WAIT状態からREADY状態に遷移させるべきセマフォ待ちタスクを選択する。ウェイトセマフォシステムコールおよびリリースセマフォシステムコール実行時におけるRTOSの処理は以下の通りである。
<ウェイトセマフォシステムコールの実行>
ここでは、RUN−タスクをタスクJとして説明する。
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も設定する。
<リリースセマフォシステムコールの実行>
B1.RTOSは、タスク優先順位「0」のタスクを順番に辿りながら、解放セマフォを待機セマフォとするセマフォ待ちタスクを検索する。存在しなければ、タスク優先順位「1」のタスクを検索対象とする。解放セマフォを待機セマフォとするセマフォ待ちタスクが検出されるか否かに応じて処理は分岐する。
(検出されたとき)
B2.検出されたタスクがタスクEであるとして説明する。タスクEのTCBに「READY」を設定する。また、待機セマフォのセマフォIDをクリアする。
B3.タスクEのTCBをウェイトセマフォリストから外す。
B4.セマフォを解放したタスクの状態をRUN→READYに状態遷移させる。このタスクのTCBは、タスクレディリストに追加される。
(検出されなかったとき)
B2.セマフォカウンタをインクリメントする。
B3.セマフォを解放したタスクの状態をRUN→READYに状態遷移させる。このタスクのTCBは、タスクレディリストに追加される。
一般的なソフトウェアRTOSは、このようなウェイトセマフォリストを管理することによって、セマフォ関連処理を行う。セマフォの解放に際し、RTOSが複数のWAIT−タスクの中からREADY−タスクを選択するポリシは以下の通りである。
1.WAIT−タスクであること(第1条件)。
2.WAIT−タスクのうち、解放セマフォを待機セマフォとするタスクであること(第2条件)
3.そのようなタスクが複数存在するときには、最もタスク優先順位の高いタスクであること(第3条件)。
4.最もタスク優先順位の高いタスクが複数存在するときには、WAIT状態になった時期が最も古いタスクであること(第4条件)。
このような4つの条件のことを、まとめて「セマフォ待機解除条件」とよぶことにする。タスク処理装置100のセマフォ選択回路234は、このようなRTOSのタスクスケジューリング機能をハードウェアにより実現している。
[2]本実施例のハードウェアRTOSによるセマフォ処理
図14は、セマフォ選択回路234の回路図である。
ここでも、タスク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信号を入力とする。
第1比較回路300は、セマフォ待機解除条件のうち第3条件と第4条件についての判定を行う回路である。第2比較回路302や第3比較回路304も同様である。すでに明らかなように、RUNタスク選択条件の第2条件および第3条件は、セマフォ待機解除条件の第3条件および第4条件と同じである。実行選択回路232の各比較回路は、タスクの状態データ(PR、TIM)を比較する回路である。一方、セマフォ選択回路234の各比較回路も、タスクの状態データ(PR、TIM)を比較する回路である。したがって、実行選択回路232の第1比較回路290とセマフォ選択回路234の第1比較回路300は、同等のロジックを内蔵する回路であり、共通化することができる。各タスクは判定回路306により第1条件と第2条件を判定された上で、第1比較回路300の判定処理に供される。あとは、実行選択回路232と同等の判定処理により、いずれかのタスクIDが第3比較回路304から出力される。ウェイトセマフォシステムコールおよびリリースセマフォシステムコール実行時における処理は以下の通りである。
<ウェイトセマフォシステムコールの実行>
ここでは、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に状態遷移する。
<リリースセマフォシステムコールの実行>
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に状態遷移させる。
状態記憶部220は常時状態データをセマフォ選択回路234に出力しているため、タスク切換回路210がセマフォIDを判定回路306に入力すると、セマフォ選択回路234は直ちに選択処理を実行できる。
[ミューテックス処理]
ミューテックスもセマフォと同じく、タスク間の同期処理に利用される。ミューテックスとセマフォは以下の点において相違する。
1.セマフォカウンタは1以上の整数を設定可能である。これに対し、ミューテックスはセマフォカウンタが1または0の特殊なセマフォである。セマフォカウンタが2以上のときには、同一セマフォを2以上のタスクが獲得できる。しかし、ミューテックスの場合、あるミューテックスを獲得できるタスクは常に1つだけである。
2.リリースセマフォシステムコールによりセマフォを解放できるタスクは、ウェイトセマフォシステムコールによりセマフォを獲得したタスクに限らない。これに対し、リリースミューテックスシステムコールによりミューテックスを解放できるタスクは、ウェイトミューテックスシステムコールによりミューテックスを獲得したタスクだけである。
ミューテックスの解放に際し、複数のWAIT−タスクの中からREADY−タスクを選択するポリシは以下の通りである。
1.WAIT−タスクであること(第1条件)。
2.WAIT−タスクのうち、解放ミューテックスを待機ミューテックスとするタスクであること(第2条件)
3.そのようなタスクが複数存在するときには、最もタスク優先順位の高いタスクであること(第3条件)。
4.最もタスク優先順位の高いタスクが複数存在するときには、WAIT状態になった時期が最も古いタスクであること(第4条件)。
このような4つの条件のことを、まとめて「ミューテックス待機解除条件」とよぶことにする。
したがって、ウェイトミューテックスシステムコールおよびリリースミューテックスシステムコール実行時における本実施例のハードウェアRTOSの処理は以下の通りである。セマフォテーブル212には、ミューテックスIDと、そのミューテックスがいずれかのタスクに占有されているか否かを示す占有状態データが対応づけて保持されている。占有状態データは、占有されていないときには「0」であり、占有されているときにはミューテックスを占有しているタスクのタスクIDとなる。
<ウェイトミューテックスシステムコールの実行>
ここでは、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経過時間の計測を開始させる。
<リリースミューテックスシステムコールの実行>
B1.タスク切換回路210は、システムコールを実行したタスクが、解放ミューテックスを占有していることを条件として、解放セマフォIDをミューテックス回路240に入力する。ミューテックス回路240も、図14と同じく多段接続された比較回路とミューテックス待機解除条件のうちの第1条件および第2条件の成否を判定する判定回路を含む。この判定回路は、このミューテックスを対象としてミューテックス待機条件のうちの第1条件および第2条件が共に成立したときだけ「1」を出力する。なお、解放ミューテックスを占有しないタスクがリリースミューテックスシステムコールを実行したときには、そのタスクの状態をRUN→READYに状態遷移させる。
(いずれかの判定回路が「1」を出力し、ミューテックス回路240からいずれかのタスクIDを出力したとき)
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ビットとよぶ。
ウェイトイベントシステムコールは、待機イベントのカレントフラグパターンが所定条件を満たすのを待つためのシステムコールであり、イベントID、フラグパターン(以下、「待機フラグパターン」とよぶ)、フラグ条件をパラメータとする。ウェイトイベントシステムコールが実行されると、カレントフラグパターンと待機フラグパターンの間にフラグ条件が成立するか判定される。フラグ条件は論理和(OR)または論理積(AND)である。フラグ条件が論理積(AND)の場合、待機フラグパターンにおいて「1」となっているすべてのビットについて、カレントフラグパターンの該当ビットも全て「1」であることがWAIT解除条件となる。フラグ条件が論理和(OR)の場合、待機フラグパターンにおいて「1」となっているいずれかのビットについて、カレントフラグパターンの該当ビットが「1」であることがWAIT解除条件となる。たとえば、カレントフラグパターン「00001101」、待機フラグパターン「00000011」、フラグ条件「論理和(OR)」の場合、待機フラグパターンの第6ビットおよび第7ビットのうち、カレントフラグパターンの第7ビットが1なので、この場合には、ウェイトイベントシステムコールによるWAIT解除条件は成立する。一方、フラグ条件が「論理積(AND)」の場合、カレントフラグパターンの第6ビットが「0」なのでWAIT解除条件は成立しない。
[1]一般的なソフトウェアRTOSによるイベント処理
ウェイトイベントシステムコールおよびセットイベントシステムコール実行時における一般的なRTOSの処理は以下の通りである。一般的なRTOSにおいては、イベント管理のために、メモリ上にイベントテーブルを保持する。このイベントテーブルにおいては、イベントID、カレントフラグパターンだけではなく、通常、そのイベントを待機イベントとしてWAIT状態にあるタスク(以下、「イベント待ちタスク」とよぶ)のタスクID、待機フラグパターン、フラグ条件が対応づけられて保持される。
<ウェイトイベントシステムコールの実行>
A1.RTOSは、システムコールで指定されたイベントのカレントフラグパターンをイベントテーブルから読み出す。
A2.カレントフラグパターンと待機フラグパターンをフラグ条件にしたがって比較し、WAIT解除条件の成否を判定する。
(WAIT解除条件が成立するとき)
A3.システムコールを実行したタスクのタスク状態をRUN→READYに状態遷移させる。
(WAIT解除条件が成立しないとき)
A3.イベントテーブルに、システムコールを実行したタスクのタスクIDを記録する。
A4.イベントテーブルに待機フラグパターンを記録する。
A5.イベントテーブルにフラグ条件を記録する。
A6.システムコールを実行したタスクのタスク状態をRUN→WAITに状態遷移させる。
<セットイベントシステムコールの実行>
B1.RTOSは、システムコールで指定された設定イベントについて、イベントテーブルからカレントフラグパターン、タスクID、待機フラグパターン、フラグ条件を読み出す。
B2.カレントフラグパターンとセットフラグパターンの論理和を新たなカレントフラグパターンとして記録する。
(設定イベントについてイベント待ちタスクが存在しないとき、または、存在したとしても待機フラグパターンとフラグ条件からWAIT解除条件が成立しないとき)
B3.システムコールを実行したタスクのタスク状態をRUN→READYに状態遷移させる。
(設定イベントについてイベント待ちタスクが存在し、WAIT解除条件が成立するとき)
B3.イベントを待機していたタスクのタスク状態をWAIT→READYに状態遷移させる。
B4.イベントテーブルにおける待機タスクID、待機フラグパターン、フラグ条件をクリアする。
B5.システムコールを実行したタスクのタスク状態をRUN→READYに状態遷移させる。また、RUN−タスクの選択が行われる。
セットイベントシステムコールが実行されるとき、複数のWAIT−タスクの中からREADY−タスクを選択するポリシは以下の通りである。
1.WAIT−タスクであること(第1条件)。
2.WAIT−タスクのうち、設定イベントを待機イベントとするタスクであること(第2条件)。
3.待機フラグパターンとカレントフラグパターン、フラグ条件を比較してWAIT解除条件が成立するタスクであること(第3条件)
このような3つの条件のことを、まとめて「イベント待機解除条件」とよぶことにする。
[2]本実施例のハードウェアRTOSによるイベント処理
タスク処理装置100のウェイトイベントシステムコールおよびセットイベントシステムコール実行時における処理は以下の通りである。タスク処理装置100が内蔵するセマフォテーブル212においては、イベントIDとカレントフラグパターンが対応づけられている。待機タスクIDや待機フラグパターンなどの情報は、状態記憶部220に格納される。
<ウェイトイベントシステムコールの実行>
A1.タスク切換回路210は、イベントテーブル214からカレントフラグパターンを読み出す。
A2.タスク切換回路210は、カレントフラグパターンと待機フラグパターンをフラグ条件にしたがって比較し、WAIT解除条件の成否を判定する。
(WAIT解除条件が成立するとき)
A3.システムコールを実行したタスクのタスク状態レジスタ258に「READY」を設定する。
(WAIT解除条件が成立しないとき)
A3.タスク切換回路210は、システムコールを実行したタスクのタスク状態レジスタ258に「WAIT」、待機理由レジスタ262に「イベント待ち」、イベントIDレジスタ266に待機イベントのイベントID、待機フラグレジスタ268に待機フラグパターン、フラグ条件レジスタ270にフラグ条件をそれぞれ設定する。
<セットイベントシステムコールの実行>
B1.タスク切換回路210は、イベントテーブル214からカレントフラグパターンを読み出すとともに、システムコールで指定された設定イベントのイベントIDをイベント選択回路236に入力する。
B2.タスク切換回路210は、イベントテーブル214のカレントフラグパターンにセットフラグパターンを論理加算する。
B3.イベント選択回路236は、入力されたイベントIDについて、イベント待機条件が成立するタスクを選択する。このとき、タスク優先順位やWAIT経過時間にかかわらず複数のタスクが選択されてもよい。
(イベント待機解除条件を満たすタスクが存在するとき)
B4.イベント待ちタスクのタスク状態レジスタ258に「READY」を設定し、イベントIDレジスタ266、待機フラグレジスタ268、フラグ条件レジスタ270をクリアする。
B5.システムコールを実行したタスクのタスク状態をRUN→READYに状態遷移させる。
(イベント待機解除条件を満たすタスクが存在しないとき)
B4.システムコールを実行したタスクのタスク状態をRUN→READYに状態遷移させる。
[タイムアウト処理]
WAIT状態に移行したタスクは、WAIT解除条件が成立したときにREADY状態に遷移する。しかし、何らかの外的要因やアプリケーションプログラムのバグにより、WAIT解除条件の成立が阻害されると、タスクはWAIT状態から抜け出せなくなってしまう。そこで、通常、タスクをWAIT状態に遷移させるときにはタイムアウト値を設定する。タイムアウト値は定期的にデクリメントされ、ゼロとなったときには、WAIT解除条件が成立していなくてもタスクはWAIT状態からREADY状態に遷移する。すなわち、タイムアウト値以上の時間、タスクがWAIT状態に止まるのを防止している。
[1]一般的なソフトウェアRTOSによるタイムアウト処理
ソフトウェアによる一般的なRTOSの場合、WAIT状態のタスクのTCBにはタイムアウト値が設定され、このタイムアウト値は定期的にデクリメントされる。RTOSは周期的にCPUの処理に割り込みをかけ、全TCBをチェックし、タイムアウト値がゼロに至ったWAIT−タスクを検出する。このようなタスクが検出されたときには、RTOSはそのタスクのタスク状態をWAITからREADYに状態遷移させる。
[2]本実施例のハードウェアRTOSによるタイムアウト処理
一方、本実施例の場合、タスク切換回路210は各タイムアウトカウンタ274のタイムアウト値を定期的にデクリメントする。タイムアウト値は、WAIT系システムコールを実行する時にパラメータとして設定され、タスク切換回路210はそのシステムコールを実行したタスクのタイムアウトカウンタ274にタイムアウト値を設定する。
タイムアウト値のデクリメント処理にCPU150が介在しないため、タスク切換回路210がタスク実行処理とは独立してタイムアウト値を更新できる。そのため、CPU150がタスクを実行している最中にも、タスク制御回路200において自律的にタイムアウト値の更新がなされる。タイムアウト検出回路238には状態データが常時入力されているので、タイムアウト検出回路238は、タイムアウトカウント値が更新されたタイミングとほぼ同じタイミングにて、タイムアウトカウント値がゼロとなったタスクを検出できる。タイムアウト検出回路238は、そのようなタスクのタスクIDを出力する。タスク切換回路210は、タイムアウト検出回路238からタスクIDを入力されると、タイムアウトが発生したと認識し、HCをアサートしてCPUクロックを供給停止させる。タスク制御回路200は、タイムアウトが発生したWAIT−タスクをREADY状態に遷移させるとともに、RUN−タスクをREADY状態に遷移させる。タスク切換回路210は、READY−タスクの中から次に実行すべきタスクを選択する。また、タスク切換回路210は、タイムアウトが発生したタスクのタイマ252をリスタートさせ、READY経過時間を計測させる。
このような処理方法によれば、タスクの実行中、すなわち、CPUクロックの動作中にタイムアウトが発生したときに、即時的にCPU150に割り込みをかけて、タスクスイッチを実行できる。また、タスクの実行中において、タスク切換回路210はCPU150の処理能力を借りることなく独立してタイムアウト値の更新処理を実行できる。
[有限ステートマシンとしてのタスク切換回路210]
図15は、タスク切換回路210の状態遷移図である。
初期化処理(A1)においては、全タスクがIDLE状態にある。初期化処理が完了すると(S10)、いずれかのタスクがRUN−タスクとなりタスク実行状態(A2)となる。割り込み要求信号が検出されると(S12)、特殊タスクがRUN−タスクとなり、割り込み処理(A3)が実行される。割り込み処理が終了すると(S14)、タスク切換回路210は、一般タスクからRUN−タスクを選択し、A2に遷移する。
また、タスク実行中(A2)において、システムコールが実行されると(S16)、システムコール処理が実行される(A4)。タスクスイッチ、すなわち、RUN−タスクの切り換えが発生しない場合には(S18)、A2に戻る。一方、システムコール処理(A4)により、タスクスイッチが発生する場合には(S20)、タスク切換回路210は実行選択回路232の出力に基づいてRUN−タスクの選択を行う(A5)。タスクスイッチが完了すると(S22)、処理状態はA2に移行する。
最後に、タスク処理装置100の主要素である退避回路120とタスク制御回路200のうち一方のみを実装する場合について付言する。
[タスク制御回路200を搭載しないタイプのタスク処理装置100]
図16は、図5のタスク処理装置100のうち、タスク制御回路200を搭載しないタスク処理装置100の回路図である。
タスク制御回路200を搭載しない代わりに、レジスタ切換制御回路322と処理データ保持部320を追加している。タスク制御回路200を搭載しないため、タスクスケジューリング機能はソフトウェアRTOSにより実現される。したがって、RTOSはタスクスイッチに際して、CPU150の使用権を一時的に取得する必要が生じる。処理データ保持部320は、通常、RTOSのための処理データを保持する。RTOSがCPU150の使用権を取得するときには、処理データ保持部320は処理データ保持部320にあるRTOS用の処理データと特殊レジスタ156のタスク用の処理データを入れ替える。以下、タスクAからタスクBへタスクスイッチするとして、その処理過程を説明する。
A1.タスクAがシステムコール実行するとき、システムコールの変数やシステムコールのIDを汎用レジスタ158の一部に記録する。
A2.レジスタ切換制御回路322は、タスクAの処理データを処理データ保持部320に移動させ、処理データ保持部320のRTOS用処理データを処理レジスタ154にロードする。この段階で、RTOSがCPU150の使用権を取得する。
A3.レジスタ切換制御回路322は、退避レジスタ110aに書き込み信号を入力し、処理データ保持部320のタスクA用処理データを退避レジスタ110に退避させる。
A4.RTOSは、汎用レジスタ158に記録されているシステムコールの変数やIDに基づき、システムコールに対応する処理を実行する。また、タスクAのTCBのタスク状態データを「READY」に設定し、タスクレディリストにタスクAのTCBを追加する。
B1.次に、RTOSは先述したRUNタスク選択条件にしたがって、RUN−タスク、ここでは、タスクBを選択する。
B2.RTOSはレジスタ切換制御回路322に指示して、タスクBを指定したタスク選択信号をロード選択回路112に入力させる。退避レジスタ110bから処理データ保持部320に処理データが移動される。
B3.レジスタ切換制御回路322は、処理データ保持部320のタスクB用処理データと処理レジスタ154のRTOS用処理データを入れ替える。これにより、タスクBがCPU150の使用権を取得する。
このような処理方法によれば、タスク制御回路200を搭載する図5のタスク処理装置100に比べて、タスク処理装置100全体としての回路サイズをコンパクトにできる。RTOSはソフトウェアとして実現されるが、処理データのロード・退避はレジスタ切換制御回路322からの信号によってハードウェア制御できる。処理レジスタ154、処理データ保持部320、ロード選択回路112、退避レジスタ110をそれぞれつなぐバスは処理データをパラレル転送可能なビット数に設定すれば、TCBへの処理データの退避やTCBからの処理データのロードに比べて高速なタスクスイッチが可能となる。
[退避回路120を搭載しないタイプのタスク処理装置100]
図17は、図5のタスク処理装置100のうち、退避回路120を搭載しないタスク処理装置100の回路図である。
退避回路120を搭載しない代わりに、割込インタフェース回路324を追加している。退避回路120を搭載しないため、処理データはメモリのTCBに退避される。処理データの退避・ロードに関してはソフトウェアベースのRTOSにより実現される。したがって、RTOSはタスクスイッチに際して、CPU150の使用権を一時的に取得する必要が生じる。以下、タスクAからタスクBへタスクスイッチするとして、その処理過程を説明する。
システムコールの実行によりタスクスイッチが発生すると、まず、ソフトウェアRTOSがタスクAの処理データをタスクAのTCBに退避させる。そして、RTOS用の処理データを処理レジスタ154にロードする。このときの処理方法は、図3に関連して説明した内容と同等となる。
ソフトウェア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にロードする。
このような処理方法によっても、退避回路120を搭載する図5のタスク処理装置100に比べて、タスク処理装置100全体としての回路サイズをコンパクトにできる。RTOSの機能の一部はソフトウェアとして実現されるが、タスク選択処理はタスク制御回路200により実現できる。
図2および図3に関連して説明したソフトウェアRTOSに比べて、図16および図17のタスク処理装置100は、いずれもRTOSの機能の一部をハードウェア化することができる。図16に関連して説明したように、退避回路120が存在することによって、処理データの退避・ロードのためにTCBにアクセスする必要がなくなる。このため、レジスタ切換制御回路322により処理データの退避・ロード処理を実行可能となっている。また、図17に関連して説明したように、タスク制御回路200が存在することによって、ソフトウェアRTOSはタスク選択機能をタスク制御回路200に委譲できる。
図5に関連して説明したように、退避回路120とタスク制御回路200を搭載するタスク処理装置100の場合、RTOSのタスクスケジューリング機能を完全にハードウェア化できる。タスクスイッチに際してメモリのTCBにアクセスする必要性がなくなるため、タスクスイッチ処理がいっそう高速化される。本発明者らの実験によると、図3等に関連して説明した一般的なソフトウェアRTOSに比べて、本実施例におけるタスク処理装置100は約100倍の速度で動作することが確認されている。
以上、本発明を実施例をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
請求項に記載のセレクタ回路の機能は、本実施例においてはロード選択回路112により実現されている。
このほかにも、請求項に記載の各構成要件が果たすべき機能は、本実施例において示された各機能ブロックの単体もしくはそれらの連係によって実現されることも当業者には理解されるところである。
以上の実施の形態および変形例から把握される発明のいろいろな態様をすでに特許請求の範囲に記載したものも含む形にて以下に例示する。タスク制御回路200の特徴に関連し、以下の発明が認識される。
C1.タスク実行のためのデータを一時的に保持する処理レジスタと、
命令(instruction)およびオペランドをメモリから前記処理レジスタにロードし、前記処理レジスタの命令とオペランドにしたがってタスクを実行する実行制御回路と、
タスクスケジューリングのためのタスクごとの状態データを保持するレジスタであって、複数のタスクに対してそれぞれ対応づけられる複数の状態レジスタと、
タスクの切り換えを実行するタスク切換回路と、
複数の前記状態レジスタからパラレルに出力される状態データを入力として、所定の選択条件によりタスクを選択するタスク選択回路と、を備え、
前記実行制御回路は、システムコール命令を実行するとき、所定のシステムコール信号を前記タスク切換回路に送信し、
前記タスク選択回路は、前記所定のシステムコール命令の有無によらず、実行可能に待機している状態を示すREADY(レディ)状態のタスクの中から実行対象となるタスクを選択し、
前記タスク切換回路は、前記システムコール信号を受信したときの前記タスク選択回路からの出力により次の実行対象となるタスクを選択し、前記処理レジスタのデータを所定の記憶領域に退避させるとともに、実行中のタスクに対応する前記状態レジスタの状態データをタスク実行中を示すRUN(ラン)状態からREADY状態に設定変更し、選択したタスクについて前記記憶領域に退避されていたデータを前記処理レジスタにロードするとともにそのタスクに対応する前記状態レジスタの状態データをREADY状態からRUN状態に変更することにより、実行対象となるタスクを切り換えることを特徴とするタスク処理装置。
C2.前記タスク選択回路は、多段階に接続される比較回路を内蔵し、
第1段の比較回路が、2以上のタスクの状態データを前記所定の選択条件により比較して、いずれかのタスクの状態データを第2段の比較回路に出力し、
第n(nは2以上の自然数)段の比較回路が、第(n−1)段に位置する複数の比較回路から出力された状態データを前記所定の選択条件により比較して、いずれかのタスクの状態データを出力することにより、
最後段の比較回路により特定されたタスクを実行対象として選択することを特徴とするC1に記載のタスク処理装置。
C3.第k(kは自然数)段の比較回路は、入力された状態データがいずれも前記所定の選択条件を満たさないときには、いずれのタスクの状態データも出力しないことを特徴とするC2に記載のタスク処理装置。
C4.前記状態レジスタは、状態データの一部としてタスク優先度を保持し、
前記タスク選択回路は、タスク切り換えに際してREADY状態のタスクが複数あるときには、それらのタスクのうちタスク優先度が最も高いタスクを実行対象として選択することを特徴とするC1に記載のタスク処理装置。
C5.前記タスク選択回路は、タスク切り換えに際してREADY状態のタスクが複数存在し、かつ、それらのタスクのうちタスク優先度が最も高く設定されているタスクも複数存在するときには、それらのタスクのうちREADY状態に設定されてからの経過時間が最も長いタスクを実行対象として選択することを特徴とするC4に記載のタスク処理装置。
C6.複数のタスクに対してそれぞれ対応づけられる複数のタイマを更に備え、
前記タスク切換回路は、タスクをREADY状態に設定するとき、そのタスクについてのタイマをセットして経過時間の計測を開始させることを特徴とするC5に記載のタスク処理装置。
C7.セマフォIDとセマフォカウンタを対応づけて保持するセマフォ情報保持部を更に備え、
前記実行制御回路が、セマフォを要求するためのシステムコール命令であるウェイトセマフォ命令をセマフォIDを指定して実行する場合において、
前記タスク切換回路は、指定されたセマフォのセマフォカウンタが1以上のときにはセマフォカウンタをデクリメントした上で前記ウェイトセマフォ命令を実行したタスクの状態データをREADY状態に設定し、セマフォカウンタが0以下のときには前記ウェイトセマフォ命令を実行したタスクを所定条件が成立するまで実行できない状態を示すWAIT(ウェイト)状態に設定するとともに、そのタスクのWAIT状態解除の条件として前記指定されたセマフォIDを前記状態レジスタに設定し、
前記実行制御回路が、セマフォを解放するためのシステムコール命令であるリリースセマフォ命令をセマフォIDを指定して実行する場合において、
前記タスク選択回路は、指定されたセマフォIDについてWAIT状態にあるタスクのうち、いずれかのタスクを所定の選択条件にしたがって選択し、
前記タスク切換回路は、前記タスク選択回路によりいずれかのタスクが選択されたときにはそのタスクの状態データをREADY状態に設定し、いずれのタスクも選択されなかったときには前記指定されたセマフォのセマフォカウンタをインクリメントすることを特徴とするC1に記載のタスク処理装置。
C8.イベントIDと第1のフラグパターンを対応づけて保持するイベント情報保持部を更に備え、
前記実行制御回路が、イベントの成立を待ち合わせるためのシステムコール命令であるウェイトイベント命令をイベントIDと第2のフラグパターンを指定して実行する場合において、
前記タスク切換回路は、指定されたイベントについて第1のフラグパターンと第2のフラグパターンとの間で所定の演算条件が成立するときには、前記ウェイトイベント命令を実行したタスクの状態データをREADY状態に設定し、成立しないときには前記ウェイトイベント命令を実行したタスクを所定条件が成立するまで実行できない状態を示すWAIT状態に設定するとともにそのタスクのWAIT状態解除の条件として前記指定されたイベントIDと第2のフラグパターンを前記状態レジスタに設定し、
前記実行制御回路が、第1のフラグパターンを設定するためのシステムコール命令であるセットイベント命令をイベントIDと第3のフラグパターンを指定して実行する場合において、
前記タスク切換回路は、指定されたイベントについて第1のフラグパターンに第3のフラグパターンを論理加算し、
前記タスク選択回路は、前記指定されたイベントIDについてWAIT状態にあるタスクを選択し、
前記タスク切換回路は、前記タスク選択回路によりいずれかのタスクが選択されたときには、そのタスクの前記状態レジスタに保持されている第2のフラグパターンと第1のフラグパターンとの間で前記所定の演算条件が成立することを条件として、選択されたタスクをWAIT状態からREADY状態に設定変更することを特徴とするC1に記載のタスク処理装置。
C9.前記状態レジスタは、状態データの一部としてタイムアウトカウンタを保持し、
前記実行制御回路がタイムアウト条件つきのシステムコール命令を実行する場合において、
前記タスク切換回路は、前記タイムアウト条件つきのシステムコール命令を実行したタスクの状態データをWAIT状態に設定するとともにタイムアウトカウンタの更新を開始させ、
前記タスク選択回路は、WAIT状態にあるタスクのうち、タイムアウトしたタスクを検出し、
前記タスク切換回路は、タイムアウトしたタスクの状態データをWAIT状態からREADY状態に設定変更することを特徴とするC1に記載のタスク処理装置。
C10.ミューテックスIDとミューテックスの取得状態を対応づけて保持するミューテックス情報保持部を更に備え、
前記実行制御回路が、ミューテックスを要求するためのシステムコール命令であるウェイトミューテックス命令をミューテックスIDを指定して実行する場合において、
前記タスク切換回路は、指定されたミューテックスが非占有状態のときには占有状態に設定変更して前記ウェイトミューテックス命令を実行したタスクの状態データをREADY状態に設定し、占有状態のときには前記ウェイトミューテックス命令を実行したタスクを所定条件が成立するまで実行できない状態を示すWAIT状態に設定するとともにそのタスクのWAIT状態解除の条件として前記指定されたミューテックスIDを前記状態レジスタに設定し、
前記実行制御回路が、ミューテックスを解放するためのシステムコール命令であるリリースミューテックス命令をミューテックスIDを指定して実行する場合において、
前記タスク選択回路は、指定されたミューテックスIDについてWAIT状態にあるタスクのうち、いずれかのタスクを所定の選択条件にしたがって選択し、
前記タスク切換回路は、指定されたミューテックスを非占有状態に設定し、前記タスク選択回路によりいずれかのタスクが選択されたときには選択されたタスクの状態データをREADY状態に設定することを特徴とするC1に記載のタスク処理装置。
C11.前記処理レジスタのデータを退避させるためのレジスタであって、複数のタスクに対してそれぞれ対応づけられる複数の退避レジスタを更に備え、
前記タスク切換回路は、前記所定のシステムコール信号を受信すると、実行中のタスクに対応づけられている前記退避レジスタに前記処理レジスタのデータを退避させ、前記タスク選択回路により選択されたタスクに対応づけられている前記退避レジスタのデータを前記処理レジスタにロードすることを特徴とするC1に記載のタスク処理装置。
本発明によれば、マルチタスク処理において、より効率的なタスクの実行制御が実現される。

Claims (12)

  1. タスク実行のためのデータを一時的に保持する処理レジスタと、
    命令(instruction)およびオペランドをメモリから前記処理レジスタにロードし、前記処理レジスタの命令とオペランドにしたがってタスクを実行する実行制御回路と、
    前記処理レジスタのデータを退避させるためのレジスタであって、複数のタスクに対してそれぞれ対応づけられる複数の退避レジスタと、
    タスクの切り換えを制御するタスク制御回路と、を備え、
    前記実行制御回路は、実行対象となる命令が所定のシステムコール命令であるか否かを判定する命令復号器を有し、前記所定のシステムコール命令であるときには所定のシステムコール信号を前記タスク制御回路に送信し、
    前記タスク制御回路は、前記所定のシステムコール信号を受信すると、実行中のタスクに対応づけられている前記退避レジスタに前記処理レジスタのデータを退避させ、次に実行すべきタスクを所定の規則にしたがって選択し、選択したタスクに対応づけられている前記退避レジスタのデータを前記処理レジスタにロードすることにより、実行対象となるタスクを切り換えることを特徴とするタスク処理装置。
  2. タスク実行のためのデータを一時的に保持する処理レジスタと、
    前記処理レジスタからデータを取得して演算を実行する演算回路と、
    命令(instruction)およびオペランドをメモリから前記処理レジスタにロードし、前記処理レジスタの命令とオペランドにしたがって前記演算回路に演算を実行させることによりタスクを実行する実行制御回路と、
    前記処理レジスタのデータを退避させるためのレジスタであって、複数のタスクに対してそれぞれ対応づけられる複数の退避レジスタと、
    タスクの切り換えを制御するタスク制御回路と、を備え、
    前記演算回路と前記処理レジスタは、信号線により1対1の関係にて対応づけられており、
    前記実行制御回路は、実行対象となる命令が所定のシステムコール命令であるか否かを命令復号器により判定し、前記所定のシステムコール命令であるときには所定のシステムコール信号を前記タスク制御回路に送信し、
    前記タスク制御回路は、前記所定のシステムコール信号を受信すると、実行中のタスクに対応づけられている前記退避レジスタに前記処理レジスタのデータを退避させ、次に実行すべきタスクを所定の規則にしたがって選択し、選択したタスクに対応づけられている前記退避レジスタのデータを前記処理レジスタにロードすることにより、実行対象となるタスクを切り換えることを特徴とするタスク処理装置。
  3. 前記実行制御回路は、前記所定のシステムコール命令を実行するときにタスクの実行プロセスを進めるための実行用クロックを供給停止させ、前記退避レジスタから前記処理レジスタへデータがロードされたあとに前記実行用クロックを再開させることを特徴とする請求項1または2に記載のタスク処理装置。
  4. 複数の命令をパイプライン処理する場合において、
    前記実行制御回路は、前記所定のシステムコール命令を実行するときに実行中の他の命令が所定の中断可能なフェーズまで実行されたことを条件として、前記実行用クロックを停止させることを特徴とする請求項3に記載のタスク処理装置。
  5. 複数の命令をパイプライン処理する場合において、
    前記実行制御回路は、前記所定のシステムコール命令を実行するときに実行中の他の命令が存在するときには、前記実行用クロックを停止させると共に前記他の命令の中間的な処理結果を前記退避レジスタに退避させることを特徴とする請求項3に記載のタスク処理装置。
  6. 前記処理レジスタのデータは、複数の前記退避レジスタに対して常時出力されており、
    前記タスク制御回路は、実行中のタスクに対応する前記退避レジスタに対して書き込み信号を入力することにより、前記退避レジスタに前記処理レジスタのデータを退避させることを特徴とする請求項1から5のいずれかに記載のタスク処理装置。
  7. 前記退避レジスタから前記処理レジスタへデータをロードするときに、データ送信元となる前記退避レジスタを選択するセレクタ回路を更に備え、
    複数の前記退避レジスタのデータは、前記セレクタ回路に対して常時出力されており、
    前記タスク制御回路は、実行対象として選択したタスクに対応する前記退避レジスタを指定した出力信号を前記セレクタ回路に送信することにより、前記退避レジスタのデータを前記処理レジスタへロードすることを特徴とする請求項1から6のいずれかに記載のタスク処理装置。
  8. 前記処理レジスタのデータをパラレルに送信可能なビット数のバスを介して、前記処理レジスタと複数の前記退避レジスタを接続することを特徴とする請求項1から7のいずれかに記載のタスク処理装置。
  9. 前記タスク制御回路は、外部から所定の割り込み要求信号を受信すると、前記実行制御回路に対して停止要求信号を送信し、
    前記実行制御回路は、前記停止要求信号を受信すると前記実行用クロックを供給停止させ、割込タスクを実行するためのデータを前記処理レジスタにロードした上で、前記実行用クロックを供給再開させることにより、前記割り込み要求信号に対応した割込タスクを実行させることを特徴とする請求項3に記載のタスク処理装置。
  10. CPUと、
    前記CPUの外部に設置され、複数のタスクに対してそれぞれ対応づけられる複数の退避レジスタと、
    前記CPUの外部に設置され、タスクの切り換えを制御するタスク制御回路と、を備え、
    前記CPUは、
    タスク実行のためのデータを一時的に保持する処理レジスタと、
    命令(instruction)およびオペランドをメモリから前記処理レジスタにロードし、前記処理レジスタの命令とオペランドにしたがってタスクを実行する実行制御回路と、を内蔵し、
    前記実行制御回路は、実行対象となる命令が所定のシステムコール命令であるか否かを命令復号器により判定し、前記所定のシステムコール命令であるときには所定のシステムコール信号を前記タスク制御回路に送信し、
    前記タスク制御回路は、前記所定のシステムコール信号を受信すると、実行中のタスクに対応づけられている前記退避レジスタに前記処理レジスタのデータを退避させ、次に実行すべきタスクを所定の規則にしたがって選択し、選択したタスクに対応づけられている前記退避レジスタのデータを前記処理レジスタにロードすることにより、実行対象となるタスクを切り換えることを特徴とするタスク処理装置。
  11. タスク実行のためのデータを一時的に保持する処理レジスタと、
    命令(instruction)およびオペランドをメモリから前記処理レジスタにロードし、前記処理レジスタの命令とオペランドにしたがってタスクを実行する実行制御回路と、
    前記処理レジスタのデータを退避させるためのレジスタであって、複数のタスクに対してそれぞれ対応づけられる複数の退避レジスタと、
    タスクスケジューリングのためのタスクごとの状態データを保持するレジスタであって、複数のタスクに対してそれぞれ対応づけられる複数の状態レジスタと、
    タスクの切り換えを制御するタスク切換回路と、
    複数の前記状態レジスタから出力される状態データを入力として、所定の選択条件によりタスクを選択するタスク選択回路と、を備え、
    前記実行制御回路は、実行対象となる命令が所定のシステムコール命令であるか否かを判定する命令復号器を有し、前記所定のシステムコール命令であるときには所定のシステムコール信号を前記タスク制御回路に送信し、
    前記タスク選択回路は、実行可能に待機している状態を示すREADY(レディ)状態のタスクの中から実行対象となるタスクを選択し、
    前記タスク切換回路は、前記所定のシステムコール信号を受信すると、実行中のタスクに対応づけられている前記退避レジスタに前記処理レジスタのデータを退避させ、実行中のタスクに対応する前記状態レジスタの状態データをタスク実行中を示すRUN(ラン)状態から別の状態に設定変更するとともに前記タスク選択回路からの出力により次の実行対象となるタスクを特定し、特定したタスクに対応づけられている前記退避レジスタのデータを前記処理レジスタにロードするとともにそのタスクに対応する前記状態レジスタの状態データをREADY状態からRUN状態に変更することにより、実行対象となるタスクを切り換えることを特徴とするタスク処理装置。
  12. タスク実行のためのデータを一時的に保持する処理レジスタと、
    命令(instruction)およびオペランドをメモリから前記処理レジスタにロードし、前記処理レジスタの命令とオペランドにしたがってタスクを実行する実行制御回路と、
    前記処理レジスタのデータを退避させるためのレジスタであって、複数のタスクに対してそれぞれ対応づけられる複数の退避レジスタと、
    タスクスケジューリングのためのタスクごとの状態データを保持するレジスタであって、複数のタスクに対してそれぞれ対応づけられる複数の状態レジスタと、
    タスクの切り換えを制御するタスク切換回路と、
    複数の前記状態レジスタからパラレルに出力される状態データを入力として、所定の選択条件によりタスクを選択するタスク選択回路と、
    前記退避レジスタから前記処理レジスタへデータをロードするときに、データ送信元となる前記退避レジスタを選択するセレクタ回路と、を備え、
    前記状態レジスタは、状態データの一部としてタスク優先度を保持し、
    前記処理レジスタのデータは、複数の前記退避レジスタに対して常時出力されており、
    複数の前記退避レジスタのデータは、前記セレクタ回路に対して常時出力されており、
    前記実行制御回路は、実行対象となる命令が所定のシステムコール命令であるか否かを判定する命令復号器を有し、前記所定のシステムコール命令であるときには、タスクの実行プロセスを進めるための実行用クロックを供給停止させると共に所定のシステムコール信号を前記タスク制御回路に送信し、
    前記タスク選択回路は、実行可能に待機している状態を示すREADY(レディ)状態のタスクの中から実行対象となるタスクを選択する回路であり、
    READY状態のタスクが複数あるときには、そのうちタスク優先度が最も高いタスクを実行対象として選択し、
    前記タスク切換回路は、前記所定のシステムコール信号を受信すると、実行中のタスクに対応する前記退避レジスタに対して書き込み信号を入力することにより実行中のタスクに対応づけられている前記退避レジスタに前記処理レジスタから常時出力されているデータを退避させ、実行中のタスクに対応する前記状態レジスタの状態データをタスク実行中を示すRUN(ラン)状態から別の状態に設定変更するとともに前記タスク選択回路からの出力により次の実行対象となるタスクを特定し、実行対象として特定したタスクに対応する前記退避レジスタを指定した出力信号を前記セレクタ回路に送信することにより、特定したタスクに対応づけられている前記退避レジスタから常時出力されているデータを前記処理レジスタにロードするとともにそのタスクに対応する前記状態レジスタの状態データをREADY状態からRUN状態に変更することにより、実行対象となるタスクを切り換え、
    前記実行制御回路は、前記退避レジスタから前記処理レジスタへデータがロードされたあとに前記実行用クロックを再開させて新たに実行対象として特定されたタスクを実行することを特徴とするタスク処理装置。
JP2007538204A 2006-08-24 2006-08-24 タスク処理装置 Active JP4119945B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2006/316655 WO2008023426A1 (fr) 2006-08-24 2006-08-24 Dispositif de traitement de tâche

Publications (2)

Publication Number Publication Date
JP4119945B2 true JP4119945B2 (ja) 2008-07-16
JPWO2008023426A1 JPWO2008023426A1 (ja) 2010-01-07

Family

ID=39106520

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007538204A Active JP4119945B2 (ja) 2006-08-24 2006-08-24 タスク処理装置

Country Status (6)

Country Link
US (3) US9342350B2 (ja)
EP (1) EP2056198A4 (ja)
JP (1) JP4119945B2 (ja)
CN (1) CN101529383B (ja)
TW (1) TWI426452B (ja)
WO (1) WO2008023426A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013175610A1 (ja) 2012-05-24 2013-11-28 カーネロンシリコン株式会社 タスク処理装置

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4873423B2 (ja) * 2007-12-27 2012-02-08 東芝ソリューション株式会社 仮想化プログラム、シミュレーション装置、仮想化方法
CN102231124B (zh) * 2011-07-18 2017-08-29 深圳市科陆电子科技股份有限公司 一种嵌入式系统任务的守护方法
US9372723B2 (en) * 2014-04-01 2016-06-21 Freescale Semiconductor, Inc. System and method for conditional task switching during ordering scope transitions
US9372724B2 (en) * 2014-04-01 2016-06-21 Freescale Semiconductor, Inc. System and method for conditional task switching during ordering scope transitions
US9733981B2 (en) 2014-06-10 2017-08-15 Nxp Usa, Inc. System and method for conditional task switching during ordering scope transitions
KR101943430B1 (ko) * 2014-11-05 2019-01-29 삼성전자주식회사 사용자 장치, 사용자 장치의 구동방법, 서비스제공장치 및 서비스제공장치의 구동방법
CN105874426B (zh) 2014-11-10 2019-09-03 华为技术有限公司 一种系统调用命令的批处理方法及装置
JP2018180768A (ja) * 2017-04-07 2018-11-15 ルネサスエレクトロニクス株式会社 半導体装置
JPWO2018225429A1 (ja) * 2017-06-09 2020-04-09 ソニー株式会社 情報処理装置、情報処理方法、およびプログラム
US11048552B2 (en) * 2018-05-30 2021-06-29 Texas Instruments Incorporated High-speed broadside communications and control system
CN109062997A (zh) * 2018-07-05 2018-12-21 中国电子科技集团公司第五十四研究所 一种电子围栏数据自动去重方法
CN109445939A (zh) * 2018-10-19 2019-03-08 积成电子股份有限公司 一种基于主动出让机制的软实时调度内核的调度方法
JP7257772B2 (ja) 2018-10-31 2023-04-14 ルネサスエレクトロニクス株式会社 半導体装置を用いるシステム
JP7122942B2 (ja) 2018-10-31 2022-08-22 ルネサスエレクトロニクス株式会社 半導体装置
CN111124693A (zh) * 2018-11-01 2020-05-08 烟台翼顺电子科技有限公司 Ystec-cs1多任务即时同步处理系统
US11314686B2 (en) * 2019-02-26 2022-04-26 Nxp Usa, Inc. Hardware for supporting time triggered load anticipation in the context of a real time OS
US11687362B2 (en) 2021-04-22 2023-06-27 Incredibuild Software Ltd. Storage and reuse of computing-task outputs using system-call interception
FR3129496A1 (fr) * 2021-11-25 2023-05-26 Stmicroelectronics (Grenoble 2) Sas Procédé de gestion d’événements et circuit intégré correspondant.
CN115658277B (zh) * 2022-12-06 2023-03-17 苏州浪潮智能科技有限公司 一种任务调度方法、装置及电子设备和存储介质
CN117521570B (zh) * 2024-01-05 2024-04-02 北京凯芯微科技有限公司 总线的超时检测电路、方法、芯片及电子设备

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6380334A (ja) * 1986-09-24 1988-04-11 Mitsubishi Electric Corp マイクロプロセツサ
JP2779032B2 (ja) * 1990-01-23 1998-07-23 株式会社日立製作所 情報処理装置
JPH07152788A (ja) * 1993-06-28 1995-06-16 At & T Global Inf Solutions Internatl Inc 並列検索方法及びその方法を用いた並列演算処理コンピューターシステム
JP2677202B2 (ja) 1994-08-12 1997-11-17 日本電気株式会社 マイクロプロセッサ
JPH0916409A (ja) * 1995-06-30 1997-01-17 Matsushita Electric Ind Co Ltd マイクロコンピュータ
US5812878A (en) * 1996-05-10 1998-09-22 Apple Computer, Inc. System for DMA transfer wherein controller waits before execution of next instruction until a counter counts down from a value loaded by said controller
JPH1139171A (ja) * 1997-07-18 1999-02-12 Masaharu Imai マルチタスク処理装置、マルチタスク処理制御方法及び制御プログラム記憶媒体
US6405234B2 (en) * 1997-09-11 2002-06-11 International Business Machines Corporation Full time operating system
US6128641A (en) * 1997-09-12 2000-10-03 Siemens Aktiengesellschaft Data processing unit with hardware assisted context switching capability
US6223208B1 (en) 1997-10-03 2001-04-24 International Business Machines Corporation Moving data in and out of processor units using idle register/storage functional units
US6026424A (en) * 1998-02-23 2000-02-15 Hewlett-Packard Company Method and apparatus for switching long duration tasks from synchronous to asynchronous execution and for reporting task results
JPH11272480A (ja) 1998-03-24 1999-10-08 Nippon Telegr & Teleph Corp <Ntt> オンチップリアルタイムos
US6292888B1 (en) 1999-01-27 2001-09-18 Clearwater Networks, Inc. Register transfer unit for electronic processor
JP2001075820A (ja) 1999-09-07 2001-03-23 Oki Electric Ind Co Ltd リアルタイムos装置
US6986066B2 (en) * 2001-01-05 2006-01-10 International Business Machines Corporation Computer system having low energy consumption
JP3813930B2 (ja) * 2002-01-09 2006-08-23 松下電器産業株式会社 プロセッサ及びプログラム実行方法
US7076681B2 (en) * 2002-07-02 2006-07-11 International Business Machines Corporation Processor with demand-driven clock throttling power reduction
US6965986B2 (en) 2002-09-19 2005-11-15 International Business Machines Corporation Method and apparatus for implementing two-tiered thread state multithreading support with high clock rate
US7096470B2 (en) * 2002-09-19 2006-08-22 International Business Machines Corporation Method and apparatus for implementing thread replacement for optimal performance in a two-tiered multithreading structure
JP2004220070A (ja) * 2003-01-09 2004-08-05 Japan Science & Technology Agency コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
WO2004097642A1 (en) * 2003-04-29 2004-11-11 International Business Machines Corporation Embedded digital processing system with self-configured operation
US7502961B2 (en) * 2004-09-09 2009-03-10 Microsoft Corporation Method, system, and apparatus for providing alert synthesis in a data protection system
JP2006092042A (ja) * 2004-09-21 2006-04-06 Sanyo Electric Co Ltd 情報処理装置及びコンテキスト切り替え方法
US7765547B2 (en) * 2004-11-24 2010-07-27 Maxim Integrated Products, Inc. Hardware multithreading systems with state registers having thread profiling data
US7600101B2 (en) 2005-01-13 2009-10-06 Hewlett-Packard Development Company, L.P. Multithreaded hardware systems and methods
US7921425B2 (en) * 2005-03-14 2011-04-05 Cisco Technology, Inc. Techniques for allocating computing resources to applications in an embedded system
US8117614B2 (en) * 2006-05-19 2012-02-14 International Business Machines Corporation Extract CPU time facility

Cited By (2)

* Cited by examiner, † Cited by third party
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
EP2056198A4 (en) 2010-08-18
US9753729B2 (en) 2017-09-05
US20160232004A1 (en) 2016-08-11
CN101529383A (zh) 2009-09-09
US9342350B2 (en) 2016-05-17
TW200828120A (en) 2008-07-01
TWI426452B (zh) 2014-02-11
CN101529383B (zh) 2012-05-30
WO2008023426A1 (fr) 2008-02-28
EP2056198A1 (en) 2009-05-06
US20100287360A1 (en) 2010-11-11
US20170329629A1 (en) 2017-11-16
JPWO2008023426A1 (ja) 2010-01-07

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
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

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: 20080201

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080205

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080311

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080401

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: 20080422

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080425

R150 Certificate of patent or registration of utility model

Ref document number: 4119945

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: 20110502

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110502

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: 20110502

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: 20110502

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: 20110502

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: 20110502

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: 20110502

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: 20110502

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: 20110502

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: 20110502

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120502

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: 20120502

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130502

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: 20130502

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140502

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

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

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