JPH11353193A - マルチプログラミング実行制御方法 - Google Patents

マルチプログラミング実行制御方法

Info

Publication number
JPH11353193A
JPH11353193A JP16354598A JP16354598A JPH11353193A JP H11353193 A JPH11353193 A JP H11353193A JP 16354598 A JP16354598 A JP 16354598A JP 16354598 A JP16354598 A JP 16354598A JP H11353193 A JPH11353193 A JP H11353193A
Authority
JP
Japan
Prior art keywords
task
control block
event
processing
byte
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
Application number
JP16354598A
Other languages
English (en)
Inventor
Masahiro Kimura
雅弘 木村
Hisao Hiramatsu
久男 平松
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Arkray Inc
Original Assignee
KDK Corp
Kyoto Daiichi Kagaku KK
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 KDK Corp, Kyoto Daiichi Kagaku KK filed Critical KDK Corp
Priority to JP16354598A priority Critical patent/JPH11353193A/ja
Publication of JPH11353193A publication Critical patent/JPH11353193A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】 スタック領域の容量を良好に低減でき、しか
も処理速度を向上させることのできるマルチプログラミ
ング実行制御方法を提供する。 【解決手段】 1つのスタック領域を複数の全てのタス
クで共用し、予め全てのタスクに同順位なしに優先順位
を設定しておいて、イベントの発生をタスク毎にチェッ
クし(S8)、イベントが発生していれば(S8:YE
S)そのタスクを実行する(S12)という動作を、優
先順位の順に循環的に繰り返す(S18,S20)。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本願発明は、複数のタスクを
見かけ上同時に実行するマルチプログラミング実行制御
方法に関する。
【0002】
【従来の技術】従来のマルチプログラミング実行制御方
法では、各タスク毎に専用のスタック領域を確保し、タ
スクを切り換える度に、スタックポインタの現在値を保
存し、かつ新たな値を設定するという、タスク切換処理
を実行していた。
【0003】しかし、スタック領域の容量を正確に求め
ることは実際上困難であり、ある程度余裕を持って設定
する必要があるので、各タスク毎に専用のスタック領域
を確保すると、スタック領域の合計容量が大きくなって
しまい、メモリの有効利用を図れないという課題があっ
た。特に、マイクロコンピュータのようにメモリの容量
が事実上小さな値に制限される場合、マルチプログラミ
ングの実現が困難であった。
【0004】また、各タスク毎に専用のスタック領域を
設けると、タスクを切り換える度にスタックポインタの
ためのタスク切換処理を実行する必要があり、それだけ
処理速度が遅くなるという課題もあった。
【0005】なお、スタック領域の容量を低減させるこ
とを目的として、たとえば特開平5−173810号公
報に記載されたタスク管理方法が提案されているが、こ
の方法においては、スタック領域のうちの一部を全ての
タスクで共用しているものの、各タスク専用のスタック
領域も設定しているので、スタック領域の容量低減効果
が十分ではなく、しかもスタックポインタのためのタス
ク切換処理が必要なことから、処理速度を向上させるこ
とができない。
【0006】
【発明の開示】本願発明は、上記した事情のもとで考え
出されたものであって、スタック領域の容量を良好に低
減でき、しかも処理速度を向上させることのできるマル
チプログラミング実行制御方法を提供することを、その
課題とする。
【0007】上記の課題を解決するため、本願発明で
は、次の技術的手段を講じている。
【0008】本願発明の第1の側面によれば、1つのス
タック領域を複数の全てのタスクで共用し、予め前記全
てのタスクに同順位なしに優先順位を設定しておいて、
イベントの発生をタスク毎にチェックし、イベントが発
生していればそのタスクを実行するという動作を、前記
優先順位の順に循環的に繰り返すことを特徴とする、マ
ルチプログラミング実行制御方法が提供される。
【0009】好ましい実施形態によれば、タスクの実行
中に割込が発生すれば、その時点で実行中のタスクの処
理を一旦中断し、新たに、イベントの発生をタスク毎に
チェックし、イベントが発生していればそのタスクを実
行するという動作を、前記優先順位の順に一巡させ、割
込処理が終了すれば、割込発生時に中断したタスクの実
行を再開し、前記優先順位の順にタスクの処理を循環的
に繰り返す動作に戻る。
【0010】他の好ましい実施形態によれば、割込処理
におけるタスクの実行中に新たな割込が発生すれば、そ
の時点で実行中のタスクの処理を一旦中断し、新たに、
イベントの発生をタスク毎にチェックし、イベントが発
生していればそのタスクを実行するという動作を、前記
優先順位の順に一巡させ、新たな割込処理が終了すれ
ば、新たな割込の発生時に中断したタスクの実行を再開
して前の割込処理に戻る。
【0011】本願発明によれば、実行すべき全ての複数
のタスクに同順位なしに優先順位を設定し、実行すべき
タスクを優先順位の順に循環的に処理するので、1つの
スタック領域を全てのタスクで共用できる。したがっ
て、スタック領域の容量を小さく設定でき、メモリの有
効利用を図れる。この結果、マイクロコンピュータのよ
うにメモリの容量が極めて少ない場合でも、マルチプロ
グラミングを実現できる。しかも、タスクの切換時にお
けるスタックポインタのためのタスク切換処理が不要に
なるので、処理速度を向上させることができる。
【0012】本願発明のその他の特徴および利点は、添
付図面を参照して以下に行う詳細な説明によって、より
明らかとなろう。
【0013】
【発明の実施の形態】以下、本願発明の好ましい実施の
形態を、図面を参照して具体的に説明する。
【0014】図1は、本願発明に係るマルチプログラミ
ング実行制御方法を採用したマイクロコンピュータの概
略回路ブロック図であって、このマイクロコンピュータ
は、CPU1、ROM2、RAM3、およびインターフ
ェイス回路4を備えている。これらCPU1、ROM
2、RAM3、およびインターフェイス回路4は、バス
線により相互に接続されている。バス線には、データバ
ス、アドレスバス、およびコントロールバスが含まれ
る。
【0015】CPU(central processing unit )1
は、ROM2に格納されたプログラムに基づいて動作す
ることにより、インターフェイス回路4を介して入力さ
れる入力情報に適切な処理を施し、各種の出力情報をイ
ンターフェイス回路4を介して出力する。ROM(read
only memory)2は、CPU1を動作させるためのプロ
グラムや各種の初期設定値などを記憶している。RAM
(random access memory)3は、CPU1にワーク領域
を提供するとともに、各種のデータを記憶する。インタ
ーフェイス回路4は、図外のセンサ、操作部のキースイ
ッチ群、ディスプレイ装置、あるいはプリンタなどとC
PU1との間のデータの入出力を制御する。
【0016】本実施形態において、タスクとは、独立し
た仕事内容毎に分けたプログラムの構成単位で、外部か
らの事象待ちおよび事象発生により状態遷移を伴うもの
をいう。これらのタスクは、同順位なしに優先順位が決
められており、タスクの番号が小さいものほど優先順位
が上位である。
【0017】タスクは、休止状態と実行状態と待ち状態
との3つの状態のうちのいずれかを取り得る。休止状態
とは、後述のタスク制御ブロックに登録されているが、
動作には関与しない状態である。実行状態とは、そのタ
スクが動作している状態をいう。待ち状態とは、自タス
クへのイベントが発生するまで、待機している状態をい
う。
【0018】各タスクは、システムコールにより各種の
サービスを受けることができる。システムコールには、
タスク起動、タスク終了、イベント設定、イベント消
去、タイマ設定、タイマ消去、周期タイマ割込I/Oハ
ンドラ設定、周期タイマ割込I/Oハンドラ消去、メモ
リプールの初期化、固定長メモリブロック獲得、固定長
メモリブロック返却、可変長メモリブロック獲得、およ
び可変長メモリブロック返却などがある。これらのシス
テムコールの内容については、後述する。
【0019】図2は、RAM3の所定領域に確保された
タスク制御ブロックの概念説明図であって、これらタス
ク制御ブロック11は、たとえば20〜30程度のタス
クの数に応じて設定され、各タスク毎に1個のタスク制
御ブロック11が割り当てられる。
【0020】図3は、タスク制御ブロック11の詳細説
明図であって、これらタスク制御ブロック11は、それ
ぞれ16バイトである。各タスク制御ブロック11の相
対アドレスの第0番地すなわち第0バイトは、タスクの
ステータスであり、「0」が休止状態、「1」が待機状
態、「2」が実行状態である。第1バイトは、休止要求
フラグである。第2および第3バイトは、先頭イベント
制御ブロック(ECB)の先頭アドレスを表すポンイタ
であり、イベントの発生がなければ「0」である。この
ポインタは、タスク制御ブロック11とイベント制御ブ
ロックとが同一の論理セグメントに存在していることか
ら、論理セグメントの先頭番地からの2バイトオフセッ
トとして表現されている。第4および第5バイトは、最
終イベント制御ブロック(ECB)の先頭アドレスを表
すポンイタであり、イベントの発生がなければ「0」で
ある。このポインタは、タスク制御ブロック11とイベ
ント制御ブロックとが同一の論理セグメントに存在して
いることから、論理セグメントの先頭番地からの2バイ
トオフセットとして表現されている。第6〜第9バイト
は、タスク初期化処理のプログラムが格納されている先
頭アドレスを表すポインタであり、4バイトの絶対アド
レスで表現される。第10〜第13バイトは、タスクの
プログラムが格納されている先頭アドレスを表すポイン
タであり、4バイトの絶対アドレスで表現される。第1
4および第15バイトは、予備の領域である。なお、イ
ベント制御ブロックについては、後に詳述する。
【0021】図4は、RAM3の所定領域に確保された
固定長メモリブロックの概念説明図であって、これら固
定長メモリブロック12は、それぞれ16バイトであっ
て、たとえば1024個設定される。
【0022】図5は、固定長メモリブロック12の詳細
説明図であって、未使用の固定長メモリブロック12
は、第0バイトが、後方の未使用の固定長メモリブロッ
ク12の先頭アドレスを表すポインタとして使用され
る。このポインタは、全ての固定長メモリブロック12
が同一の論理セグメントに設定されることから、2バイ
トオフセットで構成される。
【0023】図6は、RAM3の所定領域に確保された
可変長メモリプールの概念説明図であって、この可変長
メモリプール13は、所定バイト数の領域を使用可能で
ある。この可変長メモリプール13は、8バイトのメモ
リ制御ブロック14と任意バイト数の可変長メモリブロ
ック15とにより構成されており、それらの個数は任意
に変動する。
【0024】図7は、可変長メモリプール13の詳細説
明図であって、1個の可変長メモリブロック15に対し
て1個のメモリ制御ブロック14が設定される。メモリ
制御ブロック14は、第0および第1バイトが、前方の
メモリ制御ブロック(MCB)の先頭アドレスを表すポ
インタであり、このポインタは、可変長メモリプール1
3が単一の論理セグメントに設定されることから、2バ
イトオフセットで構成される。もちろん、先頭のメモリ
制御ブロック14には前方のメモリ制御ブロック14が
存在しないので、先頭のメモリ制御ブロック14の第0
および第1バイトにはオール「0」のデータが格納され
る。第2および第3バイトは、後方のメモリ制御ブロッ
ク(MCB)の先頭アドレスを表すポインタであり、こ
のポインタも2バイトオフセットで構成される。もちろ
ん、最終のメモリ制御ブロック14には後方のメモリ制
御ブロック14が存在しないので、最終のメモリ制御ブ
ロック14の第2および第3バイトにはオール「0」の
データが格納される。第4バイトは、可変長メモリブロ
ック15が使用中であるか否かを表す使用中フラグであ
る。第5バイトは、可変長メモリブロック15のヘッダ
部分が正常であるか否かをチェックするためのチェック
マークであって、所定値が書き込まれる。第6および第
7バイトは、可変長メモリブロック15のバイト数を表
すメモリブロック長である。
【0025】図8は、RAM3の所定領域に確保された
イベント制御ブロックの概念説明図であって、これらイ
ベント制御ブロック16は、それぞれ16バイトであ
る。これらイベント制御ブロック16は、システムコー
ルによって固定長メモリブロック12が取得され、その
固定長メモリブロック12がイベント制御ブロック16
として使用されることにより実現される。
【0026】図9は、イベント制御ブロック16の詳細
説明図であって、第0バイトおよび第1バイトは、イベ
ントを特定するためのイベントIDである。第2および
第3バイトは、前方のイベント制御ブロック(ECB)
の先頭アドレスを表すポンイタである。このポインタ
は、全てのイベント制御ブロック16が単一の論理セグ
メントに存在していることから、2バイトオフセットで
構成される。もちろん、先頭のイベント制御ブロック1
6には前方のイベント制御ブロック16が存在しないの
で、先頭のイベント制御ブロック16の第2および第3
バイトにはオール「0」のデータが格納される。第4お
よび第5バイトは、後方のイベント制御ブロック(EC
B)の先頭アドレスを表すポンイタである。このポイン
タも、2バイトオフセットで構成される。もちろん、最
終のイベント制御ブロック16には後方のイベント制御
ブロック16が存在しないので、最終のイベント制御ブ
ロック16の第4および第5バイトにはオール「0」の
データが格納される。第6および第7バイトは、付加デ
ータのバイト数を表す付加データ長であり、付加データ
が無い場合は「0」が格納される。第8および第9バイ
トは、付加データの先頭アドレスを表すポインタであ
り、付加データが無い場合は「0」が格納される。この
ポインタは、イベント制御ブロック16と可変長メモリ
プール13とが同一の論理セグメントに設定されること
から、2バイトオフセットで構成される。すなわち、付
加データは可変長メモリプール13の可変長メモリブロ
ック15に格納される。第10〜第14バイトは、付加
情報である。第15バイトは、タスクを特定するための
タスク番号である。
【0027】図10は、RAM3の所定領域に確保され
たタイママネージャ制御ブロックの概念説明図であっ
て、これらタイママネージャ制御ブロック17は、それ
ぞれ16バイトである。これらタイママネージャ制御ブ
ロック17は、システムコールによって固定長メモリブ
ロック12が取得され、その固定長メモリブロック12
がタイママネージャ制御ブロック17として使用される
ことにより実現される。
【0028】図11は、タイママネージャ制御ブロック
17の詳細説明図であって、第0バイトおよび第1バイ
トは、イベントを特定するためのイベントIDである。
第2および第3バイトは、前方のタイママネージャ制御
ブロック(TMCB)の先頭アドレスを表すポンイタで
ある。このポインタは、全てのタイママネージャ制御ブ
ロック17が単一の論理セグメントに存在していること
から、2バイトオフセットで構成される。もちろん、先
頭のタイママネージャ制御ブロック17には前方のタイ
ママネージャ制御ブロック17が存在しないので、先頭
のタイママネージャ制御ブロック17の第2および第3
バイトにはオール「0」のデータが格納される。第4お
よび第5バイトは、後方のタイママネージャ制御ブロッ
ク(TMCB)の先頭アドレスを表すポンイタである。
このポインタも、2バイトオフセットで構成される。も
ちろん、最終のタイママネージャ制御ブロック17には
後方のタイママネージャ制御ブロック17が存在しない
ので、最終のタイママネージャ制御ブロック17の第4
および第5バイトにはオール「0」のデータが格納され
る。第6および第7バイトは、1〜65535を設定可
能なタイマカウンタである。このタイマカウンタは、タ
イマ設定のシステムコールにより初期設定値がセットさ
れ、周期タイマ割込毎にディクリメントされて、「0」
になれば該当タスクに対してイベントが通知される。し
たがって、5msecの周期タイマ割込であれば、5m
sec〜327.675secのタイマ監視が可能であ
る。第8〜第14バイトは、予備の領域である。第15
バイトは、イベント発行先のタスクを特定するためのイ
ベント発行先タスク番号である。
【0029】図12は、RAM3の所定領域に確保され
た周期タイマ割込I/Oハンドラ制御ブロックの概念説
明図であって、これら周期タイマ割込I/Oハンドラ制
御ブロック18は、それぞれ16バイトである。これら
周期タイマ割込I/Oハンドラ制御ブロック18は、シ
ステムコールによって固定長メモリブロック12が取得
され、その固定長メモリブロック12が周期タイマ割込
I/Oハンドラ制御ブロック18として使用されること
により実現される。
【0030】図13は、周期タイマ割込I/Oハンドラ
制御ブロック18の詳細説明図であって、第0バイト
は、タイマカウンタである。このタイマカウンタは、周
期タイマ割込I/Oハンドラ設定のシステムコール時お
よびタイムアップ時に第1バイトのタイムアップカウン
ト値がコピーされ、周期タイマ割込毎にディクリメント
されて、カウント値が0になれば、該当I/Oハンドラ
が呼び出される。第1バイトは、タイムアップカウント
値である。このタイムアップカウント値は、正確に述べ
れば、第0バイトのタイマカウンタの初期設定値であっ
て、1〜255を設定可能である。したがって、5ms
ecの周期タイマ割込であれば、I/Oハンドラは5m
sec〜1275msecの実行周期となる。第2およ
び第3バイトは、前方の周期タイマ割込I/Oハンドラ
制御ブロック(HCB)の先頭アドレスを表すポンイタ
である。このポインタは、全ての周期タイマ割込I/O
ハンドラ制御ブロック18が単一の論理セグメントに存
在していることから、2バイトオフセットで構成され
る。もちろん、先頭の周期タイマ割込I/Oハンドラ制
御ブロック18には前方の周期タイマ割込I/Oハンド
ラ制御ブロック18が存在しないので、先頭の周期タイ
マ割込I/Oハンドラ制御ブロック18の第2および第
3バイトにはオール「0」のデータが格納される。第4
および第5バイトは、後方の周期タイマ割込I/Oハン
ドラ制御ブロック(HCB)の先頭アドレスを表すポン
イタである。このポインタも、2バイトオフセットで構
成される。もちろん、最終の周期タイマ割込I/Oハン
ドラ制御ブロック18には後方の周期タイマ割込I/O
ハンドラ制御ブロック18が存在しないので、最終の周
期タイマ割込I/Oハンドラ制御ブロック18の第4お
よび第5バイトにはオール「0」のデータが格納され
る。第6〜第9バイトは、I/Oハンドラ初期化処理の
プログラムが格納されている先頭アドレスを表すポイン
タであり、絶対アドレスで構成される。第10〜第13
バイトは、I/Oハンドラのプログラムが格納されてい
る先頭アドレスを表すポインタであり、絶対アドレスで
構成される。第14および第15バイトは、予備の領域
である。
【0031】次に、各システムコールの内容について述
べる。タスク起動が呼び出されると、CPU1は、指定
タスクのタスク制御ブロック11の第0バイトを参照
し、ステータスが休止状態であれば、第6〜第9番地の
ポインタを参照して指定タスクの初期化処理を実行し、
ステータスを待ち状態にする。指定タスクのステータス
が既に待ち状態あるいは実行状態であれば、何もしな
い。ここでいう指定タスクは、呼び出したタスク以外の
タスク、すなわち他タスクのうち指定されたものであ
る。
【0032】タスク終了が呼び出されると、CPU1
は、指定タスクのタスク制御ブロック11の第0バイト
を参照し、ステータスが待ち状態であれば、休止状態に
する。指定タスクが既に休止状態であれば、何もしな
い。指定タスクのステータスが実行状態であれば、第1
バイトの休止要求フラグをオンにする。ここでいう指定
タスクは、呼び出したタスクあるいはそれ以外のタス
ク、すなわち自タスクあるいは他タスクのうち指定され
たものである。
【0033】イベント設定が呼び出されると、CPU1
は、メモリプールから固定長メモリブロック12を獲得
し、イベントID、付加情報、メッセージ、指定タスク
の番号などを必要に応じて書き込むことにより、イベン
ト制御ブロック16を生成する。
【0034】イベント消去が呼び出されると、CPU1
は、第15バイトに指定タスクの番号が書き込まれてい
る全てのイベント制御ブロック16の内容を消去し、固
定長メモリブロック12の状態に戻して、この固定長メ
モリブロック12を返却する。これに伴って、残りのイ
ベント制御ブロック16の第2〜第5バイトのポインタ
を適切に書き換える。
【0035】タイマ設定が呼び出されると、CPU1
は、固定長メモリブロック12を獲得し、指定タスクの
番号、イベントID、タイマカウンタの初期設定値など
を書き込むことにより、タイママネージャ制御ブロック
17を生成する。
【0036】タイマ消去が呼び出されると、CPU1
は、指定されたタイママネージャ制御ブロック17の内
容を消去し、固定長メモリブロック12の状態に戻し
て、この固定長メモリブロック12を返却する。これに
伴って、残りのタイママネージャ制御ブロック17の第
2〜第5バイトのポインタを適切に書き換える。
【0037】周期タイマ割込I/Oハンドラ設定が呼び
出されると、CPU1は、固定長メモリブロック12を
獲得し、タイマカウンタの初期設定値および各種のポイ
ンタを書き込むことにより、周期タイマ割込I/Oハン
ドラ制御ブロック18を生成する。そして、第6〜第9
番地のポインタを参照してI/Oハンドラの初期化処理
を実行する。
【0038】周期タイマ割込I/Oハンドラ消去が呼び
出されると、CPU1は、指定された周期タイマ割込I
/Oハンドラ制御ブロック18の内容を消去し、固定長
メモリブロック12の状態に戻して、この固定長メモリ
ブロック12を返却する。これに伴って、残りの周期タ
イマ割込I/Oハンドラ制御ブロック18の第2〜第5
バイトのポインタを適切に書き換える。
【0039】メモリプールの初期化が呼び出されると、
CPU1は、固定長メモリブロック12および可変長メ
モリプール13として使用されるヒープ領域をクリア
し、固定長メモリブロック12や可変長メモリプール1
3のポインタなどを初期化する。
【0040】固定長メモリブロック獲得が呼び出される
と、CPU1は、固定長メモリブロック12用のヒープ
領域から1つの固定長メモリブロック12を獲得する。
すなわち、その固定長メモリブロック12を使用中の状
態にする。
【0041】固定長メモリブロック返却が呼び出される
と、CPU1は、指定された固定長メモリブロック12
を返却する。すなわち、その固定長メモリブロック12
を未使用の状態にする。
【0042】可変長メモリブロック獲得が呼び出される
と、CPU1は、可変長メモリブロック15用のヒープ
領域から指定サイズの可変長メモリブロック15を獲得
する。すなわち、その可変長メモリブロック15を使用
中の状態にする。
【0043】可変長メモリブロック返却が呼び出される
と、CPU1は、指定された可変長メモリブロック15
を返却する。すなわち、その可変長メモリブロック15
を未使用の状態にする。
【0044】図14は、非割込処理用ディスパッチャの
動作を説明するフローチャートであって、CPU1は、
非割込時には非割込処理用ディスパッチャのプログラム
を実行する。すなわち、タスク番号を表す変数を0に設
定し(S1)、割込許可の状態にする(S2)。そし
て、タスク番号が優先順位の付与されたタスク数よりも
小さいか否かを判断する(S3)。すなわち、優先順位
の付与された全てのタスクの処理が一巡したかどうかを
調べる。
【0045】タスク番号が優先順位の付与されたタスク
数よりも小さければ(S3:YES)、未処理のタスク
が残存しているということなので、そのタスク番号のタ
スク状態を処理すべく、割込禁止の状態にする(S
4)。そして、タスク番号を表す変数に対応するタスク
が休止状態であるか否かを判断する(S5)。具体的に
は、該当タスクのタスク制御ブロック11の第0バイト
の内容であるステータスを参照して、タスクが休止状態
であるかどうかを調べる。
【0046】タスクが休止状態でなければ(S5:N
O)、待ち状態であるか否かを判断する(S6)。具体
的には、該当タスクのタスク制御ブロック11の第0バ
イトの内容であるステータスを参照して、タスクが待ち
状態であるかどうかを調べる。
【0047】待ち状態であれば(S6:YES)、イベ
ント制御ブロック16の有無を判断する(S7)。
【0048】イベント制御ブロック16が存在すれば
(S7:YES)、ECBチェインの有無を判断する
(S8)。具体的には、イベント制御ブロック16の第
15バイトの内容であるタスク番号を参照して、該当タ
スクが処理すべきイベントに対応するイベント制御ブロ
ック16があるかどうかを調べる。
【0049】該当タスクの番号が第15バイトに書き込
まれているイベント制御ブロック16が存在すれば(S
8:YES)、そのイベント制御ブロック16をECB
チェインから切り離す(S9)。具体的には、該当する
イベント制御ブロック16のうちの先頭のイベント制御
ブロック16の第2〜第5バイトのポインタを消去し、
それに伴って他のイベント制御ブロック16の第2〜第
5バイトのポインタを適切に書き換える。そして、該当
タスクのタスク制御ブロック11のステータスを実行状
態にセットする(S10)。具体的には、タスク制御ブ
ロック11の第0バイトを「2」に書き換える。そし
て、割込許可状態にし(S11)、該当するタスクを実
行する(S12)。具体的には、タスク制御ブロック1
1の第10〜第13バイトを参照して、そのポインタに
よって示されたアドレスから実行を開始する。タスクの
実行を終了すれば、割込禁止状態にし(S13)、休止
要求が有るか否かを判断する(S14)。具体的には、
タスク制御ブロック11の第1バイトを参照し、自タス
クあるいは他タスクのシステムコールにより休止要求フ
ラグがオンにセットされているかどうかを調べる。
【0050】休止要求がなければ(S14:NO)、タ
スク制御ブロック11の第0バイトのステータスを待ち
状態すなわち「1」にセットし(S15)、S8に戻っ
て次のイベントの処理を開始する。
【0051】かくして、休止要求が発生しなければ、該
当タスクは自タスクについて発生しているイベントを順
次処理していく。イベントの処理中に周期タイマ割込が
発生すれば、割込の解除後に、イベントの処理を再開す
る。
【0052】S14において、休止要求があれば(S1
4:YES)、タスク制御ブロック11の第0バイトの
ステータスを休止状態すなわち「1」に書き換え(S1
6)、第1バイトの休止要求フラグをオフにし(S1
7)、タスク番号を表す変数に1を加算して(S1
8)、S2に戻る。
【0053】S8において、該当タスクの番号が第15
バイトに書き込まれているイベント制御ブロック16が
存在しなければ(S8:NO)、該当タスクについてイ
ベントの処理が全て終了したか、あるいは該当タスクに
ついてイベントが発生しなかったということなので、S
18に進む。
【0054】S7において、イベント制御ブロック16
が存在しなければ(S7:NO)、S18に進む。
【0055】S6において、待ち状態でなけば(S6:
NO)、休止状態でも待ち状態でもないということであ
り、異常が発生していると考えられるので、暴走検出時
における所定の処理を実行し(S19)、非割込処理用
ディスパッチャのルーチンを終了する。
【0056】S5において、休止状態であれば(S5:
YES)、イベントの発生の有無を調べることなく、S
18に進んで次のタスクの処理を行う。
【0057】S3において、タスク番号が優先順位の付
与されたタスク数よりも小さくなければ(S3:N
O)、全てのタスクの処理が一巡したということなの
で、タスク番号を表す変数を0に戻して(S20)、S
4に進む。すなわち、最も優先順位の高いタスクから順
に再度処理を行う。なお、S3およびS20の処理期間
を割込可能にしているのは、タスクの実行中以外のとき
にも周期タイマ割込を可能にするためである。このよう
にすれば、イベントの発生がないときにも周期タイマ割
込が可能になる。
【0058】図15は、周期タイマ割込処理の手順を説
明するフローチャートであって、CPU1は、たとえば
5msec毎にこの処理を実行する。先ず、割込禁止状
態にし(S21)、CPU1のレジスタファイルの内容
をRAM3の所定領域により実現されているスタック領
域に退避させて(S22)、CPU1に内蔵されている
割込コントロール回路に割込終了コマンドを通知する
(S23)。割込コントロール回路は、CPU1とは別
のIC(integrated circuit)によって実現されていて
もよい。そして、タイママネージャを実行し(S2
4)、周期タイマ割込I/Oハンドラマネージャを実行
して(S25)、割込処理用ディスパッチャを実行する
(S26)。そして、スタック領域に退避させた内容を
CPU1のレジスタファイルに書き戻し(S27)、割
込許可状態にして(S28)、周期タイマ割込処理を終
了する。
【0059】図16は、図15のS24におけるタイマ
マネージャの処理手順を説明するフローチャートであっ
て、先ず、タイママネージャ制御ブロック17の有無を
判断する(S31)。
【0060】タイママネージャ制御ブロック17が存在
すれば(S31:YES)、先頭のタイママネージャ制
御ブロック17の第6および第7バイトのタイマカウン
タを1だけディクリメントする(S32)。そして、タ
イマカウンタのカウント値が0であるか否かを判断する
(S33)。
【0061】タイマカウンタのカウント値が0であれば
(S33:YES)、現在のタイママネージャ制御ブロ
ックTMCBのチェインを切り離す(S34)。具体的
には、処理中のタイママネージャ制御ブロック17の第
2〜第5バイトのポインタを消去し、それに伴って他の
タイママネージャ制御ブロック17の第2〜第5バイト
のポインタを適切に変更する。そして、処理中のタイマ
マネージャ制御ブロック17を、第15バイトのイベン
ト発行先タスク番号に対応するタスク制御ブロック11
のECBポインタにチェインする(S35)。具体的に
は、そのタイママネージャ制御ブロック17の第2〜第
5バイトのポインタを適切に変更するとともに、それに
伴ってイベント制御ブロック16の第2〜第5バイトの
ポインタを適切に変更することにより、そのタイママネ
ージャ制御ブロック17をイベント制御ブロック16と
して取り扱う。通常は、最後尾のイベント制御ブロック
16の後にチェインするので、最後尾のイベント制御ブ
ロック16の第4および第5バイトのポインタを変更す
ることになる。そして、後方のタイママネージャ制御ブ
ロック17が存在するか否かを判断する(S36)。
【0062】後方のタイママネージャ制御ブロック17
が存在すれば(S36:YES)、S32に戻ってその
タイママネージャ制御ブロック17の処理を開始する。
【0063】S36において、後方のタイママネージャ
制御ブロック17が存在しなければ(S36:NO)、
タイママネージャの処理を終了する。
【0064】S33において、タイマカウンタのカウン
ト値が0でなければ(S33:NO)、S36に進む。
【0065】S31において、タイママネージャ制御ブ
ロック17が存在しなければ(S31:NO)、タイマ
マネージャの処理を終了する。
【0066】図17は、図15のS25における周期タ
イマ割込I/Oハンドラマネージャの処理手順を説明す
るフローチャートであって、先ず、周期タイマ割込I/
Oハンドラ制御ブロック18の有無を判断する(S4
1)。
【0067】周期タイマ割込I/Oハンドラ制御ブロッ
ク18が存在すれば(S41:YES)、先頭の周期タ
イマ割込I/Oハンドラ制御ブロック18の第0バイト
のタイマカウンタを1だけディクリメントする(S4
2)。そして、タイマカウンタのカウント値が0である
か否かを判断する(S43)。
【0068】タイマカウンタのカウント値が0であれば
(S43:YES)、周期タイマ割込I/Oハンドラ制
御ブロック18の第10〜第13バイトのポインタを参
照して、I/Oハンドラを実行する(S44)。実行が
終了すれば、周期タイマ割込I/Oハンドラ制御ブロッ
ク18の第1バイトのタイムアップカウント値を第0バ
イトのタイマカウンタに書き込む(S45)。そして、
後方の周期タイマ割込I/Oハンドラ制御ブロック18
が存在するか否かを判断する(S46)。
【0069】後方の周期タイマ割込I/Oハンドラ制御
ブロック18が存在すれば(S46:YES)、S42
に戻ってその周期タイマ割込I/Oハンドラ制御ブロッ
ク18の処理を開始する。
【0070】S46において、後方の周期タイマ割込I
/Oハンドラ制御ブロック18が存在しなければ(S4
6:NO)、周期タイマ割込I/Oハンドラマネージャ
の処理を終了する。
【0071】S43において、タイマカウンタのカウン
ト値が0でなければ(S43:NO)、S46に進む。
【0072】S41において、周期タイマ割込I/Oハ
ンドラ制御ブロック18が存在しなければ(S41:N
O)、周期タイマ割込I/Oハンドラマネージャの処理
を終了する。
【0073】図18は、図15のS26における割込処
理用ディスパッチャの動作を説明するフローチャートで
あって、先ず、タスク番号を表す変数を0に設定し(S
51)、タスク番号が優先順位の付与されたタスク数よ
りも小さいか否かを判断する(S52)。すなわち、優
先順位の付与された全てのタスクの処理が一巡したかど
うかを調べる。
【0074】タスク番号が優先順位の付与されたタスク
数よりも小さければ(S52:YES)、未処理のタス
クが残存しているということなので、そのタスク番号の
タスクを処理すべく、そのタスクが休止状態であるか否
かを判断する(S53)。具体的には、該当タスクのタ
スク制御ブロック11の第0バイトの内容であるステー
タスを参照して、タスクが休止状態であるかどうかを調
べる。
【0075】タスクが休止状態でなければ(S53:N
O)、待ち状態であるか否かを判断する(S54)。具
体的には、該当タスクのタスク制御ブロック11の第0
バイトの内容であるステータスを参照して、タスクが待
ち状態であるかどうかを調べる。
【0076】待ち状態であれば(S54:YES)、イ
ベント制御ブロック16の有無を判断する(S55)。
【0077】イベント制御ブロック16が存在すれば
(S55:YES)、ECBチェインの有無を判断する
(S56)。具体的には、イベント制御ブロック16の
第15バイトの内容であるタスク番号を参照して、該当
タスクが処理すべきイベントに対応するイベント制御ブ
ロック16があるかどうかを調べる。
【0078】該当タスクの番号が第15バイトに書き込
まれているイベント制御ブロック16が存在すれば(S
56:YES)、そのイベント制御ブロック16をEC
Bチェインから切り離す(S57)。具体的には、該当
するイベント制御ブロック16のうちの先頭のイベント
制御ブロック16の第2〜第5バイトのポインタを消去
し、それに伴って他のイベント制御ブロック16の第2
〜第5バイトのポインタを適切に書き換える。そして、
該当タスクのタスク制御ブロック11のステータスを実
行状態にセットする(S58)。具体的には、タスク制
御ブロック11の第0バイトを「2」に書き換える。そ
して、割込許可状態にし(S59)、該当するタスクを
実行する(S60)。具体的には、タスク制御ブロック
11の第10〜第13バイトを参照して、そのポインタ
によって示されたアドレスから実行を開始する。タスク
の実行を終了すれば、割込禁止状態にし(S61)、休
止要求が有るか否かを判断する(S62)。具体的に
は、タスク制御ブロック11の第1バイトを参照し、自
タスクあるいは他タスクのシステムコールにより休止要
求フラグがオンにセットされているかどうかを調べる。
なお、S60の処理期間を割込可能にしているのは、周
期タイマ割込による多重割込を行いマルチタスクを実現
するためである。
【0079】休止要求がなければ(S62:NO)、タ
スク制御ブロック11の第0バイトのステータスを待ち
状態すなわち「1」にセットし(S63)、S56に戻
って次のイベントの処理を開始する。
【0080】かくして、休止要求が発生しなければ、該
当タスクは自タスクについて発生しているイベントを順
次処理していく。イベントの処理中に周期タイマ割込が
発生すれば、割込の解除後に、イベントの処理を継続す
る。すなわち、多重割込を認めている。ただし、非割込
時のようにタスクをエンドレスに処理することはなく、
イベント発生のチェックを含むタスクの処理は一巡で終
了する。
【0081】S62において、休止要求があれば(S6
2:YES)、タスク制御ブロック11の第0バイトの
ステータスを休止状態すなわち「1」に書き換え(S6
4)、第1バイトの休止要求フラグをオフにし(S6
5)、タスク番号を表す変数に1を加算して(S6
6)、S52に戻る。
【0082】S56において、該当タスクの番号が第1
5バイトに書き込まれているイベント制御ブロック16
が存在しなければ(S56:NO)、該当タスクについ
てイベントの処理が全て終了したか、あるいは該当タス
クについてイベントが発生しなかったということなの
で、S66に進む。
【0083】S55において、イベント制御ブロック1
6が存在しなければ(S55:NO)、S66に進む。
【0084】S54において、該当タスクが待ち状態で
なけば(S54:NO)、実行状態であるか否かを判断
する(S67)。具体的には、該当タスクのタスク制御
ブロック11の第0バイトの内容であるステータスを参
照して、タスクが実行状態であるかどうかを調べる。
【0085】実行状態でなければ(S67:NO)、休
止状態でも待ち状態でも実行状態でもないということで
あり、異常が発生していると考えられるので、暴走検出
時における所定の処理を実行し(S68)、割込処理用
ディスパッチャのルーチンを終了する。
【0086】S67において、実行状態であれば(S6
7:YES)、割込処理用ディスパッチャのルーチンを
終了する。
【0087】S53において、休止状態であれば(S5
3:YES)、イベントの発生の有無を調べることな
く、S66に進んで次のタスクの処理を行う。
【0088】S52において、タスク番号が優先順位の
付与されたタスク数よりも小さくなければ(S52:N
O)、全てのタスクの処理が一巡したということなの
で、割込処理用ディスパッチャのルーチンを終了する。
【0089】図19は、タスクの実行状態の一例を説明
する説明図であって、CPU1が上記のフローチャート
に基づいて動作することにより、たとえば図19に示す
ような順序でタスクが実行される。すなわち、タスク
B,E,Fにイベントが発生したとすると、タスクの優
先順位の順にイベントの発生が順次チェックされて、タ
スクBの実行終了後にタスクEが実行され、タスクEの
実行終了後にタスクFが実行される。ここで、タスクE
の実行によりタスクAにイベントが発生したとする。
【0090】そして、タスクFの実行中に周期タイマ割
込が発生すると、タスクFの実行が中断され、タイママ
ネージャによる処理が行われた後、周期タイマ割込I/
Oハンドラマネージャによる処理が行われる。ここで、
タイママネージャによる処理によってタスクCにイベン
トが発生したとする。周期タイマ割込I/Oハンドラマ
ネージャによる処理の後、割込処理用ディスパッチャに
より、優先順位の最も高いタスクAから順にイベントの
発生がチェックされ、先ず、周期タイマ割込の発生前に
タスクEの実行によりイベントが発生したタスクAが実
行される。このタスクAの実行によりタスクDにイベン
トが発生したとする。次に、タイママネージャによって
イベントの発生したタスクCが実行される。そして、タ
スクAの実行によりイベントの発生したタスクDが実行
される。
【0091】タスクDの実行中に周期タイマ割込が発生
すると、タスクDの実行が中断され、タイママネージャ
による処理が行われた後、周期タイマ割込I/Oハンド
ラマネージャによる処理が行われる。すなわち、多重割
込処理が実行される。ここで、周期タイマ割込I/Oハ
ンドラマネージャによる処理によってタスクBにイベン
トが発生したとする。周期タイマ割込I/Oハンドラマ
ネージャによる処理の後、割込処理用ディスパッチャに
より、優先順位の最も高いタスクAから順にイベントの
発生がチェックされ、周期タイマ割込I/Oハンドラマ
ネージャによってイベントの発生したタスクBが実行さ
れる。
【0092】タスクBを除けば、実行を中断しているタ
スクFおよびタスクD以外にイベントの発生しているタ
スクは存在しないので、タスクBの実行終了により多重
割込状態が解消され、前の周期タイマ割込中に中断して
いたタスクDの実行が再開される。そして、タスクDの
実行終了により割込状態が解消され、最初の周期タイマ
割込により中断していたタスクFの実行が再開される。
ここで、タスクFの実行によってタスクBにイベントが
発生したとする。タスクFの実行終了時には、既に非割
込処理用ディスパッチャによる処理に戻っているので、
タスクFよりも優先順位の低いタスクが存在しないこと
から、最も優先順位の高いタスクAから順にイベントの
発生がチェックされ、タスクFの実行によりイベントの
発生したタスクAが実行される。
【0093】このように、非割込状態において、優先順
位の高い順にイベントの発生をチェックしてイベントの
発生しているタスクを順次実行し、また、割込が発生し
た場合、それが多重割込か否かに係わらず、実行中のタ
スクがあればその実行を一時中断し、割込の発生した時
点で再度優先順位の高い順にイベントの発生をチェック
してイベントの発生しているタスクを順次実行してい
き、その実行の終了後に、割込により中断したタスクの
実行を再開するので、多重割込を許容しつつ、全てのタ
スクでスタック領域を共用できる。
【0094】したがって、スタック領域を提供するRA
M3の容量を極力有効に利用でき、マイクロコンピュー
タなどのようにRAM3の容量を事実上大きくできない
場合にも、マルチプログラミングを実現できる。
【0095】しかも、全てのタスクでスタック領域を共
用できることから、タスクを切り換える度にスタックポ
インタのためのタスク切換処理を実行するという動作が
不要になり、処理速度を良好に向上させることができ
る。
【0096】さらには、全てのタスクでスタック領域を
共用しつつも、多重割込を許容できることから、タイマ
動作を確実に行うことができるなど、処理性能を低下さ
せることもない。
【図面の簡単な説明】
【図1】本願発明に係るマルチプログラミング実行制御
方法を採用したマイクロコンピュータの概略回路ブロッ
ク図である。
【図2】図1に示すRAMの所定領域に確保されたタス
ク制御ブロックの概念説明図である。
【図3】図2に示すタスク制御ブロックの詳細説明図で
ある。
【図4】図1に示すRAMの所定領域に確保された固定
長メモリブロックの概念説明図である。
【図5】図4に示す固定長メモリブロックの詳細説明図
である。
【図6】図1に示すRAMの所定領域に確保された可変
長メモリプールの概念説明図である。
【図7】図6に示す可変長メモリプールの詳細説明図で
ある。
【図8】図1に示すRAMの所定領域に確保されたイベ
ント制御ブロックの概念説明図である。
【図9】図8に示すイベント制御ブロックの詳細説明図
である。
【図10】図1に示すRAMの所定領域に確保されたタ
イママネージャ制御ブロックの概念説明図である。
【図11】図10に示すタイママネージャ制御ブロック
の詳細説明図である。
【図12】図1に示すRAMの所定領域に確保された周
期タイマ割込I/Oハンドラ制御ブロックの概念説明図
である。
【図13】図12に示す周期タイマ割込I/Oハンドラ
制御ブロックの詳細説明図である。
【図14】非割込処理用ディスパッチャの動作を説明す
るフローチャートである。
【図15】周期タイマ割込処理の手順を説明するフロー
チャートである。
【図16】タイママネージャの処理手順を説明するフロ
ーチャートである。
【図17】周期タイマ割込I/Oハンドラマネージャの
処理手順を説明するフローチャートである。
【図18】割込処理用ディスパッチャの動作を説明する
フローチャートである。
【図19】タスクの実行状態の一例を説明する説明図で
ある。
【符号の説明】
1 CPU 2 ROM 3 RAM 4 インターフェイス回路 11 タスク制御ブロック 12 固定長メモリブロック 13 可変長メモリプール 14 メモリ制御ブロック 15 可変長メモリブロック 16 イベント制御ブロック 17 タイママネージャ制御ブロック 18 周期タイマ割込I/Oハンドラ制御ブロック

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】 1つのスタック領域を複数の全てのタス
    クで共用し、 予め前記全てのタスクに同順位なしに優先順位を設定し
    ておいて、 イベントの発生をタスク毎にチェックし、イベントが発
    生していればそのタスクを実行するという動作を、前記
    優先順位の順に循環的に繰り返すことを特徴とする、マ
    ルチプログラミング実行制御方法。
  2. 【請求項2】 タスクの実行中に割込が発生すれば、そ
    の時点で実行中のタスクの処理を一旦中断し、新たに、
    イベントの発生をタスク毎にチェックし、イベントが発
    生していればそのタスクを実行するという動作を、前記
    優先順位の順に一巡させ、 割込処理が終了すれば、割込発生時に中断したタスクの
    実行を再開し、前記優先順位の順にタスクの処理を循環
    的に繰り返す動作に戻る、請求項1に記載のマルチプロ
    グラミング実行制御方法。
  3. 【請求項3】 割込処理におけるタスクの実行中に新た
    な割込が発生すれば、その時点で実行中のタスクの処理
    を一旦中断し、新たに、イベントの発生をタスク毎にチ
    ェックし、イベントが発生していればそのタスクを実行
    するという動作を、前記優先順位の順に一巡させ、 新たな割込処理が終了すれば、新たな割込の発生時に中
    断したタスクの実行を再開して前の割込処理に戻る、請
    求項2に記載のマルチプログラミング実行制御方法。
JP16354598A 1998-06-11 1998-06-11 マルチプログラミング実行制御方法 Pending JPH11353193A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP16354598A JPH11353193A (ja) 1998-06-11 1998-06-11 マルチプログラミング実行制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP16354598A JPH11353193A (ja) 1998-06-11 1998-06-11 マルチプログラミング実行制御方法

Publications (1)

Publication Number Publication Date
JPH11353193A true JPH11353193A (ja) 1999-12-24

Family

ID=15775937

Family Applications (1)

Application Number Title Priority Date Filing Date
JP16354598A Pending JPH11353193A (ja) 1998-06-11 1998-06-11 マルチプログラミング実行制御方法

Country Status (1)

Country Link
JP (1) JPH11353193A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007199848A (ja) * 2006-01-24 2007-08-09 Yaskawa Electric Corp 軽量化リアルタイムos
CN108536527A (zh) * 2018-02-08 2018-09-14 山东省科学院自动化研究所 一种嵌入式软件的任务调度方法及装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007199848A (ja) * 2006-01-24 2007-08-09 Yaskawa Electric Corp 軽量化リアルタイムos
JP4618647B2 (ja) * 2006-01-24 2011-01-26 株式会社安川電機 リアルタイムosシステム
CN108536527A (zh) * 2018-02-08 2018-09-14 山东省科学院自动化研究所 一种嵌入式软件的任务调度方法及装置

Similar Documents

Publication Publication Date Title
TW490638B (en) Computer for executing plural operating systems
TWI267782B (en) Deallocation of computer data in a multithreaded computer
JP3676882B2 (ja) マイクロプロセッサ及びその周辺装置
JPH0353328A (ja) レジスタ退避回復方法ならびに処理装置
JPH10207717A (ja) マイクロコンピュータ
EP0290942B1 (en) Guest machine execution control system for virtual machine system
US5481756A (en) DMA controller mailing auto-initialize halting unit
JPH11353193A (ja) マルチプログラミング実行制御方法
JP2877095B2 (ja) マルチプロセッサシステム
JPH0916409A (ja) マイクロコンピュータ
JP2636722B2 (ja) マルチタスク実行管理方式
JP3595028B2 (ja) リアルタイムosの処理方法
JP2002312302A (ja) 周辺装置
JP2819705B2 (ja) データ転送制御装置
JPH10247161A (ja) メモリ管理方式
JPH03260838A (ja) Cpu使用時間制限方式
JPS61118853A (ja) ストアバツフア装置
JPH11184712A (ja) 情報処理装置
JPS6136850A (ja) 入出力割込通知方式
JP2809174B2 (ja) デバッグ装置
JP2002196938A (ja) 例外処理フロー用の装置及びその処理実行方法
JPH0232651B2 (ja)
JPH08101788A (ja) メモリ動作管理方法及びメモリ動作管理装置
JPH1124941A (ja) 命令実行制御方法ならびに装置
JP2001014177A (ja) 非同期データ入出力処理方法およびそのプログラム記録媒体