JP3717722B2 - リアルタイムosのメモリ領域を用いたタスク管理方法 - Google Patents

リアルタイムosのメモリ領域を用いたタスク管理方法 Download PDF

Info

Publication number
JP3717722B2
JP3717722B2 JP25416299A JP25416299A JP3717722B2 JP 3717722 B2 JP3717722 B2 JP 3717722B2 JP 25416299 A JP25416299 A JP 25416299A JP 25416299 A JP25416299 A JP 25416299A JP 3717722 B2 JP3717722 B2 JP 3717722B2
Authority
JP
Japan
Prior art keywords
task
forced termination
counter
ready queue
queue
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.)
Expired - Fee Related
Application number
JP25416299A
Other languages
English (en)
Other versions
JP2001075822A (ja
Inventor
勝禎 前田
Original Assignee
Necマイクロシステム株式会社
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Necマイクロシステム株式会社 filed Critical Necマイクロシステム株式会社
Priority to JP25416299A priority Critical patent/JP3717722B2/ja
Publication of JP2001075822A publication Critical patent/JP2001075822A/ja
Application granted granted Critical
Publication of JP3717722B2 publication Critical patent/JP3717722B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

【0001】
【発明の属する技術分野】
本発明はリアルタイムOSのメモリ領域を用いたタスク管理方法に関する。
【0002】
【従来の技術】
図33に従来のリアルタイムOSのメモリ領域の例を示す。
【0003】
レディ・キュー001は16コ、タイマ・キュー002は8コとする。
【0004】
図33に示すように従来のリアルタイムOSは、レディ・キュー001と、タイマ・キュー002と、実行中タスク・アドレス003と、レディ・キュー先頭ポインタ004と、レディ・キュー空先頭ポインタ005と、タイマ・キュー先頭ポインタ006と、タイマ・キュー空先頭ポインタ007とから構成されている。
【0005】
このような構成を有する従来のリアルタイムOSは次のように動作する。
【0006】
まず、従来のシステムコールと遅延起動用のタイマ割り込み関数について、概略を図34〜39のフローを用いて説明する。
【0007】
sta_tsk : 指定タスクをレディ・キュー001末尾に登録する(図34ステップ1)。
【0008】
ext_tsk : まず、レディ・キュー001が空かチェックする(図35ステップ1)。空であれば、タスクが登録されるのを待つ。空でなければレディ・キュー001先頭に登録されているタスクのスタート・アドレスをスタックに積む(図35ステップ2)。そしてレディ・キュー先頭ポインタ004を更新する(図35ステップ3)。
【0009】
最後にRET命令を実行すると、図35ステップ2でスタックに積んだアドレスをプログラム・カウンタに書込み、タスクが実行される(図35ステップ4)。
【0010】
sta_tskp: 指定タスクをレディ・キュー001先頭に登録する(図36ステップ1)。
【0011】
chg_pri : 指定タスクがレディ・キュー001に登録されているか検索する(図37ステップ1)。登録されていなければ何もしない。登録されていれば、指定タスクをレディ・キュー001 先頭に移動する。
【0012】
ter_tsk : 指定タスクがレディ・キュー001に登録されているか検索する(図38ステップ1)登録されていなければ何もしない。登録されていれば、指定タスクをレディ・キュー001より消去する。
【0013】
MX_INT : まず、タイマ・キュー002が空かチェックする(図39ステップ1)。空であれば何もせずに終わる。空でなければタイマ・キュー002先頭に登録されているタスクの遅延起動時間をデクリメントする(図39ステップ2)。そして、デクリメントした結果がゼロかチェックする(図39ステップ3)。ゼロでなければ何もせずに終わる。ゼロであればタイマ・キュー002先頭に登録されているタスクをレディ・キュー001先頭に移動する(図39ステップ4)。そしてレディ・キュー先頭ポインタ004とタイマ・キュー先頭ポインタ006を更新する(図39ステップ5)。そして、新たにタイマ・キュー002先頭となったタスクの遅延起動時間がゼロかチェックする(図39ステップ3)。以上の動作を遅延起動時間がゼロでなくなるまで行って、処理を終わる。次に図40と図41〜53を用いて、前記のリアルタイムOSのシステムコール発行の一例を示す。
【0014】
はじめに、イニシャライズする(図40ステップ01)。このとき実行中のタスクはtaskZである。イニシャライズが終わった時点のメモリ状態は図41である。
【0015】
次に、taskAをレディ・キュー001末尾に登録する(図40ステップ02)。このときのメモリ状態は図42である。
【0016】
レディ・キュー001にタスクが登録されたので、レディ・キュー空先頭ポインタ005が更新されている。
【0017】
同様にtaskBとtaskCをレディ・キュー001末尾に登録する(図40ステップ03〜04)。このときのメモリ状態は図43となる。
【0018】
次にレディ・キュー001の先頭にtaskDを登録する(図40ステップ5)。このときのメモリ状態は図44となる。
【0019】
レディ・キュー001の先頭に登録されたので、レディ・キュー先頭ポインタ004が更新されている。
【0020】
次にレディ・キュー001末尾にtaskDを登録する(図40ステップ06)。このときのメモリ状態は図45となる。
【0021】
次にタイマ・キュー002にtaskAを遅延起動時間とともに登録する(図40ステップ07)。このときのメモリ状態は図46となる。タイマ・キュー002にタスクが登録されてので、タイマ・キュー空先頭ポインタ007が更新されている。
【0022】
同様にtaskBをタイマ・キュー002に登録する(図40ステップ08)。このときのメモリ状態は図47となる。
【0023】
taskBの遅延起動時間は、タイマ・キュー002先頭の遅延起動時間からの累積となるため、200となっている。
【0024】
同様にtaskFをタイマ・キュー002に登録する(図40ステップ09)。このときのメモリ状態は図48となる。
【0025】
次に、タイマ・キュー002先頭のタスクをレディ・キュー001に登録するため時間待ちする(図40ステップ10)。
【0026】
このときのメモリ状態は図49となり、taskAがタイマ・キュー002からレディ・キュー001に移っている。
【0027】
同様にtaskFをレディ・キュー001に登録するため時間待ちする(図40ステップ11)。このときのメモリ状態が図50である。
【0028】
同様にtaskBをレディ・キュー001に登録するためウェイトする(図40ステップ12)。このときのメモリ状態が図51である。
【0029】
次に、自タスク終了システムコールを発行する(図40ステップ13)。このときのメモリ状態は図52となり、レディ・キュー001先頭に登録されていたtaskBが実行中となる。
【0030】
次にtaskCを消すために、タスク強制終了システムコールを発行する(図40ステップ14)。タスク強制終了システムコールでは、レディ・キュー001に登録されているタスクを順に検索し、taskCを見つけるとレディ・キュー空先頭の次につながるよう、ポインタのつなぎ変えをする。このときのメモリ状態は図53となる。
【0031】
【発明が解決しようとする課題】
しかし、上述の従来技術には次のような問題点があった。
【0032】
第1の問題点は、タスク強制終了システムコールの処理に時間がかかるということである。
【0033】
上記の例で図40ステップ14のtaskC強制終了システムコールでは図52のメモリ状態のレディ・キュー001に登録されている全タスクの検索を行い、強制終了処理としてリングをつなぎかえる処理に時間がかかる(システムコールのフローでは、図38のステップ2とステップ3にあたる)。
【0034】
第2の問題点は、処理能力の低いマイクロコンピュータでは、ter_tskにより1つのタスクしか強制終了していない場合があった。
【0035】
その理由は、タスク強制終了システムコールの処理に時間がかかるため、指定タスクを見つけた後、残りのレディ・キュー001のタスク検索を省いている。
【0036】
第3の問題点は、タスク強制終了の処理に時間がかかるにもかかわらず、割り込み禁止区間が存在するということである。
【0037】
その理由は、タスク強制終了時にレディ・キュー001の先頭ポインタを操作しているため、図38のステップ3の処理中は割込み禁止区間が存在し、その区間では一切の割り込みを受け付けないためである。
【0038】
上述の従来技術の問題点に鑑み、本発明の目的は、タスク強制終了処理の負荷を軽減することのできるリアルタイムOSのメモリ領域を用いたタスク管理方法を提供することにある。
【0039】
【課題を解決するための手段】
本発明のリアルタイムOSのメモリ領域を用いたタスク管理方法は、
レディ・キューと、タイマ・キューと、実行中タスク・アドレスと、レディ・キュー先頭ポインタと、レディ・キュー空先頭ポインタと、タイマ・キュー先頭ポインタと、タイマ・キュー空先頭ポインタと、強制終了タスク用メモリと、第1の強制終了タスク用カウンタと、第2の強制終了タスク用カウンタと、タスク・カウンタとから構成されるリアルタイムOSのメモリ領域を用いたタスク管理方法であって、レディ・キューは、起動タスクのアドレスとその前後のポインタを記憶し、タイマ・キューは、遅延起動タスクのアドレスとその遅延時間を記憶し、実行中タスク・アドレスは、実行中タスクのアドレスを記憶し、レディ・キュー先頭ポインタは、レディ・キューの先頭ポインタを記憶し、レディ・キュー空先頭ポインタは、レディ・キュー空の先頭ポインタを記憶し、タイマ・キュー先頭ポインタは、タイマ・キューの先頭ポインタを記憶し、タイマ・キュー空先頭ポインタは、タイマ・キュー空の先頭ポインタを記憶し、強制終了タスク用メモリは、タスク強制終了システム・コール指定するタスク・アドレスを記憶し、第1の強制終了タスク用カウンタは強制終了するタスクの有効範囲を示し、第1の強制終了タスク用カウンタがNとすると、レディ・キューに登録されているN番目までのタスクが強制終了の対象となり、第2の強制終了タスク用カウンタは強制終了するタスクの無効範囲を示し、第2の強制終了タスク用カウンタがMとすると、レディ・キューに登録されているM番目までのタスクは強制終了の対象外となり、第1の強制終了タスク用カウンタがNで、第2の強制終了タスク用カウンタがMとすると(M≦N)、レディ・キューに登録されている(M+1)番目からN番目までのタスクが強制終了の対象となり、第1の強制終了タスク用カウンタを用いて、タスク強制終了時の前記レディ・キューの有効範囲を判別し、第2の強制終了タスク用カウンタを用いて、タスク強制終了時のレディ・キューの無効範囲を判別し、タスク・カウンタは、レディ・キューに登録されているタスクをリアルタイムにカウントする。
【0040】
また、本発明のリアルタイムOSのメモリ領域は、更に、タスク・アドレス・テーブルを備え、タスク・アドレス・テーブルは、タスクをレディ・キューまたはタイマ・キューに登録するときに、タスクIDから呼び出される各タスクの実アドレスのテーブルであってもよい。
【0041】
また、タスク強制終了システムコールの処理を、タスク終了システムコール中で行い、1回のタスク強制終了システムコールでは1つのタスクを指定し、複数のタスクを強制終了する場合は、タスク強制終了システムコールを複数回コールするため、強制終了タスク用メモリと、第1の強制終了タスク用カウンタと、第2の強制終了タスク用カウンタとは、タスク強制終了システムコールで指定されるタスクの数だけ用意し、タスク強制終了システムコールでは、指定タスクの強制終了タスク用メモリに対応する第1の強制終了タスク用カウンタにタスク・カウンタをコピーするのみであり、タスク終了システムコールでは、第1の強制終了タスク用カウンタと第2の強制終了タスク用カウンタとからレディ・キュー先頭のタスクを起動または強制終了し、タスク強制終了タスク終了システムコールで行うことにより、タスク強制終了システムコールで強制終了するタスクの検索範囲は、レディ・キューに登録されている全てのタスクを対象とするのではなく、レディ・キューの先頭に登録されているタスクに限定してもよい
【0042】
また、更に、タスク・アドレス・テーブルを備え、タスク・アドレス・テーブルは、タスクをレディ・キューまたはタイマ・キューに登録するときに、タスクIDから呼び出される各タスクの実アドレスのテーブルであり、更に、タスクを操作するときにタスクIDからタスク・アドレス・テーブルを参照してタスクアドレスを算出してもよい。
【0043】
本発明は、リアルタイムOSを使用したシステムにおいてタスク強制終了処理の負荷を軽減することのできる構成を提供するものである。
【0044】
本発明の自タスク終了システムコールでは、第1の強制終了タスク用カウンタと第2の強制終了タスク用カウンタからレディ・キュー先頭のタスクを起動、もしくは強制終了する。
【0045】
タスク強制終了自タスク終了システムコールで行うことにより、レディ・キューに登録されている全てのタスクを対象とするのではなく、レディ・キューの先頭に登録されているタスクに限定することにより、タスク強制終了処理の負荷を軽減する事が出来る。
【0046】
【発明の実施の形態】
(発明の第1の実施の形態)
本発明は、リアルタイムOSを使用したシステムにおいてタスク強制終了処理の負荷を軽減することのできる構成を提供するものである。
【0047】
本発明の第1の実施の形態について図面を参照して詳細に説明する。
【0048】
図1に示すように本発明のリアルタイムOSのメモリ領域の構成要素は、従来の構成要素であるレディ・キュー001と、タイマ・キュー002と、実行中タスク・アドレス003と、レディ・キュー先頭ポインタ004と、レディ・キュー空先頭ポインタ005と、タイマ・キュー先頭ポインタ006と、タイマ・キュー空先頭ポインタ007と、本発明のために新規に追加する強制終了タスク用メモリ101と、強制終了タスク用カウンタ102と、強制終了タスク用カウンタ103と、タスク・カウンタ104である。
【0049】
強制終了タスク用メモリ101は、タスク強制終了システムコールで指定するタスク・アドレスを記憶する。
【0050】
強制終了タスク用カウンタ102は、タスク強制終了時のレディ・キュー001の有効範囲を判別するために用いるカウンタである。
【0051】
強制終了タスク用カウンタ103は、タスク強制終了時のレディ・キュー001の無効範囲を判別するために用いるカウンタである。
【0052】
タスク・カウンタ104は、レディ・キュー001に登録されているタスクをリアルタイムにカウントするカウンタである。
【0053】
上記4通りのメモリ領域を用いて、従来のタスク強制終了システムコール(以降ter_tskと記す)の処理を、従来の自タスク終了システムコール(以降ext_tskと記す)中で行うことを特徴とする。
【0054】
強制終了タスク用メモリ101、強制終了タスク用カウンタ102、強制終了タスク用カウンタ103は、ter_tskで指定されるタスクの数だけ用意する。1回のter _ tskでは1つのタスクを指定し、複数のタスクを強制終了する場合は、ter _ tskを複数回コールする。
【0055】
本発明のter_tskでは、指定タスクの強制終了タスク用メモリ101に対応する強制終了タスク用カウンタ102にタスク・カウンタ104をコピーするのみである。
【0056】
本発明のext_tskでは、強制終了タスク用カウンタ102と強制終了タスク用カウンタ103からレディ・キュー001先頭のタスクを起動、もしくは強制終了する。
【0057】
このようにしてタスク強制終了をext_tskで行うことにより、レディ・キュー001に登録されている全てのタスクを対象とするのではなく、レディ・キュー001の先頭に登録されているタスクに限定することにより、タスク強制終了処理の負荷を軽減する事が出来る。
【0058】
図2に本発明のリアルタイムOSのメモリ領域の例を示す。
【0059】
レディ・キュー001は16コ、タイマ・キュー002は8コ、ter_tskで指定されるタスクはtaskB、taskC、taskEの3コとする。
【0060】
図2を参照すると、本発明のリアルタイムOSによるタスク管理方法の実施例1は、レディ・キュー001と、タイマ・キュー002と、実行中タスク・アドレス003と、レディ・キュー先頭ポインタ004と、レディ・キュー空先頭ポインタ005と、タイマ・キュー先頭ポインタ006と、タイマ・キュー空先頭ポインタ007と、強制終了タスク用メモリ101と、強制終了タスク用カウンタ102と、強制終了タスク用カウンタ103と、タスク・カウンタ104とから構成されている。
【0061】
レディ・キュー001は、起動タスクのアドレスとその前後のポインタを記憶する。
【0062】
タイマ・キュー002は、遅延起動タスクのアドレスとその遅延時間を記憶する。
【0063】
実行中タスク・アドレス003は、実行中タスクのアドレスを記憶する。
【0064】
レディ・キュー先頭ポインタ004は、レディー・キューの先頭ポインタを記憶する。
【0065】
レディ・キュー空先頭ポインタ005は、レディー・キュー空の先頭ポインタを記憶する。
【0066】
タイマ・キュー先頭ポインタ006は、タイマ・キューの先頭ポインタを記憶する。
【0067】
タイマ・キュー空先頭ポインタ007は、タイマ・キュー空の先頭ポインタを記憶する。
【0068】
まず、本発明で使用するシステムコールと遅延起動用のタイマ割り込み関数について、図3〜8のフローを用いて概略を説明する。
【0069】
sta_tsk: 指定タスクをレディ・キュー001末尾に登録する(図3ステップ1)。レディ・キュー001に登録されているタスクが1コ増えたので、タスク・カウンタ104をインクリメントする(図3ステップ2)。
【0070】
ext_tsk : まず、レディ・キュー001が空かチェックする(図ステップ1)。空であれば、タスクが登録されるのを待つ。空でなければ強制終了タスク用カウンタ103がゼロかチェックする(図ステップ2)。ゼロであれば、次タスクがter_tskの対象かチェックする(図ステップ3)。対象でなければ、強制終了タスク用カウンタ102のうちゼロでないもののみデクリメントし(図ステップ4)、タスク・カウンタ104をデクリメントする(図ステップ9)。
【0071】
そして、次タスクのスタート・アドレスをスタックに積んで(図ステップ10)、レディ・キュー先頭ポインタ004を更新する。最後にRET命令を実行すると、図ステップ10でスタックに積んだアドレスをプログラム・カウンタに書込み、タスクが実行される(図ステップ12)。
【0072】
ステップ3においてter_tskの対象であれば、強制終了タスク用カウンタ102のうちゼロでないもののみデクリメントし(図ステップ5)、タスク・カウンタ104をデクリメントし(図ステップ6)、レディ・キュー先頭ポインタ004を更新する(図ステップ7)。そして丸付き数字1へ分岐し、再度レディ・キュー001が空かチェックする。
【0073】
ステップ2において強制終了タスク用カウンタ103がゼロでなければ、強制終了タスク用カウンタ103とタスク・カウンタ104をデクリメントする(図ステップ8、9)。
【0074】
そして、次タスクのスタート・アドレスをスタックに積んで(図ステップ10)、レディ・キュー先頭ポインタ004を更新する。最後にRET命令を実行すると、図ステップ10でスタックに積んだアドレスをプログラム・カウンタに書込み、タスクが実行される(図ステップ12)。
【0075】
sta_tskp: 指定タスクをレディ・キュー001先頭に登録する(図5ステップ1)。レディ・キュー001に登録されているタスクが1コ増えたので、タスク・カウンタ104をインクリメントする(図5ステップ2)。ter_tskの対象となっているタスクに対応する強制終了タスク用カウンタ103をインクリメントする(図5ステップ3)。
【0076】
chg_pri : まず、レディ・キュー001に指定タスクがあるか検索する(図6ステップ1)。なければ、レディ・キュー001に登録されている全タスクを検索したかチェックする(図6ステップ4)。全タスク終了していれば処理を終わる。全タスク終了していなければ図6ステップ1に戻る。検索の結果指定タスクがレディ・キュー001にあれば、指定タスクがter_tskの対象かチェックする(図6ステップ2)。指定タスクがter_tskの対象でなければ、指定タスクをレディ・キュー001先頭に移動し(図6ステップ6)、強制終了タスク用カウンタ103をインクリメントする(図6ステップ7)。指定タスクがter_tskの対象であれば、さらに指定タスクがter_tskに該当するかチェックする(図6ステップ3)。該当すれば、全タスク終了したかチェックする(図6ステップ3)。指定タスクがter_tskに該当していなければ、強制終了タスク用カウンタ102をデクリメントして(図6ステップ5)指定タスクをレディ・キュー001先頭に移動し、強制終了タスク用カウンタ103をインクリメントする(図6ステップ7)。以上の処理をレディ・キュー001に登録されている全タスクに対して行う。
【0077】
ter_tsk : 指定タスクに対応する強制終了タスク用カウンタ102にタスク・カウンタ104をセットする(図7ステップ1)。
【0078】
MX_INT : まず、タイマ・キュー002が空かチェックする(図ステップ1)。空であれば何もせずに終わる。空でなければタイマ・キュー002先頭に登録されているタスクの遅延起動時間をデクリメントする(図ステップ2)。そして、デクリメントした結果がゼロかチェックする(図ステップ3)。ゼロでなければ何もせずに終わる。ゼロであればタイマ・キュー002先頭に登録されているタスクをレディ・キュー001先頭に移動する(図ステップ4)。そしてレディ・キュー先頭ポインタ004とタイマ・キュー先頭ポインタ006を更新する(図ステップ5)。レディ・キュー001に登録されているタスクが1コ増えたので、タスク・カウンタ104をインクリメントし、本割り込みでレディ・キュー001に登録されたタスクは本割り込み以前に発行されたter_tskとは無関係なので、強制終了タスク用カウンタ103をインクリメントする(図ステップ6)。そして、新たにタイマ・キュー002先頭となったタスクの遅延起動時間がゼロかチェックする(図ステップ3)。以上の動作を遅延起動時間がゼロでなくなるまで行って、処理を終わる。
【0079】
続いて、図9及び図10〜31を参照して本実施の形態の全体の動作について詳細に説明する。
【0080】
はじめに、イニシャライズする(図9ステップA01)。このとき実行中のタスクはtaskZである。イニシャライズが終わった時点のメモリ状態は図10である。
【0081】
次に、taskAをレディ・キュー001末尾に登録する(図9ステップA02)。このときのメモリ状態は図11である。
【0082】
taskAがレディ・キュー001末尾に登録され、レディ・キュー空先頭ポインタ005が更新される。同様にタスクを4コ、レディ・キュー001末尾に登録する(図9ステップA03〜06)。このときのメモリ状態は図12である。
【0083】
レディ・キュー001には5コのタスクが登録されているので、タスク・カウンタは5となる。次にtaskEを強制終了するシステムコールを発行する(図9ステップA07)。このときのメモリ状態は図13である。タスク・カウンタ104の値がtaskEの強制終了タスク用カウンタ102に書込まれている。
【0084】
次にタスクを2コ、レディ・キュー001末尾に登録する(図9ステップA08〜09)。このときのメモリ状態は図14である。
【0085】
レディ・キュー001に登録されているタスクが2コ増えたので、タスク・カウンタ104の値は7となり、レディ・キュー空先頭ポインタ005が更新されている。ここで再度、taskEを強制終了するシステムコールを発行する(図9ステップA10)。
【0086】
このときのメモリ状態は図15である。taskEの強制終了タスク用カウンタが5から7に更新されている。次にtaskBをレディ・キュー001先頭に登録する(図9ステップA11)。このときのメモリ状態は図16である。レディ・キュー001先頭にタスクが登録されたため、強制終了タスク用カウンタ102がゼロでないtaskEの強制終了タスク用カウンタ103をインクリメントする。次にタスクを2コ、レディ・キュー001末尾に登録する(図9ステップA12、13)。このときのメモリ状態は図17である。次にtaskEの優先順位を上げるシステムコールを発行する(図9ステップA14)。このときのメモリ状態は図18である。図18よりレディ・キュー001にはtaskEが2コ登録されているが、4番目に登録されているtaskEはter_tskで削除されるタスクであるので、何もしない。8番目に登録されているtaskEはter_tskの対象ではないのでレディ・キュー001先頭に移動し、強制終了タスク用カウンタ102がゼロでないtaskEの強制終了タスク用メモリ103のみインクリメントする。
【0087】
次にタイマ・キュー002にタスクを登録する。まず、taskAを時間100でタイマ・キュー002に登録する(図9ステップA15)。このときのメモリ状態は図19である。タイマ・キュー002にタスクが登録され、タイマ・キュー空先頭ポインタ007が更新されている。次にtaskBを強制終了するシステムコールを発行する(図9ステップA16)。このときのメモリ状態は図20である。taskBに対応する強制終了タスク用カウンタ102にタスクカウンタ104の値が書込まれ、タイマ・キュー002に登録されているtaskAの時間が30経過し、70となる。
【0088】
次にtaskFの優先順位を上げるシステムコールを発行する(図9ステップA17)。このときのメモリ状態は図21である。taskFはtaskBの強制終了タスク用カウンタ102の対象であるが、該当タスクでないため、taskBに対応する強制終了タスク用カウンタ102をデクリメントし、強制終了タスク用カウンタ103をインクリメントする。また、taskFはtaskEの強制終了タスク用カウンタ102の対象ではないため、同様に強制終了タスク用カウンタ102をデクリメントし、強制終了タスク用カウンタ103をインクリメントする。タイマ・キュー002に登録されているtaskAの時間はさらに経過し、30となっている。
【0089】
ここで、MX用タイマ割り込みが発生し(図9ステップA18)、タイマ・キュー002に登録されているtaskAの時間がゼロとなる。そして、タイマ・キュー002に登録されているtaskAがレディ・キュー001先頭に移動される。
【0090】
あらたに、レディ・キュー001先頭にタスクが登録されたので、taskBとtaskEに対応する強制終了タスク用カウンタ103がインクリメントされる。このときのメモリ状態は図22である。
【0091】
次にtaskCを消去するシステムコールを発行する(図9ステップA19)。このときのメモリ状態は図23である。
【0092】
taskCに対応する強制終了タスク用カウンタ102にタスク・カウンタ104の値が書込まれている。
【0093】
次にtaskFをレディ・キュー001末尾に登録する(図9ステップA20)。このときのメモリ状態は図24である。
【0094】
ここから自タスク終了システムコールを発行し、順次メモリ状態を見ていく。
まず、自タスク終了システムコールを発行する(図9ステップB01)。レディ・キュー001先頭にはtaskAが登録されており、taskAはter_tskで指定されないのでそのまま起動する。そして、レディ・キュー先頭ポインタ004を更新し、強制終了タスク用カウンタ103もしくは強制終了タスク用カウンタ102をデクリメントする。このときのメモリ状態は図25である。
【0095】
次に、自タスク終了システムコールを発行する(図9ステップB02)。レディ・キュー001先頭にはtaskFが登録されており、taskFはter_tskで指定されないのでそのまま起動する。そして、レディ・キュー先頭ポインタ004を更新し、強制終了タスク用カウンタ103もしくは強制終了タスク用カウンタ102をデクリメントする。このときのメモリ状態は図26である。
【0096】
次に、自タスク終了システムコールを発行する(図9ステップB03)。レディ・キュー001先頭にはtaskEが登録されており、taskEはter_tskで指定されているがtaskEに対応する強制終了タスク用カウンタ103がゼロでないため、そのまま起動する。そして、レディ・キュー先頭ポインタ004を更新し、強制終了タスク用カウンタ103もしくは強制終了タスク用カウンタ102をデクリメントする。このときのメモリ状態は図27である。
【0097】
次に、自タスク終了システムコールを発行する(図9ステップB04)。レディ・キュー001先頭にはtaskBが登録されており、taskBはter_tskで指定されていてかつtaskBに対応する強制終了タスク用カウンタ103がゼロで強制終了タスク用カウンタ102がゼロでないためtaskBは起動しない。そして、レディ・キュー先頭ポインタ004を更新し、強制終了タスク用カウンタ103もしくは強制終了タスク用カウンタ102をデクリメントする。あらたにレディ・キュー001先頭にはtaskAが登録されており、taskAはter_tskで指定されないのでそのまま起動する。そして、レディ・キュー先頭ポインタ004を更新し、強制終了タスク用カウンタ103もしくは強制終了タスク用カウンタ102をデクリメントする。このときのメモリ状態は図28である。
【0098】
次に、自タスク終了システムコールを発行する(図9ステップB05)。レディ・キュー001先頭にはtaskBが登録されており、taskBはter_tskで指定されていてかつtaskBに対応する強制終了タスク用カウンタ103がゼロで強制終了タスク用カウンタ102がゼロでないためtaskBは起動しない。そして、レディ・キュー先頭ポインタ004を更新し、強制終了タスク用カウンタ103もしくは強制終了タスク用カウンタ102をデクリメントする。あらたにレディ・キュー001先頭にはtaskCが登録されているが同様に起動しない。
【0099】
あらたにレディ・キュー001先頭にはtaskDが登録されており、taskDはter_tskで指定されないのでそのまま起動する。
【0100】
そして、レディ・キュー先頭ポインタ004を更新し、強制終了タスク用カウンタ103もしくは強制終了タスク用カウンタ102をデクリメントする。このときのメモリ状態は図29である。
【0101】
次に、自タスク終了システムコールを発行する(図9ステップB06)。レディ・キュー001先頭にはtaskEが登録されており、taskEはter_tskで指定されていてかつtaskEに対応する強制終了タスク用カウンタ103がゼロで強制終了タスク用カウンタ102がゼロでないためtaskEは起動しない。そして、レディ・キュー先頭ポインタ004を更新し、強制終了タスク用カウンタ103もしくは強制終了タスク用カウンタ102をデクリメントする。あらたにレディ・キュー001先頭にはtaskAが登録されているおり、taskAはter_tskで指定されないのでそのまま起動する。そして、レディ・キュー先頭ポインタ004を更新し、強制終了タスク用カウンタ103もしくは強制終了タスク用カウンタ102をデクリメントする。このときのメモリ状態は図30である。
【0102】
次に、自タスク終了システムコールを発行する(図9ステップB07)。レディ・キュー001先頭にはtaskDが登録されており、taskDはter_tskで指定されないのでそのまま起動する。そして、レディ・キュー先頭ポインタ004を更新し、強制終了タスク用カウンタ103もしくは強制終了タスク用カウンタ102をデクリメントする。このときのメモリ状態は図31である。
【0103】
以上のように、自タスク終了システムコール強制終了タスク用カウンタ102および強制終了タスク用カウンタ103の値で、そのタスクを起動するか起動しないかのチェックを行う。
【0104】
(発明の第2の実施の形態)
本発明の第2の実施の形態について図面を参照して詳細に説明する。
【0105】
従来のリアルタイムOSでは、キューに格納するタスク・アドレス情報を削減するため、タスク・アドレス・テーブルを別に設け、キューにはタスクIDだけを格納する場合がある。このようなリアルタイムOSに本発明を応用する例を本発明の第2の実施の形態として説明する。
【0106】
本発明の第2の実施の形態の構成は、図1で示す構成要素に新たにタスク・アドレス・テーブル105を追加する。
【0107】
タスク・アドレス・テーブル105は、タスクをレディ・キュー001またはタイマ・キュー002に登録するときに、タスクIDから呼び出される各タスクの実アドレスのテーブルである。
【0108】
本発明の第2の実施の形態の動作が、本発明の第1の実施の形態と異なるところは、タスクを操作するときにタスクIDからタスクアドレスを算出するところである。
【0109】
図32にタスクIDから実行状態に移るまでの変換過程を示す。
【0110】
【発明の効果】
以上説明したように、本発明には以下の効果がある。
【0111】
第1の効果は、タスク検索および強制終了処理がなくなることにある。
【0112】
その理由は、タスク強制終了自タスク終了システムコール発行時に行うためである。
【0113】
第2の効果は、OS中の割込み禁止時間が短くなることにある。
【0114】
その理由は、タスク検索および強制終了処理がなくなるためである。
【0115】
第3の効果は、タスク強制終了システムコールで指定タスクを複数個強制終了できることにある。
【0116】
その理由は、指定タスクの強制終了自タスク終了システムコール発行時に行うため、従来のタスク強制終了処理より大幅に処理時間が短縮できるためである。
【0117】
本発明の第2の実施の形態の効果は、更に、リアルタイムOSが使用するRAMを削減できる効果がある。
【0118】
その理由は、レディ・キュー001とタイマ・キュー002のタスクアドレス、それにタスク強制終了システムコールで指定するタスクアドレスをID化することにより、それぞれ半分以下のRAM容量で本発明を実現できるからである。
【図面の簡単な説明】
【図1】本発明のリアルタイムOSのメモリ領域の構成を示す図である。
【図2】本発明のリアルタイムOSのメモリ領域の例を示す図である。
【図3】本発明で使用するシステムコールについて、フローを用いて概略を説明する図である。
【図4】本発明で使用するシステムコールについて、フローを用いて概略を説明する図である。
【図5】本発明で使用するシステムコールについて、フローを用いて概略を説明する図である。
【図6】本発明で使用するシステムコールについて、フローを用いて概略を説明する図である。
【図7】本発明で使用するシステムコールについて、フローを用いて概略を説明する図である。
【図8】本発明で使用する遅延起動用のタイマ割り込み関数について、フローを用いて概略を説明する図である。
【図9】本実施の形態の全体の動作について詳細に説明する図である。
【図10】本実施の形態のメモリ状態を示す図である。
【図11】本実施の形態のメモリ状態を示す図である。
【図12】本実施の形態のメモリ状態を示す図である。
【図13】本実施の形態のメモリ状態を示す図である。
【図14】本実施の形態のメモリ状態を示す図である。
【図15】本実施の形態のメモリ状態を示す図である。
【図16】本実施の形態のメモリ状態を示す図である。
【図17】本実施の形態のメモリ状態を示す図である。
【図18】本実施の形態のメモリ状態を示す図である。
【図19】本実施の形態のメモリ状態を示す図である。
【図20】本実施の形態のメモリ状態を示す図である。
【図21】本実施の形態のメモリ状態を示す図である。
【図22】本実施の形態のメモリ状態を示す図である。
【図23】本実施の形態のメモリ状態を示す図である。
【図24】本実施の形態のメモリ状態を示す図である。
【図25】本実施の形態のメモリ状態を示す図である。
【図26】本実施の形態のメモリ状態を示す図である。
【図27】本実施の形態のメモリ状態を示す図である。
【図28】本実施の形態のメモリ状態を示す図である。
【図29】本実施の形態のメモリ状態を示す図である。
【図30】本実施の形態のメモリ状態を示す図である。
【図31】本実施の形態のメモリ状態を示す図である。
【図32】本発明の第2の実施の形態のタスクIDから実行状態に移るまでの変換過程を示す図である。
【図33】従来のリアルタイムOSのメモリ領域の例を示す図である。
【図34】従来のシステムコールについて、フローを用いて概略を説明する図である。
【図35】従来のシステムコールについて、フローを用いて概略を説明する図である。
【図36】従来のシステムコールについて、フローを用いて概略を説明する図である。
【図37】従来のシステムコールについて、フローを用いて概略を説明する図である。
【図38】従来のシステムコールについて、フローを用いて概略を説明する図である。
【図39】従来の遅延起動用のタイマ割り込み関数について、フローを用いて概略を説明する図である。
【図40】従来の全体の動作について詳細に説明する図である。
【図41】従来のメモリ状態を示す図である。
【図42】従来のメモリ状態を示す図である。
【図43】従来のメモリ状態を示す図である。
【図44】従来のメモリ状態を示す図である。
【図45】従来のメモリ状態を示す図である。
【図46】従来のメモリ状態を示す図である。
【図47】従来のメモリ状態を示す図である。
【図48】従来のメモリ状態を示す図である。
【図49】従来のメモリ状態を示す図である。
【図50】従来のメモリ状態を示す図である。
【図51】従来のメモリ状態を示す図である。
【図52】従来のメモリ状態を示す図である。
【図53】従来のメモリ状態を示す図である。
【符号の説明】
001 レディ・キュー
002 タイマ・キュー002
003 実行中タスク・アドレス
004 レディ・キュー先頭ポインタ
005 レディ・キュー空先頭ポインタ
006 タイマ・キュー先頭ポインタ
007 タイマ・キュー空先頭ポインタ
101 強制終了タスク用メモリ
102、103 強制終了タスク用カウンタ
104 タスク・カウンタ
105 タスク・アドレス・テーブル

Claims (3)

  1. レディ・キューと、タイマ・キューと、実行中タスク・アドレスと、レディ・キュー先頭ポインタと、レディ・キュー空先頭ポインタと、タイマ・キュー先頭ポインタと、タイマ・キュー空先頭ポインタと、強制終了タスク用メモリと、第1の強制終了タスク用カウンタと、第2の強制終了タスク用カウンタと、タスク・カウンタとから構成されるリアルタイムOSのメモリ領域を用いたタスク管理方法であって、
    前記レディ・キューは、起動タスクのアドレスとその前後のポインタを記憶し、
    前記タイマ・キューは、遅延起動タスクのアドレスとその遅延時間を記憶し、 前記実行中タスク・アドレスは、実行中タスクのアドレスを記憶し、
    前記レディ・キュー先頭ポインタは、前記レディ・キューの先頭ポインタを記憶し、
    前記レディ・キュー空先頭ポインタは、レディ・キュー空の先頭ポインタを記憶し、
    前記タイマ・キュー先頭ポインタは、前記タイマ・キューの先頭ポインタを記憶し、
    前記タイマ・キュー空先頭ポインタは、タイマ・キュー空の先頭ポインタを記憶し、
    前記強制終了タスク用メモリは、タスク強制終了システム・コールが指定するタスク・アドレスを記憶し、
    前記タスク強制終了システムコールの処理を、自タスク終了システムコール中で行い、
    前記第1の強制終了タスク用カウンタは強制終了するタスクの有効範囲を示し、前記第1の強制終了タスク用カウンタがNとすると、前記レディ・キューに登録されているN番目までのタスクが強制終了の対象となり、
    前記第2の強制終了タスク用カウンタは強制終了するタスクの無効範囲を示し、前記第2の強制終了タスク用カウンタがMとすると、前記レディ・キューに登録されているM番目までのタスクは強制終了の対象外となり、
    前記第1の強制終了タスク用カウンタがNで、前記第2の強制終了タスク用カウンタがMとすると(M≦N)、前記レディ・キューに登録されている(M+1)番目からN番目までのタスクが強制終了の対象となり、
    前記第1の強制終了タスク用カウンタを用いて、タスク強制終了時の前記レディ・キューの有効範囲を判別し、
    前記第2の強制終了タスク用カウンタを用いて、タスク強制終了時の前記レディ・キューの無効範囲を判別し、
    前記タスク・カウンタは、前記レディ・キューに登録されているタスクをリアルタイムにカウントするリアルタイムOSのメモリ領域を用いたタスク管理方法。
  2. 前記タスク強制終了システムコールの処理を、タスク終了システムコール中で行い、
    1回の前記タスク強制終了システムコールでは1つのタスクを指定し、複数のタスクを強制終了する場合は、前記タスク強制終了システムコールを複数回コールするため、前記強制終了タスク用メモリと、前記第1の強制終了タスク用カウンタと、前記第2の強制終了タスク用カウンタとは、前記タスク強制終了システムコールで指定されるタスクの数だけ用意し、
    前記タスク強制終了システムコールでは、指定タスクの前記強制終了タスク用メモリに対応する前記第1の強制終了タスク用カウンタに前記タスク・カウンタをコピーするのみであり、
    前記タスク終了システムコールでは、前記第1の強制終了タスク用カウンタと前記第2の強制終了タスク用カウンタとから前記レディ・キュー先頭のタスクを起動または強制終了し、
    タスク強制終了を前記タスク終了システムコールで行うことにより、前記タスク強制終了システムコールで強制終了するタスクの検索範囲は、前記レディ・キューに登録されている全てのタスクを対象とするのではなく、前記レディ・キューの先頭に登録されているタスクに限定する請求項1に記載のリアルタイムOSのメモリ領域を用いたタスク管理方法。
  3. 更に、タスク・アドレス・テーブルを備え、
    該タスク・アドレス・テーブルは、タスクを前記レディ・キューまたは前記タイマ・キューに登録するときに、タスクIDから呼び出される各タスクの実アドレスのテーブルであり、
    更に、タスクを操作するときに前記タスクIDから前記タスク・アドレス・テーブルを参照してタスクアドレスを算出する請求項に記載のリアルタイムOSのメモリ領域を用いたタスク管理方法。
JP25416299A 1999-09-08 1999-09-08 リアルタイムosのメモリ領域を用いたタスク管理方法 Expired - Fee Related JP3717722B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP25416299A JP3717722B2 (ja) 1999-09-08 1999-09-08 リアルタイムosのメモリ領域を用いたタスク管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP25416299A JP3717722B2 (ja) 1999-09-08 1999-09-08 リアルタイムosのメモリ領域を用いたタスク管理方法

Publications (2)

Publication Number Publication Date
JP2001075822A JP2001075822A (ja) 2001-03-23
JP3717722B2 true JP3717722B2 (ja) 2005-11-16

Family

ID=17261103

Family Applications (1)

Application Number Title Priority Date Filing Date
JP25416299A Expired - Fee Related JP3717722B2 (ja) 1999-09-08 1999-09-08 リアルタイムosのメモリ領域を用いたタスク管理方法

Country Status (1)

Country Link
JP (1) JP3717722B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100337192C (zh) * 2003-08-13 2007-09-12 华为技术有限公司 一种定时器管理方法
JP6309216B2 (ja) * 2013-07-19 2018-04-11 サイプレス セミコンダクター コーポレーション プロセッサシステムおよび半導体集積回路
US10649914B1 (en) * 2016-07-01 2020-05-12 The Board Of Trustees Of The University Of Illinois Scratchpad-based operating system for multi-core embedded systems
CN110196761B (zh) * 2019-04-15 2021-10-19 北京达佳互联信息技术有限公司 延迟任务处理方法及装置

Also Published As

Publication number Publication date
JP2001075822A (ja) 2001-03-23

Similar Documents

Publication Publication Date Title
KR100408351B1 (ko) 인터럽트 관리 장치, 인터럽트 관리 방법, 기록 매체, 오퍼레이팅 시스템, 신호 처리용 프로세서, 화상 단말 장치 및 이동체 통신 시스템
US7529915B2 (en) Context switching processor with multiple context control register sets including write address register identifying destination register for waiting context to store returned data from external source
KR970016979A (ko) 다중 처리 시스템에서 타스크의 큐잉 시스템 및 방법
JPH0736848A (ja) 情報処理装置および処理方法
JP3717722B2 (ja) リアルタイムosのメモリ領域を用いたタスク管理方法
JP3202351B2 (ja) タスク切替処理方法
JPH08185318A (ja) プログラムの動的置換方式
JP3013725B2 (ja) 割込み処理からの復帰方法
JP3022848B2 (ja) マルチタスクのタスク切り替え方法とリアルタイム・オペレーティング・システム
GB2030331A (en) Real-time Data Processing System for Processing Time Period Commands
JP2001184259A (ja) 演算処理装置及び該装置におけるデータ転送方法
JP2002328841A (ja) カーネル空間のデマンドページング・スワップアウト方式および方法
JPH0527975A (ja) マイクロコンピユータ
JPH064319A (ja) オペレーティング・システムにおける共有ルーチン管理方式
JPH06295265A (ja) 仮想記憶制御における命令中断情報格納制御方法
JPH0833856B2 (ja) 通番管理方式
JPH03182945A (ja) 主記憶内データ転送方式
JPS63108448A (ja) 入出力要求制御方式
JPH02129724A (ja) プログラム実行方式
JPH02113336A (ja) 非同期例外捕獲方式
JPH05334249A (ja) 対話処理システムにおけるカタログのネスティング管理方式
JPH03141435A (ja) プロセス切り換え方式
JPH02138632A (ja) 情報退避・復元方式
JPH0512100A (ja) セルの管理方法及びセル管理テーブル
JPH03127164A (ja) マルチプロセッサシステム

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040609

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040806

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20040806

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040901

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20041027

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20041027

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20041027

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050810

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050831

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

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

Free format text: PAYMENT UNTIL: 20080909

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20090909

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20090909

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20100909

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20100909

Year of fee payment: 5

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

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

Free format text: PAYMENT UNTIL: 20100909

Year of fee payment: 5

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

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

Free format text: PAYMENT UNTIL: 20110909

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20120909

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20120909

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20130909

Year of fee payment: 8

LAPS Cancellation because of no payment of annual fees