JPWO2009022371A1 - タスク処理装置 - Google Patents
タスク処理装置 Download PDFInfo
- Publication number
- JPWO2009022371A1 JPWO2009022371A1 JP2008522140A JP2008522140A JPWO2009022371A1 JP WO2009022371 A1 JPWO2009022371 A1 JP WO2009022371A1 JP 2008522140 A JP2008522140 A JP 2008522140A JP 2008522140 A JP2008522140 A JP 2008522140A JP WO2009022371 A1 JPWO2009022371 A1 JP WO2009022371A1
- Authority
- JP
- Japan
- Prior art keywords
- task
- circuit
- interrupt
- processing
- register
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
- G06F9/462—Saving or restoring of program or task context with multiple register sets
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Multi Processors (AREA)
Abstract
タスク処理装置は、CPU、退避回路、タスク制御回路を含む。タスク制御回路210は、タスク選択回路とタスクごとに対応づけられた状態記憶部を備える。CPUは、所定のシステムコール命令を実行するとき、その旨をタスク制御回路に通知する。タスク制御回路は、システムコール命令の実行を通知されると、タスク選択回路からの出力に応じて次に実行すべきタスクを選択する。割込回路400が高速割込要求信号を受信すると、タスク切換回路210は割込回路400により指定される割込操作命令を実行することにより、タスクの状態遷移を制御する。
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においては、タスクスイッチ時のオーバーヘッドがシステム全体のパフォーマンスに大きく影響することがある。
また、RTOSは、DMA(Direct Memory Access)転送の完了、通信パケットの受信、あるいは、キーボードの押下といった不定期的に発生するさまざまな外部要因にも即時的に対応しなければならない。通常、外部要因の発生を示す割込要求信号が受信されると、RTOSは、特別なタスクを起動して「割り込み処理」を実行する。RTOSのパフォーマンスを向上させる上では、このような外部要因対応時におけるオーバーヘッドの抑制は特に重要である。
本発明は、本発明者による上記課題認識に基づいて完成されたものであり、その目的は、マルチタスク処理においてより効率的にタスクを実行制御するための技術を提供することであり、特に、割り込み処理の高速化を実現するための技術、を提供することにある。
本発明のある態様は、タスク処理装置である。
この装置は、処理レジスタと、メモリから処理レジスタにデータをロードし、処理レジスタのデータにしたがってタスクを実行する実行制御回路と、タスクごとの状態データを保持する状態レジスタと、タスクの実行状態を制御するタスク切換回路と、所定の選択条件によりタスクを選択するタスク選択回路と、外部からの割込要求信号を処理する割込回路と、を備える。
実行制御回路は、第1のタスクがシステムコール命令を実行するとき、その旨をタスク切換回路に通知する。タスク選択回路は、実行可能に待機している状態を示すREADY(レディ)状態のタスクの中から実行対象となるタスクを選択する。
タスク切換回路は、システムコール命令実行時におけるタスク選択回路からの出力により次の実行対象となる第2のタスクを選択し、処理レジスタのデータを所定の記憶領域に退避させるとともに、第1のタスクの状態データを設定変更し、選択した第2のタスクについて記憶領域に退避されていたデータを処理レジスタにロードするとともにその状態データをREADY状態からRUN(ラン)状態に変更することにより、実行対象となるタスクを切り換える。
一方、割込回路は、外部から割込要求信号を受信すると、その割込要求信号に対応づけられている割込操作命令をタスク切換回路に送信する。タスク切換回路は、この割込操作命令にしたがってタスクの状態データを設定変更することにより、割込要求信号に対応する。
この装置は、処理レジスタと、メモリから処理レジスタにデータをロードし、処理レジスタのデータにしたがってタスクを実行する実行制御回路と、タスクごとの状態データを保持する状態レジスタと、タスクの実行状態を制御するタスク切換回路と、所定の選択条件によりタスクを選択するタスク選択回路と、外部からの割込要求信号を処理する割込回路と、を備える。
実行制御回路は、第1のタスクがシステムコール命令を実行するとき、その旨をタスク切換回路に通知する。タスク選択回路は、実行可能に待機している状態を示すREADY(レディ)状態のタスクの中から実行対象となるタスクを選択する。
タスク切換回路は、システムコール命令実行時におけるタスク選択回路からの出力により次の実行対象となる第2のタスクを選択し、処理レジスタのデータを所定の記憶領域に退避させるとともに、第1のタスクの状態データを設定変更し、選択した第2のタスクについて記憶領域に退避されていたデータを処理レジスタにロードするとともにその状態データをREADY状態からRUN(ラン)状態に変更することにより、実行対象となるタスクを切り換える。
一方、割込回路は、外部から割込要求信号を受信すると、その割込要求信号に対応づけられている割込操作命令をタスク切換回路に送信する。タスク切換回路は、この割込操作命令にしたがってタスクの状態データを設定変更することにより、割込要求信号に対応する。
処理レジスタにロードされるデータは、命令(instruction)とオペランド、オペランドを持たない命令、あるいは、プログラムカウンタやスタックポインタのような単純なデータであってもよい。このような処理方法によれば、状態レジスタによりタスクの状態を管理するので、タスク切換回路はタスク選択回路からの出力に基づいてタスクスイッチを実行できる。そして、外部から割込要求信号が受信されたときには、タスク切換回路がその割込要求信号に対応づけられている割込操作命令にしたがって状態レジスタのデータを設定変更するため、割込要求信号にハードウェア・レベルで高速に対応できることになる。
なお、以上の構成要素の任意の組合せ、本発明を方法、システム、記録媒体、コンピュータプログラムにより表現したものもまた、本発明の態様として有効である。
本発明によれば、マルチタスク処理において、より効率的なタスクの実行制御が実現される。
本実施例のタスク処理装置100は、マルチタスクOSのタスクスケジューリングを電子回路により実現し、更に、割り込み処理アルゴリズムをハードウェア・ロジックとして実装することにより、マルチタスクOSとしての処理効率を向上させている。
まず、本実施例においてマルチタスクOSのタスクスケジューリングを電子回路により実現するタスク処理装置100について「基本例」として説明する。そのあと、割り込み処理アルゴリズムの実装により、更なる高速化を実現する方法を「改良例」として説明する。以下、「本実施例」というときには、原則として、「基本例」および「改良例」の両方を示すものとする。
{基本例}
まず、本実施例においてマルチタスクOSのタスクスケジューリングを電子回路により実現するタスク処理装置100について「基本例」として説明する。そのあと、割り込み処理アルゴリズムの実装により、更なる高速化を実現する方法を「改良例」として説明する。以下、「本実施例」というときには、原則として、「基本例」および「改良例」の両方を示すものとする。
{基本例}
本実施例に示すタスク処理装置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状態に遷移する。
タスクが休止状態にあることを示す。一般タスクも特殊タスクも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状態のみである。
タスクが実行中であることを示す。すなわち、タスクがタイムスライスを割り当てられ、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状態に遷移する。
タスクが実行可能な状態にあることを示す。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解除条件に関しては後に詳述する。
タスクが所定の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種類のシステムコールを対象として説明するが、これ以外にもさまざまなシステムコールを実装可能であることはいうまでもない。
たとえば、WAIT−タスクをREADY状態に無条件で遷移させる「リリースウェイトシステムコール」や、スリープコマンドによりWAIT状態にあるタスクをREADY状態に遷移させる「ウェイクアップタスクシステムコール」などを実装してもよい。
[一般的なRTOSの設計思想]
(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種類のシステムコールを対象として説明するが、これ以外にもさまざまなシステムコールを実装可能であることはいうまでもない。
たとえば、WAIT−タスクをREADY状態に無条件で遷移させる「リリースウェイトシステムコール」や、スリープコマンドによりWAIT状態にあるタスクをREADY状態に遷移させる「ウェイクアップタスクシステムコール」などを実装してもよい。
[一般的な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」とよぶ。
この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に格納されるデータのことを「処理データ」とよぶ。
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のコンテキスト情報の退避>
<タスク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のコンテキスト情報のロード>
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にロードされる。
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のハードウェア化]
[タスク処理装置100によるRTOSのハードウェア化]
図4は、基本例におけるRTOSの概念図である。
一般的なソフトウェアRTOSと異なり、基本例におけるRTOSは、主として、CPUとは別個のハードウェアとして実現される。以下、ハードウェアによって実現されるRTOSのことを、「ハードウェアRTOS」とよぶ。基本例のRTOSは、主として、CPUとは別個のハードウェアであるため、自らの処理を実行するためにはCPUの使用権を実質的にほとんど必要としない。いいかえれば、RTOSとタスクは、CPUの使用に関してほとんど競合関係にない。図2に示した一般的なソフトウェアRTOSの場合、CPUはタスク実行用回路であるとともに、RTOS実行用回路でもあった。これに対し、基本例におけるハードウェアRTOSの場合、CPUはタスク実行回路として明確化され、タスクスケジューリング機能は後述の退避回路120とタスク制御回路200を中心として実現することができる。
一般的なソフトウェア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により主導される。
タスク処理装置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]システムコール実行
以下、システムコールと割込要求信号のそれぞれについてタスクスイッチの実行方法を説明する。
[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のコンテキスト情報の退避>
<タスク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のコンテキスト情報のロード>
<タスク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]割込要求信号の発生
[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の一部の機能をソフトウェアで実現してもよいことは当業者には理解されるところである。
(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のプログラムカウンタを更新しながら、タスクを実行する。
図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)が停止する。
第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」となる。
割込要求信号(INTR)が発生したとき、タスク切換回路210は実行制御回路152に停止要求信号(HR)をアサートする。すなわち、ORゲート176の出力は、システムコールが実行されるか、停止要求信号(HR)がアサートされたときに「1」となる。
まとめると、システムコールが実行されるか割込要求信号が発生し、かつ、CPUビジー信号が「0」となったとき、第1ANDゲート172の出力は「1」となり、第2AND174からはCPUクロックが出力されなくなる。
図8(a)は、割込要求信号発生時における各種信号の関係を示すタイムチャートである。
同図においては、まず、時刻t0において、タスク切換回路210は外部からの割込要求信号(INTR)を検出している。タスク切換回路210は、特殊タスクを実行させるため、実行制御回路152に停止要求信号(HR)をアサートする。入力タイミングt1は、検出タイミングt0とほとんど同時である。時刻t1では、CPU150のステートマシンは「タスク実行中」であり、CBUSY=1である。HR=1より、ORゲート176は「1」を出力するが、CBUSY=1ゆえにCPU150は停止しない。そのため、HR=1が入力されても、しばらくはCPUクロック(CLK)は原クロック(CLK0)に同期して出力される。
同図においては、まず、時刻t0において、タスク切換回路210は外部からの割込要求信号(INTR)を検出している。タスク切換回路210は、特殊タスクを実行させるため、実行制御回路152に停止要求信号(HR)をアサートする。入力タイミングt1は、検出タイミングt0とほとんど同時である。時刻t1では、CPU150のステートマシンは「タスク実行中」であり、CBUSY=1である。HR=1より、ORゲート176は「1」を出力するが、CBUSY=1ゆえにCPU150は停止しない。そのため、HR=1が入力されても、しばらくはCPUクロック(CLK)は原クロック(CLK0)に同期して出力される。
時間が経過し、時刻t2においてCBUSY=0に変化している。既にHR=1のため、第1ANDゲート172はHC=1を出力し、第2ANDゲート174から出力されるCPUクロックは0に固定される。一方、タスク切換回路210は、HCがアサートされたことを契機として、一般タスクから特殊タスクへタスクスイッチを開始する。詳しくは後述するが、このタスクスイッチのために要する時間はタスク制御回路200の動作クロックにして数回分である。HCがアサートされてから、タスク制御回路200の動作クロックが所定回数変化したことを条件として(時刻t3)、タスク制御回路200は停止要求信号(HR)をネゲートする。HR=0なので、実行制御回路152はCPUクロック(CLK)を再開させる。CPU150が処理を再開すると、CPU150はCBUSYを0から1に変化させる(時刻t4)。このように、CPUクロックが停止する時刻t2から時刻t3の間に、一般タスクから特殊タスクへのタスクスイッチが実行されることになる。
なお、別の処理方法として、タスク制御回路200の動作クロックが所定回数変化したことを条件とする代わりに、タスク制御回路200がタスクスイッチを完了させたことを条件として、HRをネゲートしてもよい。そして、実行制御回路152が、HRがネゲートされたことを条件として、HCをネゲートさせてもよい。HC=0となると、実行制御回路152はCPUクロック(CLK)を再開させる。こうして、タスクの実行を再開させてもよい。
なお、別の処理方法として、タスク制御回路200の動作クロックが所定回数変化したことを条件とする代わりに、タスク制御回路200がタスクスイッチを完了させたことを条件として、HRをネゲートしてもよい。そして、実行制御回路152が、HRがネゲートされたことを条件として、HCをネゲートさせてもよい。HC=0となると、実行制御回路152はCPUクロック(CLK)を再開させる。こうして、タスクの実行を再開させてもよい。
図8(b)は、システムコール実行時における各種信号の関係を示すタイムチャートである。
同図においては、まず、時刻t0において、命令復号器170がシステムコールを検出し、SC_DETECTを0から1に変化させている。時刻t0では、CPU150のステートマシンは「タスク実行中」であり、CBUSY=1である。SC_DETECT=1より、ORゲート176は「1」を出力するが、CBUSY=1ゆえにCPU150は停止しない。そのため、SC_DETECT=1が出力されても、しばらくはCPUクロック(CLK)は原クロック(CLK0)に同期して出力される。
同図においては、まず、時刻t0において、命令復号器170がシステムコールを検出し、SC_DETECTを0から1に変化させている。時刻t0では、CPU150のステートマシンは「タスク実行中」であり、CBUSY=1である。SC_DETECT=1より、ORゲート176は「1」を出力するが、CBUSY=1ゆえにCPU150は停止しない。そのため、SC_DETECT=1が出力されても、しばらくはCPUクロック(CLK)は原クロック(CLK0)に同期して出力される。
時間が経過し、時刻t1においてCBUSY=0に変化している。SC_DETECT=1、かつ、CBUSY=1となったので、HCはネゲートされ、CPUクロックは停止される。タスク切換回路210は、HC=0を入力されると、タスクスイッチ処理を開始し、書き込み信号(WT)をCPU150に出力する。WTが0から1に変化する時刻t2に退避データが処理レジスタ154にロードされる。書き込み信号(WT)は、パルス信号のため、所定時間経過後の時刻t3にWT=0となる。このWT:1→0の立ち下がり検出により命令復号器170にラッチされているSC_DETECTはリセットされる(時刻t4)。このとき、CBUSYは0から1に変化する。CBUSY=1となったので、HC=0となり、CPUクロックが再開される。CPUクロックが停止する時刻t1から時刻t4の間に、タスクスイッチが実行されることになる。
なお、別の処理方法として、WT:1→0の立ち下がり検出を条件とする代わりに、タスク制御回路200がタスクスイッチを完了させ、HRをネゲートしたことを条件として、実行制御回路152が、HCをネゲートしてもよい。HC=0となったことを条件として、SC_DETECTをリセットする。実行制御回路152はCPUクロック(CLK)を再開させ、CBUSYは0から1に変化する。
なお、別の処理方法として、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(ライトバック):実行結果をメモリに書き込む。
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にロードされ、デコードステージから続きの処理が実行されることになる。
なお、別の処理方法として、システムコール命令が実行完了するタイミングで、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は、状態レジスタ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自体が自律的に自らのタイムアウト値を定期的にデクリメントしてもよい。
(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を入力されると、そのタスクの全状態データを出力する。
(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−タスクの選択
[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−タスクの状態遷移>
タスクレディリストは、メモリ上に形成され、各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−タスクの状態遷移>
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のレジスタ格納エリアに退避されていた処理データが処理レジスタにロードされる。
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−タスクの選択
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信号を入力とする。
ここでは、タスク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の順序管理が不要となる。
第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−タスクの状態遷移>
ここでは、RUN−タスクをタスクJとして説明する。
A1.タスク切換回路210は、タスクJのタスク状態レジスタ258に「READY」を設定する。
A2.タスク切換回路210は、タスクJのタイマ252をセットしてREADY経過時間の計測を開始させる。
こうして、タスクJはRUN→READYに状態遷移する。処理データは、先述したようにタスクJの退避レジスタ110に退避される。処理レジスタ154と退避レジスタ110をつなぐバスは、処理データをパラレルに伝送可能であるため、A1とA2の処理は1クロック時間で実行可能である。
<READY−タスクの状態遷移>
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クロック時間で実行可能である。
こうして、特定されたタスクは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状態に状態遷移する。
ウェイトセマフォリストを説明する前に、セマフォについて簡単に説明する。セマフォテーブル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によるセマフォ処理
セマフォカウンタ>0のとき:ウェイトセマフォシステムコールを実行したタスクは、RUN→READYに遷移する。このときセマフォカウンタはデクリメントされる。
セマフォカウンタ=0のとき:ウェイトセマフォシステムコールを実行したタスクは、RUN→WAITに遷移する。セマフォカウンタはデクリメントされない。
ウェイトセマフォシステムコールを実行したタスクがWAIT状態からREADY状態に遷移するためには、別のタスクがリリースセマフォシステムコールを実行する必要がある。
[1]一般的なソフトウェアRTOSによるセマフォ処理
一般的なソフトウェアRTOSはウェイトセマフォリストにより、セマフォ待ちを理由としてWAIT状態にあるタスク(以下、特に、「セマフォ待ちタスク」とよぶ)のTCBを管理する。ウェイトセマフォリストは、図11のタスクレディリストと同等の形状のリストであり、メモリ上に形成される。各セマフォ待ちタスクのTCBは、ポインタによって連結される。優先順位ポインタ280は、該当タスク優先順位のセマフォ待ちタスクのTCBの先頭アドレスを指す。
一般的なソフトウェアRTOSは、リリースセマフォシステムコールが実行されたとき、このウェイトセマフォリストを走査しながら、WAIT状態からREADY状態に遷移させるべきセマフォ待ちタスクを選択する。ウェイトセマフォシステムコールおよびリリースセマフォシステムコール実行時におけるRTOSの処理は以下の通りである。
<ウェイトセマフォシステムコールの実行>
一般的なソフトウェア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も設定する。
<リリースセマフォシステムコールの実行>
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は、タスクレディリストに追加される。
(検出されたとき)
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によるセマフォ処理
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信号を入力とする。
ここでも、タスク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に状態遷移する。
<リリースセマフォシステムコールの実行>
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に状態遷移させる。
(いずれかの判定回路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.リリースセマフォシステムコールによりセマフォを解放できるタスクは、ウェイトセマフォシステムコールによりセマフォを獲得したタスクに限らない。これに対し、リリースミューテックスシステムコールによりミューテックスを解放できるタスクは、ウェイトミューテックスシステムコールによりミューテックスを獲得したタスクだけである。
1.セマフォカウンタは1以上の整数を設定可能である。これに対し、ミューテックスはセマフォカウンタが1または0の特殊なセマフォである。セマフォカウンタが2以上のときには、同一セマフォを2以上のタスクが獲得できる。しかし、ミューテックスの場合、あるミューテックスを獲得できるタスクは常に1つだけである。
2.リリースセマフォシステムコールによりセマフォを解放できるタスクは、ウェイトセマフォシステムコールによりセマフォを獲得したタスクに限らない。これに対し、リリースミューテックスシステムコールによりミューテックスを解放できるタスクは、ウェイトミューテックスシステムコールによりミューテックスを獲得したタスクだけである。
ミューテックスの解放に際し、複数のWAIT−タスクの中からREADY−タスクを選択するポリシは以下の通りである。
1.WAIT−タスクであること(第1条件)。
2.WAIT−タスクのうち、解放ミューテックスを待機ミューテックスとするタスクであること(第2条件)
3.そのようなタスクが複数存在するときには、最もタスク優先順位の高いタスクであること(第3条件)。
4.最もタスク優先順位の高いタスクが複数存在するときには、WAIT状態になった時期が最も古いタスクであること(第4条件)。
このような4つの条件のことを、まとめて「ミューテックス待機解除条件」とよぶことにする。
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経過時間の計測を開始させる。
<リリースミューテックスシステムコールの実行>
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に状態遷移させる。
[イベント処理]
(いずれかの判定回路が「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とフラグパターン(以下、「セットフラグパターン」とよぶ)をパラメータとする。セットイベントシステムコールが実行されると、該当イベントについて、カレントフラグパターンは、セットフラグパターンとの論理和に変更される。たとえば、カレントフラグパターン「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によるイベント処理
[1]一般的なソフトウェアRTOSによるイベント処理
ウェイトイベントシステムコールおよびセットイベントシステムコール実行時における一般的なRTOSの処理は以下の通りである。一般的なRTOSにおいては、イベント管理のために、メモリ上にイベントテーブルを保持する。このイベントテーブルにおいては、イベントID、カレントフラグパターンだけではなく、通常、そのイベントを待機イベントとしてWAIT状態にあるタスク(以下、「イベント待ちタスク」とよぶ)のタスクID、待機フラグパターン、フラグ条件が対応づけられて保持される。
<ウェイトイベントシステムコールの実行>
<ウェイトイベントシステムコールの実行>
A1.RTOSは、システムコールで指定されたイベントのカレントフラグパターンをイベントテーブルから読み出す。
A2.カレントフラグパターンと待機フラグパターンをフラグ条件にしたがって比較し、WAIT解除条件の成否を判定する。
(WAIT解除条件が成立するとき)
A3.システムコールを実行したタスクのタスク状態をRUN→READYに状態遷移させる。
(WAIT解除条件が成立しないとき)
A3.イベントテーブルに、システムコールを実行したタスクのタスクIDを記録する。
A4.イベントテーブルに待機フラグパターンを記録する。
A5.イベントテーブルにフラグ条件を記録する。
A6.システムコールを実行したタスクのタスク状態をRUN→WAITに状態遷移させる。
<セットイベントシステムコールの実行>
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−タスクの選択が行われる。
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によるイベント処理
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にフラグ条件をそれぞれ設定する。
<セットイベントシステムコールの実行>
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に状態遷移させる。
[タイムアウト処理]
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によるタイムアウト処理
[1]一般的なソフトウェアRTOSによるタイムアウト処理
ソフトウェアによる一般的なRTOSの場合、WAIT状態のタスクのTCBにはタイムアウト値が設定され、このタイムアウト値は定期的にデクリメントされる。RTOSは周期的にCPUの処理に割り込みをかけ、全TCBをチェックし、タイムアウト値がゼロに至ったWAIT−タスクを検出する。このようなタスクが検出されたときには、RTOSはそのタスクのタスク状態をWAITからREADYに状態遷移させる。
[2]基本例のハードウェアRTOSによるタイムアウト処理
[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]
[有限ステートマシンとしてのタスク切換回路210]
図15は、基本例におけるタスク切換回路210の状態遷移図である。
初期化処理(A1)においては、全タスクがIDLE状態にある。初期化処理が完了すると(S10)、いずれかのタスクがRUN−タスクとなりタスク実行状態(A2)となる。割込要求信号が検出されると(S12)、特殊タスクがRUN−タスクとなり、割り込み処理(A3)が実行される。割り込み処理が終了すると(S14)、タスク切換回路210は、一般タスクからRUN−タスクを選択し、A2に遷移する。
初期化処理(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]
基本例に関連して、更に、タスク処理装置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へタスクスイッチするとして、その処理過程を説明する。
タスク制御回路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を追加する。
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の使用権を取得する。
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]
[退避回路120を搭載しないタイプのタスク処理装置100]
図17は、図5のタスク処理装置100のうち、退避回路120を搭載しないタスク処理装置100の回路図である。
退避回路120を搭載しない代わりに、割込インタフェース回路324を追加している。退避回路120を搭載しないため、処理データはメモリのTCBに退避される。処理データの退避・ロードに関してはソフトウェアベースのRTOSにより実現される。したがって、RTOSはタスクスイッチに際して、CPU150の使用権を一時的に取得する必要が生じる。以下、タスクAからタスクBへタスクスイッチするとして、その処理過程を説明する。
退避回路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倍の速度で動作することが確認されている。
{改良例}
{改良例}
次に、改良例として、割り込み処理をハードウェア・ロジックにより実現するタスク処理装置100について説明する。
図18は、一般的なソフトウェアOSによる割り込み処理のタイムチャートである。
ソフトウェアOSは、割込コントローラ(図示せず)から割込要求信号を受信すると、割込ハンドラ、すなわち、基本例でいう特殊タスクを起動する。キーボード押下、通信パケットの受信、DMA転送の完了、あるいは、単なる所定時間の経過といったさまざまな事象が割込要求信号の発生契機となり得る。特殊タスクはソフトウェアにより実装されるタスクであり、割込要因に対応してさまざまな割り込み処理を実行する。
ソフトウェアOSは、割込コントローラ(図示せず)から割込要求信号を受信すると、割込ハンドラ、すなわち、基本例でいう特殊タスクを起動する。キーボード押下、通信パケットの受信、DMA転送の完了、あるいは、単なる所定時間の経過といったさまざまな事象が割込要求信号の発生契機となり得る。特殊タスクはソフトウェアにより実装されるタスクであり、割込要因に対応してさまざまな割り込み処理を実行する。
同図においては、まず、一般タスク実行中に割込要求信号INTR検出されている。即時対応すべき割込要求信号である場合、実行中の一般タスクは中断され、OSに実行権が移る(S100)。OSは、一般タスクのコンテキスト情報をTCBに退避させ(S102)、特殊タスクを起動する(S104)。
特殊タスクは、割込要因を解析する(S106)。割込要求信号により割込要因レジスタ(図示せず)へのさまざまな書き込みが実行されるため、割込要因レジスタを調べることにより割込要因を特定できる。特殊タスクは、割込要因に対応して実行すべき割り込み処理を判定し、割り込み処理を開始する。割り込み処理の過程においてはさまざまなシステムコール命令が実行されることになる。システムコール命令を実行するとき、再び、OSに実行権が移る(S108)。OSは、指定されたシステムコールを実行する(S110)。システムコール実行後、特殊タスクに実行権が再移行する(S112)。割り込み処理は優先度の高い処理であるため、通常、特殊タスクの処理が完了しない限り、一般タスクに実行権が移ることはない。
特殊タスクは、割り込み処理を継続し(S114)、再びシステムコール命令を実行するときには、OSに実行権が移行する(S116)。このように特殊タスクとOSが交代で実行権を取得しながら、特殊タスクに最後の実行権が移行し(S118)、特殊タスクは割り込み処理を完了する(S120)。割り込み処理が完了すると、OSに実行権が移行し(S122)、特殊タスクから一般タスクへのタスクスイッチが実行される(S124)。こうして、一般タスクによる通常処理が再開されることになる(S126)。
基本例に示したタスク処理装置100は、RTOSとしての機能をハードウェア・ロジックにより実現している点がソフトウェアOSと異なるが、割り込み処理における基本的な流れはソフトウェアOSとほぼ同様である。ただし、基本例に関連して説明したように、S102やS124におけるタスクスイッチやS110等のシステムコール実行は、ソフトウェアOSに比べて格段に高速化される。
基本例のタスク処理装置100の場合、S100、S108、S116、S122にてCPUクロック(CLK)を停止させた上で、RTOSの処理が実行されることになる。また、S104、S112、S118、S126によりCPUクロック(CLK)を再開せた上で、特殊タスクや一般タスクの処理が実行されることになる。特殊タスクは、タスク優先順位が特に高いタスクであるが、CPUクロック(CLK)にしたがって動作するコンテキストベースのタスクである点では一般タスクと同じである。
基本例のタスク処理装置100の場合、S100、S108、S116、S122にてCPUクロック(CLK)を停止させた上で、RTOSの処理が実行されることになる。また、S104、S112、S118、S126によりCPUクロック(CLK)を再開せた上で、特殊タスクや一般タスクの処理が実行されることになる。特殊タスクは、タスク優先順位が特に高いタスクであるが、CPUクロック(CLK)にしたがって動作するコンテキストベースのタスクである点では一般タスクと同じである。
改良例においては、このような割り込み処理、具体的には特殊タスクの機能の一部をハードウェア・ロジックにより実現することにより、割り込み処理を更に高速化する。
割り込み処理の内容はさまざまであるが、割込要求信号によっては、単純で定型的な処理内容となることも多い。たとえば、ある一般タスクAがDMA転送を開始し、DMA転送の完了を待つという状況を想定する。一般タスクAはDMA転送開始時において、ウェイトイベントシステムコールを実行して、WAIT状態に移行する。DMA転送が完了すると、所定の割込要求信号が(基本例の)タスク切換回路210に入力される。このとき起動される特殊タスクは、セットイベントシステムコールを実行して、DMA転送完了の旨を示すフラグパターンをイベントテーブル214に設定する。イベントテーブル214のカレントフラグパターンが変化することにより、一般タスクAのWAIT解除条件が成立し、一般タスクAはREADY状態に移行する。このように、DMA転送完了にともなって実行される割り込み処理の内容は比較的単純である。
そこで、改良例におけるタスク処理装置100は、割り込み処理の内容が比較的単純であり、好ましくは発生頻度の高い割込要求信号を「高速割込要求信号INTR(H)」として事前に登録しておく。改良例における割込要求信号は高速割込要求信号INTR(H)と「通常割込要求信号INTR(N)」の2種類に大別される。
図19は、改良例におけるタスク処理装置100の回路図である。
改良例におけるタスク処理装置100も、CPU150に加えて退避回路120とタスク制御回路200を含む。改良例におけるタスク処理装置100には、更に、割込回路400が追加される。
改良例におけるタスク処理装置100も、CPU150に加えて退避回路120とタスク制御回路200を含む。改良例におけるタスク処理装置100には、更に、割込回路400が追加される。
高速割込要求信号INTR(H)は、割込回路400に入力される。割込回路400の構成および割込回路400による高速割込要求信号の処理方法については、後述する。通常割込要求信号INTR(N)は、基本例と同じく、タスク切換回路210に直接入力され、特殊タスクにより割り込み処理される。高速割込要求信号についての割り込み処理(以下、「高速割り込み処理」とよぶ)は通常割込要求信号についての割り込み処理(以下、「通常割り込み処理」とよぶ)よりも高速である。一方、通常割り込み処理の場合には、ソフトウェアの特殊タスクとして処理内容の詳細を柔軟に定義できるというメリットがある。改良例におけるタスク処理装置100は、高速割込要求信号と通常割込要求信号を併用することにより、RTOSとしての汎用性を維持しつつ高速化を図っている。
図20は、割込回路400の回路図である。
割込回路400は、信号選択回路402、操作回路404および記憶部406を含む。INTR(H)_0〜INTR(H)_i−1のi個の高速割込要求信号は、不定期的に信号選択回路402に入力される。短期間に複数の高速割込要求信号INTR(H)が入力されることもあるし、同時に複数の高速割込要求信号INTR(H)が入力されることもある。信号選択回路402は、受信した高速割込要求信号INTR(H)を一時的に蓄積できる。
割込回路400は、信号選択回路402、操作回路404および記憶部406を含む。INTR(H)_0〜INTR(H)_i−1のi個の高速割込要求信号は、不定期的に信号選択回路402に入力される。短期間に複数の高速割込要求信号INTR(H)が入力されることもあるし、同時に複数の高速割込要求信号INTR(H)が入力されることもある。信号選択回路402は、受信した高速割込要求信号INTR(H)を一時的に蓄積できる。
信号選択回路402は、バッファリングしている高速割込要求信号INTR(H)の中から1つの高速割込要求信号INTR(H)を所定の選択規則に基づいて選択する。ここでいう選択規則は、設計要件に応じて任意に決定されればよい。たとえば、高速割込要求信号INTR(H)ごとに優先順位を設定しておき、複数の高速割込要求信号INTR(H)がバッファリングされているときには、そのうち優先順位が最も高い高速割込要求信号INTR(H)を選択するとしてもよい。あるいは、信号選択回路402への入力タイミングが最も古い高速割込要求信号INTR(H)を選択するとしてもよいし、ランダムに選択するとしてもよい。高速割込要求信号INTR(H)_n(nは0〜i-1までの整数)が選択されると、信号選択回路402は、対応する信号QINT_nをアサートする。
操作回路404は、QINT_nをアサートされると、ISROP信号をアサートする。ISROP信号のアサートにより、高速割り込み処理中であることが信号選択回路402に伝えられる。ISROP信号がアサートされると、ISROP信号がネゲートされるまで信号選択回路402は次のQINTをアサートしない。ISROP信号がネゲートされると、信号選択回路402は次の処理対象となる高速割込要求信号INTR(H)を選択可能となる。
QINT_nがアサートされると、操作回路404は、高速割り込み処理の実行をタスク切換回路210に要求するためにISR_RQもアサートする。ISR_RQがアサートされると、タスク切換回路210は、CPUクロック(CLK)を供給停止させる。こうして、一般タスクは実行停止される。
操作回路404は、QINT_nに応じて、いいかえれば、選択された高速割込要求信号INTR(H)_nに応じて、DSC_ADD[k−1:0]に所定のアドレスADD[n]を設定する。DSC_ADD[k−1:0]=ADD[n]の入力により、記憶部406のアドレスADD[n]に保持されている割込操作命令p0がISR_DT[31:0]としてタスク切換回路210に送信される。タスク切換回路210は、受信した割込操作命令p0にしたがって高速割り込み処理を実行する。
本実施例における割込操作命令は、図22にて後述するように32ビットサイズに正規化されており、その最上位ビットISR_DT[31]により、後続の割込操作命令の存否が示される。なお、割込操作命令は、64ビット、128ビット等、32ビット以外の任意のサイズにて正規化されてもよい。最上位ビットISR_DT[31]=1のときには、タスク切換回路210はISR_NXをアサートして、後続の割込操作命令p1を操作回路404に要求する。操作回路404は、先ほどのアドレスADD[n]に1ワード(本実施例においては32ビット)を加算したアドレスADD[n]+1をDSC_ADD[k−1:0]に設定する。アドレスADD[n]+1に保持されている割込操作命令p1がISR_DT[31:0]としてタスク切換回路210に送信される。タスク切換回路210は、受信した割込操作命令p1にしたがって高速割り込み処理を続行する。
最上位ビットISR_DT[31]=0のときには、タスク切換回路210はISR_ENDをアサートして、高速割り込み処理の完了を操作回路404に通知する。操作回路404は、ISROPをネゲートする。ISROPがネゲートされると、信号選択回路402は、別の高速割込要求信号INTR(H)を選択して、新たにQINTをアサート可能となる。
なお、本改良例においては、ISR_END信号が操作回路404に入力され、操作回路404がISROPをネゲートすることにより、信号選択回路402を制御している。変形例として、タスク切換回路210は、高速割り込み処理が完了したときには、直接、信号選択回路402にISR_END信号を送信して、信号選択回路402を制御してもよい。
なお、本改良例においては、ISR_END信号が操作回路404に入力され、操作回路404がISROPをネゲートすることにより、信号選択回路402を制御している。変形例として、タスク切換回路210は、高速割り込み処理が完了したときには、直接、信号選択回路402にISR_END信号を送信して、信号選択回路402を制御してもよい。
図21は、記憶部406のデータ構造図である。
本改良例における記憶部406は、メモリである。アドレス「0x000〜0x0FF」には、高速割込要求信号INTR(H)_0に対応した割込操作命令群が保持されている。同様にして、アドレス「0x100〜0x1FF」には、高速割込要求信号INTR(H)_1に対応した割込操作命令群が保持されている。本改良例における割込操作命令は、システムコール命令である。たとえば、信号選択回路402が高速割込要求信号INTR(H)_0を選択すると、操作回路404は高速割込要求信号INTR(H)_0の最初のアドレスである「0x000」をDSC_ADD[k−1:0]に指定する。記憶部406からは、該当する割込操作命令「systemcall_00」がタスク切換回路210に送信される。割込操作命令「systemcall_00」には、後続の割込操作命令「systemcall_01」が存在するため、割込操作命令「systemcall_00」の最上位ビットには「1」が設定されている。タスク切換回路210は、割込操作命令「systemcall_00」を実行したあと、後続の割り込み操作命令を要求するためにISR_NXをアサートする。
本改良例における記憶部406は、メモリである。アドレス「0x000〜0x0FF」には、高速割込要求信号INTR(H)_0に対応した割込操作命令群が保持されている。同様にして、アドレス「0x100〜0x1FF」には、高速割込要求信号INTR(H)_1に対応した割込操作命令群が保持されている。本改良例における割込操作命令は、システムコール命令である。たとえば、信号選択回路402が高速割込要求信号INTR(H)_0を選択すると、操作回路404は高速割込要求信号INTR(H)_0の最初のアドレスである「0x000」をDSC_ADD[k−1:0]に指定する。記憶部406からは、該当する割込操作命令「systemcall_00」がタスク切換回路210に送信される。割込操作命令「systemcall_00」には、後続の割込操作命令「systemcall_01」が存在するため、割込操作命令「systemcall_00」の最上位ビットには「1」が設定されている。タスク切換回路210は、割込操作命令「systemcall_00」を実行したあと、後続の割り込み操作命令を要求するためにISR_NXをアサートする。
操作回路404は「0x000」に1ワードを加算したアドレス「0x001」をDSC_ADD[k−1:0]に新たに指定する。記憶部406からは、続きの割込操作命令「systemcall_01」がタスク切換回路210に送信されることになる。「syscall_01」の最上位ビットは「0」にセットされており、タスク切換回路210は、高速割込要求信号INTR(H)_0についての高速割り込み処理として、「syscall_01」が最後の割込操作命令であることを認識できる。タスク切換回路210は、割込操作命令「syscall_01」の実行を完了すると、ISR_ENDをアサートして、高速割り込み処理の終了を通知する。
図22は、割込操作命令のデータ構造を示す。
先述のように、ISR_DT[31]は後続の割込操作命令の有無を示す。ISR_DT[30:24]により、システムコールの種類が示される。ISR_DT[30:24]=0000001は「セットイベントシステムコール」を示す。このため、割込操作命令410aはセットイベントシステムコールの実行命令である。ISR_DT[23:8]はセットフラグパターン、ISR_DT[7:0]はイベントIDを示す。タスク切換回路210は、割込操作命令410aを受信すると、基本例と同様の処理方法にてイベントテーブル214を設定する。
先述のように、ISR_DT[31]は後続の割込操作命令の有無を示す。ISR_DT[30:24]により、システムコールの種類が示される。ISR_DT[30:24]=0000001は「セットイベントシステムコール」を示す。このため、割込操作命令410aはセットイベントシステムコールの実行命令である。ISR_DT[23:8]はセットフラグパターン、ISR_DT[7:0]はイベントIDを示す。タスク切換回路210は、割込操作命令410aを受信すると、基本例と同様の処理方法にてイベントテーブル214を設定する。
ISR_DT[30:24]=0000010は「リリースセマフォシステムコール」を示す。このため、割込操作命令410bはリリースセマフォシステムコールの実行命令である。ISR_DT[7:0]は、解放セマフォのセマフォIDを示す。ISR_DT[30:24]=0000011は「リリースウェイトシステムコール」を示す。このため、割込操作命令410cはリリースウェイトシステムコールの実行命令である。ISR_DT[4:0]は、WAIT状態から解放すべきタスクのタスクIDを示す。ISR_DT[30:24]=0000100は「ウェイクアップタスクシステムコール」を示す。このため、割込操作命令410dはウェイクアップタスクシステムコールの実行命令である。ISR_DT[4:0]は、WAIT状態から解放すべきタスクのタスクIDを示す。ISR_DT[30:24]=0000101は「起動システムコール」を示す。このため、割込操作命令410eは起動システムコールの実行命令である。ISR_DT[4:0]は、起動すべきタスクのタスクIDを示す。このほかにもさまざまなシステムコールが割込操作命令として記憶部406に登録されてもよい。
記憶部406は、ROM(Read Only Memory)として提供されてもよいし、読み書き可能なRAM(Random Access Memory)として提供されてもよい。記憶部406の内容をアプリケーションにより書き換え可能であれば、高速割り込み処理の内容をソフトウェアにより設定変更できる。
図23は、高速割り込み処理の過程を示すシーケンス図である。
まず、信号選択回路402は、処理対象となる高速割込要求信号INTR(H)_nを選択し(S130)、QINT_nをアサートする(S132)。操作回路404は、ISROPをアサートして、高速割り込み処理の最中である旨を信号選択回路402に通知する(S134)。信号選択回路402は、ISROPをアサートされると、新たな高速割込要求信号を受信しても、バッファリングしておき、QINTをアサートすることはない。
まず、信号選択回路402は、処理対象となる高速割込要求信号INTR(H)_nを選択し(S130)、QINT_nをアサートする(S132)。操作回路404は、ISROPをアサートして、高速割り込み処理の最中である旨を信号選択回路402に通知する(S134)。信号選択回路402は、ISROPをアサートされると、新たな高速割込要求信号を受信しても、バッファリングしておき、QINTをアサートすることはない。
一方、操作回路404は、QINT_nをアサートされると、ISR_RQをアサートして、高速割り込み処理の開始をタスク切換回路210に要求する(S136)。このとき、タスク切換回路210は、CPUクロック(CLK)を停止させ、高速割り込み処理の開始に備える。操作回路404は、QINT_nに対応するアドレスADD[n]をDSC_ADDに指定して、記憶部406から割込操作命令p0を読み出す(S138)。割込操作命令p0は、ISR_DT[31:0]として、タスク切換回路210に送信される(S140)。
タスク切換回路210は、受信した割込操作命令p0にしたがって、セマフォテーブル212やイベントテーブル214、状態記憶部220の設定内容を変更する。より具体的には、タスク切換回路210は、一般タスクが、リリースセマフォシステムコール(シグナリングセマフォシステムコール)やセットイベントシステムコール(セットフラグシステムコール)を発行するときと同等の処理プロセスを実行することにより、セマフォテーブル212やイベントテーブル214、状態記憶部220の設定内容を変更する。割込操作命令の処理内容については、基本例に示したシステムコール命令の処理内容と同様である。割込操作命令の最上位ビットに「1」が設定されていれば、タスク切換回路210は、ISR_NXをアサートして次の割込操作命令p1を操作回路404に要求する(S144)。操作回路404は、次の割込操作命令p1をロードし(S146)、割込操作命令p1はタスク切換回路210に送信される(S148)。
タスク切換回路210が最後の割込操作命令pxを実行したとき、すなわち、最上位ビットに「0」が設定されている割込操作命令pxを実行したとき、タスク切換回路210はISR_ENDをアサートする(S152)。操作回路404は、高速割り込み処理の完了を認識し、ISROPをネゲートする(S154)。こうして、信号選択回路402は次の高速割込要求信号を選択可能となる。
図24は、改良例におけるタスク切換回路210の状態遷移図である。
改良例においては、図15に示した状態遷移図に加えて、高速割り込み処理(A6)が追加されている。また、通常割り込み処理(A3)は、図15に示した割り込み処理(A3)と同じである。そのほかにも、基本例と同一の符号を付した構成は、同一の処理内容を示している。
改良例においては、図15に示した状態遷移図に加えて、高速割り込み処理(A6)が追加されている。また、通常割り込み処理(A3)は、図15に示した割り込み処理(A3)と同じである。そのほかにも、基本例と同一の符号を付した構成は、同一の処理内容を示している。
タスク実行中(A2)において、高速割込要求信号INTR(H)が検出されると(S24)、ISR_RQがアサートされて、高速割り込み処理(A6)が実行される。割込回路400がタスク切換回路210に割込操作命令を送信すると(S26)、タスク切換回路210は対応したシステムコール処理(A4)を実行する。システムコール命令の実行が完了すると、高速割り込み処理(A6)に状態遷移する(S28)。更に処理すべき割込操作命令が残っていなければ、高速割り込み処理は終了して(S30)、次に実行すべき一般タスクが選択される(A5)。
図25は、改良例のタスク処理装置100による高速割り込み処理の処理過程を示すタイムチャートである。
同図においては、まず、一般タスク実行中に割込要求信号INTRが検出されている。即時対応すべき割込要求信号である場合、CPUクロック(CLK)の停止により、実行中の一般タスクは中断され、割込回路400とタスク切換回路210による高速割り込み処理が開始される(S160)。
同図においては、まず、一般タスク実行中に割込要求信号INTRが検出されている。即時対応すべき割込要求信号である場合、CPUクロック(CLK)の停止により、実行中の一般タスクは中断され、割込回路400とタスク切換回路210による高速割り込み処理が開始される(S160)。
割込回路400は、適宜、割込操作命令を読み出し、タスク切換回路210が割込操作命令として指定されるシステムコール命令を実行する。こうして一連のシステムコールにより実現される高速割り込み処理が完了すると(S162)、タスク切換回路210は次のRUN−タスクを選択する(S164)。選択後、CPUクロック(CLK)が再開され、一般タスクによる通常処理が再開される(S166)。
改良例に示したタスク処理装置100によれば、高速割り込み処理を割込回路400とタスク切換回路210の協働によりハードウェア・レベルで実現できる。本発明者らの実験によると、基本例におけるタスク処理装置100に比べて、改良例におけるタスク処理装置100は更に約4倍の速度で動作することが確認されている。記憶部406を書き込み可能メモリとして形成することにより、高速割り込み処理であっても、その処理内容をある程度柔軟に設定できる。
従来、OSをはじめとするソフトウェアを高速実行するためにさまざまな方法が試みられてきた。こういった試みは、CPUクロック数の増加、メモリ容量やレジスタ容量の増加、あるいは、複数のCPUによる並列処理、更には、ネットワーク分散処理といった大規模化・複雑化を指向することが多い。
これに対して、本実施例に示したタスク処理装置100の場合、既存のCPU150に退避回路120やタスク制御回路200を追加することにより、処理効率を飛躍的に向上させている。ソフトウェアOSの場合、本来実行したいタスクスイッチ等の処理を実現するために、TCBやタスクレディリストの管理といった付随的処理を実行せざるを得ない。これに対して、タスク処理装置100は、タスクスイッチやタスクの状態管理、割り込み処理をハードウェア・ロジックにより実現しているため、このようなソフトウェア特有のオーバーヘッドから解放されている。このため、消費電力やコストの増加を抑制しつつ高速化を実現するという理想的なシステムとなっている。改良例に示したように、高速割り込み処理のアルゴリズムを電子回路により実現することにより、いっそうの高速化が実現される。
これに対して、本実施例に示したタスク処理装置100の場合、既存のCPU150に退避回路120やタスク制御回路200を追加することにより、処理効率を飛躍的に向上させている。ソフトウェアOSの場合、本来実行したいタスクスイッチ等の処理を実現するために、TCBやタスクレディリストの管理といった付随的処理を実行せざるを得ない。これに対して、タスク処理装置100は、タスクスイッチやタスクの状態管理、割り込み処理をハードウェア・ロジックにより実現しているため、このようなソフトウェア特有のオーバーヘッドから解放されている。このため、消費電力やコストの増加を抑制しつつ高速化を実現するという理想的なシステムとなっている。改良例に示したように、高速割り込み処理のアルゴリズムを電子回路により実現することにより、いっそうの高速化が実現される。
以上、本発明を実施例をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
本発明によれば、マルチタスク処理において、より効率的なタスクの実行制御が実現される。
Claims (7)
- タスク実行のためのデータを一時的に保持する処理レジスタと、
命令(instruction)およびオペランドをメモリから前記処理レジスタにロードし、前記処理レジスタの命令とオペランドにしたがってタスクを実行する実行制御回路と、
タスクの実行状態を示す状態データを保持する状態レジスタと、
タスクの実行状態を制御するタスク切換回路と、
前記状態データに基づいて、所定の選択条件によりタスクを選択するタスク選択回路と、
外部からの割込要求信号を処理する割込回路と、を備え、
前記実行制御回路は、実行中の第1のタスクが所定のシステムコール命令を実行するとき、所定のシステムコール信号を前記タスク切換回路に送信し、
前記タスク選択回路は、実行可能に待機している状態を示すREADY(レディ)状態のタスクの中から次の実行対象となるタスクを選択し、
前記タスク切換回路は、前記システムコール信号を受信したときの前記タスク選択回路からの出力により次の実行対象となる第2のタスクを選択し、前記処理レジスタのデータを所定の記憶領域に退避させるとともに、前記第1のタスクについての状態データをタスク実行中を示すRUN(ラン)状態から別の状態に設定変更し、前記第2のタスクについて前記記憶領域に退避されていたデータを前記処理レジスタにロードするとともに前記第2のタスクについての状態データをREADY状態からRUN状態に変更することにより、実行対象となるタスクを切り換え、
前記割込回路は、前記割込要求信号を受信したとき、前記割込要求信号にあらかじめ対応づけられている割込操作命令を前記タスク切換回路に送信し、
前記タスク切換回路は、前記割込操作命令にしたがってタスクの状態データを変更することを特徴とするタスク処理装置。 - 前記割込回路は、
外部から割込要求信号を受信して一時的に保持し、保持されている1以上の割込要求信号の中からいずれかの割込要求信号を処理対象として選択する信号選択回路と、
前記選択された割込要求信号に対応する割込操作命令を前記タスク切換回路に送信する操作回路と、を含み、
前記タスク切換回路は、前記割込操作命令の実行を完了したとき、前記割込回路に対して操作完了信号を送信し、
前記信号選択回路は、前記操作完了信号が受信されたことを条件として、次の処理対象となる割込要求信号を前記操作回路に送信することを特徴とする請求項1に記載のタスク処理装置。 - 前記タスク切換回路は、前記割込操作命令の実行を完了したとき、前記割込回路のうちの前記操作回路に前記操作完了信号を送信し、
前記操作回路は、前記操作完了信号を受信したとき、前記信号選択回路に選択可能信号を送信し、
前記信号選択回路は、前記選択可能信号を受信したこと条件として、次の処理対象となる割込要求信号を前記操作回路に送信することを特徴とする請求項2に記載のタスク処理装置。 - 前記割込回路は、
割込要求信号と割込操作命令とを対応づけた割込テーブルを保持するメモリ、を更に含み、
前記操作回路は、前記割込テーブルを参照して、前記選択された割込要求信号に対応する割込操作命令を特定し、前記特定した割込操作命令を前記タスク切換回路に送信することを特徴とする請求項2に記載のタスク処理装置。 - 前記メモリは、一の割込要求信号に対して複数の割込操作命令を対応づけ可能なテーブルとして前記割込テーブルを保持し、
前記タスク切換回路は、前記割込回路から受信した割込操作命令において、後続の割込操作命令の存在が指定されているときには、前記操作回路に後続要求信号を送信し、
前記操作回路は、前記後続要求信号を受信したとき、前記割込テーブルを参照して、前記割込操作命令と同じ割込要求信号に対応づけられている後続の割込操作命令を前記タスク切換回路に送信し、
前記タスク切換回路は、前記割込回路から受信した割込操作命令において、後続の割込操作命令の不存在が指定されているときには、前記割込操作命令の実行を完了したときに前記操作完了信号を前記割込回路に送信することを特徴とする請求項4に記載のタスク処理装置。 - 前記割込回路は、複数種類の割込要求信号のうちの一部である高速割込要求信号についての割込操作命令を前記タスク切換回路に送信し、
前記タスク切換回路は、前記高速割込要求信号以外の通常割込要求信号を受信したときには、所定の割込タスクを実行するためのデータを前記処理レジスタにロードさせた上で、前記割込タスクにより前記通常割込要求信号に対応した処理を実行させることを特徴とする請求項1に記載のタスク処理装置。 - 前記処理レジスタのデータを退避させるためのレジスタであって、複数のタスクに対してそれぞれ対応づけられる複数の退避レジスタ、を更に備え、
前記タスク切換回路は、前記システムコール信号を受信したとき、前記第1のタスクに対応づけられている退避レジスタに前記処理レジスタのデータを退避させ、前記第2のタスクに対応づけられている退避レジスタのデータを前記処理レジスタにロードすることを特徴とする請求項1に記載のタスク処理装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2007/000880 WO2009022371A1 (ja) | 2007-08-16 | 2007-08-16 | タスク処理装置 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009242328A Division JP5204740B2 (ja) | 2009-10-21 | 2009-10-21 | タスク処理装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPWO2009022371A1 true JPWO2009022371A1 (ja) | 2010-11-04 |
Family
ID=40350435
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008522140A Pending JPWO2009022371A1 (ja) | 2007-08-16 | 2007-08-16 | タスク処理装置 |
Country Status (4)
Country | Link |
---|---|
US (6) | US8341641B2 (ja) |
JP (1) | JPWO2009022371A1 (ja) |
TW (1) | TWI416413B (ja) |
WO (1) | WO2009022371A1 (ja) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009022371A1 (ja) | 2007-08-16 | 2009-02-19 | Netcleus Systems Corporation | タスク処理装置 |
US8848723B2 (en) * | 2010-05-18 | 2014-09-30 | Lsi Corporation | Scheduling hierarchy in a traffic manager of a network processor |
US8837501B2 (en) * | 2010-05-18 | 2014-09-16 | Lsi Corporation | Shared task parameters in a scheduler of a network processor |
JP4965638B2 (ja) * | 2009-12-25 | 2012-07-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | タスクの切り換えを制御するシステムおよび方法 |
EP2857968B1 (en) | 2012-05-24 | 2023-07-05 | Renesas Electronics Corporation | Task processor |
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 |
WO2016110954A1 (ja) * | 2015-01-07 | 2016-07-14 | 富士通株式会社 | タスク切替支援方法、タスク切替支援プログラム、及び情報処理装置 |
US10437623B2 (en) * | 2015-12-24 | 2019-10-08 | Intel IP Corporation | Fast switching between virtual machines without interrupt virtualization for high-performance, secure trusted-execution environment |
JP2017123190A (ja) * | 2017-03-08 | 2017-07-13 | ルネサスエレクトロニクス株式会社 | タスク処理装置 |
JP2018180768A (ja) * | 2017-04-07 | 2018-11-15 | ルネサスエレクトロニクス株式会社 | 半導体装置 |
GB2563589B (en) * | 2017-06-16 | 2019-06-12 | Imagination Tech Ltd | Scheduling tasks |
GB2563587B (en) | 2017-06-16 | 2021-01-06 | Imagination Tech Ltd | Scheduling tasks |
JP2019192110A (ja) | 2018-04-27 | 2019-10-31 | ルネサスエレクトロニクス株式会社 | 半導体装置およびプロセッサ制御方法 |
CN110442440A (zh) * | 2019-08-05 | 2019-11-12 | 中国工商银行股份有限公司 | 一种异步任务处理方法及装置 |
US11182215B2 (en) * | 2019-09-30 | 2021-11-23 | Sony Interactive Entertainment LLC | System and method for multi-tenant implementation of graphics processing unit |
US20230185638A1 (en) * | 2021-12-10 | 2023-06-15 | Nvidia Corporation | Application programming interfaces for interoperability |
US20230185636A1 (en) * | 2021-12-10 | 2023-06-15 | Nvidia Corporation | Application programming interfaces for interoperability |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001075820A (ja) * | 1999-09-07 | 2001-03-23 | Oki Electric Ind Co Ltd | リアルタイムos装置 |
JP2003271399A (ja) * | 2002-01-09 | 2003-09-26 | Matsushita Electric Ind Co Ltd | プロセッサ及びプログラム実行方法 |
Family Cites Families (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5276886A (en) * | 1990-10-11 | 1994-01-04 | Chips And Technologies, Inc. | Hardware semaphores in a multi-processor environment |
JP3088129B2 (ja) * | 1991-05-29 | 2000-09-18 | 日本電気株式会社 | マイクロプロセッサ |
US5630143A (en) * | 1992-03-27 | 1997-05-13 | Cyrix Corporation | Microprocessor with externally controllable power management |
US6951019B1 (en) * | 1992-09-30 | 2005-09-27 | Apple Computer, Inc. | Execution control for processor tasks |
US6304957B1 (en) * | 1993-02-26 | 2001-10-16 | Nippondenso Co., Ltd. | Multitask processing unit |
US5706407A (en) * | 1993-12-28 | 1998-01-06 | Kabushiki Kaisha Toshiba | System for reallocation of memory banks in memory sized order |
JPH07219774A (ja) * | 1994-02-07 | 1995-08-18 | Fujitsu Ltd | データ処理装置および例外処理方法 |
JP3798476B2 (ja) * | 1996-08-30 | 2006-07-19 | 株式会社東芝 | コンピュータシステムおよびそのシステムにおけるキャッシュメモリのパワーダウン制御方法 |
US5987601A (en) * | 1997-02-14 | 1999-11-16 | Xyron Corporation | Zero overhead computer interrupts with task switching |
CN1113289C (zh) * | 1997-03-04 | 2003-07-02 | 松下电器产业株式会社 | 能执行多异步运行任务中的异步事件任务的处理器 |
US6112317A (en) * | 1997-03-10 | 2000-08-29 | Digital Equipment Corporation | Processor performance counter for sampling the execution frequency of individual instructions |
US6567839B1 (en) * | 1997-10-23 | 2003-05-20 | International Business Machines Corporation | Thread switch control in a multithreaded processor system |
US6128672A (en) * | 1998-03-10 | 2000-10-03 | Motorola, Inc. | Data transfer using software interrupt service routine between host processor and external device with queue of host processor and hardware queue pointers on external device |
US6360243B1 (en) * | 1998-03-10 | 2002-03-19 | Motorola, Inc. | Method, device and article of manufacture for implementing a real-time task scheduling accelerator |
US6430593B1 (en) * | 1998-03-10 | 2002-08-06 | Motorola Inc. | Method, device and article of manufacture for efficient task scheduling in a multi-tasking preemptive priority-based real-time operating system |
US6260150B1 (en) * | 1998-03-10 | 2001-07-10 | Agere Systems Guardian Corp. | Foreground and background context controller setting processor to power saving mode when all contexts are inactive |
JPH11272480A (ja) | 1998-03-24 | 1999-10-08 | Nippon Telegr & Teleph Corp <Ntt> | オンチップリアルタイムos |
US6738845B1 (en) * | 1999-11-05 | 2004-05-18 | Analog Devices, Inc. | Bus architecture and shared bus arbitration method for a communication device |
US6496925B1 (en) * | 1999-12-09 | 2002-12-17 | Intel Corporation | Method and apparatus for processing an event occurrence within a multithreaded processor |
US6553487B1 (en) * | 2000-01-07 | 2003-04-22 | Motorola, Inc. | Device and method for performing high-speed low overhead context switch |
US7234139B1 (en) * | 2000-11-24 | 2007-06-19 | Catharon Productions, Inc. | Computer multi-tasking via virtual threading using an interpreter |
US20020161957A1 (en) * | 2001-02-09 | 2002-10-31 | Guillaume Comeau | Methods and systems for handling interrupts |
US20020161941A1 (en) * | 2001-04-30 | 2002-10-31 | Sony Corporation And Electronics, Inc | System and method for efficiently performing a data transfer operation |
US6883102B2 (en) * | 2001-12-18 | 2005-04-19 | Arm Limited | Apparatus and method for performing power management functions |
US7434222B2 (en) * | 2001-12-20 | 2008-10-07 | Infineon Technologies Ag | Task context switching RTOS |
US6968472B2 (en) * | 2002-04-22 | 2005-11-22 | Silicon Labs Cp. Inc. | Serial data interface |
US7117346B2 (en) * | 2002-05-31 | 2006-10-03 | Freescale Semiconductor, Inc. | Data processing system having multiple register contexts and method therefor |
US9003376B2 (en) * | 2002-08-09 | 2015-04-07 | Texas Instruments Incorporated | Software breakpoints with tailoring for multiple processor shared memory or multiple thread systems |
US20040049628A1 (en) * | 2002-09-10 | 2004-03-11 | Fong-Long Lin | Multi-tasking non-volatile memory subsystem |
US7313797B2 (en) * | 2002-09-18 | 2007-12-25 | Wind River Systems, Inc. | Uniprocessor operating system design facilitating fast context switching |
US7689708B1 (en) * | 2002-10-28 | 2010-03-30 | Netapp, Inc. | Apparatus to flow control frames in a networked storage virtualization using multiple streaming protocols |
JP4750350B2 (ja) * | 2003-03-13 | 2011-08-17 | パナソニック株式会社 | タスク切換装置、方法及びプログラム |
US7334142B2 (en) * | 2004-01-22 | 2008-02-19 | International Business Machines Corporation | Reducing power consumption in a logically partitioned data processing system with operating system call that indicates a selected processor is unneeded for a period of time |
US8108870B2 (en) * | 2004-01-29 | 2012-01-31 | Klingman Edwin E | Intelligent memory device having ASCII-named task registers mapped to addresses of a task |
US7395410B2 (en) * | 2004-07-06 | 2008-07-01 | Matsushita Electric Industrial Co., Ltd. | Processor system with an improved instruction decode control unit that controls data transfer between processor and coprocessor |
JP4204522B2 (ja) * | 2004-07-07 | 2009-01-07 | 株式会社東芝 | マイクロプロセッサ |
JP4956891B2 (ja) * | 2004-07-26 | 2012-06-20 | 富士通株式会社 | 演算処理装置,情報処理装置および演算処理装置の制御方法 |
US7765547B2 (en) * | 2004-11-24 | 2010-07-27 | Maxim Integrated Products, Inc. | Hardware multithreading systems with state registers having thread profiling data |
US20060168420A1 (en) * | 2005-01-27 | 2006-07-27 | Innovasic, Inc. | Microcontroller cache memory |
WO2009022371A1 (ja) | 2007-08-16 | 2009-02-19 | Netcleus Systems Corporation | タスク処理装置 |
-
2007
- 2007-08-16 WO PCT/JP2007/000880 patent/WO2009022371A1/ja active Application Filing
- 2007-08-16 US US12/304,769 patent/US8341641B2/en active Active
- 2007-08-16 JP JP2008522140A patent/JPWO2009022371A1/ja active Pending
-
2008
- 2008-04-29 TW TW097115626A patent/TWI416413B/zh active
-
2012
- 2012-11-20 US US13/682,633 patent/US8776079B2/en active Active
-
2014
- 2014-04-02 US US14/243,801 patent/US9104470B2/en active Active
-
2015
- 2015-07-06 US US14/792,342 patent/US9766924B2/en active Active
-
2017
- 2017-08-22 US US15/682,934 patent/US10387191B2/en active Active
-
2019
- 2019-07-01 US US16/458,618 patent/US10949249B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001075820A (ja) * | 1999-09-07 | 2001-03-23 | Oki Electric Ind Co Ltd | リアルタイムos装置 |
JP2003271399A (ja) * | 2002-01-09 | 2003-09-26 | Matsushita Electric Ind Co Ltd | プロセッサ及びプログラム実行方法 |
Also Published As
Publication number | Publication date |
---|---|
US10387191B2 (en) | 2019-08-20 |
US9104470B2 (en) | 2015-08-11 |
US20140215488A1 (en) | 2014-07-31 |
TW200910207A (en) | 2009-03-01 |
US20150301856A1 (en) | 2015-10-22 |
US9766924B2 (en) | 2017-09-19 |
US20190324792A1 (en) | 2019-10-24 |
TWI416413B (zh) | 2013-11-21 |
US8341641B2 (en) | 2012-12-25 |
US10949249B2 (en) | 2021-03-16 |
US20130081055A1 (en) | 2013-03-28 |
US20100262976A1 (en) | 2010-10-14 |
US8776079B2 (en) | 2014-07-08 |
WO2009022371A1 (ja) | 2009-02-19 |
US20170351541A1 (en) | 2017-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10949249B2 (en) | Task processor | |
JP4119945B2 (ja) | タスク処理装置 | |
JP6153925B2 (ja) | タスク処理装置 | |
JP4088335B1 (ja) | 仮想キュー処理回路およびタスク処理装置 | |
JP4127848B2 (ja) | タスク処理装置 | |
JP5155336B2 (ja) | タスク処理装置 | |
JP2018180768A (ja) | 半導体装置 | |
JP5204740B2 (ja) | タスク処理装置 | |
JP2017123190A (ja) | タスク処理装置 | |
JP2008269597A (ja) | タスク処理装置 | |
JP2019003710A (ja) | タスク処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090721 |