JPH1124946A - タスクスケジューリング装置および方法 - Google Patents
タスクスケジューリング装置および方法Info
- Publication number
- JPH1124946A JPH1124946A JP9193389A JP19338997A JPH1124946A JP H1124946 A JPH1124946 A JP H1124946A JP 9193389 A JP9193389 A JP 9193389A JP 19338997 A JP19338997 A JP 19338997A JP H1124946 A JPH1124946 A JP H1124946A
- Authority
- JP
- Japan
- Prior art keywords
- task
- scheduling
- shared resource
- group
- round robin
- 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
Abstract
(57)【要約】
【課題】 システムの信頼性を高めることができるタス
クスケジューリング装置を提供する。 【解決手段】 スケジューリング調整機構によって、共
有資源と無関係な全てのタスクおよび共有資源にアクセ
スするタスクのうちから1つをプリエンプトスケジュー
リング機構に登録し、残った共有資源にアクセスするタ
スク全てをラウンドロビンスケジューリング機構に順序
付けて登録し、プリエンプトスケジューリング機構によ
るスケジューリングで共有資源にアクセスするタスクが
実行権を放棄(中断状態に遷移)した時、ラウンドロビ
ンスケジューリング機構に順序付けて登録された共有資
源にアクセスするタスクのうち先頭のものと入れ替え
る。そして、中断状態に遷移したタスクを中断要因が解
除された時にラウンドロビンスケジューリング機構の順
序付けの最後尾に登録する。
クスケジューリング装置を提供する。 【解決手段】 スケジューリング調整機構によって、共
有資源と無関係な全てのタスクおよび共有資源にアクセ
スするタスクのうちから1つをプリエンプトスケジュー
リング機構に登録し、残った共有資源にアクセスするタ
スク全てをラウンドロビンスケジューリング機構に順序
付けて登録し、プリエンプトスケジューリング機構によ
るスケジューリングで共有資源にアクセスするタスクが
実行権を放棄(中断状態に遷移)した時、ラウンドロビ
ンスケジューリング機構に順序付けて登録された共有資
源にアクセスするタスクのうち先頭のものと入れ替え
る。そして、中断状態に遷移したタスクを中断要因が解
除された時にラウンドロビンスケジューリング機構の順
序付けの最後尾に登録する。
Description
【0001】
【発明の属する技術分野】本発明は、タスクスケジュー
リング装置および方法に関する。
リング装置および方法に関する。
【0002】
【従来の技術】従来、マルチタスク間で共有資源アクセ
スを行う際、排他制御を必要とするシステムでは、以下
の方式により排他制御を実現していた。
スを行う際、排他制御を必要とするシステムでは、以下
の方式により排他制御を実現していた。
【0003】第1の方式では、各タスクで共有資源アク
セスの直前にオペレーティングシステム(OS)に対し
てセマフォ(アクセス権)を獲得し、共有資源アクセス
が終了すると、OSに対してセマフォを返却することに
より排他制御を実現する。
セスの直前にオペレーティングシステム(OS)に対し
てセマフォ(アクセス権)を獲得し、共有資源アクセス
が終了すると、OSに対してセマフォを返却することに
より排他制御を実現する。
【0004】第2の方式では、ラウンドロビンスケジュ
ーリングを使用し、自タスクから明示的にCPU使用権
を放すまでタスクスイッチングをしないこと(ノンプリ
エンティブであること)を保証することにより排他制御
を実現する。
ーリングを使用し、自タスクから明示的にCPU使用権
を放すまでタスクスイッチングをしないこと(ノンプリ
エンティブであること)を保証することにより排他制御
を実現する。
【0005】
【発明が解決しようとする課題】しかしながら、上記従
来の排他制御方式には以下に掲げる問題があった。すな
わち、第1の方式では、共有資源に対するアクセス毎に
該当するセマフォの獲得、返却を行うので、オーバーヘ
ッドがかかってしまう(問題点1)。
来の排他制御方式には以下に掲げる問題があった。すな
わち、第1の方式では、共有資源に対するアクセス毎に
該当するセマフォの獲得、返却を行うので、オーバーヘ
ッドがかかってしまう(問題点1)。
【0006】また、複雑なデータ構造中に複数の共有資
源が含まれ、複数のタスクからのアクセス時にもデータ
構造全体の整合性を保証する必要がある場合、セマフォ
を割り当てるための共有資源の切り出しが難しい(問題
点2)。
源が含まれ、複数のタスクからのアクセス時にもデータ
構造全体の整合性を保証する必要がある場合、セマフォ
を割り当てるための共有資源の切り出しが難しい(問題
点2)。
【0007】さらに、複数の共有資源に対し、タスク毎
に異なる連続したアクセス順番を保証しなければならな
い場合、デッドロックする危険性がある(問題点3)。
に異なる連続したアクセス順番を保証しなければならな
い場合、デッドロックする危険性がある(問題点3)。
【0008】一方、第2の方式では、ラウンドロビンス
ケジューリングを用いることにより上記問題を解決して
いるが、イベントドリブンやタイムスライスによるプリ
エンブト(横取り)スケジューリングができないので、
共有資源をアクセスしているタスクがCPUを占有して
実行し続けると、共有資源とは無関係なタスクであって
も実行されず、システム全体に影響を及ぼしてしまう
(問題点4)。
ケジューリングを用いることにより上記問題を解決して
いるが、イベントドリブンやタイムスライスによるプリ
エンブト(横取り)スケジューリングができないので、
共有資源をアクセスしているタスクがCPUを占有して
実行し続けると、共有資源とは無関係なタスクであって
も実行されず、システム全体に影響を及ぼしてしまう
(問題点4)。
【0009】また、タイムスライスによるプリエンプト
(横取り)スケジューリングができないので、複数の共
有資源がある場合、それぞれの共有資源毎の累積アクセ
ス時間を均等に割り振ることができず、アクセスするタ
スクの数が多い共有資源の方が累積アクセス時間が長く
なる(問題点5)。
(横取り)スケジューリングができないので、複数の共
有資源がある場合、それぞれの共有資源毎の累積アクセ
ス時間を均等に割り振ることができず、アクセスするタ
スクの数が多い共有資源の方が累積アクセス時間が長く
なる(問題点5)。
【0010】これらの問題のうち、1つまたは部分的に
解決する手段はいくつか提案されている。例えば、問題
点1を改善する手段として、特開平5−120039号
公報では高速処理が必要なタスクは別にテーブルを設
け、資源の確保、解放処理を不要とする方式が提案され
ている。
解決する手段はいくつか提案されている。例えば、問題
点1を改善する手段として、特開平5−120039号
公報では高速処理が必要なタスクは別にテーブルを設
け、資源の確保、解放処理を不要とする方式が提案され
ている。
【0011】また、問題点3の単純なケースである1つ
の共有資源に対するタスクの優先度逆転現象(プライオ
リティインバージョン)に対応する手段として、特開平
5−250188号公報や特開平8−77025号公報
に示されるように、共有資源占有期間のみタスクの優先
度を上げる方式が提案されている。
の共有資源に対するタスクの優先度逆転現象(プライオ
リティインバージョン)に対応する手段として、特開平
5−250188号公報や特開平8−77025号公報
に示されるように、共有資源占有期間のみタスクの優先
度を上げる方式が提案されている。
【0012】そこで、本発明は、上記問題点1〜4、問
題点1〜3および問題点5、または問題点1〜5を解決
することにより、システムの信頼性を高めることができ
るタスクスケジューリング装置を提供することを目的と
する。
題点1〜3および問題点5、または問題点1〜5を解決
することにより、システムの信頼性を高めることができ
るタスクスケジューリング装置を提供することを目的と
する。
【0013】
【課題を解決するための手段】上記目的を達成するため
に、本発明の請求項1に記載のタスクスケジューリング
装置は、マルチタスクプログラムのスケジューリングを
行うタスクスケジューリング装置において、スケジュー
リング調整機構と、プリエンプトスケジューリング機構
と、ラウンドロビンスケジューリング機構とを備え、共
有資源をアクセスするタスク群ではラウンドロビンスケ
ジューリングを用い、前記共有資源と無関係なタスク群
ではプリエンプトスケジューリングを用い、両タスク群
の間ではプリエンプトスケジューリングを実現する処理
を行うことを特徴とする。
に、本発明の請求項1に記載のタスクスケジューリング
装置は、マルチタスクプログラムのスケジューリングを
行うタスクスケジューリング装置において、スケジュー
リング調整機構と、プリエンプトスケジューリング機構
と、ラウンドロビンスケジューリング機構とを備え、共
有資源をアクセスするタスク群ではラウンドロビンスケ
ジューリングを用い、前記共有資源と無関係なタスク群
ではプリエンプトスケジューリングを用い、両タスク群
の間ではプリエンプトスケジューリングを実現する処理
を行うことを特徴とする。
【0014】請求項2に記載のタスクスケジューリング
装置は、マルチタスクプログラムのスケジューリングを
行うタスクスケジューリング装置において、スケジュー
リング調整機構と、プリエンプトスケジューリング機構
と、ラウンドロビンスケジューリング機構とを備え、共
有資源毎にアクセスするタスク群をタスクグループとし
て切り出し、各タスクグループ内で独立してラウンドロ
ビンスケジューリングを用い、前記タスクグループの間
ではプリエンプトスケジューリングを実現する処理を行
うことを特徴とする。
装置は、マルチタスクプログラムのスケジューリングを
行うタスクスケジューリング装置において、スケジュー
リング調整機構と、プリエンプトスケジューリング機構
と、ラウンドロビンスケジューリング機構とを備え、共
有資源毎にアクセスするタスク群をタスクグループとし
て切り出し、各タスクグループ内で独立してラウンドロ
ビンスケジューリングを用い、前記タスクグループの間
ではプリエンプトスケジューリングを実現する処理を行
うことを特徴とする。
【0015】請求項3に記載のタスクスケジューリング
装置は、マルチタスクプログラムのスケジューリングを
行うタスクスケジューリング装置において、スケジュー
リング調整機構と、プリエンプトスケジューリング機構
と、ラウンドロビンスケジューリング機構とを備え、共
有資源毎にアクセスするタスク群をタスクグループとし
て切り出し、各タスクグループ内で独立してラウンドロ
ビンスケジューリングを用い、前記共有資源と無関係な
タスク群ではプリエンプトスケジューリングを用い、前
記タスクグループの間および前記タスクグループと前記
共有資源とは無関係なタスク群の間ではプリエンプトス
ケジューリングを実現する処理を行うことを特徴とす
る。
装置は、マルチタスクプログラムのスケジューリングを
行うタスクスケジューリング装置において、スケジュー
リング調整機構と、プリエンプトスケジューリング機構
と、ラウンドロビンスケジューリング機構とを備え、共
有資源毎にアクセスするタスク群をタスクグループとし
て切り出し、各タスクグループ内で独立してラウンドロ
ビンスケジューリングを用い、前記共有資源と無関係な
タスク群ではプリエンプトスケジューリングを用い、前
記タスクグループの間および前記タスクグループと前記
共有資源とは無関係なタスク群の間ではプリエンプトス
ケジューリングを実現する処理を行うことを特徴とす
る。
【0016】請求項4に記載のタスクスケジューリング
方法は、マルチタスクプログラムのスケジューリングを
行うタスクスケジューリング方法において、共有資源を
アクセスするタスク群ではラウンドロビンスケジューリ
ングを用い、前記共有資源と無関係なタスク群ではプリ
エンプトスケジューリングを用い、両タスク群の間では
プリエンプトスケジューリングを実現する処理を行うこ
とを特徴とする。
方法は、マルチタスクプログラムのスケジューリングを
行うタスクスケジューリング方法において、共有資源を
アクセスするタスク群ではラウンドロビンスケジューリ
ングを用い、前記共有資源と無関係なタスク群ではプリ
エンプトスケジューリングを用い、両タスク群の間では
プリエンプトスケジューリングを実現する処理を行うこ
とを特徴とする。
【0017】請求項5に記載のタスクスケジューリング
方法は、マルチタスクプログラムのスケジューリングを
行うタスクスケジューリング方法において、共有資源毎
にアクセスするタスク群をタスクグループとして切り出
し、各タスクグループ内で独立してラウンドロビンスケ
ジューリングを用い、前記タスクグループの間ではプリ
エンプトスケジューリングを実現する処理を行うことを
特徴とする。
方法は、マルチタスクプログラムのスケジューリングを
行うタスクスケジューリング方法において、共有資源毎
にアクセスするタスク群をタスクグループとして切り出
し、各タスクグループ内で独立してラウンドロビンスケ
ジューリングを用い、前記タスクグループの間ではプリ
エンプトスケジューリングを実現する処理を行うことを
特徴とする。
【0018】請求項6に記載のタスクスケジューリング
方法は、マルチタスクプログラムのスケジューリングを
行うタスクスケジューリング方法において、共有資源毎
にアクセスするタスク群をタスクグループとして切り出
し、各タスクグループ内で独立してラウンドロビンスケ
ジューリングを用い、前記共有資源と無関係なタスク群
ではプリエンプトスケジューリングを用い、前記タスク
グループの間および前記タスクグループと前記共有資源
とは無関係なタスク群の間ではプリエンプトスケジュー
リングを実現する処理を行うことを特徴とする。
方法は、マルチタスクプログラムのスケジューリングを
行うタスクスケジューリング方法において、共有資源毎
にアクセスするタスク群をタスクグループとして切り出
し、各タスクグループ内で独立してラウンドロビンスケ
ジューリングを用い、前記共有資源と無関係なタスク群
ではプリエンプトスケジューリングを用い、前記タスク
グループの間および前記タスクグループと前記共有資源
とは無関係なタスク群の間ではプリエンプトスケジュー
リングを実現する処理を行うことを特徴とする。
【0019】
【発明の実施の形態】本発明のタスクスケジューリング
装置および方法の実施の形態について説明する。
装置および方法の実施の形態について説明する。
【0020】[第1の実施の形態]第1の実施形態で
は、前述した問題点1〜問題点4を解決するタスクスケ
ジューリング装置について説明する。図1は第1の実施
形態におけるタスクスケジューリング装置が適用された
システムの構成を示すブロック図である。タスクスケジ
ューリング装置が適用されるシステムはCPU140、
ROM110、RAM100、タイマ150およびI/
Oインターフェース130から構成される。
は、前述した問題点1〜問題点4を解決するタスクスケ
ジューリング装置について説明する。図1は第1の実施
形態におけるタスクスケジューリング装置が適用された
システムの構成を示すブロック図である。タスクスケジ
ューリング装置が適用されるシステムはCPU140、
ROM110、RAM100、タイマ150およびI/
Oインターフェース130から構成される。
【0021】図において、ROM110にはRAM10
0内の全てのコードおよび初期化データが格納されてい
る。CPU140にリセットがかかると、システムは立
ち上がり、ROM110に格納されているコードおよび
データを全てRAM100にコピーし、スケジューリン
グ調整機構600の初期化処理610に起動をかける
(図2参照)。
0内の全てのコードおよび初期化データが格納されてい
る。CPU140にリセットがかかると、システムは立
ち上がり、ROM110に格納されているコードおよび
データを全てRAM100にコピーし、スケジューリン
グ調整機構600の初期化処理610に起動をかける
(図2参照)。
【0022】初期化処理610では、I/Oインターフ
ェース130およびタイマ150のハードウェアを初期
化することで、I/O割込み処理400およびタイマ割
込み処理410を有効にする。
ェース130およびタイマ150のハードウェアを初期
化することで、I/O割込み処理400およびタイマ割
込み処理410を有効にする。
【0023】プリエンプトスケジューリング機構700
の初期化処理720(図3参照)、およびラウンドロビ
ンスケジューリング機構800の初期化処理810(図
4参照)により、初期化データ500を基にしてマルチ
タスク環境を立ち上げる。
の初期化処理720(図3参照)、およびラウンドロビ
ンスケジューリング機構800の初期化処理810(図
4参照)により、初期化データ500を基にしてマルチ
タスク環境を立ち上げる。
【0024】この時点で、共有資源(変数データ等)2
00にアクセスしないタスク群(タスク1(320)、
タスク2(330)、…)、およびアクセスするタスク
群(タスクA(300)、タスクB(310)、…)の
うち1つだけ(タスクA(300))がプリエンプトス
ケジューリング機構700に登録され、それ以外のタス
ク群(タスクB(310)、…)はラウンドロビンスケ
ジューリング機構800に登録される。
00にアクセスしないタスク群(タスク1(320)、
タスク2(330)、…)、およびアクセスするタスク
群(タスクA(300)、タスクB(310)、…)の
うち1つだけ(タスクA(300))がプリエンプトス
ケジューリング機構700に登録され、それ以外のタス
ク群(タスクB(310)、…)はラウンドロビンスケ
ジューリング機構800に登録される。
【0025】プリエンプトスケジューリング機構700
に登録されたタスク群(タスク1(320)、タスク2
(330)…、タスクA(300))のうち、スケジュ
ーリング処理730により、実行待キュー770の中で
優先順位が最も高く、待ち行列の最も先端のタスク1つ
だけがCPU140を占有して実行される。
に登録されたタスク群(タスク1(320)、タスク2
(330)…、タスクA(300))のうち、スケジュ
ーリング処理730により、実行待キュー770の中で
優先順位が最も高く、待ち行列の最も先端のタスク1つ
だけがCPU140を占有して実行される。
【0026】プリエンプトスケジューリング機構700
に登録されたタスクAが中断状態905に遷移した時、
ラウンドロビンスケジューリング機構800に登録され
たタスク群(タスクB(310)、……)のうち、ラウ
ンドロビンキュー840の先頭のタスク(タスクB)1
つだけを取り出し、プリエンプトスケジューリング機構
700に追加登録する(図5参照)。
に登録されたタスクAが中断状態905に遷移した時、
ラウンドロビンスケジューリング機構800に登録され
たタスク群(タスクB(310)、……)のうち、ラウ
ンドロビンキュー840の先頭のタスク(タスクB)1
つだけを取り出し、プリエンプトスケジューリング機構
700に追加登録する(図5参照)。
【0027】タスクA(300)は中断状態905が解
除されたタイミングで、プリエンプトスケジューリング
機構700から削除され、タスクB(310)の代わり
にラウンドロビンスケジューリング機構800に登録さ
れる。
除されたタイミングで、プリエンプトスケジューリング
機構700から削除され、タスクB(310)の代わり
にラウンドロビンスケジューリング機構800に登録さ
れる。
【0028】このように、共有資源をアクセスするタス
ク群(タスクA(300)、タスクB(310)、…
…)ではラウンドロビンスケジューリングを用いること
により、共有資源と無関係なタスク群(タスク1(32
0)、タスク2(330)、……)ではプリエンプト
(横取り)スケジューリングを用いることにより、両タ
スク群の間でプリエンプト(横取り)スケジューリング
を行う。
ク群(タスクA(300)、タスクB(310)、…
…)ではラウンドロビンスケジューリングを用いること
により、共有資源と無関係なタスク群(タスク1(32
0)、タスク2(330)、……)ではプリエンプト
(横取り)スケジューリングを用いることにより、両タ
スク群の間でプリエンプト(横取り)スケジューリング
を行う。
【0029】以下に、タスクスケジューリング装置の構
成および動作を、図面に基づいて詳細に説明する。図2
はスケジューリング調整機構600の構成を示す図であ
る。スケジューリング調整機構600が装備する処理6
01は、初期化処理610、中断処理620、中断解除
処理640およびタイマ割込み処理660である。ま
た、スケジューリング調整機構600が保持するデータ
602は共有資源管理テーブル680である。
成および動作を、図面に基づいて詳細に説明する。図2
はスケジューリング調整機構600の構成を示す図であ
る。スケジューリング調整機構600が装備する処理6
01は、初期化処理610、中断処理620、中断解除
処理640およびタイマ割込み処理660である。ま
た、スケジューリング調整機構600が保持するデータ
602は共有資源管理テーブル680である。
【0030】図3はプリエンプトスケジューリング機構
700の構成を示す図である。プリエンプトスケジュー
リング機構700が装備する処理701は、初期化処理
720、スケジューリング処理730、指定実行待キュ
ー後尾へ追加処理740、指定実行待キューからの取得
処理741、中断キュー後尾へ追加処理742、中断キ
ューからの取得処理743である。プリエンプトスケジ
ューリング機構700が保持するデータは、現在CPU
を占有しているタスクを示す現実行タスク703、各タ
スク毎にタスク状態などを管理するTCB(タスクコン
トロールブロック)750である。
700の構成を示す図である。プリエンプトスケジュー
リング機構700が装備する処理701は、初期化処理
720、スケジューリング処理730、指定実行待キュ
ー後尾へ追加処理740、指定実行待キューからの取得
処理741、中断キュー後尾へ追加処理742、中断キ
ューからの取得処理743である。プリエンプトスケジ
ューリング機構700が保持するデータは、現在CPU
を占有しているタスクを示す現実行タスク703、各タ
スク毎にタスク状態などを管理するTCB(タスクコン
トロールブロック)750である。
【0031】また、プリエンプトスケジューリング機構
700はタスクのスケジューリングを実行するための実
行待キュー770および中断キュー790も保持してい
る。実行待キュー770は、優先順位毎に実行待状態9
03のタスクのTCB750をリストに保持し、その並
び順を待ち行列としてFIFOのキューとして管理す
る。プリエンプトスケジューリング機構700の処理7
01は、これらのキューにリンクされたTCB750の
中で、共有資源にアクセスするタスクのTCB750は
1つだけ(図3ではタスクA(777))であることを
保証する。中断キュー790は、中断状態905のタス
クのTCB750をリストに保持し、その並び順を待ち
行列としてFIFOのキューとして管理する。
700はタスクのスケジューリングを実行するための実
行待キュー770および中断キュー790も保持してい
る。実行待キュー770は、優先順位毎に実行待状態9
03のタスクのTCB750をリストに保持し、その並
び順を待ち行列としてFIFOのキューとして管理す
る。プリエンプトスケジューリング機構700の処理7
01は、これらのキューにリンクされたTCB750の
中で、共有資源にアクセスするタスクのTCB750は
1つだけ(図3ではタスクA(777))であることを
保証する。中断キュー790は、中断状態905のタス
クのTCB750をリストに保持し、その並び順を待ち
行列としてFIFOのキューとして管理する。
【0032】図4はラウンドロビンスケジューリング機
構800の構成を示す図である。ラウンドロビンスケジ
ューリング機構800が装備する処理801は、初期化
処理810、ラウンドロビンキュー後尾へ追加処理83
0およびラウンドロビンキューからの取得処理831で
ある。また、ラウンドロビンスケジューリング機構80
0はタスクスケジューリングを実現するためのラウンド
ロビンキュー840を保持する。ラウンドロビンキュー
840は、ラウンドロビン待状態904のタスクのTC
B750をリストに保持し、その並び順を待ち行列とし
てFIFOのキューとして管理する。
構800の構成を示す図である。ラウンドロビンスケジ
ューリング機構800が装備する処理801は、初期化
処理810、ラウンドロビンキュー後尾へ追加処理83
0およびラウンドロビンキューからの取得処理831で
ある。また、ラウンドロビンスケジューリング機構80
0はタスクスケジューリングを実現するためのラウンド
ロビンキュー840を保持する。ラウンドロビンキュー
840は、ラウンドロビン待状態904のタスクのTC
B750をリストに保持し、その並び順を待ち行列とし
てFIFOのキューとして管理する。
【0033】図5はタスクの状態遷移を示す図である。
タスクは初期状態902、実行待状態903、実行状態
901、中断状態905、ラウンドロビン待状態904
の各状態を取り得る。それぞれの状態間の遷移は、スケ
ジューリング処理730、中断処理620、中断解除処
理640、初期化処理720、初期化処理810、タイ
マ割込み処理660の起動によって発生する。タスクの
状態は各タスク毎にTCB750内のタスク状態756
に保持される(図8参照)。
タスクは初期状態902、実行待状態903、実行状態
901、中断状態905、ラウンドロビン待状態904
の各状態を取り得る。それぞれの状態間の遷移は、スケ
ジューリング処理730、中断処理620、中断解除処
理640、初期化処理720、初期化処理810、タイ
マ割込み処理660の起動によって発生する。タスクの
状態は各タスク毎にTCB750内のタスク状態756
に保持される(図8参照)。
【0034】初期状態902は、TCB750が確保さ
れた直後の立ち上がり時の状態である。実行状態901
は、タスクがCPU140を占有して実行している状態
で優先順位が最高で待ち行列の先頭の1タスクだけがな
り得る状態である。この状態のタスクはTCB750が
実行待キュー770にリンクされている(図3参照)。
れた直後の立ち上がり時の状態である。実行状態901
は、タスクがCPU140を占有して実行している状態
で優先順位が最高で待ち行列の先頭の1タスクだけがな
り得る状態である。この状態のタスクはTCB750が
実行待キュー770にリンクされている(図3参照)。
【0035】実行待状態903は実行可能であるが、優
先順位等の関係で他のタスクがCPU140を占有して
いるためにこれが空くのを待っている状態である。この
状態のタスクではTCB750が実行待キュー770に
リンクされている。
先順位等の関係で他のタスクがCPU140を占有して
いるためにこれが空くのを待っている状態である。この
状態のタスクではTCB750が実行待キュー770に
リンクされている。
【0036】中断状態905はI/O割込処理400な
どからのイベント待ちの状態であり、この状態の間では
CPU140が空いても実行されることはない。この状
態のタスクではTCB750が中断キュー790にリン
クされている。
どからのイベント待ちの状態であり、この状態の間では
CPU140が空いても実行されることはない。この状
態のタスクではTCB750が中断キュー790にリン
クされている。
【0037】ラウンドロビン待状態904は共有資源2
00にアクセスするタスク群だけが遷移可能な状態であ
り、共有資源200をアクセスするタスクがすでに実行
待状態903または実行状態901に1つ存在する場
合、このタスクが中断状態905に遷移するのを待って
いる状態である。この状態のタスクではTCB750が
ラウンドロビンキュー840にリンクされている。
00にアクセスするタスク群だけが遷移可能な状態であ
り、共有資源200をアクセスするタスクがすでに実行
待状態903または実行状態901に1つ存在する場
合、このタスクが中断状態905に遷移するのを待って
いる状態である。この状態のタスクではTCB750が
ラウンドロビンキュー840にリンクされている。
【0038】図6は初期化データの構成を示す図であ
る。同図を参照すると、初期化データ500は全タスク
数510および全タスク情報520を含んで格納されて
いる。全タスク情報520は各タスク毎にタスクの実行
アドレス(PC)、優先順位、共有資源アクセスフラグ
521〜531を含んで格納されている。共有資源アク
セスフラグ521〜531には、共有資源にアクセスす
るタスク521〜525では値1がセットされ、アクセ
スしないタスク526〜531では値0がセットされ
る。
る。同図を参照すると、初期化データ500は全タスク
数510および全タスク情報520を含んで格納されて
いる。全タスク情報520は各タスク毎にタスクの実行
アドレス(PC)、優先順位、共有資源アクセスフラグ
521〜531を含んで格納されている。共有資源アク
セスフラグ521〜531には、共有資源にアクセスす
るタスク521〜525では値1がセットされ、アクセ
スしないタスク526〜531では値0がセットされ
る。
【0039】図7は共有資源管理テーブルを示す図であ
る。同図を参照すると、共有資源管理テーブル680
は、実行待キュー770にリンクされている共有資源を
アクセスするタスクの数を表す実行待共有資源アクセス
タスク数682、およびラウンドロビンキュー840に
リンクされているタスクの数を表すラウンドロビン待タ
スク数681を含んで格納されている。
る。同図を参照すると、共有資源管理テーブル680
は、実行待キュー770にリンクされている共有資源を
アクセスするタスクの数を表す実行待共有資源アクセス
タスク数682、およびラウンドロビンキュー840に
リンクされているタスクの数を表すラウンドロビン待タ
スク数681を含んで格納されている。
【0040】図8はタスクコントロールブロックの構成
を示す図である。同図を参照すると、TCB(タスクコ
ントロールブロック)750はタスクID752、タス
クアドレス(PC)753、タスクスタックアドレス
(SP)754、優先順位755、タスク状態756、
リンクポインタ757、共有資源アクセスフラグ75
8、その他の付加情報759を含んで格納されている。
を示す図である。同図を参照すると、TCB(タスクコ
ントロールブロック)750はタスクID752、タス
クアドレス(PC)753、タスクスタックアドレス
(SP)754、優先順位755、タスク状態756、
リンクポインタ757、共有資源アクセスフラグ75
8、その他の付加情報759を含んで格納されている。
【0041】TCB750は各タスク毎にデータを保持
し(TCB[0]751、TCB[1]760、TCB
[2]761…)、プリエンプトスケジューリング機構
700のデータとして保持されている。タスク状態75
6の取り得る値は初期状態902、実行待状態903、
実行状態901、中断状態905、ラウンドロビン待状
態904である。これらの状態遷移およびその発生要因
は図5に示した通りである。
し(TCB[0]751、TCB[1]760、TCB
[2]761…)、プリエンプトスケジューリング機構
700のデータとして保持されている。タスク状態75
6の取り得る値は初期状態902、実行待状態903、
実行状態901、中断状態905、ラウンドロビン待状
態904である。これらの状態遷移およびその発生要因
は図5に示した通りである。
【0042】つぎに、スケジューリング調整機構600
の初期化処理610について説明する。図9は初期化処
理610の手順を示すフローチャートである。この初期
化処理610はCPUリセット後の最初の処理としてC
PU140によって実行される。
の初期化処理610について説明する。図9は初期化処
理610の手順を示すフローチャートである。この初期
化処理610はCPUリセット後の最初の処理としてC
PU140によって実行される。
【0043】まず、ハードウェア割込みを禁止する。
(ステップS611)。ROM110からRAM100
にコードおよび初期化データ500をコピーする(ステ
ップS612)。プリエンプトスケジューリング機構7
00の初期化処理720をコールする(ステップS61
3)。ラウンドロビンスケジューリング機構800の初
期化処理810をコールする(ステップS614)。
(ステップS611)。ROM110からRAM100
にコードおよび初期化データ500をコピーする(ステ
ップS612)。プリエンプトスケジューリング機構7
00の初期化処理720をコールする(ステップS61
3)。ラウンドロビンスケジューリング機構800の初
期化処理810をコールする(ステップS614)。
【0044】ハードウェア割込みを許可する(ステップ
S615)。プリエンプトスケジューリング機構700
のスケジューリング処理730を起動し(ステップS6
16)、スケジューリング調整機構の初期化処理610
を終了する。
S615)。プリエンプトスケジューリング機構700
のスケジューリング処理730を起動し(ステップS6
16)、スケジューリング調整機構の初期化処理610
を終了する。
【0045】スケジューリング処理730はリターンせ
ず、実行待キュー770の中で最も優先順位の高く、最
も待ち行列の先頭のタスクにCPU140の占有を与え
て実行を開始する。
ず、実行待キュー770の中で最も優先順位の高く、最
も待ち行列の先頭のタスクにCPU140の占有を与え
て実行を開始する。
【0046】その後、タスクスケジューリングが発生す
るタイミングは、タスクから中断処理620または中断
解除処理640が起動された場合、I/O割込み処理4
00から中断解除処理640が起動された場合、タイマ
割込み410からタイマ割込み処理660が起動された
場合である。
るタイミングは、タスクから中断処理620または中断
解除処理640が起動された場合、I/O割込み処理4
00から中断解除処理640が起動された場合、タイマ
割込み410からタイマ割込み処理660が起動された
場合である。
【0047】図10はプリエンプトスケジューリング機
構700の初期化処理720の手順を示すフローチャー
トである。この処理はスケジューリング調整機構600
の初期化処理610から1度だけコールされる。
構700の初期化処理720の手順を示すフローチャー
トである。この処理はスケジューリング調整機構600
の初期化処理610から1度だけコールされる。
【0048】まず、初期化データ500の情報を基に各
タスクのTCB750の初期化(TCB[0]−TCB
[10](タスク1−6,A−E))を行う(ステップ
S721)。
タスクのTCB750の初期化(TCB[0]−TCB
[10](タスク1−6,A−E))を行う(ステップ
S721)。
【0049】このステップS721の処理では、初期化
データ500の全タスク数510を基に全TCBの領域
をRAM100に確保する(721a)。初期化データ
500の全タスク情報520を基にTCB750内のタ
スクアドレス(PC)753/優先順位755/共有資
源アクセスフラグ758の値をセットする(721
b)。タスクID752を割り振り、タスクスタックの
領域をRAM100に確保し、スタックポインタをタス
クスタックアドレス(SP)754にセットする(72
1c)。全TCBのタスク状態756を実行待状態90
3にセットする(721d)。その他の付加情報759
があれば初期化する(721e)。
データ500の全タスク数510を基に全TCBの領域
をRAM100に確保する(721a)。初期化データ
500の全タスク情報520を基にTCB750内のタ
スクアドレス(PC)753/優先順位755/共有資
源アクセスフラグ758の値をセットする(721
b)。タスクID752を割り振り、タスクスタックの
領域をRAM100に確保し、スタックポインタをタス
クスタックアドレス(SP)754にセットする(72
1c)。全TCBのタスク状態756を実行待状態90
3にセットする(721d)。その他の付加情報759
があれば初期化する(721e)。
【0050】つづいて、TCB[0]からTCB[(全
タスク数510)−1]まで以下の処理を繰り返す(ス
テップS722)。TCB750の共有資源アクセスフ
ラグ758が値0である共有資源にアクセスしないタス
クのTCB(タスク1,2,3,4,5,6)アドレス
を優先順位755に対応する実行待キュー770の後尾
に追加する。
タスク数510)−1]まで以下の処理を繰り返す(ス
テップS722)。TCB750の共有資源アクセスフ
ラグ758が値0である共有資源にアクセスしないタス
クのTCB(タスク1,2,3,4,5,6)アドレス
を優先順位755に対応する実行待キュー770の後尾
に追加する。
【0051】現実行タスク703をアイドルタスクとす
る(ステップS723)。I/Oインターフェーおよび
タイマを初期化し、同じ優先順位のタイムスライススケ
ジューリングを必要とする場合、タイマ割込みベクタに
タイマ割込み処理660を登録する(ステップS72
4)。そして、呼び出し元にリターンする。
る(ステップS723)。I/Oインターフェーおよび
タイマを初期化し、同じ優先順位のタイムスライススケ
ジューリングを必要とする場合、タイマ割込みベクタに
タイマ割込み処理660を登録する(ステップS72
4)。そして、呼び出し元にリターンする。
【0052】図11はラウンドロビンスケジューリング
機構800の初期化処理810の手順を示すフローチャ
ートである。この処理はスケジューリング調整機構60
0の初期化処理610から1度だけコールされる。ま
ず、ループカウンタCountを初期化する(ステップ
S811)。ラウンドロビン待タスク数681を値0に
初期化する(ステップS812)。
機構800の初期化処理810の手順を示すフローチャ
ートである。この処理はスケジューリング調整機構60
0の初期化処理610から1度だけコールされる。ま
ず、ループカウンタCountを初期化する(ステップ
S811)。ラウンドロビン待タスク数681を値0に
初期化する(ステップS812)。
【0053】TCB[0]からTCB[(全タスク数5
10)−1]まで以下の処理を繰り返す(ステップ81
3)。つまり、TCB[Count]の共有資源アクセ
スフラグ758が値1である(共有資源にアクセスする
タスク)か否かを判別する(ステップ814)。値1で
ある場合、ループを終了し、ステップS816の処理に
移行する。一方、TCB[Count]の共有資源アク
セスフラグ758が値1でなければ、Countをイン
クリメントする(ステップS815)。
10)−1]まで以下の処理を繰り返す(ステップ81
3)。つまり、TCB[Count]の共有資源アクセ
スフラグ758が値1である(共有資源にアクセスする
タスク)か否かを判別する(ステップ814)。値1で
ある場合、ループを終了し、ステップS816の処理に
移行する。一方、TCB[Count]の共有資源アク
セスフラグ758が値1でなければ、Countをイン
クリメントする(ステップS815)。
【0054】最初に見つかった共有資源をアクセスする
タスクを示すTCB[Count]を優先順位755に
対応する実行待キュー770の後尾に追加する(ステッ
プS816)。ループカウンタCountをインクリメ
ントする(ステップS817)。実行待共有資源アクセ
スタスク数682に値1をセットする(ステップS81
8)。
タスクを示すTCB[Count]を優先順位755に
対応する実行待キュー770の後尾に追加する(ステッ
プS816)。ループカウンタCountをインクリメ
ントする(ステップS817)。実行待共有資源アクセ
スタスク数682に値1をセットする(ステップS81
8)。
【0055】ラウンドロビンキュー840に残りの共有
資源をアクセスするタスク群を追加するため、TCB
[Count]からTCB[(全タスク数510)−
1)]間で以下の処理を繰り返す(ステップS81
9)。TCB[Count]の共有資源アクセスフラグ
758が値1である(共有資源にアクセスするタスク)
か否かを判別する(ステップS820)。値1である場
合、TCB[Count]のタスク状態756をラウン
ドロビン待904とし、ラウンドロビンキュー840の
後尾に追加し(ステップS821)、ラウンドロビン待
タスク数681をインクリメントし(ステップS82
2)、ループカウンタCountをインクリメントする
(ステップS823)。一方、ステップS820でTC
B[Count]の共有資源アクセスフラグ758が値
1でなければ、Countをインクリメントする(ステ
ップS823)。また、ステップS813あるいはステ
ップS819で全て繰り返した場合、呼び出し元にリタ
ーンする。
資源をアクセスするタスク群を追加するため、TCB
[Count]からTCB[(全タスク数510)−
1)]間で以下の処理を繰り返す(ステップS81
9)。TCB[Count]の共有資源アクセスフラグ
758が値1である(共有資源にアクセスするタスク)
か否かを判別する(ステップS820)。値1である場
合、TCB[Count]のタスク状態756をラウン
ドロビン待904とし、ラウンドロビンキュー840の
後尾に追加し(ステップS821)、ラウンドロビン待
タスク数681をインクリメントし(ステップS82
2)、ループカウンタCountをインクリメントする
(ステップS823)。一方、ステップS820でTC
B[Count]の共有資源アクセスフラグ758が値
1でなければ、Countをインクリメントする(ステ
ップS823)。また、ステップS813あるいはステ
ップS819で全て繰り返した場合、呼び出し元にリタ
ーンする。
【0056】図12はプリエンプトスケジューリング機
構700のスケジューリング処理730の手順を示すフ
ローチャートである。この処理は、スケジューリング調
整機構600の初期化処理610、中断処理620、中
断解除処理640、タイマ割込み処理660から起動さ
れる。
構700のスケジューリング処理730の手順を示すフ
ローチャートである。この処理は、スケジューリング調
整機構600の初期化処理610、中断処理620、中
断解除処理640、タイマ割込み処理660から起動さ
れる。
【0057】実行待キュー770に基づきタスクスケジ
ューリングを実現する。まず、現実行タスク703が最
高優先順位の実行待キュー770の先頭タスクと等しい
か否かを判別する(ステップS731)。等しければリ
ターンする。等しくなければ、タスクスイッチを行うた
めに現実行タスク703のTCB750(タスクアドレ
ス753、タスクスタックアドレス754)にCPU1
40内のPC(プログラムカウンタ)とSP(スタック
ポインタ)を保存し、タスク状態756を実行待状態9
03にする(ステップS732)。
ューリングを実現する。まず、現実行タスク703が最
高優先順位の実行待キュー770の先頭タスクと等しい
か否かを判別する(ステップS731)。等しければリ
ターンする。等しくなければ、タスクスイッチを行うた
めに現実行タスク703のTCB750(タスクアドレ
ス753、タスクスタックアドレス754)にCPU1
40内のPC(プログラムカウンタ)とSP(スタック
ポインタ)を保存し、タスク状態756を実行待状態9
03にする(ステップS732)。
【0058】最高優先順位の実行待キュー770の先頭
タスクのTCB750(タスクアドレス753、タスク
スタックアドレス754)から、CPU140内のPC
(プログラムカウンタ)とSP(スタックポインタ)を
セットし、タスク状態756を実行状態901にする
(ステップS733)。
タスクのTCB750(タスクアドレス753、タスク
スタックアドレス754)から、CPU140内のPC
(プログラムカウンタ)とSP(スタックポインタ)を
セットし、タスク状態756を実行状態901にする
(ステップS733)。
【0059】現実行タスク703を最高優先順位の実行
待キュー770の先頭タスクとする(ステップS73
4)。そして、タスクをスタートさせる(ステップS7
35)。
待キュー770の先頭タスクとする(ステップS73
4)。そして、タスクをスタートさせる(ステップS7
35)。
【0060】図13はスケジューリング調整機構600
の中断処理620の手順を示すフローチャートである。
この処理はタスクから任意に起動され、指定タスクを中
断状態905に遷移させる処理である。
の中断処理620の手順を示すフローチャートである。
この処理はタスクから任意に起動され、指定タスクを中
断状態905に遷移させる処理である。
【0061】まず、指定した中断タスクのTCB750
内の共有資源アクセスフラグ758が値1と等しいか否
かを判別する(ステップS621)。等しくなければ、
中断すべきタスクは共有資源にアクセスしないタスクで
あるので、中断タスクのTCB750を実行待キュー7
70から取り出し(ステップS622)、中断キュー7
90の後尾に追加し、タスク状態756を中断状態90
5にし(ステップS623)、スケジューリング処理7
30を起動する(ステップS623A)。
内の共有資源アクセスフラグ758が値1と等しいか否
かを判別する(ステップS621)。等しくなければ、
中断すべきタスクは共有資源にアクセスしないタスクで
あるので、中断タスクのTCB750を実行待キュー7
70から取り出し(ステップS622)、中断キュー7
90の後尾に追加し、タスク状態756を中断状態90
5にし(ステップS623)、スケジューリング処理7
30を起動する(ステップS623A)。
【0062】指定した中断タスクのTCB750内の共
有資源アクセスフラグ758が値1と等しければ、中断
すべきタスクは共有資源にアクセスするタスクであるの
で、中断タスクのTCBを実行待キュー770から取り
出し(ステップS624)、実行待共有資源アクセスタ
スク数(682)に値0をセットし(ステップS62
5)、ステップS624で取り出したTCBを中断キュ
ー790の後尾に追加し、タスク状態756を中断状態
905にする(ステップS626)。
有資源アクセスフラグ758が値1と等しければ、中断
すべきタスクは共有資源にアクセスするタスクであるの
で、中断タスクのTCBを実行待キュー770から取り
出し(ステップS624)、実行待共有資源アクセスタ
スク数(682)に値0をセットし(ステップS62
5)、ステップS624で取り出したTCBを中断キュ
ー790の後尾に追加し、タスク状態756を中断状態
905にする(ステップS626)。
【0063】ラウンドロビン待タスク数681が値0に
等しいか否かを判別する(ステップS627)。値0に
等しければ、特にラウンドロビン待状態904のタスク
は存在しないので、スケジューリング処理730を起動
する(ステップS632)。
等しいか否かを判別する(ステップS627)。値0に
等しければ、特にラウンドロビン待状態904のタスク
は存在しないので、スケジューリング処理730を起動
する(ステップS632)。
【0064】値0に等しくなければ、指定した共有資源
をアクセスするタスクが実行待状態903から中断状態
905に遷移したため、新たにラウンドロビン待状態9
04の共有資源をアクセスするタスク群のうちから1タ
スクを実行待状態903に遷移させる。まず、ラウンド
ロビンキュー840の先頭タスクのTCB750を取り
出し(ステップS628)、ラウンドロビン待タスク数
681をデクリメントし(ステップS629)、ステッ
プ628で取り出したTCBを該当する優先順位755
の実行待キュー770の後尾へ追加し、タスク状態75
6を実行待状態903にする(ステップS630)。
をアクセスするタスクが実行待状態903から中断状態
905に遷移したため、新たにラウンドロビン待状態9
04の共有資源をアクセスするタスク群のうちから1タ
スクを実行待状態903に遷移させる。まず、ラウンド
ロビンキュー840の先頭タスクのTCB750を取り
出し(ステップS628)、ラウンドロビン待タスク数
681をデクリメントし(ステップS629)、ステッ
プ628で取り出したTCBを該当する優先順位755
の実行待キュー770の後尾へ追加し、タスク状態75
6を実行待状態903にする(ステップS630)。
【0065】実行待共有資源アクセスタスク数(68
2)に値1をセットする(ステップ631)。スケジュ
ーリング処理730を起動する(ステップ632)。
2)に値1をセットする(ステップ631)。スケジュ
ーリング処理730を起動する(ステップ632)。
【0066】図14はスケジューリング調整機構600
の中断解除処理640の手順を示すフローチャートであ
る。この処理はタスクまたはI/O割込み処理から任意
に起動される。指定タスクを中断状態905から実行待
状態903またはラウンドロビン待状態904に遷移さ
せる処理である。
の中断解除処理640の手順を示すフローチャートであ
る。この処理はタスクまたはI/O割込み処理から任意
に起動される。指定タスクを中断状態905から実行待
状態903またはラウンドロビン待状態904に遷移さ
せる処理である。
【0067】まず、指定した中断状態を解除したいタス
クのTCB750内の共有資源アクセスフラグ758が
値1に等しいか否かを判別する(ステップS641)。
等しくなければ、中断状態を解除すべきタスクは共有資
源にアクセスしないタスクであるので、中断タスクのT
CB750を中断キュー790から取り出し(ステップ
S642)、該当する優先順位755の実行待キュー7
70の後尾へ追加し、タスク状態756を実行待状態9
03にし(ステップS643)、スケジューリング処理
730を起動する(ステップS643A)。
クのTCB750内の共有資源アクセスフラグ758が
値1に等しいか否かを判別する(ステップS641)。
等しくなければ、中断状態を解除すべきタスクは共有資
源にアクセスしないタスクであるので、中断タスクのT
CB750を中断キュー790から取り出し(ステップ
S642)、該当する優先順位755の実行待キュー7
70の後尾へ追加し、タスク状態756を実行待状態9
03にし(ステップS643)、スケジューリング処理
730を起動する(ステップS643A)。
【0068】指定した中断状態を解除したいタスクのT
CB750内の共有資源アクセスフラグ758が値1に
等しければ、中断すべきタスクは共有資源にアクセスす
るタスクであるので、中断タスクのTCB750を中断
キュー790から取り出す(ステップS644)。
CB750内の共有資源アクセスフラグ758が値1に
等しければ、中断すべきタスクは共有資源にアクセスす
るタスクであるので、中断タスクのTCB750を中断
キュー790から取り出す(ステップS644)。
【0069】ラウンドロビン待タスク数681が値0に
等しいか否かを判別する(ステップS645)。値0に
等しくなければ、ラウンドロビン待状態904のタスク
が既に存在するので、ステップS644で取り出したT
CBをラウンドロビンキュー840の後尾へ追加し、タ
スク状態756をラウンドロビン待状態904にし(ス
テップS647)、ラウンドロビン待タスク数681を
インクリメントし(ステップS648)、リターンす
る。
等しいか否かを判別する(ステップS645)。値0に
等しくなければ、ラウンドロビン待状態904のタスク
が既に存在するので、ステップS644で取り出したT
CBをラウンドロビンキュー840の後尾へ追加し、タ
スク状態756をラウンドロビン待状態904にし(ス
テップS647)、ラウンドロビン待タスク数681を
インクリメントし(ステップS648)、リターンす
る。
【0070】ステップS645で値0に等しければ、ラ
ウンドロビン待状態904のタスクは存在しないので、
実行待共有資源アクセスタスク数(682)が値0に等
しいか否かを判別する(ステップS646)。値0に等
しくなければ、既に共有資源をアクセスするタスク群の
うちから1タスクが実行待状態903であるため、ステ
ップS644で取り出したTCBをラウンドロビンキュ
ー840の後尾へ追加し、タスク状態756をラウンド
ロビン待状態904にし(ステップS647)、ラウン
ドロビン待タスク数681をインクリメントし(ステッ
プS648)、リターンする。
ウンドロビン待状態904のタスクは存在しないので、
実行待共有資源アクセスタスク数(682)が値0に等
しいか否かを判別する(ステップS646)。値0に等
しくなければ、既に共有資源をアクセスするタスク群の
うちから1タスクが実行待状態903であるため、ステ
ップS644で取り出したTCBをラウンドロビンキュ
ー840の後尾へ追加し、タスク状態756をラウンド
ロビン待状態904にし(ステップS647)、ラウン
ドロビン待タスク数681をインクリメントし(ステッ
プS648)、リターンする。
【0071】ステップS646で値0に等しければ、共
有資源をアクセスするタスク群のうち、実行待状態90
3のタスクは存在しないので、ステップS644で取り
出したTCBを該当する優先順位755の実行待キュー
770の後尾へ追加し、タスク状態756を実行待状態
903にする(ステップS649)。実行待共有資源ア
クセスタスク数(682)に値1をセットする(ステッ
プS650)。スケジューリング処理730を起動する
(ステップS651)。
有資源をアクセスするタスク群のうち、実行待状態90
3のタスクは存在しないので、ステップS644で取り
出したTCBを該当する優先順位755の実行待キュー
770の後尾へ追加し、タスク状態756を実行待状態
903にする(ステップS649)。実行待共有資源ア
クセスタスク数(682)に値1をセットする(ステッ
プS650)。スケジューリング処理730を起動する
(ステップS651)。
【0072】図15はスケジューリング調整機構600
のタイマ割込み処理660の手順を示すフローチャート
である。この処理は、タイマ割込み発生時、タイマ割込
み処理410から起動される。最高優先順位の実行待キ
ュー770内にリンクされているタスクをタイムスライ
ス(時分割)スケジューリングさせる処理である。タイ
ムスライスを実行したくなければ起動しなくてもよい。
のタイマ割込み処理660の手順を示すフローチャート
である。この処理は、タイマ割込み発生時、タイマ割込
み処理410から起動される。最高優先順位の実行待キ
ュー770内にリンクされているタスクをタイムスライ
ス(時分割)スケジューリングさせる処理である。タイ
ムスライスを実行したくなければ起動しなくてもよい。
【0073】まず、最高優先順位の実行待キュー770
から先頭タスクを取り出し(ステップS661)、同じ
優先順位の実行待キュー770の後尾へ追加する(ステ
ップS662)。スケジューリング処理730を起動す
る(ステップS663)。
から先頭タスクを取り出し(ステップS661)、同じ
優先順位の実行待キュー770の後尾へ追加する(ステ
ップS662)。スケジューリング処理730を起動す
る(ステップS663)。
【0074】[第2の実施形態]第2の実施形態では、
前述した問題点1〜問題点5を解決するタスクスケジュ
ーリング装置について説明する。図16は第2の実施形
態におけるタスクスケジューリング装置が適用されたシ
ステムの構成を示す図である。第2の実施形態では、前
記第1の実施形態と異なり、共有資源が複数存在する。
共有資源1(200)にはタスクA(300)およびタ
スクB(310)がアクセスし、共有資源2(210)
にはタスクX(340)およびタスクY(350)がア
クセスする。
前述した問題点1〜問題点5を解決するタスクスケジュ
ーリング装置について説明する。図16は第2の実施形
態におけるタスクスケジューリング装置が適用されたシ
ステムの構成を示す図である。第2の実施形態では、前
記第1の実施形態と異なり、共有資源が複数存在する。
共有資源1(200)にはタスクA(300)およびタ
スクB(310)がアクセスし、共有資源2(210)
にはタスクX(340)およびタスクY(350)がア
クセスする。
【0075】図17〜図24は第2の実施形態において
前記第1の実施形態と異なる処理およびデータ構造を持
つ部分だけを示す。図2、図3、図5、図9、図12、
図15は前記第1の実施形態と同様の処理およびデータ
構造である。以降の説明では、図16〜図24、図2、
図3、図5、図9、図12、図15に示したものを使用
し、前記第1の実施形態と同一の構成要素には同一の符
号を使用する。
前記第1の実施形態と異なる処理およびデータ構造を持
つ部分だけを示す。図2、図3、図5、図9、図12、
図15は前記第1の実施形態と同様の処理およびデータ
構造である。以降の説明では、図16〜図24、図2、
図3、図5、図9、図12、図15に示したものを使用
し、前記第1の実施形態と同一の構成要素には同一の符
号を使用する。
【0076】図16に示すROM110には、RAM1
00に示される全てのコードおよび初期化データが格納
されている。CPU140にリセットがかかると、シス
テムは立ち上がり時、これらを全てRAM100にコピ
ーし、スケジューリング調整機構600の初期化処理6
10に起動をかける。
00に示される全てのコードおよび初期化データが格納
されている。CPU140にリセットがかかると、シス
テムは立ち上がり時、これらを全てRAM100にコピ
ーし、スケジューリング調整機構600の初期化処理6
10に起動をかける。
【0077】初期化処理610では、I/Oインターフ
ェース130およびタイマ150のハードウェアの初期
化を行うことで、I/O割込み処理400およびタイマ
割込み処理410を有効にし、プリエンプトスケジュー
リング機構700の初期化処理720、ラウンドロビン
スケジューリング機構800の初期化処理810によ
り、初期化データ500を基にマルチタスク環境を立ち
上げる。
ェース130およびタイマ150のハードウェアの初期
化を行うことで、I/O割込み処理400およびタイマ
割込み処理410を有効にし、プリエンプトスケジュー
リング機構700の初期化処理720、ラウンドロビン
スケジューリング機構800の初期化処理810によ
り、初期化データ500を基にマルチタスク環境を立ち
上げる。
【0078】この時点で、全共有資源にアクセスしない
タスク群(タスク1(320)、タスク2(330)、
……)および共有資源1(200)にアクセスするタス
ク群(タスクA(300)、タスクB(310)、…
…)のうち1つだけ(タスクA(300))および共有
資源2(210)にアクセスするタスク群(タスクX
(340)、タスクY(350)、……)のうち1つだ
け(タスクX(340))がプリエンプトスケジューリ
ング機構700に登録され、それ以外のタスク群(タス
クB(310)、……およびタスクY(350)、…
…)はラウンドロビンスケジューリング機構800に共
有資源毎にラウンドロビングループを作って登録され
る。
タスク群(タスク1(320)、タスク2(330)、
……)および共有資源1(200)にアクセスするタス
ク群(タスクA(300)、タスクB(310)、…
…)のうち1つだけ(タスクA(300))および共有
資源2(210)にアクセスするタスク群(タスクX
(340)、タスクY(350)、……)のうち1つだ
け(タスクX(340))がプリエンプトスケジューリ
ング機構700に登録され、それ以外のタスク群(タス
クB(310)、……およびタスクY(350)、…
…)はラウンドロビンスケジューリング機構800に共
有資源毎にラウンドロビングループを作って登録され
る。
【0079】プリエンプトスケジューリング機構700
に登録されたタスク群(タスク1(320)、タスク2
(330)……、タスクA(300)、タスクX(34
0))のうち、スケジューリング処理730により実行
待キュー770内で優先順位が最も高く、待ち行列の最
も先頭のタスク1つだけがCPU140を占有して実行
される。
に登録されたタスク群(タスク1(320)、タスク2
(330)……、タスクA(300)、タスクX(34
0))のうち、スケジューリング処理730により実行
待キュー770内で優先順位が最も高く、待ち行列の最
も先頭のタスク1つだけがCPU140を占有して実行
される。
【0080】プリエンプトスケジューリング機構700
に登録されたタスクAが中断状態905に遷移したと
き、ラウンドロビンスケジューリング機構800のラウ
ンドロビングループ[1]841に登録されたタスク群
(タスクB(842)、タスクC(843)……)のう
ち、ラウンドロビングループ[1]841のキューの先
頭のタスク(タスクB842]1つだけを取り出し、プ
リエンプトスケジューリング機構700に追加登録す
る。タスクA(300)は中断状態905が解除された
タイミングで、プリエンプトスケジューリング機構70
0から削除され、タスクB(842)の代わりにラウン
ドロビンスケジューリング機構800のラウンドロビン
グループ[1]841に登録される。
に登録されたタスクAが中断状態905に遷移したと
き、ラウンドロビンスケジューリング機構800のラウ
ンドロビングループ[1]841に登録されたタスク群
(タスクB(842)、タスクC(843)……)のう
ち、ラウンドロビングループ[1]841のキューの先
頭のタスク(タスクB842]1つだけを取り出し、プ
リエンプトスケジューリング機構700に追加登録す
る。タスクA(300)は中断状態905が解除された
タイミングで、プリエンプトスケジューリング機構70
0から削除され、タスクB(842)の代わりにラウン
ドロビンスケジューリング機構800のラウンドロビン
グループ[1]841に登録される。
【0081】同様にプリエンプトスケジューリング機構
700に登録されたタスクXが中断状態905に遷移し
たとき、ラウンドロビンスケジューリング機構800に
ラウンドロビングループ[2]846に登録されたタス
ク群(タスクY(847)、タスクZ(848)……)
のうち、ラウンドロビングループ(2)846のキュー
の先頭のタスク(タスクY847)1つだけを取り出
し、プリエンプトスケジューリング機構700に追加登
録する。タスクX(340)は中断状態905が解除さ
れたタイミングで、プリエンプトスケジューリング機構
700から削除され、タスクY(847)の代わりにラ
ウンドロビンスケジューリング機構800のラウンドロ
ビングループ[2]846に登録される。
700に登録されたタスクXが中断状態905に遷移し
たとき、ラウンドロビンスケジューリング機構800に
ラウンドロビングループ[2]846に登録されたタス
ク群(タスクY(847)、タスクZ(848)……)
のうち、ラウンドロビングループ(2)846のキュー
の先頭のタスク(タスクY847)1つだけを取り出
し、プリエンプトスケジューリング機構700に追加登
録する。タスクX(340)は中断状態905が解除さ
れたタイミングで、プリエンプトスケジューリング機構
700から削除され、タスクY(847)の代わりにラ
ウンドロビンスケジューリング機構800のラウンドロ
ビングループ[2]846に登録される。
【0082】このように、共有資源1(200)をアク
セスするタスク群(タスクA(300)、タスクB(3
10)、……)においてはラウンドロビングループ
[1]841でラウンドロビンスケジューリングを用
い、共有資源2(210)をアクセスするタスク群(タ
スクX(340)、タスクY(350)、……)におい
てはラウンドロビングループ[2]846でラウンドロ
ビンスケジューリングを用い、共有資源と無関係なタス
ク群(タスク1(320)、タスク2(330)、…
…)においてはプリエンプト(横取り)スケジューリン
グを用い、これら3者のタスク群の間ではプリエンプト
(横取り)スケジューリングを行う。
セスするタスク群(タスクA(300)、タスクB(3
10)、……)においてはラウンドロビングループ
[1]841でラウンドロビンスケジューリングを用
い、共有資源2(210)をアクセスするタスク群(タ
スクX(340)、タスクY(350)、……)におい
てはラウンドロビングループ[2]846でラウンドロ
ビンスケジューリングを用い、共有資源と無関係なタス
ク群(タスク1(320)、タスク2(330)、…
…)においてはプリエンプト(横取り)スケジューリン
グを用い、これら3者のタスク群の間ではプリエンプト
(横取り)スケジューリングを行う。
【0083】以下に、第2の実施形態のタスクスケジュ
ーリング装置の構成および動作を、図面に基づいて詳細
に説明するが、前記第1の実施形態と異なる箇所につい
て詳細に説明する。
ーリング装置の構成および動作を、図面に基づいて詳細
に説明するが、前記第1の実施形態と異なる箇所につい
て詳細に説明する。
【0084】図17はラウンドロビンスケジューリング
機構800の構成を示す図である。ラウンドロビンスケ
ジューリング機構800が装備する処理801は、初期
化処理810、指定ラウンドロビンキュー後尾へ追加処
理832、指定ラウンドロビンキューからの取得処理8
33である。また、タスクスケジューリングを実現する
ためにラウンドロビンキュー840を保持している。
機構800の構成を示す図である。ラウンドロビンスケ
ジューリング機構800が装備する処理801は、初期
化処理810、指定ラウンドロビンキュー後尾へ追加処
理832、指定ラウンドロビンキューからの取得処理8
33である。また、タスクスケジューリングを実現する
ためにラウンドロビンキュー840を保持している。
【0085】ラウンドロビンキュー840は、ラウンド
ロビン待状態904のタスクのTCB750を共有資源
毎にリストに保持し、その並び順をラウンドロビングル
ープ毎(ラウンドロビングループ[1]841、ラウン
ドロビングループ[2]846、ラウンドロビングルー
プ[3]851)に待ち行列としてFIFOのキューと
して管理する。
ロビン待状態904のタスクのTCB750を共有資源
毎にリストに保持し、その並び順をラウンドロビングル
ープ毎(ラウンドロビングループ[1]841、ラウン
ドロビングループ[2]846、ラウンドロビングルー
プ[3]851)に待ち行列としてFIFOのキューと
して管理する。
【0086】図18は初期化データの構成を示す図であ
る。初期化データ500は全タスク数510、全共有資
源グループ数511および全タスク情報540を含んで
格納されている。全タスク情報540は、各タスク毎に
タスクの実行アドレス(PC)、優先順位、共有資源ア
クセスグループ(541−551)を含んで格納されて
いる。共有資源アクセスグループ(541−551)に
は共有資源毎にグループ番号が割り振られ、タスクA−
C(541−543)には値1、タスクX−Z(544
−546)には値2、タスクI−K(547−549)
には値3、アクセスしないタスク1−2(550−55
1)には値0をセットする。
る。初期化データ500は全タスク数510、全共有資
源グループ数511および全タスク情報540を含んで
格納されている。全タスク情報540は、各タスク毎に
タスクの実行アドレス(PC)、優先順位、共有資源ア
クセスグループ(541−551)を含んで格納されて
いる。共有資源アクセスグループ(541−551)に
は共有資源毎にグループ番号が割り振られ、タスクA−
C(541−543)には値1、タスクX−Z(544
−546)には値2、タスクI−K(547−549)
には値3、アクセスしないタスク1−2(550−55
1)には値0をセットする。
【0087】図19は共有資源管理テーブルを示す図で
ある。共有資源管理テーブル680は、共有資源毎(グ
ループ[1]691、グループ[2]694、グループ
[3]697)にグループ分けされた形で、実行待キュ
ー770にリンクされている共有資源をアクセスするタ
スクの数を表す実行待共有資源アクセスタスク数69
2,695,698およびラウンドロビングループ(共
有資源)毎にラウンドロビンキュー840にリンクされ
ているタスクの数を表すラウンドロビン待タスク数69
3,696,699を含んで格納されている。
ある。共有資源管理テーブル680は、共有資源毎(グ
ループ[1]691、グループ[2]694、グループ
[3]697)にグループ分けされた形で、実行待キュ
ー770にリンクされている共有資源をアクセスするタ
スクの数を表す実行待共有資源アクセスタスク数69
2,695,698およびラウンドロビングループ(共
有資源)毎にラウンドロビンキュー840にリンクされ
ているタスクの数を表すラウンドロビン待タスク数69
3,696,699を含んで格納されている。
【0088】図20はタスクコントロールブロックの構
成を示す図である。TCB(タスクコントロールブロッ
ク)750は、タスクID752、タスクアドレス(P
C)753、タスクスタックアドレス(SP)754、
優先順位755、タスク状態756、リンクポインタ7
57、共有資源アクセスグループ765、その他の付加
情報759を含んで格納されている。
成を示す図である。TCB(タスクコントロールブロッ
ク)750は、タスクID752、タスクアドレス(P
C)753、タスクスタックアドレス(SP)754、
優先順位755、タスク状態756、リンクポインタ7
57、共有資源アクセスグループ765、その他の付加
情報759を含んで格納されている。
【0089】TCB750は各タスク毎にデータを保持
し、TCB[0]751、TCB[1]760、TCB
[2]761およびプリエンプトスケジューリング機構
700のデータとして保持されている。
し、TCB[0]751、TCB[1]760、TCB
[2]761およびプリエンプトスケジューリング機構
700のデータとして保持されている。
【0090】タスク状態756の取り得る値は初期状態
902、実行待状態903、実行状態901、中断状態
905、ラウンドロビン待状態904である。状態遷移
およびその発生要因は図5に示す通りである。
902、実行待状態903、実行状態901、中断状態
905、ラウンドロビン待状態904である。状態遷移
およびその発生要因は図5に示す通りである。
【0091】図21はプリエンプトスケジューリング機
構700の初期化処理720の手順を示すフローチャー
トである。この処理はスケジューリング調整機構600
の初期化処理610から1度だけコールされる。
構700の初期化処理720の手順を示すフローチャー
トである。この処理はスケジューリング調整機構600
の初期化処理610から1度だけコールされる。
【0092】まず、初期化データ500の情報を基に各
タスクのTCB750の初期化(TCB[0]−TCB
[10](タスク1−3,A−C,X−Z,I−J))
を行う(ステップS721A)。このステップS721
Aの処理では、初期化データ500の全タスク数510
を基に全TCBの領域をRAM100に確保する(72
1a)。初期化データ500の全タスク情報520を基
にTCB750内のタスクアドレス(PC)753/優
先順位755/共有資源アクセスグループ765の値を
セットする(721b)。
タスクのTCB750の初期化(TCB[0]−TCB
[10](タスク1−3,A−C,X−Z,I−J))
を行う(ステップS721A)。このステップS721
Aの処理では、初期化データ500の全タスク数510
を基に全TCBの領域をRAM100に確保する(72
1a)。初期化データ500の全タスク情報520を基
にTCB750内のタスクアドレス(PC)753/優
先順位755/共有資源アクセスグループ765の値を
セットする(721b)。
【0093】タスクID752を割り振り、タスクスタ
ックの領域をRAM100に確保し、スタックポインタ
をタスクスタックアドレス(SP)754にセットする
(721c)。全TCBのタスク状態756を実行待状
態903にセットする(721d)。その他の付加情報
759があれば初期化する(721e)。
ックの領域をRAM100に確保し、スタックポインタ
をタスクスタックアドレス(SP)754にセットする
(721c)。全TCBのタスク状態756を実行待状
態903にセットする(721d)。その他の付加情報
759があれば初期化する(721e)。
【0094】TCB[0]からTCB[全タスク数(5
10)−1]まで以下の処理を繰り返す(ステップS7
22A)。TCB750の共有資源アクセスグループ7
65が値0である共有資源にアクセスしないタスクのT
CB(タスク1,2,3)アドレスを優先順位755に
対応する実行待キュー770の後尾に追加する。
10)−1]まで以下の処理を繰り返す(ステップS7
22A)。TCB750の共有資源アクセスグループ7
65が値0である共有資源にアクセスしないタスクのT
CB(タスク1,2,3)アドレスを優先順位755に
対応する実行待キュー770の後尾に追加する。
【0095】現実行タスク703をアイドルタスクとす
る(ステップS723)。I/Oインタフェースおよび
タイマを初期化し、同じ優先順位のタイムスライススケ
ジューリングを必要とする場合、タイマ割込みベクタに
タイマ割込み処理660を登録する(ステップS72
4)。この後、呼び出し元にリターンする。
る(ステップS723)。I/Oインタフェースおよび
タイマを初期化し、同じ優先順位のタイムスライススケ
ジューリングを必要とする場合、タイマ割込みベクタに
タイマ割込み処理660を登録する(ステップS72
4)。この後、呼び出し元にリターンする。
【0096】図22はラウンドロビンスケジューリング
機構800の初期化処理810の手順を示すフローチャ
ートである。この処理はスケジューリング調整機構60
0の初期化処理610から1度だけコールされる。ま
ず、以降の処理全てをループカウンタCount2=1
からCount2=全共有資源グループ数511まで繰
り返したか否かを判別する(ステップS810A)。繰
り返した場合、そのままリターンし、繰り返していない
場合、ループカウンタCountを値0に初期化する
(ステップS811)。グループ[Count2]のラ
ウンドロビン待タスク数(693、696あるいは69
9)を値0に初期化する(ステップS812)。
機構800の初期化処理810の手順を示すフローチャ
ートである。この処理はスケジューリング調整機構60
0の初期化処理610から1度だけコールされる。ま
ず、以降の処理全てをループカウンタCount2=1
からCount2=全共有資源グループ数511まで繰
り返したか否かを判別する(ステップS810A)。繰
り返した場合、そのままリターンし、繰り返していない
場合、ループカウンタCountを値0に初期化する
(ステップS811)。グループ[Count2]のラ
ウンドロビン待タスク数(693、696あるいは69
9)を値0に初期化する(ステップS812)。
【0097】TCB[0]からTCB[全タスク数(5
10)−1]まで以下の処理を繰り返す(ステップS8
13)。TCB[Count]の共有資源アクセスグル
ープ765が値0でない(共有資源にアクセスするタス
ク)か否かを判別する(ステップS814)。値0であ
る場合、ループを終了し、ステップS816に移行す
る。TCB[Count]の共有資源アクセスグループ
765が値0でない場合、Countをインクリメント
する(ステップS815)。
10)−1]まで以下の処理を繰り返す(ステップS8
13)。TCB[Count]の共有資源アクセスグル
ープ765が値0でない(共有資源にアクセスするタス
ク)か否かを判別する(ステップS814)。値0であ
る場合、ループを終了し、ステップS816に移行す
る。TCB[Count]の共有資源アクセスグループ
765が値0でない場合、Countをインクリメント
する(ステップS815)。
【0098】最初に見つかった共有資源をアクセスする
タスクを示すTCB[Count]を優先順位755に
対応する実行待キュー770の後尾に追加する(ステッ
プS816)。ループカウンタCountをインクリメ
ントする(ステップS817)。グループ[Count
2]の実行待共有資源アクセスタスク数(692、69
5あるいは698)に値1をセットする(ステップS8
18)。
タスクを示すTCB[Count]を優先順位755に
対応する実行待キュー770の後尾に追加する(ステッ
プS816)。ループカウンタCountをインクリメ
ントする(ステップS817)。グループ[Count
2]の実行待共有資源アクセスタスク数(692、69
5あるいは698)に値1をセットする(ステップS8
18)。
【0099】ラウンドロビンキュー840に残りの共有
資源をアクセスするタスク群を追加するため、TCB
[Count]からTCB[(全タスク数510)−
1]まで以下の処理を繰り返す(ステップS819)。
TCB[Count]の共有資源アクセスグループ76
5が値0でない(共有資源にアクセスするタスク)か否
かを判別する(ステップS820)。
資源をアクセスするタスク群を追加するため、TCB
[Count]からTCB[(全タスク数510)−
1]まで以下の処理を繰り返す(ステップS819)。
TCB[Count]の共有資源アクセスグループ76
5が値0でない(共有資源にアクセスするタスク)か否
かを判別する(ステップS820)。
【0100】値0でない場合、TCB[Count]の
タスク状態756をラウンドロビン待904とし、ラウ
ンドロビングループ[Count2]のラウンドロビン
キュー(841、846あるいは851)の後尾へ追加
し(ステップS821)、グループ[Count2]の
ラウンドロビン待タスク数(693、696あるいは6
99)をインクリメントし(ステップS822)、ルー
プカウンタCountをインクリメントする(ステップ
S823)。TCB[Count]の共有資源アクセス
グループ765が値0ならば、Countをインクリメ
ントする(ステップS823)。そして、ステップS8
10AでCount2=全共有資源グループ数511ま
で繰り返した場合、呼び出し元にリターンする。
タスク状態756をラウンドロビン待904とし、ラウ
ンドロビングループ[Count2]のラウンドロビン
キュー(841、846あるいは851)の後尾へ追加
し(ステップS821)、グループ[Count2]の
ラウンドロビン待タスク数(693、696あるいは6
99)をインクリメントし(ステップS822)、ルー
プカウンタCountをインクリメントする(ステップ
S823)。TCB[Count]の共有資源アクセス
グループ765が値0ならば、Countをインクリメ
ントする(ステップS823)。そして、ステップS8
10AでCount2=全共有資源グループ数511ま
で繰り返した場合、呼び出し元にリターンする。
【0101】図23はスケジューリング調整機構600
の中断処理620の手順を示すフローチャートである。
この処理はタスクから任意に起動される。指定タスクを
中断状態905に遷移させる処理である。まず、指定し
た中断タスクのTCB750内の共有資源アクセスグル
ープ765が値0に等しくないか否かを判別する(ステ
ップS621)。値0に等しければ、中断すべきタスク
は共有資源にアクセスしないタスクなので、中断タスク
のTCB750を実行待キュー770から取り出し(ス
テップS622)、中断キュー790の後尾に追加し、
タスク状態756を中断状態905にし(ステップS6
23)、スケジューリング処理730を起動する(ステ
ップ623A)。
の中断処理620の手順を示すフローチャートである。
この処理はタスクから任意に起動される。指定タスクを
中断状態905に遷移させる処理である。まず、指定し
た中断タスクのTCB750内の共有資源アクセスグル
ープ765が値0に等しくないか否かを判別する(ステ
ップS621)。値0に等しければ、中断すべきタスク
は共有資源にアクセスしないタスクなので、中断タスク
のTCB750を実行待キュー770から取り出し(ス
テップS622)、中断キュー790の後尾に追加し、
タスク状態756を中断状態905にし(ステップS6
23)、スケジューリング処理730を起動する(ステ
ップ623A)。
【0102】指定した中断タスクのTCB750内の共
有資源アクセスフラグ758が値0に等しくなければ、
中断すべきタスクは共有資源にアクセスするタスクであ
るので、中断タスクのTCBを実行待キュー770から
取り出し(ステップS624)、グループ[共有資源グ
ループ765]の実行待共有資源アクセスタスク数(6
92、695あるいは698)に値0をセットし(ステ
ップS625)、ステップS624で取り出したTCB
を中断キュー790の後尾に追加し、タスク状態756
を中断状態905にする(ステップS626)。
有資源アクセスフラグ758が値0に等しくなければ、
中断すべきタスクは共有資源にアクセスするタスクであ
るので、中断タスクのTCBを実行待キュー770から
取り出し(ステップS624)、グループ[共有資源グ
ループ765]の実行待共有資源アクセスタスク数(6
92、695あるいは698)に値0をセットし(ステ
ップS625)、ステップS624で取り出したTCB
を中断キュー790の後尾に追加し、タスク状態756
を中断状態905にする(ステップS626)。
【0103】グループ[共有資源グループ765]のラ
ウンドロビン待タスク数(693、696あるいは69
9)が値0に等しいか否かを判別する(ステップS62
7)。値0に等しければ、特にラウンドロビン待状態9
04のタスクは存在しないので、スケジューリング処理
730を起動する(ステップS632)。 一方、ステ
ップS627で値0に等しくなければ、指定した共有資
源をアクセスするタスクが実行待状態903から中断状
態905に遷移したために、新たにラウンドロビン待状
態904の共有資源をアクセスするタスク群のうちから
1タスクを実行待状態903に遷移させる。まず、ラウ
ンドロビングループ[共有資源グループ765]のラウ
ンドロビンキュー(841、846あるいは851)の
先頭タスク(842、847あるいは852)のTCB
750を取り出し(ステップS628)、グループ[共
有資源グループ765]のラウンドロビン待タスク数
(693、696あるいは699)をデクリメントし
(ステップS629)、ステップS628で取り出した
TCBを該当する優先順位755の実行待キュー770
の後尾へ追加し、タスク状態756を実行待状態903
にする(ステップS630)。
ウンドロビン待タスク数(693、696あるいは69
9)が値0に等しいか否かを判別する(ステップS62
7)。値0に等しければ、特にラウンドロビン待状態9
04のタスクは存在しないので、スケジューリング処理
730を起動する(ステップS632)。 一方、ステ
ップS627で値0に等しくなければ、指定した共有資
源をアクセスするタスクが実行待状態903から中断状
態905に遷移したために、新たにラウンドロビン待状
態904の共有資源をアクセスするタスク群のうちから
1タスクを実行待状態903に遷移させる。まず、ラウ
ンドロビングループ[共有資源グループ765]のラウ
ンドロビンキュー(841、846あるいは851)の
先頭タスク(842、847あるいは852)のTCB
750を取り出し(ステップS628)、グループ[共
有資源グループ765]のラウンドロビン待タスク数
(693、696あるいは699)をデクリメントし
(ステップS629)、ステップS628で取り出した
TCBを該当する優先順位755の実行待キュー770
の後尾へ追加し、タスク状態756を実行待状態903
にする(ステップS630)。
【0104】グループ[共有資源グループ765]の実
行待共有資源アクセスタスク数(692、695あるい
は698)に値1をセットする(ステップS631)。
スケジューリング処理730を起動する(ステップS6
32)。
行待共有資源アクセスタスク数(692、695あるい
は698)に値1をセットする(ステップS631)。
スケジューリング処理730を起動する(ステップS6
32)。
【0105】図24はスケジューリング調整機構600
の中断解除処理640の手順を示すフローチャートであ
る。この処理はタスクまたはI/O割込み処理から任意
に起動される。指定タスクを中断状態905から実行待
状態903またはラウンドロビン待状態904に遷移さ
せる処理である。
の中断解除処理640の手順を示すフローチャートであ
る。この処理はタスクまたはI/O割込み処理から任意
に起動される。指定タスクを中断状態905から実行待
状態903またはラウンドロビン待状態904に遷移さ
せる処理である。
【0106】まず、指定した中断状態を解除したいタス
クのTCB750内の共有資源グループ765が値0に
等しくないか否かを判別する(ステップS641)。値
0に等しければ、中断状態を解除すべきタスクは共有資
源にアクセスしないタスクであるので、中断タスクのT
CB750を中断キュー790から取り出し(ステップ
S642)、該当する優先順位755の実行待キュー7
70の後尾へ追加し、タスク状態756を実行待状態9
03にし(ステップS643)、スケジューリング処理
730を起動する(ステップS643A)。
クのTCB750内の共有資源グループ765が値0に
等しくないか否かを判別する(ステップS641)。値
0に等しければ、中断状態を解除すべきタスクは共有資
源にアクセスしないタスクであるので、中断タスクのT
CB750を中断キュー790から取り出し(ステップ
S642)、該当する優先順位755の実行待キュー7
70の後尾へ追加し、タスク状態756を実行待状態9
03にし(ステップS643)、スケジューリング処理
730を起動する(ステップS643A)。
【0107】指定した中断状態を解除したいタスクのT
CB750内の共有資源アクセスグループ765が値0
に等しくなければ、中断すべきタスクは共有資源にアク
セスするタスクであるので、中断タスクのTCB750
を中断キュー790から取り出す(ステップS64
4)。グループ[共有資源グループ765]のラウンド
ロビン待タスク数(693、696あるいは699)が
値0に等しいか否かを判別する(ステップS645)。
値0に等しくなければ、ラウンドロビン待状態904の
タスクが既に存在するので、ステップS644で取り出
したTCBをラウンドロビングループ[Count2]
のラウンドロビンキュー(841、846あるいは85
1)の後尾へ追加し、タスク状態756をラウンドロビ
ン待状態904にし(ステップS647)、グループ
[共有資源グループ765]のラウンドロビン待タスク
数(693、696あるいは699)をインクリメント
(ステップS648)、リターンする。
CB750内の共有資源アクセスグループ765が値0
に等しくなければ、中断すべきタスクは共有資源にアク
セスするタスクであるので、中断タスクのTCB750
を中断キュー790から取り出す(ステップS64
4)。グループ[共有資源グループ765]のラウンド
ロビン待タスク数(693、696あるいは699)が
値0に等しいか否かを判別する(ステップS645)。
値0に等しくなければ、ラウンドロビン待状態904の
タスクが既に存在するので、ステップS644で取り出
したTCBをラウンドロビングループ[Count2]
のラウンドロビンキュー(841、846あるいは85
1)の後尾へ追加し、タスク状態756をラウンドロビ
ン待状態904にし(ステップS647)、グループ
[共有資源グループ765]のラウンドロビン待タスク
数(693、696あるいは699)をインクリメント
(ステップS648)、リターンする。
【0108】ステップS645で値0に等しければ、ラ
ウンドロビン待状態904のタスクは存在しないので、
グループ[共有資源グループ765]の実行待共有資源
アクセスタスク数(692、695あるいは698)が
値0に等しいか否かを判別する(ステップS646)。
ウンドロビン待状態904のタスクは存在しないので、
グループ[共有資源グループ765]の実行待共有資源
アクセスタスク数(692、695あるいは698)が
値0に等しいか否かを判別する(ステップS646)。
【0109】値0に等しくなければ、既に共有資源グル
ープ765のタスク群のうちから1タスクが実行待状態
903であるため、ステップS644で取り出したTC
Bをラウンドロビングループ[Count2]のラウン
ドロビンキュー(841、846あるいは851)の後
尾へ追加し、タスク状態756をラウンドロビン待状態
904にし(ステップS647)、グループ[共有資源
グループ765]のラウンドロビン待タスク数(69
3、696あるいは699)をインクリメントし(ステ
ップS648)、リターンする。
ープ765のタスク群のうちから1タスクが実行待状態
903であるため、ステップS644で取り出したTC
Bをラウンドロビングループ[Count2]のラウン
ドロビンキュー(841、846あるいは851)の後
尾へ追加し、タスク状態756をラウンドロビン待状態
904にし(ステップS647)、グループ[共有資源
グループ765]のラウンドロビン待タスク数(69
3、696あるいは699)をインクリメントし(ステ
ップS648)、リターンする。
【0110】ステップS646で値0に等しければ、共
有資源グループ765のタスク群のうち、実行待状態9
03のタスクは存在しないので、ステップS644で取
り出したTCBを該当する優先順位755の実行待キュ
ー770の後尾へ追加し、タスク状態756を実行待状
態903にする(ステップS649)。グループ[共有
資源グループ765]の実行待共有資源アクセスタスク
数(692、695あるいは698)に値1をセットす
る(ステップS650)。スケジューリング処理730
を起動する(ステップS651)。
有資源グループ765のタスク群のうち、実行待状態9
03のタスクは存在しないので、ステップS644で取
り出したTCBを該当する優先順位755の実行待キュ
ー770の後尾へ追加し、タスク状態756を実行待状
態903にする(ステップS649)。グループ[共有
資源グループ765]の実行待共有資源アクセスタスク
数(692、695あるいは698)に値1をセットす
る(ステップS650)。スケジューリング処理730
を起動する(ステップS651)。
【0111】[第3の実施形態]第3の実施形態では、
前述した問題点1〜問題点4を解決するタスクスケジュ
ーリング装置について説明する。これは、前記第2の実
施形態における図16の共有資源にアクセスしないタス
ク(タスク1(320)、タスク2(330))を除い
たケースに相当する。したがって、図18の初期化デー
タ500において、タスク1とタスク2に関するタスク
情報(550および551)を削除してやれば、その他
は第2の実施形態と同等の処理で実現することができ
る。
前述した問題点1〜問題点4を解決するタスクスケジュ
ーリング装置について説明する。これは、前記第2の実
施形態における図16の共有資源にアクセスしないタス
ク(タスク1(320)、タスク2(330))を除い
たケースに相当する。したがって、図18の初期化デー
タ500において、タスク1とタスク2に関するタスク
情報(550および551)を削除してやれば、その他
は第2の実施形態と同等の処理で実現することができ
る。
【0112】尚、立ち上げ時のコードおよび初期化デー
タ500の格納場所をROM110ではなく、フロッピ
ーディスクやハードディスクなどの記録媒体に置き換え
てもよい。
タ500の格納場所をROM110ではなく、フロッピ
ーディスクやハードディスクなどの記録媒体に置き換え
てもよい。
【0113】また、共有資源としては、変数データだけ
でなく、ハードディスクやCD−ROMドライブ、RS
−232C、PIOなどの通信ポートに応用すること
で、容易にシステムの信頼性および性能を最大限に高め
て複数のタスクから資源を共有することが可能になる。
でなく、ハードディスクやCD−ROMドライブ、RS
−232C、PIOなどの通信ポートに応用すること
で、容易にシステムの信頼性および性能を最大限に高め
て複数のタスクから資源を共有することが可能になる。
【0114】さらに、共有資源としては、オブジェクト
指向言語の「クラス」に対応させることが容易であり、
オブジェクト指向言語で記述したシステムの信頼性およ
び性能を最大限に高めてマルチタスクシステムとして実
装することが可能になる。
指向言語の「クラス」に対応させることが容易であり、
オブジェクト指向言語で記述したシステムの信頼性およ
び性能を最大限に高めてマルチタスクシステムとして実
装することが可能になる。
【0115】
【発明の効果】本発明の請求項1に記載のタスクスケジ
ューリング装置によれば、前述した問題点1〜問題点4
を解決することができる。
ューリング装置によれば、前述した問題点1〜問題点4
を解決することができる。
【0116】即ち、スケジューリング調整機構によっ
て、共有資源と無関係な全てのタスクおよび共有資源に
アクセスするタスクのうちから1つをプリエンプトスケ
ジューリング機構に登録し、残った共有資源にアクセス
するタスク全てをラウンドロビンスケジューリング機構
に順序付けて登録し、プリエンプトスケジューリング機
構によるスケジューリングで共有資源にアクセスするタ
スクが実行権を放棄(中断状態に遷移)した時、ラウン
ドロビンスケジューリング機構に順序付けて登録された
共有資源にアクセスするタスクのうち先頭のものと入れ
替え、この際、中断状態に遷移したタスクを中断要因が
解除された時にラウンドロビンスケジューリング機構の
順序付けの最後尾に登録することが可能になる。したが
って、共有資源をアクセスしているタスクがCPUを占
有して実行し続けても、共有資源と無関係なタスクはプ
リエンプト(横取り)可能であるので、共有資源をアク
セスしているタスクより優先順位が高かったり、同じ優
先順位でもタイムスライスによりタスクスイッチが生
じ、CPU占有権を得て実行され、システム全体に影響
を及ぼさないようにすることができ、前述した問題点4
を解決できる。
て、共有資源と無関係な全てのタスクおよび共有資源に
アクセスするタスクのうちから1つをプリエンプトスケ
ジューリング機構に登録し、残った共有資源にアクセス
するタスク全てをラウンドロビンスケジューリング機構
に順序付けて登録し、プリエンプトスケジューリング機
構によるスケジューリングで共有資源にアクセスするタ
スクが実行権を放棄(中断状態に遷移)した時、ラウン
ドロビンスケジューリング機構に順序付けて登録された
共有資源にアクセスするタスクのうち先頭のものと入れ
替え、この際、中断状態に遷移したタスクを中断要因が
解除された時にラウンドロビンスケジューリング機構の
順序付けの最後尾に登録することが可能になる。したが
って、共有資源をアクセスしているタスクがCPUを占
有して実行し続けても、共有資源と無関係なタスクはプ
リエンプト(横取り)可能であるので、共有資源をアク
セスしているタスクより優先順位が高かったり、同じ優
先順位でもタイムスライスによりタスクスイッチが生
じ、CPU占有権を得て実行され、システム全体に影響
を及ぼさないようにすることができ、前述した問題点4
を解決できる。
【0117】また、共有資源にアクセスするタスク群で
は、ラウンドロビンスケジューリングを用いることで、
セマフォによる排他制御を不要とし、その際のオーバー
ヘッドをなくすことができ、前述した問題点1を解決で
きる。
は、ラウンドロビンスケジューリングを用いることで、
セマフォによる排他制御を不要とし、その際のオーバー
ヘッドをなくすことができ、前述した問題点1を解決で
きる。
【0118】さらに、複雑なデータ構造もデータ構造全
体を1つの共有資源とし、共有資源とタスクとの関係を
1対多の関係で定義することを可能にしたことで、細か
い共有資源の切り出しを不要にでき、前述した問題点2
を解決できる。
体を1つの共有資源とし、共有資源とタスクとの関係を
1対多の関係で定義することを可能にしたことで、細か
い共有資源の切り出しを不要にでき、前述した問題点2
を解決できる。
【0119】また、連続したデータアクセスが必要な場
合もそれらを1つの共有資源として扱うことができ、デ
ッドロックの危険性をなくすことができ、前述した問題
点3を解決できる。
合もそれらを1つの共有資源として扱うことができ、デ
ッドロックの危険性をなくすことができ、前述した問題
点3を解決できる。
【0120】尚、請求項4に記載のタスクスケジューリ
ング方法においても同様の効果を得ることがてきる。
ング方法においても同様の効果を得ることがてきる。
【0121】請求項2に記載のタスクスケジューリング
装置によれば、前述した問題点1〜問題点3および問題
点5を解決できる。
装置によれば、前述した問題点1〜問題点3および問題
点5を解決できる。
【0122】即ち、スケジューリング調整機構によっ
て、共有資源毎にアクセスするタスク群をタスクグルー
プとして切り分けて管理し、各タスクグループのうちか
ら1タスクずつプリエンプトスケジューリング機構に登
録し、残った共有資源にアクセスするタスク全てをタス
クグループ毎にラウンドロビンスケジューリング機構に
順序付けて登録し、プリエンプトスケジューリング機構
によるスケジューリングで、あるタスクグループ(該当
タスクグループ)に属するタスクが実行権を放棄(中断
状態に遷移)した時、ラウンドロビンスケジューリング
機構にタスクグループ毎に順序付けて登録されたタスク
のうち、該当タスクグループ内の順序付けの先頭のもの
と入れ替え、この際、中断状態に遷移したタスクを中断
要因が解除された時にラウンドロビンスケジューリング
機構のうち、該当タスクグループ内の順序付けの最後尾
に登録することが可能になる。したがって、複数の共有
資源がある場合、タイムスライスによるプリエンプト
(横取り)スケジューリングによって、それぞれの共有
資源毎の累積アクセス時間を均等に割り振ることがで
き、前述した問題点5を解決できる。
て、共有資源毎にアクセスするタスク群をタスクグルー
プとして切り分けて管理し、各タスクグループのうちか
ら1タスクずつプリエンプトスケジューリング機構に登
録し、残った共有資源にアクセスするタスク全てをタス
クグループ毎にラウンドロビンスケジューリング機構に
順序付けて登録し、プリエンプトスケジューリング機構
によるスケジューリングで、あるタスクグループ(該当
タスクグループ)に属するタスクが実行権を放棄(中断
状態に遷移)した時、ラウンドロビンスケジューリング
機構にタスクグループ毎に順序付けて登録されたタスク
のうち、該当タスクグループ内の順序付けの先頭のもの
と入れ替え、この際、中断状態に遷移したタスクを中断
要因が解除された時にラウンドロビンスケジューリング
機構のうち、該当タスクグループ内の順序付けの最後尾
に登録することが可能になる。したがって、複数の共有
資源がある場合、タイムスライスによるプリエンプト
(横取り)スケジューリングによって、それぞれの共有
資源毎の累積アクセス時間を均等に割り振ることがで
き、前述した問題点5を解決できる。
【0123】また、共有資源にアクセスするタスク群で
はラウンドロビンスケジューリングを用いることで、セ
マフォによる排他制御を不要とし、その際のオーバーヘ
ッドをなくすことができ、前述した問題点1を解決でき
る。
はラウンドロビンスケジューリングを用いることで、セ
マフォによる排他制御を不要とし、その際のオーバーヘ
ッドをなくすことができ、前述した問題点1を解決でき
る。
【0124】さらに、複雑なデータ構造もデータ構造全
体を1つの共有資源とし、共有資源とタスクとの関係を
1対多の関係で定義することを可能にしたことで、細か
い共有資源の切り出しを不要にでき、前述した問題点2
を解決できる。
体を1つの共有資源とし、共有資源とタスクとの関係を
1対多の関係で定義することを可能にしたことで、細か
い共有資源の切り出しを不要にでき、前述した問題点2
を解決できる。
【0125】また、連続したデータアクセスが必要な場
合もそれらを1つの共有資源として扱うことができ、デ
ッドロックの危険性をなくすことができ、前述した問題
点3を解決できる。
合もそれらを1つの共有資源として扱うことができ、デ
ッドロックの危険性をなくすことができ、前述した問題
点3を解決できる。
【0126】尚、請求項5に記載のタスクスケジューリ
ング方法においても、同様の効果を得ることができる。
ング方法においても、同様の効果を得ることができる。
【0127】請求項3に記載のタスクスケジューリング
装置によれば、前述した問題点1〜問題点5を解決する
ことがてきる。
装置によれば、前述した問題点1〜問題点5を解決する
ことがてきる。
【0128】即ち、スケジューリング調整機構によっ
て、共有資源毎にアクセスするタスク群をタスクグルー
プとして切り分けて管理し、各タスクグループのうちか
ら1タスクずつプリエンプトスケジューリング機構に登
録し、残った共有資源にアクセスするタスク全てをタス
クグループ毎にラウンドロビンスケジューリング機構に
順序付けて登録し、プリエンプトスケジューリング機構
によるスケジューリングで、あるタスクグループ(該当
タスクグループ)に属するタスクが実行権を放棄(中断
状態に遷移)した時、ラウンドロビンスケジューリング
機構にタスクグループ毎に順序付けて登録されたタスク
のうち、該当タスクグループ内の順序付けの先頭のもの
と入れ替え、この際、中断状態に遷移したタスクを中断
要因が解除された時にラウンドロビンスケジューリング
機構のうち、該当タスクグループ内の順序付けの最後尾
に登録することが可能になる。したがって、複数の共有
資源がある場合、タイムスライスによるプリエンプト
(横取り)スケジューリングによって、それぞれの共有
資源毎の累積アクセス時間を均等に割り振ることがで
き、前述した問題点5を解決できる。
て、共有資源毎にアクセスするタスク群をタスクグルー
プとして切り分けて管理し、各タスクグループのうちか
ら1タスクずつプリエンプトスケジューリング機構に登
録し、残った共有資源にアクセスするタスク全てをタス
クグループ毎にラウンドロビンスケジューリング機構に
順序付けて登録し、プリエンプトスケジューリング機構
によるスケジューリングで、あるタスクグループ(該当
タスクグループ)に属するタスクが実行権を放棄(中断
状態に遷移)した時、ラウンドロビンスケジューリング
機構にタスクグループ毎に順序付けて登録されたタスク
のうち、該当タスクグループ内の順序付けの先頭のもの
と入れ替え、この際、中断状態に遷移したタスクを中断
要因が解除された時にラウンドロビンスケジューリング
機構のうち、該当タスクグループ内の順序付けの最後尾
に登録することが可能になる。したがって、複数の共有
資源がある場合、タイムスライスによるプリエンプト
(横取り)スケジューリングによって、それぞれの共有
資源毎の累積アクセス時間を均等に割り振ることがで
き、前述した問題点5を解決できる。
【0129】また、共有資源をアクセスしているタスク
がCPUを占有して実行し続けても、共有資源と無関係
なタスクはプリエンプト(横取り)可能であるので、共
有資源をアクセスしているタスクより優先順位が高かっ
たり、同じ優先順位でもタイムスライスによりタスクス
イッチが生じ、CPU占有権を得て実行され、システム
全体に影響を及ぼさないようにすることができ、前述し
た問題点4を解決できる。
がCPUを占有して実行し続けても、共有資源と無関係
なタスクはプリエンプト(横取り)可能であるので、共
有資源をアクセスしているタスクより優先順位が高かっ
たり、同じ優先順位でもタイムスライスによりタスクス
イッチが生じ、CPU占有権を得て実行され、システム
全体に影響を及ぼさないようにすることができ、前述し
た問題点4を解決できる。
【0130】さらに、共有資源にアクセスするタスク群
では、ラウンドロビンスケジューリングを用いること
で、セマフォによる排他制御を不要とし、その際のオー
バーヘッドをなくすことができ、前述した問題点1を解
決できる。
では、ラウンドロビンスケジューリングを用いること
で、セマフォによる排他制御を不要とし、その際のオー
バーヘッドをなくすことができ、前述した問題点1を解
決できる。
【0131】また、複雑なデータ構造もデータ構造全体
を1つの共有資源とし、共有資源とタスクとの関係を1
対多の関係で定義することを可能にしたことで、細かい
共有資源の切り出しを不要にでき、前述した問題点2を
解決できる。
を1つの共有資源とし、共有資源とタスクとの関係を1
対多の関係で定義することを可能にしたことで、細かい
共有資源の切り出しを不要にでき、前述した問題点2を
解決できる。
【0132】さらに、連続したデータアクセスが必要な
場合もそれらを1つの共有資源として扱うことができ、
デッドロックの危険性をなくすことができ、前述した問
題点3を解決できる。
場合もそれらを1つの共有資源として扱うことができ、
デッドロックの危険性をなくすことができ、前述した問
題点3を解決できる。
【0133】尚、請求項6に記載のタスクスケジューリ
ング方法においても、同様の効果を得ることができる。
ング方法においても、同様の効果を得ることができる。
【0134】このように、共有資源をアクセスしている
タスクがCPUを占有して実行し続けても、共有資源と
無関係なタスクはプリエンプト(横取り)可能であるた
め、共有資源をアクセスしているタスクより優先順位が
高かったり、同じ優先順位てもタイムスライスによりタ
スクスイッチが生じ、CPU占有権を得て実行され、シ
ステム全体に影響を及ぼさないようにすることができ、
システムの信頼性を高めることが可能である。
タスクがCPUを占有して実行し続けても、共有資源と
無関係なタスクはプリエンプト(横取り)可能であるた
め、共有資源をアクセスしているタスクより優先順位が
高かったり、同じ優先順位てもタイムスライスによりタ
スクスイッチが生じ、CPU占有権を得て実行され、シ
ステム全体に影響を及ぼさないようにすることができ、
システムの信頼性を高めることが可能である。
【0135】また、複数の共有資源がある場合、タイム
スライスによるプリエンプト(横取り)スケジューリン
グによってそれぞれの共有資源毎の累積アクセス時間を
均等に割り振ることができ、タスクの数が変化しても安
定したスループットを保証するシステムを構築すること
が可能である。
スライスによるプリエンプト(横取り)スケジューリン
グによってそれぞれの共有資源毎の累積アクセス時間を
均等に割り振ることができ、タスクの数が変化しても安
定したスループットを保証するシステムを構築すること
が可能である。
【0136】さらに、共有資源にアクセスするタスク群
ではラウンドロビンスケジューリングを用いることによ
り、セマフォによる排他制御を不要とし、その際のオー
バヘッドをなくすことができ、システムの性能を向上さ
せることが可能になる。
ではラウンドロビンスケジューリングを用いることによ
り、セマフォによる排他制御を不要とし、その際のオー
バヘッドをなくすことができ、システムの性能を向上さ
せることが可能になる。
【0137】また、複雑なデータ構造もデータ構造全体
を1つの共有資源とし、共有資源とタスクとの関係を1
対多の関係で定義することを可能にしたことで、細かい
共有資源の切り出しを不要にすることができ、システム
設計を容易に行うことができ、生産性を向上させること
が可能である。
を1つの共有資源とし、共有資源とタスクとの関係を1
対多の関係で定義することを可能にしたことで、細かい
共有資源の切り出しを不要にすることができ、システム
設計を容易に行うことができ、生産性を向上させること
が可能である。
【0138】さらに、連続したデータアクセスが必要な
場合もそれらを1つの共有資源として扱うことを可能と
したことで、デッドロックの危険性をなくすことがで
き、システムの信頼性を高めることができる。
場合もそれらを1つの共有資源として扱うことを可能と
したことで、デッドロックの危険性をなくすことがで
き、システムの信頼性を高めることができる。
【0139】また、共有資源としては、変数データだけ
でなく、ハードディスクやCD−ROMドライブ、RS
−232C、PIOなどの通信ポートに応用すること
で、容易にシステムの信頼性および性能を最大限に高め
て複数のタスクから資源を共有することが可能になる。
でなく、ハードディスクやCD−ROMドライブ、RS
−232C、PIOなどの通信ポートに応用すること
で、容易にシステムの信頼性および性能を最大限に高め
て複数のタスクから資源を共有することが可能になる。
【0140】さらに、共有資源としては、オブジェクト
指向言語の「クラス」に対応させることが容易であり、
オブジェクト指向言語で記述したシステムの信頼性およ
び性能を最大限に高めてマルチタスクシステムとして実
装することが可能になる。
指向言語の「クラス」に対応させることが容易であり、
オブジェクト指向言語で記述したシステムの信頼性およ
び性能を最大限に高めてマルチタスクシステムとして実
装することが可能になる。
【0141】また、専用のハードウェアを新規に開発す
る必要がなく、固定優先順位のプリエンプトスケジュー
ル機能を持ったリアルタイムOSに簡単に組み込むこと
が可能であるので、既存システムであっても低コストで
信頼性および性能を向上させることができる。
る必要がなく、固定優先順位のプリエンプトスケジュー
ル機能を持ったリアルタイムOSに簡単に組み込むこと
が可能であるので、既存システムであっても低コストで
信頼性および性能を向上させることができる。
【図1】第1の実施形態におけるタスクスケジューリン
グ装置が適用されたシステムの構成を示すブロック図で
ある。
グ装置が適用されたシステムの構成を示すブロック図で
ある。
【図2】スケジューリング調整機構600の構成を示す
図である。
図である。
【図3】プリエンプトスケジューリング機構700の構
成を示す図である。
成を示す図である。
【図4】ラウンドロビンスケジューリング機構800の
構成を示す図である。
構成を示す図である。
【図5】タスクの状態遷移を示す図である。
【図6】初期化データの構成を示す図である。
【図7】共有資源管理テーブルを示す図である。
【図8】タスクコントロールブロックの構成を示す図で
ある。
ある。
【図9】初期化処理610の手順を示すフローチャート
である。
である。
【図10】プリエンプトスケジューリング機構700の
初期化処理720の手順を示すフローチャートである。
初期化処理720の手順を示すフローチャートである。
【図11】ラウンドロビンスケジューリング機構800
の初期化処理810の手順を示すフローチャートであ
る。
の初期化処理810の手順を示すフローチャートであ
る。
【図12】プリエンプトスケジューリング機構700の
スケジューリング処理730の手順を示すフローチャー
トである。
スケジューリング処理730の手順を示すフローチャー
トである。
【図13】スケジューリング調整機構600の中断処理
620の手順を示すフローチャートである。
620の手順を示すフローチャートである。
【図14】スケジューリング調整機構600の中断解除
処理640の手順を示すフローチャートである。
処理640の手順を示すフローチャートである。
【図15】スケジューリング調整機構600のタイマ割
込み処理660の手順を示すフローチャートである。
込み処理660の手順を示すフローチャートである。
【図16】第2の実施形態におけるタスクスケジューリ
ング装置が適用されたシステムの構成を示す図である。
ング装置が適用されたシステムの構成を示す図である。
【図17】ラウンドロビンスケジューリング機構800
の構成を示す図である。
の構成を示す図である。
【図18】初期化データの構成を示す図である。
【図19】共有資源管理テーブルを示す図である。
【図20】タスクコントロールブロックの構成を示す図
である。
である。
【図21】プリエンプトスケジューリング機構700の
初期化処理720の手順を示すフローチャートである。
初期化処理720の手順を示すフローチャートである。
【図22】ラウンドロビンスケジューリング機構800
の初期化処理810の手順を示すフローチャートであ
る。
の初期化処理810の手順を示すフローチャートであ
る。
【図23】スケジューリング調整機構600の中断処理
620の手順を示すフローチャートである。
620の手順を示すフローチャートである。
【図24】スケジューリング調整機構600の中断解除
処理640の手順を示すフローチャートである。
処理640の手順を示すフローチャートである。
100 RAM 110 ROM 140 CPU 200 共有資源 300、310、320、330 タスク 600 スケジューリング機構 700 プリエンプトスケジューリング機構 800 ラウンドロビンスケジューリング機構
───────────────────────────────────────────────────── フロントページの続き (72)発明者 別所 正隆 東京都大田区下丸子3丁目30番2号 キヤ ノン株式会社内
Claims (6)
- 【請求項1】 マルチタスクプログラムのスケジューリ
ングを行うタスクスケジューリング装置において、 スケジューリング調整機構と、プリエンプトスケジュー
リング機構と、ラウンドロビンスケジューリング機構と
を備え、 共有資源をアクセスするタスク群ではラウンドロビンス
ケジューリングを用い、 前記共有資源と無関係なタスク群ではプリエンプトスケ
ジューリングを用い、両タスク群の間ではプリエンプト
スケジューリングを実現する処理を行うことを特徴とす
るタスクスケジューリング装置。 - 【請求項2】 マルチタスクプログラムのスケジューリ
ングを行うタスクスケジューリング装置において、 スケジューリング調整機構と、プリエンプトスケジュー
リング機構と、ラウンドロビンスケジューリング機構と
を備え、 共有資源毎にアクセスするタスク群をタスクグループと
して切り出し、 各タスクグループ内で独立してラウンドロビンスケジュ
ーリングを用い、 前記タスクグループの間ではプリエンプトスケジューリ
ングを実現する処理を行うことを特徴とするタスクスケ
ジューリング装置。 - 【請求項3】 マルチタスクプログラムのスケジューリ
ングを行うタスクスケジューリング装置において、 スケジューリング調整機構と、プリエンプトスケジュー
リング機構と、ラウンドロビンスケジューリング機構と
を備え、 共有資源毎にアクセスするタスク群をタスクグループと
して切り出し、 各タスクグループ内で独立してラウンドロビンスケジュ
ーリングを用い、 前記共有資源と無関係なタスク群ではプリエンプトスケ
ジューリングを用い、 前記タスクグループの間および前記タスクグループと前
記共有資源とは無関係なタスク群の間ではプリエンプト
スケジューリングを実現する処理を行うことを特徴とす
るタスクスケジューリング装置。 - 【請求項4】 マルチタスクプログラムのスケジューリ
ングを行うタスクスケジューリング方法において、 共有資源をアクセスするタスク群ではラウンドロビンス
ケジューリングを用い、 前記共有資源と無関係なタスク群ではプリエンプトスケ
ジューリングを用い、 両タスク群の間ではプリエンプトスケジューリングを実
現する処理を行うことを特徴とするタスクスケジューリ
ング方法。 - 【請求項5】 マルチタスクプログラムのスケジューリ
ングを行うタスクスケジューリング方法において、 共有資源毎にアクセスするタスク群をタスクグループと
して切り出し、 各タスクグループ内で独立してラウンドロビンスケジュ
ーリングを用い、 前記タスクグループの間ではプリエンプトスケジューリ
ングを実現する処理を行うことを特徴とするタスクスケ
ジューリング方法。 - 【請求項6】 マルチタスクプログラムのスケジューリ
ングを行うタスクスケジューリング方法において、 共有資源毎にアクセスするタスク群をタスクグループと
して切り出し、 各タスクグループ内で独立してラウンドロビンスケジュ
ーリングを用い、 前記共有資源と無関係なタスク群ではプリエンプトスケ
ジューリングを用い、 前記タスクグループの間および前記タスクグループと前
記共有資源とは無関係なタスク群の間ではプリエンプト
スケジューリングを実現する処理を行うことを特徴とす
るタスクスケジューリング方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP9193389A JPH1124946A (ja) | 1997-07-04 | 1997-07-04 | タスクスケジューリング装置および方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP9193389A JPH1124946A (ja) | 1997-07-04 | 1997-07-04 | タスクスケジューリング装置および方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH1124946A true JPH1124946A (ja) | 1999-01-29 |
Family
ID=16307131
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP9193389A Pending JPH1124946A (ja) | 1997-07-04 | 1997-07-04 | タスクスケジューリング装置および方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH1124946A (ja) |
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2007316721A (ja) * | 2006-05-23 | 2007-12-06 | Toshiba Corp | 携帯端末 |
| US7472214B2 (en) | 2005-08-05 | 2008-12-30 | Mitsubishi Denki Kabushiki Kaisha | Real-time embedded simple monitor method and computer product |
| JP2009211386A (ja) * | 2008-03-04 | 2009-09-17 | Nec Corp | プロセス制御装置、プロセス制御方法およびプロセス制御プログラム |
| JP2017021488A (ja) * | 2015-07-08 | 2017-01-26 | 富士通株式会社 | 制御装置、制御方法及びプログラム |
| CN109799805A (zh) * | 2019-01-17 | 2019-05-24 | 湖南大学 | 一种可靠性感知的高性能汽车电子调度算法 |
-
1997
- 1997-07-04 JP JP9193389A patent/JPH1124946A/ja active Pending
Cited By (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7472214B2 (en) | 2005-08-05 | 2008-12-30 | Mitsubishi Denki Kabushiki Kaisha | Real-time embedded simple monitor method and computer product |
| JP2007316721A (ja) * | 2006-05-23 | 2007-12-06 | Toshiba Corp | 携帯端末 |
| JP2009211386A (ja) * | 2008-03-04 | 2009-09-17 | Nec Corp | プロセス制御装置、プロセス制御方法およびプロセス制御プログラム |
| JP2017021488A (ja) * | 2015-07-08 | 2017-01-26 | 富士通株式会社 | 制御装置、制御方法及びプログラム |
| CN109799805A (zh) * | 2019-01-17 | 2019-05-24 | 湖南大学 | 一种可靠性感知的高性能汽车电子调度算法 |
| CN109799805B (zh) * | 2019-01-17 | 2020-09-29 | 湖南大学 | 一种可靠性感知的高性能汽车电子调度算法 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5390329A (en) | Responding to service requests using minimal system-side context in a multiprocessor environment | |
| CN111488210B (zh) | 基于云计算的任务调度方法、装置和计算机设备 | |
| AU2014202257B2 (en) | Dynamic virtual machine sizing | |
| US10452572B2 (en) | Automatic system service resource management for virtualizing low-latency workloads that are input/output intensive | |
| US5276879A (en) | Portable, resource sharing file server using co-routines | |
| TWI454933B (zh) | 管理一虛擬機器監視器中超級呼叫的裝置與方法以及虛擬機器監視器 | |
| CN111897637B (zh) | 作业调度方法、装置、主机及存储介质 | |
| KR20070083460A (ko) | 다중 커널을 동시에 실행하는 방법 및 시스템 | |
| JPH05189251A (ja) | 多重タスク処理オペレーティング・システム及びそのコンピュータの動作方法 | |
| CN106250217A (zh) | 一种多虚拟处理器间的同步调度方法及其调度系统 | |
| JPH1124946A (ja) | タスクスケジューリング装置および方法 | |
| Ahn et al. | Accelerating critical OS services in virtualized systems with flexible micro-sliced cores | |
| JP3644042B2 (ja) | マルチタスク処理装置 | |
| JPH0877025A (ja) | タスクの優先度制御方法、タスクの優先度制御装置 | |
| JP4292705B2 (ja) | タスクスケジューリング装置 | |
| EP0942366A2 (en) | Event-driven and cyclic context controller and processor employing the same | |
| Nosrati et al. | Task scheduling algorithms introduction | |
| US11934890B2 (en) | Opportunistic exclusive affinity for threads in a virtualized computing system | |
| JP2693916B2 (ja) | タスクスケジュール方法 | |
| Saranya et al. | An implementation of partitioned scheduling scheme for hard real-time tasks in multicore linux with fair share for linux tasks | |
| JPS6126095B2 (ja) | ||
| CN113296900A (zh) | 一种任务切换方法及装置 | |
| Cherepov et al. | Hard Real-time with {RTX} on Windows {NT} | |
| WO1992003783A1 (en) | Method of implementing kernel functions | |
| JPS5958553A (ja) | 統合型仮想計算機のディスパッチ制御方式 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081031 Year of fee payment: 11 |
|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081031 Year of fee payment: 11 |
|
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091031 Year of fee payment: 12 |
|
| EXPY | Cancellation because of completion of term | ||
| FPAY | Renewal fee payment (prs date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091031 Year of fee payment: 12 |