JPH0348538B2 - - Google Patents
Info
- Publication number
- JPH0348538B2 JPH0348538B2 JP58228123A JP22812383A JPH0348538B2 JP H0348538 B2 JPH0348538 B2 JP H0348538B2 JP 58228123 A JP58228123 A JP 58228123A JP 22812383 A JP22812383 A JP 22812383A JP H0348538 B2 JPH0348538 B2 JP H0348538B2
- Authority
- JP
- Japan
- Prior art keywords
- task
- command
- register
- executed
- data
- 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 - Lifetime
Links
- 238000012545 processing Methods 0.000 description 47
- 102100029158 Consortin Human genes 0.000 description 35
- 101000771062 Homo sapiens Consortin Proteins 0.000 description 35
- 238000000034 method Methods 0.000 description 27
- 230000008569 process Effects 0.000 description 26
- 230000006870 function Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 9
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000007704 transition Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000007717 exclusion Effects 0.000 description 3
- 230000004913 activation Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 101100328887 Caenorhabditis elegans col-34 gene Proteins 0.000 description 1
- 101100009781 Danio rerio dmbx1a gene Proteins 0.000 description 1
- 101100183139 Schizosaccharomyces pombe (strain 972 / ATCC 24843) mbx1 gene Proteins 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Landscapes
- Multi Processors (AREA)
Description
<技術分野>
本発明は、マイクロコンピユータのシステム管
理プログラムに有効なマルチ・タスク制御用機能
を備えたコンピユータ周辺デバイスに関するもの
である。 <従来技術> マイクロコンピユータ・システムにおいて、1
つのCPUによつて複数のタスクを同時に処理さ
せるためには、OS(オペレーテイング・システ
ム)によるマルチ・タスク制御が必要である。 従来、マルチ・タスク制御システムにおいて、
タスク中からデータ入出力を行なうためには、
I/O素子を別途外付けする必要があり、またタ
スクの制御はシステムOSのソフトウエアによつ
てサポートしなければならなかつた。そして、外
部事象によるタスクの制御を行なうためには、外
部割込みルーチンを設け、割込みルーチン中で外
部事象を持つことができないため、タスクをデー
タ受信持ちで待機状態にし、外部事象が発生した
とき、割込みルーチン中からデータ受信待ちのタ
スクにデータを送ることにより、各タスクを起動
する方式を採つている。従つて外部割込みに対す
るオーバーヘツドは非常に大きいものとなつてい
る。 <発明の目的> 本発明は、データ入出力とマルチ・タスク制御
機能を1つのデバイスに組込んだものであり、マ
ルチ・タスク制御システムに従来のI/O素子の
代わりに本デバイスを用いれば、従来のI/O素
子と同様、パラレル・データの入出力が可能であ
り、しかもマルチ・タスク制御のためのソフトウ
エアも不要にできる。また、タスク中で外部事象
待ちのコマンドを実行することにより、外部事象
発生までタスクを停止状態にし、発生と同時に、
マスタCPUによる実行中のタスクとは独立して
起動可能状態とすることができるため、外部割込
みに対するオーバーヘツドを単縮できる。 <実施例> 以下図面に従つて本発明の一実施例を説明す
る。 第1図はマイクロコンピユータ・システムとし
ての構成例を示す図である。素子(又は装置)1
は、本発明に係るマルチ・タスク制御を実現する
ための独立したマルチ・タスク・サポート・プロ
セツサとして構成されたものであり、他の周辺デ
バイスと同様、入出力素子の形態で供給される。
以下、本デバイスをマルチ・タスク制御用素子と
呼ぶ。マスタCPU2,プログラム・メモリROM
3,データ・メモリRAM4及び他のI/O等の
周辺入出力素子5は、周知のマイクロコンピユー
タ・システムとしても具備されるものであり、マ
ルチ・タスク制御用素子1とともにバス6を介し
て相互に接続される。プログラム・メモリ3は、
マルチ・タスク制御用素子1の初期化プログラム
と複数のタスクをそれぞれ独立してプログラムし
ている。 マルチ・タスク制御用素子1は、マスタCPU
2により実行されるこれら複数のタスクの管理を
マスタCPU2以外で行なう独立機能素子であり、
タスクのスケジユーリング機能(優先度順又は時
分割による実行タスクの切換え)、タスク間の同
期・通信機能(各タスク間でデータの送受信を行
ない、タスクの実行中断,実行再開を決定)、メ
モリ管理機能(各タスクの使用メモリ領域の重複
使用の禁止)、時計機能(内蔵タイマによる時刻
のセツト)等を有している。つまり、このマル
チ・タスク制御用素子1は、マルチ・タスクの制
御機能をコンピユータ・システムのOS自身のも
つ機能とせず、その機能を有する周辺デバイスと
した点に特色がある。 第2図はマルチ・タスク制御用素子1の内部構
成例を示すブロツク図である。 マルチ・タスク制御用素子1はマスタCPU2
からアクセス可能なレジスタ群を備えている。 コマンド・パラメータ・レジスタCPIOは、マ
スタCPU2からコマンド実行時に入力するパラ
メータや、実行後に出力するパラメータを保持す
る。コマンド/ステータス・レジスタCNSTは書
込み時にはコマンド書込み用として、読出し時に
は実行したコマンドの実行情報を格納するめのレ
ジスタとして機能する。新スタツク・ポインタ・
レジスタSPNは、タスク切換え情報としてこれ
から新らたに実行状態となるタスクのスタツク・
ポインタの値を出力するためのレジスタである。
また、旧スタツク・ポインタ・レジスタSPBは、
タスク切換え情報として今まで実行状態にあつた
タスクのスタツク・ポインタの値を入力するため
のレジスタである。 マスタ割込み制御レジスタMICは本素子1に
おける、マスタCPU2に対する割込み発生を制
御するためのレジスタで、割込みベクタ・レジス
タMIVは割込みベクタ値を書込む。データ・レ
ジスタP1D,P2D,P3Dはポート1,ポー
ト2およびポート3のデータ入出力のためのレジ
スタである。ポート1とポート2はデータ入出力
方向をプログラムによつてビツト単位で設定でき
る8ビツト入出力ポートであり、ポート3は1ビ
ツトの入力ポートである。ポート3はプログラム
によつてイベント入力(ポート3への入力信号の
遷移により停止状態のタスクをレデイー状態に移
す)にセツトすることが可能である。 以上のレジスタ群はマスタCPU2からアクセ
スされて、本素子1とマスタCPU2との間で情
報を相互に交換するために用いられる。データ・
バス・インターフエイスDBI,バス・タイミング
発生・制御回路BTGC,割込み制御回路INTC
は、マスタCPU2とのインターフエイス回路と
して備えられたものである。 タスク制御ブロツクTCB(1〜8)はタスクの
状態を保存するためのメモリ領域である。ここで
は8つまでのタスクを取扱うことが可能である。
各ブロツクは第3図に示されるように、タスク・
ステータス,タスク優先度,先にレデイーQ
に接続されているタスクの番号,後にレデイー
Qに接続されているタスクの番号,タスクが占
有しているワーク・メモリの先頭アドレス,そ
のサイズ,使用しているメイル・ボツクス番号
,そしてタスク実行中断時のスタツク・ポイン
タ値を格納する領域を有している。 メイル・ボツクスMBXはタスク間でデータの
授受を行なえるよう設けられたバツフア・メモリ
領域である。 メモリ・マツプMEMMAPはワーク・メモリ
を管理するためのメモリ領域であり、例えば第4
図のように32バイトから構成される。メモリ・マ
ツプMEMMAPにより256バイト単位のワーク・
メモリを管理することが可能である。ワーク・メ
モリを使用していないときその領域に対応するビ
ツトは“0”で、占有中であるときはそのビツト
が“1”にセツトされる。 タイマTMは時分割処理(同一優先度のタスク
を一定時間毎に実行させる処理)等のために、素
子1内に割込み信号を発生させるもので、システ
ムクロツク領域SCAは同時にタイマTMの出力に
より計数される時,分,秒等の時刻データを格納
するメモリ領域である。 内部演算制御回路CONTは論理演算ユニツト
(ALU),本素子1のプログラムを格納する
ROM,一時記憶用のRAMおよび各種制御のた
めのフラグ用レジスタ等を有してなる。 マスタCPU2からマルチ・タスク制御用素子
1へのアクセスは、実行中のタスクから発行され
るコマンドによつて行なわれ、マルチ・タスク制
御用素子1からマスタCPU2へのアクセスは、
マルチ・タスク制御用素子1の割込み信号発生に
基づいて行なわれる。第5図はコマンドの種類と
入力パラメータおよび出力パラメータを示す図で
ある。 基本的動作としては次のとおりである。なお、
タスク制御ブロツクTCBには各タスクの状態が
既に保存されているものとする。 マルチ・タスク制御用素子1は、実行可能状態
のタスクから優先度の一番高いタスクを選び出
し、登録されたそのタスクのスタツク・ポインタ
の値を新スタツク・ポインタ・レジスタSPNに
準備する。スタツク・ポインタの値を準備した
後、マルチ・タスク制御用素子1はマスタCPU
2に対し割込みを発生する。マスタCPU2は割
込み処理ルーチンを実行し、マルチ・タスク制御
用素子1にセツトされているスタツク・ポインタ
の値を自分のスタツク・ポインタにロードし、予
じめ書込まれていたレジスタの初期値をスタツク
からポツプしてレジスタを書換える。そしてマス
タCPU2の管理下において指定されたタスクを
実行する。 実行中のタスクからコマンド入力があるか、ま
たはタイマTMあるいはポート3への入力による
割込みがあるまで、マルチ・タスク制御用素子1
は待ち状態となる。ここで例えばコマンド入力が
あれば、マルチ・タスク制御用素子1はそのコマ
ンドを解析しコマンド処理を行なう。そして、こ
のコマンドがタスク切換え機能を含むものであれ
ば、次に切換えるべきタスクのスタツク・ポイン
タの値を新スタツク・ポインタ・レジスタSPN
にセツトし、マスタCPU2に対し割込みを発生
する。この割込みによつてマスタCPU2は現在
実行中のタスクの実行を停止し、次に実行すべき
タスクのスタツク・ポインタの値をマルチ・タス
ク制御用素子1から読出す。 以下フローチヤートを参照してさらに詳しく説
明する。 第6図はマルチ・タスク制御用素子1のメイン
ルーチンの動作を説明するフローチヤート、第7
図〜第21図は各コマンド0〜14による処理ルー
チンの動作を説明するフローチヤート、第22図
はタスク切換えルーチンの動作を説明するフロー
チヤート、第23図はポート3へのイベント入力
による割込み処理ルーチンの動作を説明するフロ
ーチヤート、第24図はタイマTMによる割込み
処理ルーチンの動作を説明するフローチヤートで
ある。 第6図において、システムに電源が投入される
と、本マルチ・タスク制御用素子1はリセツト動
作を行ない内部の各機能素子を初期化する(ステ
ツプ)。そして、マスタCPU2からコマンドが
コマンド/ステータス・レジスタCNSTに書込ま
れるのを待つ(ステツプ)。コマンドが書込ま
れると、各コマンド・コードに対応したコマンド
処理を行なう(ステツプ)。 コマンド0(コマンド名:INIT,第7図フロー
チヤート)は、マルチ・タスク制御用素子1の初
期化を行なうためのコマンドであり、マルチ・タ
スク制御用素子1がマスタCPU2に対して割込
みを発生するときにマスタCPU2へ出力するベ
クタ値、マルチ・タスク制御用素子1が管理する
ワーク・メモリ領域の先頭アドレスとその大き
さ、及びタスクの優先度を各タスクに対して登録
するためのコマンドである。 このコマンドが実行されると、入力データのエ
ラーを調査し(ステツプ)、もし入力データに
誤りがあれば、エラーコードをコマンド/ステー
タス・レジスタCNSTにセツトする(ステツプ
)。 入力データに誤りがなければ、コマンド・パラ
メータ・レジスタCPIOに送られたデータから、
割込みベクタ値を割込みベクタレジスタMIVに
書込み(ステツプ)、またワーク・メモリ領域
の先頭アドレスとその大きさのデータをもとにし
てメモリ・マツプMEMMAPを初期化する(ス
テツプ)。そして、書込まれたタスクの優先度
をもとにして各タスク制御ブロツクTCBを作成
する(ステツプ)。そして、優先度の高い順に
並べてレデイーQを構成する(ステツプ)。こ
のとき、タスク制御ブロツクTCB内の,に
よつて順序づけを行なう。生成後は正常終了コー
ドをコマンド/ステータス・レジスタCNSTにセ
ツトし(ステツプ)、内部演算制御回路CONT
のTSKCHGフラグをリセツトして(ステツプ
)、第6図のメインルーチンに戻る。 エラーコードをコマンド/ステータス・レジス
タCNSTにセツトした場合も同様にTSKCHGフ
ラグをリセツトしてメインルーチンに戻る。 コマンド1(コマンド名:TSTR,第8図フロ
ーチヤート)は、初期化したマルチ・タスク制御
用素子1を実行状態に移すためのコマンドであ
る。 このコマンド1では、コマンド0の処理が実行
済かどうかのチエツクを行ない(ステツプ)、
実行済の場合のみ、レデイーQの先頭に接続され
ているタスク(一番優先度の高いタスク)を実行
状態に移すためTSKCHGフラグ(内部演算制御
回路CONTの制御フラグ)をセツトして(ステ
ツプ)、第6図のメインルーチンに戻る。実行
済でない場合は、コマンド/ステータス・レジス
タCNSTにエラーコードをセツトし(ステツプ
)、メインルーチンに戻る。 以上のコマンド0,1およびマルチ・タスク制
御用素子1への書込み情報は、例えば第1図のプ
ログラム・メモリ3の初期化プログラムに予じめ
格納され、タスク内容に応じてプログラム変更が
可能であり、マルチ・タスク制御用素子1はこれ
により種々に初期化設定することができる。 コマンド2(コマンド名:TCRT,第9図タイ
ムチヤート)は初期設定の後、任意にタスクを生
成するためのコマンドであり、入力データとして
生成するタスクの番号およびその優先度が本素子
1のコマンド・パラメータ・レジスタCPIOに書
込まれる。 このコマンド2が実行されると、入力データに
エラーがないかの検査を行ない(ステツプ)、
エラーがあればコマンド/ステータス・レジスタ
CNSTにエラーコードを書込む(ステツプ)。
エラーがなければ、入力データで指定されたタス
クのタスク制御ブロツクTCBを生成する(ステ
ツプ)。 タスク制御ブロツクTCB中のタスク・ステー
タス(第3図参照)には次の4つのフラグが含
まれる。 RUNフラグはタスクが実行状態にあることを
示す。 READYフラグはタスクがレデイー状態にあつ
てレデイーQに接続されていることを示す。 PENDWフラグはメツセージ受信待と状態にあ
ることを示す。 SUSPENDフラグはタスクが停止状態にある
ことを示す。 上記タスク制御ブロツクTCBの生成時(ステ
ツプ)、同時にその中のREADYフラグをセツ
トする。 そして、タスクの優先度の高い順にレデイーQ
に再接続する(ステツプ)。次にコマンド/ス
テータス・レジスタCNSTに正常終了コードをセ
ツトし(ステツプ)、実行状態のタスクとレデ
イーQの先頭に接続されているタスクの優先度を
比較させるためのTSKCHGフラグをセツトして
(ステツプ)、第6図のメインルーチンに戻る。 コマンド3(コマンド名:TDEL,第10図タ
イムチヤート)は不要のタスクを消去するための
コマンドで、消去するタスクの番号を入力データ
として実行する。 入力データにエラーがないかの検査(ステツプ
)において、エラーがあればコマンド/ステー
タス・レジスタCNSTにエラーコードがセツトさ
れ(ステツプ)、第6図のメインルーチンに戻
る。 エラーがなければ、消去するタスクが占有して
いたワーク・メモリを解放するため、このタスク
のタスク制御ブロツクTCB中にある占有メモリ
先頭アドレスおよび占有メモリ・サイズを読
出し、このデータに基づいてメモリ・マツプ
MEMMAP上で対応した領域を“0”クリアす
る(ステツプ)。ついでこのタスクがレデイー
状態にあれば、消去するタスクのタスク制御ブロ
ツクTCBをレデイーQから切離し(ステツプ
)、このタスク制御ブロツクTCBのすべてをク
リアする(ステツプ〓〓)。終われば、コマンド/
ステータス・レジスタCNSTに正常終了コードを
セツトして(ステツプ〓〓)、メインルーチンに戻
る。 コマンド4(コマンド名:TRSM,第11図フ
ローチヤート)は、入力データで指定されたタス
ク番号を持つ待機または停止中のタスクをレデイ
ー状態(再起動可能状態)にするためのコマンド
である。タスク番号を入力データとして実行す
る。 コマンド4が実行されると、まず入力データに
エラーがないかの検査が行なわれ(ステツプ〓〓)、
エラーがあればコマンド/ステータス・レジスタ
CNSTにエラーコードを設定して(ステツプ〓〓)、
メインルーチンに戻る。 エラーがなければ、指定されたタスクの
PENDWフラグまたはSUSPENDフラグをリセ
ツトするとともにREADYフラグをセツトし、か
つこのタスク制御ブロツクTCBをタスクの優先
度の高い順序でレデイーQに接続する(ステツプ
〓〓)。そして、正常終了コードをコマンド/ステ
ータス・レジスタCNSTにセツトし(ステツプ
〓)、実行状態のタスクとレデイーQの先頭に接
続されているタスクの優先度を比較するため
TSKCHGフラグをセツトし(ステツプ)、メ
インルーチンに戻る。 コマンド5(コマンド名:TSPD,第12図フ
ローチヤート)は、入力データで指定されたタス
ク番号を持つ実行状態あるいはレデイー状態にあ
るタスクを停止状態にするためのコマンドであ
る。 このコマンド5が実行されると、入力データの
エラーを検査し、エラーがあればコマンド/ステ
ータス・レジスタCNSTにエラーコードを設定し
てメインルーチンに戻る(ステツプ,)。 エラーがなければ、まず、入力データによつ
て、停止状態になるタスクをポート3からの入力
信号(外部イベント)によりレデイー状態にする
(再起動)という指定がなされているかどうかの
チエツクを行なう(ステツプ〓〓)。外部イベント
の指定がなければステツプ〓〓の処理へスキツプす
る。指定がある場合は、他のタスクが既に外部イ
ベントを使用しているかどうかの検査を行ない
(ステツプ〓〓)、使用されていれば、コマンド/ス
テータス・レジスタCNSTにエラーコードをセツ
トして(ステツプ)メインルーチンに戻る。使
用されていなければ、ポート3の入力信号の遷移
による内部割込みをイネーブルにする(ステツプ
〓〓)。すなわち、本コマンド5の入力データ設定
により外部イベント起動の指定が可能である。 そして、スキツプした場合を含めて次に、その
タスク制御ブロツクTCB中のRUNフラグ(指定
したタスクが実行状態にある場合)または
READYフラグ(レデイー状態にある場合)をリ
セツトし、SUSPENDフラグをセツトする(ス
テツプ〓〓)。終われば、コマンド/ステータス・
レジスタCNSTに正常終了コードをセツトする
(ステツプ〓〓)。そして指定されたタスクがレデイ
ー状態にある場合を考慮して、このタスクをレデ
イーQから切離し、レデイーQに接続されている
タスク制御ブロツクTCBを再度優先度順になら
び換え(ステツプ〓〓)、実行状態のタスクとレデ
イーQの先頭に接続されているタスクの優先度を
比較するためのTSKCHGフラグをセツトして
(ステツプ〓〓)、メインルーチンに戻る。 コマンド6(コマンド名:TPRI,第13図フ
ローチヤート)は、入力データで指定された番号
のタスクの優先度を変更するコマンドである。 入力データにエラーがあるかの検査(ステツプ
〓〓)において、エラーがある場合はコマンド/ス
テータス・レジスタCNSTにエラーコードをセツ
トして(ステツプ〓〓)メインルーチンに戻る。 エラーがない場合、指定されたタスクのタスク
管理ブロツクTCB内の優先度(第3図参照)
を入力データの変更優先度の値に書換える(ステ
ツプ〓)。次に、レデイーQに接続されているタ
スク管理ブロツクTCBを優先度順にならび換え
(ステツプ〓)、コマンド/ステータス・レジスタ
CNSTに正常終了コードをセツトする(ステツプ
〓〓)。そして、実行状態のタスクとレデイーQの
先頭に接続されているタスクの優先度を比較する
ためにTSKCHGフラグをセツトして(ステツプ
〓〓)、メインルーチンに戻る。 コマンド7(コマンド名:TSLI,第14図フロ
ーチヤート)は、入力データで指定された優先度
を持つタスク群のマスタCPU占有時間を制限す
るためのコマンドである。すなわち、このコマン
ドは同一優先度のタスクの時分割処理を指定す
る。時分割処理は、指定した優先度より高い優先
度を持つレデイー状態のタスクが存在しない場合
に限り有効である。より高い優先度を持つレデイ
ー状態のタスクが存在すれば、そのタスクが実行
され時分割処理は無効となるが、高い優先度のタ
スクがなくなれば有効となる。 このコマンド7が実行されると、まず、入力デ
ータのエラーが検査される(ステツプ〓〓)。エラ
ーが検出された場合は、コマンド/ステータス・
レジスタCNSTにエラーコードがセツトされ(ス
テツプ〓〓)メインルーチンに戻る。 エラーが検出されなければ、入力データが時分
割処理をキヤンセルする指定であるのかどうかを
判定する(ステツプ〓〓)。キヤンセルの場合は、
内部演算制御回路CONT内にある時分割制御用
レジスタSLICNTおよびSLIPRIを“0”クリア
する(ステツプ〓〓,〓)。入力データが新たに時
分割処理の設定を指定する場合は、その入力デー
タからタスクのCPU占有時間を制御用レジスタ
SLICNTに設定し(ステツプ〓)、時分割処理を
行なうタスクの優先度をもう一つの制御用レジス
タSLIPRIに設定する(ステツプ〓〓)。そして最後
にコマンド/ステータス・レジスタCNSTに正常
終了コードをセツトして(ステツプ〓)メインル
ーチンに戻る。 コマンド8(コマンド名:CSET,第15図フ
ローチヤート)は、マルチ・タスク制御用素子1
内に設けられた時計に時刻を設定するためのコマ
ンドである。マスタCPU2から本素子1内のコ
マンド・パラメータ・レジスタCPIOに、入力デ
ータとして時、分,秒データを書込みコマンドを
実行する。 入力データのエラーが検査されて(ステツプ
〓〓)、エラーが検出された場合はコマンド/ステ
ータス・レジスタCNSTにエラーコードがセツト
されて(ステツプ〓)、メインルーチンに戻る。 エラーがなければ、システム・クロツク領域
SCAに時,分,秒のデータが移される(ステツ
プ)。そしてコマンド/ステータス・レジスタ
CNSTに正常終了コードをセツトして(ステツプ
〓〓)メインルーチンに戻る。この時計は後述する
タイマ割込みルーチンにより刻々計時される。 コマンド9(コマンド名:CGET,第16図フ
ローチヤート)は、上記の時計から現在の時刻を
読出すためのコマンドである。 このコマンド9が実行されると、システム・ク
ロツク領域SCAから時,分,秒のデータが、マ
スタCPU2からアクセス可能なコマンド・パラ
メータ・レジスタCPIOに移される。移した後は
コマンド/ステータス・レジスタCNSTに正常終
了コードをセツトして(ステツプ〓〓)メインルー
チンに戻る。 コマンド10(コマンド名:MALC,第17図フ
ローチヤート)は、マルチ・タスク制御用素子1
が管理しているワーク・メモリ領域の中から、コ
マンドを実行したタスクに対して要求されたサイ
ズのワーク・メモリの使用を許可するコマンドで
ある。コマンド・パラメータ・レジスタCPIOに
要求するワーク・メモリ数(100H単位)を書込
みコマンドを実行する。 コマンド10が実行されると、入力データのエラ
ー検出が行なわれる(ステツプ〓)。エラーが検
出されれば、コマンド/ステータス・レジスタ
CNSTにエラーコードをセツトして(ステツプ
〓)メインルーチンに戻る。 エラーが検出されなければ、メモリ・マツプ
MEMMAPを調査し、要求されたワーク・メモ
リが空いているかどうかのチエツクを行なう(ス
テツプ〓〓)。空き領域がなければコマンド/ステ
ータス・レジスタCNSTにメモリ占有不可コード
をセツトして(ステツプ〓〓)、メインルーチンに
戻る。空き領域が見つかれば、コマンドを実行し
たタスクが要求したサイズだけメモリ・マツプ
MEMMAP上の対応したビツトに“1”をセツ
トする(ステツプ〓)。そして、コマンドを実行
したタスクのタスク制御ブロツクTCB内の占有
メモリ先頭アドレスおよび占有メモリ・サイズ
の領域(第3図参照)にそれぞれの値を設定し
(ステツプ〓〓)、次にコマンド・パラメータ・レジ
スタCPIOに占有メモリ・先頭アドレスを書込む。
書込まれば、コマンド/ステータス・レジスタ
CNSTに正常終了コードをセツトし(ステツプ
〓〓)メインルーチンに戻る。 コマンド11(コマンド名:MREL,第18図フ
ローチヤート)は、占有していたワーク・メモリ
領域を開放するためのコマンドである。 コマンド11を実行したタスクがワーク・メモリ
を占有していなければ(ステツプ〓〓)、コマン
ド/ステータス・レジスタCNSTにエラーコード
をセツトして(ステツプ〓〓)メインルーチンに戻
る。 既にワーク・メモリが占有されていれば、コマ
ンドを実行したタスクのタスク制御ブロツク
TCB内に登録されている占有メモリ先頭アドレ
スおよび占有メモリ・サイズの領域の値を参
照し、メモリ・マツプMEMMAP上の対応した
ビツトを“0”にリセツトする(ステツプ〓)。
そして、タスク制御ブロツクTCB内の占有メモ
リ先頭アドレス及び占有メモリ・サイズの領
域をクリアする(ステツプ〓)。最後にコマン
ド/ステータス・レジスタCNSTに正常終了コー
ドをセツトして(ステツプ〓〓)、メインルーチン
に戻る。 上述のようにタスクからメモリを要求する場合
には、マルチ・タスク制御用素子1に対してコマ
ンド10(メモリ占有コマンド,MALC)を実行す
る。また、タスクが使用していたメモリが不要に
なり解放したい場合には、コマンド11(メモリ解
放コマンド,MREL)を実行する。 このようにマルチ・タスク制御用素子1は、こ
れらコマンド10,11によつて、予じて登録された
64Kバイトまでのワーク用メモリ領域を100Hバ
イト単位で使用中か否かを判断し、タスクから要
求されたサイズの空き領域を探し出して、タスク
に割付ける機能を有する。 この機能は、限られたメモリ空間を複数のタス
クで有効に利用するのに効果を発揮し、またお互
いのタスク間で同一メモリ領域を重複して使用す
ることを防止するのに役立つ。なお、マルチ・タ
スク制御用素子1へのワーク・メモリ領域の設定
は、マルチ・タスク制御用素子1の初期設定時
(コマンドOの実行時)に行なわれる。 コマンド12(コマンド名:PPOST,第19図
フローチヤート)は、本マルチ・タスク制御用素
子1内に設けられたメイルボツクスMBXと呼ば
れるメモリ領域に、データを送るためのコマンド
である。メイルボツクスMBXはこのコマンド12
を実行したタスクと別タスク(次に説明するコマ
ンド13実行)とのメツセージ中継点となる。5個
のメイルボツクスMBX1〜MBX5中の1個を
指定できる。コマンド・パラメータ・レジスタ
CPIOに使用するメイル・ボツクスMBXの番号,
および指定したメイル・ボツクスMBXへ送るデ
ータを書込み、コマンドを実行する。 コマンド12が実行されると、入力データのエラ
ーを検査し(ステツプ〓)、エラーが検出されれ
ばコマンド/ステータス・レジスタCNSTにエラ
ーコードをセツトして(ステツプ〓)メインルー
チンに戻る。 エラーが検出されなければ、送信データを指定
された番号のメイル・ボツクスMBXに書込む
(ステツプ〓〓)。そして次に、既にコマンド13が実
行され、コマンド12の実行によつてデータが指定
のメイル・ボツクスMBXに送られてくるのを待
つてくるタスクがあるかどうかを調査する(ステ
ツプ〓)。これはすべてのタスクのタスク制御ブ
ロツクTCB内のタスク・ステータ中の
PENDWフラグおよびメイル・ボツクス番号と
を参照して行なわれる。もし送信待ちのタスクが
ない場合はステツプ〓〓へスキツプする。送信待ち
のタスクがある場合(本実施例では1個のみを許
している)は、送信待ちのタスクのタスク制御ブ
ロツクTCB内のPENDWフラグをリセツト,ま
たREADYフラグをセツトし、レデイーQを優先
度順に接続しなおす(ステツプ〓〓)。 そして送信待ちのタスクがある場合、ない場合
共に、コマンド/ステータス・レジスタCNSTに
正常終了コードをセツト(ステツプ〓〓)、さらに
TSKCHGフラグをセツトして(ステツプ〓〓)メ
インルーチンに戻る。 コマンド13(コマンド名:PEND,第20図フ
ローチヤート)は別タスクより、指定したメイ
ル・ボツクスMBXを介してデータを受け取るコ
マンドである。コマンド・パラメータ・レジスタ
CPIOにデータを受け取るメイル・ボツクス
MBXの番号を書込みコマンドを実行する。コマ
ンド13が実行されると、まず入力データのエラー
検査が行なわれ(ステツプ〓〓)、エラーがあれば
コマンド/ステータス・レジスタCNSTにエラー
コードをセツトして(ステツプ〓〓)、メインルー
チンに戻る。 エラーが検出されなければ、指定したメイル・
ボツクスMBXにデータが既に書込まれているか
どうかチエツクする(ステツプ〓〓)。もし書込ま
れていなければ、RUNフラグをリセツト,
PENDWフラグをセツトし(ステツプ〓)、また
TSKCHGフラグをセツトする(ステツプ〓〓)。
そして次に、コマンド/ステータス・レジスタ
CNSTにデータ未着コードをセツトし(ステツプ
〓〓)、メインルーチンに戻る。既にデータが書込
まれていれば、コマンド・パラメータ・レジスタ
CPIOに指定したメイル・ボツクスMBXに書込
まれているデータを転送し(ステツプ〓〓)、コマ
ンド/ステータス・レジスタCNSTに正常終了コ
ードをセツトして(ステツプ〓)、メインルーチ
ンに戻る。 コマンド14(コマンド名:PMOD,第21図フ
ローチヤート)は、ポート1とポート2のデータ
入出力方向を設定するコマンドである。コマン
ド・パラメータ・レジスタCPIOにポート1とポ
ート2との入出力方向を指定するためのコードを
設定してコマンドを実行する。 コマンド・パラメータ・レジスタCPIOに設定
されたコードに基づきポート1とポート2の入出
力方向を指定し(ステツプ〓)、コマンド/ステ
ータス・レジスタCNSTに正常終了コードをセツ
トして(ステツプ〓)、メインルーチンに戻る。 タスクから発行された上記任意のコマンド0〜
14の処理ルーチンを実行し、第6図のメインルー
チンに戻ると、まずコマンド/ステータス・レジ
スタCNSTにエラーコードがセツトされているか
どうかの判定を行なう(ステツプ〓〓)。エラーコ
ードがセツトされていればステツプ〓〓へスキツプ
し、もしエラーコードがセツトされていなけれ
ば、次にTSKCHGフラグがセツトされているか
どうか判定する(ステツプ〓〓)。TSKCHGフラ
グが“0”であればステツプ〓〓へスキツプし、
“1”であればタスク切換えルーチンを実行する
(ステツプ〓〓、タスク切換えルーチンは第22図
のフローチヤートに詳しく述べられる)。ステツ
プ〓〓またはステツプ〓〓からスキツプして、あるい
はタスク切換えルーチン(ステツプ〓〓)が実行さ
れてメインルーチンに戻ると、次のコマンド受け
入れ基準を行ない(ステツプ〓〓)、TSKCHGフ
ラグをリセツトする(ステツプ〓〓)。そして、ス
テツプに戻り、次のコマンド受け入れ待ち状態
となる。 上記したようにコマンド処理ルーチンで
TSKCHGフラグがセツト(“1”)されれば、タ
スク切換ルーチンを実行する。第22図のフロー
チヤートにおいて、タスク切換えルーチンに入る
と、まずコマンド1(初期設定終了および実行開
始)の実行時かどうかのチエツクを行なう(ステ
ツプ〓〓)。 コマンド1の実行時であればステツプ 100 へ
スキツプし、以降の処理により、先にコマンド0
(初期設定)で登録したタスクの中から、レデイ
ー状態にありかつ優先度の最も高いタスクを実行
させるべくマスタCPU2に割込み信号を発生す
る。まず、レデイーQの先頭に接続されているタ
スクのタスク制御ブロツクTCBをレデイーQか
ら切離し(ステツプ 100 )、このタスク制御ブロ
ツクTCB内のタスク・スタツク・ポインタ
(第3図参照)の値を新スタツク・ポインタ・レ
ジスタSPNに書込む(ステツプ 101 )。そして
タスク制御ブロツクTCB内のタスク・ステータ
スにRUNフラグをセツトして(ステツプ102)、
マスタCPU2に対して割込み信号を発生す
る(ステツプ 102 )。 マスタCPU2は、この割込み信号に基づ
くマスタCPU2側のタスク切換え割込みルーチ
ンにより新しいタスクのスタツク・ポインタの値
を読込み、割込みルーチンのリターンと同時に、
マスタCPU2の管理下においてそのタスクを実
行する。 コマンド1の実行時以外では、タスクが実行状
態かどうか検査される(ステツプ〓〓)実行状態で
ない場合、ステツプ〓〓へスキツプし、旧スタツ
ク・ポインタ・レジスタSPBのデータを、前ま
で実行状態にあつたタスクのタスク制御ブロツク
TCB内のタスク・スタツク・ポインタ領域に
書込み、保存する。この後、ステツプ 100 〜
103 の処理を通して別のタスクを実行するため、
マルチ・タスク制御用素子1からマスタCPU2
に割込み信号を発生する。 タスクが実行状態(RUN状態)であれば、時
分割処理のタイム・アツプ時間かどうか検査され
る(ステツプ〓〓)。時分割処理指定のタスクがタ
イムアツプした時にはステツプ〓〓へスキツプす
る。このスキツプルーチンは後に説明する第24
図フローチヤートのタイマ割込み処理中でしか通
らない。 タイム・アツプ時でなければ、レデイーQに接
続されているタスクがあるかどうかの検査を行な
う(ステツプ〓〓)。なければ、すなわち、現在実
行状態のタスク以外に実行待ち(レデイー)状態
のタスクがなければ、第6図のメインルーチンに
戻る。レデイーQに接続されているタスクがあれ
ば、次に、実行状態のタスクの優先度とレデイー
Qの先頭に接続されているタスクの優先度とを比
較する(ステツプ〓〓)。実行状態のタスクの優先
度の方が高ければ、同じく第6図のメインルーチ
ンに戻る。ステツプ〓〓,〓〓でメインルーチンに戻
れば、割込み信号が発生されず、現在実行
中のタスクがそのまま実行を続行するととなる。 レデイーQの先頭に接続されているタスクの優
先度の方が高ければ、実行中のタスクのタスク制
御ブロツクTCBをレデイーQに接続するととも
に、RUNフラグをリセツトする(ステツプ〓〓)。
そして、旧スタツク・ポインタ・レジスタSPB
のデータをタスク・制御ブロツクTCBのタス
ク・スタツク・ポインタ領域に保存し(ステツ
プ〓〓)、以降のステツプ 100 〜 103 の処理を通
して割込みを発生させる。なお、ステツプ 100
〜 103 において、新しく実行状態となる別のタ
スクは、前述したようにレデイーQの先頭に接続
されているタスクで、コマンド実行等により最も
優先度が高くなつたタスクである。割込み信号
INTを発生した後は第6図のメインルーチンに
戻り、次のコマンド受け入れ準備を行なう(第6
図ステツプ〓〓)。 第23図,第24図は第6図のメインルーチン
に対する割込み処理ルーチンのフローチヤートで
ある。 第23図はポート3への入力による割込み処理
で、コマンド5(タスクの停止,第12図フロー
チヤート)によつて停止状態にあるタスクを外部
イベント起動するものである。 ポート3に入力されている信号の遷移によつて
このルーチンが起動される。このルーチンでは、
コマンド5で外部イベント起動を設定しているタ
スクのタスク制御ブロツクTCBを優先順でレデ
イーQに接続し(ステツプ 104 )、そのタスク制
御ブロツクTCB内のSUSPENDフラグをリセツ
ト,READYフラグをセツトする(ステツプ 105
)。すなわち、これによつて停止状態のタスク
が再起動可能状態となるわけで、これが終れば割
込み処理ルーチンからリターンする。 第24図はタイマによる割込み処理で、第2図
のタイマTMからの信号を内部割込み信号とし
て、これが一定時間単位で発生するとタイマ割込
み処理ルーチンに入る。 タイマTMから内部割込み信号が発生すると、
まず、システム・クロツク領域SCAに登録され
ている時計の値(時,分,秒のデータ)を進める
(ステツプ 106 )。次にコマンド7(タスクの時分
割処理の設定,第7図フローチヤート)で設定さ
れたレジスタSLIPRIに登録されている優先度と、
現在実行状態のタスクの優先度とを比較する(ス
テツプ 107 )。時分割処理は指定した優先度より
高いレデイー状態のタスクが存在しない場合に限
り有効である。より高い優先度を持つレデイー状
態のタスクが存在すれば、そのタスクが実行され
時分割処理は無効となるが、高い優先度のタスク
がなくなれば有効となる。上記ステツプ 107 の
比較は、レジスタSLIPRIに登録されている優先
度のタスクが実行中であるかどうか検査すること
と同等であり、時分割処理タスクが実行状態にな
い場合は直ちに割込み処理ルーチンからリターン
する。 レジスタSLIPRIに登録されている優先度と現
在実行状態のタスクの優先度と一致、つまり、現
在実行状態のタスクが時分割処理指定のタスクで
あれば、レジスタSLICNTで登録されている時
間が経過したかどうかの判定を行なう(ステツプ
108 )。経過していなければ、この割込み処理
ルーチンからリターンする。すなわち、マルチ・
タスク制御用素子1はメインルーチンに戻り次の
コマンド受け入れ待ち状態となり、マスタCPU
2は時分割処理指定の現在実行状態にあるタスク
を続けて実行する。 登録された時間が経過したときは、実行状態の
タスクのタスク制御ブロツクTCBをレデイーQ
の末尾に接続するとともに、RUNフラグをリセ
ツト,READYフラグをセツトし(ステツプ 109
)、第22図のタスク切換えルーチンをコール
する(ステツプ 110 )。 第22図フローチヤートにおいて、時分割処理
指定のタスクがタイム・アツプした場合は、ステ
ツプ〓〓からステツプ〓〓へスキツプする。そしてス
テツプ〓〓〜 103 の処理を行なう。これらによつ
て、前まで実行状態にあつたタスクのタスク・ス
タツク・ポインタ領域に旧スタツク・ポイン
タ・レジスタSPBのデータを保存する(ステツ
プ〓〓)とともに、時分割処理に指定された同じ優
先度を持つタスクのタスク制御ブロツクTCBを
レデイーQから切離し(ステツプ 100 )、このタ
スク制御ブロツクTCB内のタスク・スタツク・
ポインタ・レジスタSPNに書込む(ステツプ
101 )。そして最後にタスク・ステータスに
RUNフラグをセツトする(ステツプ 102 )。こ
うしたタスク切換えルーチンを行なつたのち割込
みからリターンする。マスタCPU2では上述し
たマルチ・タスク制御用素子1の動作により、時
分割処理に指定した別のタスクを実行することと
なる。 上述のように本実施例のマルチ・タスク制御用
素子1は同時に最大8個までのタスクをサポート
することができる。8個を越えるタスクをサポー
トさせるには、必要に応じてコマンド2(タスク
の生成),コマンド3(タスクの消去)によりタス
クを生成,消去し、タスクの入れ換えを行なえば
よい。そして、マルチ・タスク制御用素子1によ
り各タスクは優先度順にマスタCPU2の占有権
を割当てられる。また、コマンド7(タスクの時
分割処理の設定)により、同一優先度の複数のタ
スクを時分割方式でスケージユリングすることも
可能である。なお、各タスクの優先度はタスク生
成時に設定されるが、コマンド6(タスクの優先
度変更)によりマスタCPU2のプログラム実行
中にも変更可能である。 時分割処理の開始時、タスクの実行順序はコマ
ンド0(初期設定)またはコマンド2(タスクの生
成)により生成したタスクの順序に従う。タスク
実行中でコマンド7(タスクの時分割処理の設定)
を実行すれば、実行したタスクの優先度と時分割
指定優先度とが等しい場合には、実行した時点か
ら時分割処理が有効となる。 コマンド12(メツセージの送信),コマンド13
(メツセージの受信)により、マルチ・タスク制
御用素子1のメイル・ボツクスMBXを利用し
て、タスク間のデータ(メツセージ)の受授が行
なえる。 コマンド12を実行した際、実行したタスクより
も高い優先度を持つタスクが既にコマンド13を実
行して待機状態にあれば、タスク切換えにより待
機していたタスクが実行を開始する。低い優先度
をもつタスクがコマンド13により待機中であれ
ば、そのタスクはレデイー状態になるだけで、本
コマンド12を実行したタスクがそのまま実行を継
続する。コマンド12を実行した際、コマンド13が
実行されていなければ、データ(メツセージ)は
メイル・ボツクスMBXに保存され、同様にその
ままタスクの実行が継続される。 コマンド13を実行した際、既に指定したメイ
ル・ボツクスMBXにデータ(メツセージ)が届
いている場合には、そのタスクがコマンド・パラ
メータ・レジスタCPIOより、直ちに届いている
データ(メツセージ)を読出すことができる。 また、コマンド13の待機機能を利用すれば、タ
スク間のデータ通信だけでなく、タスク間の同期
および相互排除を行なうことが可能である。な
お、タスク間の同期および相互排除において、メ
イル・ボツクスMBXに書込まれるデータはダミ
ーデータで、実際のタスク処理には使用しなくて
もよい。 2個のタスクが処理の都合上、実行順序を制御
しなければならない場合がある。例えば、一方の
タスクの処理が終了するまで他方のタスクの処理
を行なわず待たせる場合、コマンド12,コマンド
13を次のように利用してお互いの同期をとること
ができる。
理プログラムに有効なマルチ・タスク制御用機能
を備えたコンピユータ周辺デバイスに関するもの
である。 <従来技術> マイクロコンピユータ・システムにおいて、1
つのCPUによつて複数のタスクを同時に処理さ
せるためには、OS(オペレーテイング・システ
ム)によるマルチ・タスク制御が必要である。 従来、マルチ・タスク制御システムにおいて、
タスク中からデータ入出力を行なうためには、
I/O素子を別途外付けする必要があり、またタ
スクの制御はシステムOSのソフトウエアによつ
てサポートしなければならなかつた。そして、外
部事象によるタスクの制御を行なうためには、外
部割込みルーチンを設け、割込みルーチン中で外
部事象を持つことができないため、タスクをデー
タ受信持ちで待機状態にし、外部事象が発生した
とき、割込みルーチン中からデータ受信待ちのタ
スクにデータを送ることにより、各タスクを起動
する方式を採つている。従つて外部割込みに対す
るオーバーヘツドは非常に大きいものとなつてい
る。 <発明の目的> 本発明は、データ入出力とマルチ・タスク制御
機能を1つのデバイスに組込んだものであり、マ
ルチ・タスク制御システムに従来のI/O素子の
代わりに本デバイスを用いれば、従来のI/O素
子と同様、パラレル・データの入出力が可能であ
り、しかもマルチ・タスク制御のためのソフトウ
エアも不要にできる。また、タスク中で外部事象
待ちのコマンドを実行することにより、外部事象
発生までタスクを停止状態にし、発生と同時に、
マスタCPUによる実行中のタスクとは独立して
起動可能状態とすることができるため、外部割込
みに対するオーバーヘツドを単縮できる。 <実施例> 以下図面に従つて本発明の一実施例を説明す
る。 第1図はマイクロコンピユータ・システムとし
ての構成例を示す図である。素子(又は装置)1
は、本発明に係るマルチ・タスク制御を実現する
ための独立したマルチ・タスク・サポート・プロ
セツサとして構成されたものであり、他の周辺デ
バイスと同様、入出力素子の形態で供給される。
以下、本デバイスをマルチ・タスク制御用素子と
呼ぶ。マスタCPU2,プログラム・メモリROM
3,データ・メモリRAM4及び他のI/O等の
周辺入出力素子5は、周知のマイクロコンピユー
タ・システムとしても具備されるものであり、マ
ルチ・タスク制御用素子1とともにバス6を介し
て相互に接続される。プログラム・メモリ3は、
マルチ・タスク制御用素子1の初期化プログラム
と複数のタスクをそれぞれ独立してプログラムし
ている。 マルチ・タスク制御用素子1は、マスタCPU
2により実行されるこれら複数のタスクの管理を
マスタCPU2以外で行なう独立機能素子であり、
タスクのスケジユーリング機能(優先度順又は時
分割による実行タスクの切換え)、タスク間の同
期・通信機能(各タスク間でデータの送受信を行
ない、タスクの実行中断,実行再開を決定)、メ
モリ管理機能(各タスクの使用メモリ領域の重複
使用の禁止)、時計機能(内蔵タイマによる時刻
のセツト)等を有している。つまり、このマル
チ・タスク制御用素子1は、マルチ・タスクの制
御機能をコンピユータ・システムのOS自身のも
つ機能とせず、その機能を有する周辺デバイスと
した点に特色がある。 第2図はマルチ・タスク制御用素子1の内部構
成例を示すブロツク図である。 マルチ・タスク制御用素子1はマスタCPU2
からアクセス可能なレジスタ群を備えている。 コマンド・パラメータ・レジスタCPIOは、マ
スタCPU2からコマンド実行時に入力するパラ
メータや、実行後に出力するパラメータを保持す
る。コマンド/ステータス・レジスタCNSTは書
込み時にはコマンド書込み用として、読出し時に
は実行したコマンドの実行情報を格納するめのレ
ジスタとして機能する。新スタツク・ポインタ・
レジスタSPNは、タスク切換え情報としてこれ
から新らたに実行状態となるタスクのスタツク・
ポインタの値を出力するためのレジスタである。
また、旧スタツク・ポインタ・レジスタSPBは、
タスク切換え情報として今まで実行状態にあつた
タスクのスタツク・ポインタの値を入力するため
のレジスタである。 マスタ割込み制御レジスタMICは本素子1に
おける、マスタCPU2に対する割込み発生を制
御するためのレジスタで、割込みベクタ・レジス
タMIVは割込みベクタ値を書込む。データ・レ
ジスタP1D,P2D,P3Dはポート1,ポー
ト2およびポート3のデータ入出力のためのレジ
スタである。ポート1とポート2はデータ入出力
方向をプログラムによつてビツト単位で設定でき
る8ビツト入出力ポートであり、ポート3は1ビ
ツトの入力ポートである。ポート3はプログラム
によつてイベント入力(ポート3への入力信号の
遷移により停止状態のタスクをレデイー状態に移
す)にセツトすることが可能である。 以上のレジスタ群はマスタCPU2からアクセ
スされて、本素子1とマスタCPU2との間で情
報を相互に交換するために用いられる。データ・
バス・インターフエイスDBI,バス・タイミング
発生・制御回路BTGC,割込み制御回路INTC
は、マスタCPU2とのインターフエイス回路と
して備えられたものである。 タスク制御ブロツクTCB(1〜8)はタスクの
状態を保存するためのメモリ領域である。ここで
は8つまでのタスクを取扱うことが可能である。
各ブロツクは第3図に示されるように、タスク・
ステータス,タスク優先度,先にレデイーQ
に接続されているタスクの番号,後にレデイー
Qに接続されているタスクの番号,タスクが占
有しているワーク・メモリの先頭アドレス,そ
のサイズ,使用しているメイル・ボツクス番号
,そしてタスク実行中断時のスタツク・ポイン
タ値を格納する領域を有している。 メイル・ボツクスMBXはタスク間でデータの
授受を行なえるよう設けられたバツフア・メモリ
領域である。 メモリ・マツプMEMMAPはワーク・メモリ
を管理するためのメモリ領域であり、例えば第4
図のように32バイトから構成される。メモリ・マ
ツプMEMMAPにより256バイト単位のワーク・
メモリを管理することが可能である。ワーク・メ
モリを使用していないときその領域に対応するビ
ツトは“0”で、占有中であるときはそのビツト
が“1”にセツトされる。 タイマTMは時分割処理(同一優先度のタスク
を一定時間毎に実行させる処理)等のために、素
子1内に割込み信号を発生させるもので、システ
ムクロツク領域SCAは同時にタイマTMの出力に
より計数される時,分,秒等の時刻データを格納
するメモリ領域である。 内部演算制御回路CONTは論理演算ユニツト
(ALU),本素子1のプログラムを格納する
ROM,一時記憶用のRAMおよび各種制御のた
めのフラグ用レジスタ等を有してなる。 マスタCPU2からマルチ・タスク制御用素子
1へのアクセスは、実行中のタスクから発行され
るコマンドによつて行なわれ、マルチ・タスク制
御用素子1からマスタCPU2へのアクセスは、
マルチ・タスク制御用素子1の割込み信号発生に
基づいて行なわれる。第5図はコマンドの種類と
入力パラメータおよび出力パラメータを示す図で
ある。 基本的動作としては次のとおりである。なお、
タスク制御ブロツクTCBには各タスクの状態が
既に保存されているものとする。 マルチ・タスク制御用素子1は、実行可能状態
のタスクから優先度の一番高いタスクを選び出
し、登録されたそのタスクのスタツク・ポインタ
の値を新スタツク・ポインタ・レジスタSPNに
準備する。スタツク・ポインタの値を準備した
後、マルチ・タスク制御用素子1はマスタCPU
2に対し割込みを発生する。マスタCPU2は割
込み処理ルーチンを実行し、マルチ・タスク制御
用素子1にセツトされているスタツク・ポインタ
の値を自分のスタツク・ポインタにロードし、予
じめ書込まれていたレジスタの初期値をスタツク
からポツプしてレジスタを書換える。そしてマス
タCPU2の管理下において指定されたタスクを
実行する。 実行中のタスクからコマンド入力があるか、ま
たはタイマTMあるいはポート3への入力による
割込みがあるまで、マルチ・タスク制御用素子1
は待ち状態となる。ここで例えばコマンド入力が
あれば、マルチ・タスク制御用素子1はそのコマ
ンドを解析しコマンド処理を行なう。そして、こ
のコマンドがタスク切換え機能を含むものであれ
ば、次に切換えるべきタスクのスタツク・ポイン
タの値を新スタツク・ポインタ・レジスタSPN
にセツトし、マスタCPU2に対し割込みを発生
する。この割込みによつてマスタCPU2は現在
実行中のタスクの実行を停止し、次に実行すべき
タスクのスタツク・ポインタの値をマルチ・タス
ク制御用素子1から読出す。 以下フローチヤートを参照してさらに詳しく説
明する。 第6図はマルチ・タスク制御用素子1のメイン
ルーチンの動作を説明するフローチヤート、第7
図〜第21図は各コマンド0〜14による処理ルー
チンの動作を説明するフローチヤート、第22図
はタスク切換えルーチンの動作を説明するフロー
チヤート、第23図はポート3へのイベント入力
による割込み処理ルーチンの動作を説明するフロ
ーチヤート、第24図はタイマTMによる割込み
処理ルーチンの動作を説明するフローチヤートで
ある。 第6図において、システムに電源が投入される
と、本マルチ・タスク制御用素子1はリセツト動
作を行ない内部の各機能素子を初期化する(ステ
ツプ)。そして、マスタCPU2からコマンドが
コマンド/ステータス・レジスタCNSTに書込ま
れるのを待つ(ステツプ)。コマンドが書込ま
れると、各コマンド・コードに対応したコマンド
処理を行なう(ステツプ)。 コマンド0(コマンド名:INIT,第7図フロー
チヤート)は、マルチ・タスク制御用素子1の初
期化を行なうためのコマンドであり、マルチ・タ
スク制御用素子1がマスタCPU2に対して割込
みを発生するときにマスタCPU2へ出力するベ
クタ値、マルチ・タスク制御用素子1が管理する
ワーク・メモリ領域の先頭アドレスとその大き
さ、及びタスクの優先度を各タスクに対して登録
するためのコマンドである。 このコマンドが実行されると、入力データのエ
ラーを調査し(ステツプ)、もし入力データに
誤りがあれば、エラーコードをコマンド/ステー
タス・レジスタCNSTにセツトする(ステツプ
)。 入力データに誤りがなければ、コマンド・パラ
メータ・レジスタCPIOに送られたデータから、
割込みベクタ値を割込みベクタレジスタMIVに
書込み(ステツプ)、またワーク・メモリ領域
の先頭アドレスとその大きさのデータをもとにし
てメモリ・マツプMEMMAPを初期化する(ス
テツプ)。そして、書込まれたタスクの優先度
をもとにして各タスク制御ブロツクTCBを作成
する(ステツプ)。そして、優先度の高い順に
並べてレデイーQを構成する(ステツプ)。こ
のとき、タスク制御ブロツクTCB内の,に
よつて順序づけを行なう。生成後は正常終了コー
ドをコマンド/ステータス・レジスタCNSTにセ
ツトし(ステツプ)、内部演算制御回路CONT
のTSKCHGフラグをリセツトして(ステツプ
)、第6図のメインルーチンに戻る。 エラーコードをコマンド/ステータス・レジス
タCNSTにセツトした場合も同様にTSKCHGフ
ラグをリセツトしてメインルーチンに戻る。 コマンド1(コマンド名:TSTR,第8図フロ
ーチヤート)は、初期化したマルチ・タスク制御
用素子1を実行状態に移すためのコマンドであ
る。 このコマンド1では、コマンド0の処理が実行
済かどうかのチエツクを行ない(ステツプ)、
実行済の場合のみ、レデイーQの先頭に接続され
ているタスク(一番優先度の高いタスク)を実行
状態に移すためTSKCHGフラグ(内部演算制御
回路CONTの制御フラグ)をセツトして(ステ
ツプ)、第6図のメインルーチンに戻る。実行
済でない場合は、コマンド/ステータス・レジス
タCNSTにエラーコードをセツトし(ステツプ
)、メインルーチンに戻る。 以上のコマンド0,1およびマルチ・タスク制
御用素子1への書込み情報は、例えば第1図のプ
ログラム・メモリ3の初期化プログラムに予じめ
格納され、タスク内容に応じてプログラム変更が
可能であり、マルチ・タスク制御用素子1はこれ
により種々に初期化設定することができる。 コマンド2(コマンド名:TCRT,第9図タイ
ムチヤート)は初期設定の後、任意にタスクを生
成するためのコマンドであり、入力データとして
生成するタスクの番号およびその優先度が本素子
1のコマンド・パラメータ・レジスタCPIOに書
込まれる。 このコマンド2が実行されると、入力データに
エラーがないかの検査を行ない(ステツプ)、
エラーがあればコマンド/ステータス・レジスタ
CNSTにエラーコードを書込む(ステツプ)。
エラーがなければ、入力データで指定されたタス
クのタスク制御ブロツクTCBを生成する(ステ
ツプ)。 タスク制御ブロツクTCB中のタスク・ステー
タス(第3図参照)には次の4つのフラグが含
まれる。 RUNフラグはタスクが実行状態にあることを
示す。 READYフラグはタスクがレデイー状態にあつ
てレデイーQに接続されていることを示す。 PENDWフラグはメツセージ受信待と状態にあ
ることを示す。 SUSPENDフラグはタスクが停止状態にある
ことを示す。 上記タスク制御ブロツクTCBの生成時(ステ
ツプ)、同時にその中のREADYフラグをセツ
トする。 そして、タスクの優先度の高い順にレデイーQ
に再接続する(ステツプ)。次にコマンド/ス
テータス・レジスタCNSTに正常終了コードをセ
ツトし(ステツプ)、実行状態のタスクとレデ
イーQの先頭に接続されているタスクの優先度を
比較させるためのTSKCHGフラグをセツトして
(ステツプ)、第6図のメインルーチンに戻る。 コマンド3(コマンド名:TDEL,第10図タ
イムチヤート)は不要のタスクを消去するための
コマンドで、消去するタスクの番号を入力データ
として実行する。 入力データにエラーがないかの検査(ステツプ
)において、エラーがあればコマンド/ステー
タス・レジスタCNSTにエラーコードがセツトさ
れ(ステツプ)、第6図のメインルーチンに戻
る。 エラーがなければ、消去するタスクが占有して
いたワーク・メモリを解放するため、このタスク
のタスク制御ブロツクTCB中にある占有メモリ
先頭アドレスおよび占有メモリ・サイズを読
出し、このデータに基づいてメモリ・マツプ
MEMMAP上で対応した領域を“0”クリアす
る(ステツプ)。ついでこのタスクがレデイー
状態にあれば、消去するタスクのタスク制御ブロ
ツクTCBをレデイーQから切離し(ステツプ
)、このタスク制御ブロツクTCBのすべてをク
リアする(ステツプ〓〓)。終われば、コマンド/
ステータス・レジスタCNSTに正常終了コードを
セツトして(ステツプ〓〓)、メインルーチンに戻
る。 コマンド4(コマンド名:TRSM,第11図フ
ローチヤート)は、入力データで指定されたタス
ク番号を持つ待機または停止中のタスクをレデイ
ー状態(再起動可能状態)にするためのコマンド
である。タスク番号を入力データとして実行す
る。 コマンド4が実行されると、まず入力データに
エラーがないかの検査が行なわれ(ステツプ〓〓)、
エラーがあればコマンド/ステータス・レジスタ
CNSTにエラーコードを設定して(ステツプ〓〓)、
メインルーチンに戻る。 エラーがなければ、指定されたタスクの
PENDWフラグまたはSUSPENDフラグをリセ
ツトするとともにREADYフラグをセツトし、か
つこのタスク制御ブロツクTCBをタスクの優先
度の高い順序でレデイーQに接続する(ステツプ
〓〓)。そして、正常終了コードをコマンド/ステ
ータス・レジスタCNSTにセツトし(ステツプ
〓)、実行状態のタスクとレデイーQの先頭に接
続されているタスクの優先度を比較するため
TSKCHGフラグをセツトし(ステツプ)、メ
インルーチンに戻る。 コマンド5(コマンド名:TSPD,第12図フ
ローチヤート)は、入力データで指定されたタス
ク番号を持つ実行状態あるいはレデイー状態にあ
るタスクを停止状態にするためのコマンドであ
る。 このコマンド5が実行されると、入力データの
エラーを検査し、エラーがあればコマンド/ステ
ータス・レジスタCNSTにエラーコードを設定し
てメインルーチンに戻る(ステツプ,)。 エラーがなければ、まず、入力データによつ
て、停止状態になるタスクをポート3からの入力
信号(外部イベント)によりレデイー状態にする
(再起動)という指定がなされているかどうかの
チエツクを行なう(ステツプ〓〓)。外部イベント
の指定がなければステツプ〓〓の処理へスキツプす
る。指定がある場合は、他のタスクが既に外部イ
ベントを使用しているかどうかの検査を行ない
(ステツプ〓〓)、使用されていれば、コマンド/ス
テータス・レジスタCNSTにエラーコードをセツ
トして(ステツプ)メインルーチンに戻る。使
用されていなければ、ポート3の入力信号の遷移
による内部割込みをイネーブルにする(ステツプ
〓〓)。すなわち、本コマンド5の入力データ設定
により外部イベント起動の指定が可能である。 そして、スキツプした場合を含めて次に、その
タスク制御ブロツクTCB中のRUNフラグ(指定
したタスクが実行状態にある場合)または
READYフラグ(レデイー状態にある場合)をリ
セツトし、SUSPENDフラグをセツトする(ス
テツプ〓〓)。終われば、コマンド/ステータス・
レジスタCNSTに正常終了コードをセツトする
(ステツプ〓〓)。そして指定されたタスクがレデイ
ー状態にある場合を考慮して、このタスクをレデ
イーQから切離し、レデイーQに接続されている
タスク制御ブロツクTCBを再度優先度順になら
び換え(ステツプ〓〓)、実行状態のタスクとレデ
イーQの先頭に接続されているタスクの優先度を
比較するためのTSKCHGフラグをセツトして
(ステツプ〓〓)、メインルーチンに戻る。 コマンド6(コマンド名:TPRI,第13図フ
ローチヤート)は、入力データで指定された番号
のタスクの優先度を変更するコマンドである。 入力データにエラーがあるかの検査(ステツプ
〓〓)において、エラーがある場合はコマンド/ス
テータス・レジスタCNSTにエラーコードをセツ
トして(ステツプ〓〓)メインルーチンに戻る。 エラーがない場合、指定されたタスクのタスク
管理ブロツクTCB内の優先度(第3図参照)
を入力データの変更優先度の値に書換える(ステ
ツプ〓)。次に、レデイーQに接続されているタ
スク管理ブロツクTCBを優先度順にならび換え
(ステツプ〓)、コマンド/ステータス・レジスタ
CNSTに正常終了コードをセツトする(ステツプ
〓〓)。そして、実行状態のタスクとレデイーQの
先頭に接続されているタスクの優先度を比較する
ためにTSKCHGフラグをセツトして(ステツプ
〓〓)、メインルーチンに戻る。 コマンド7(コマンド名:TSLI,第14図フロ
ーチヤート)は、入力データで指定された優先度
を持つタスク群のマスタCPU占有時間を制限す
るためのコマンドである。すなわち、このコマン
ドは同一優先度のタスクの時分割処理を指定す
る。時分割処理は、指定した優先度より高い優先
度を持つレデイー状態のタスクが存在しない場合
に限り有効である。より高い優先度を持つレデイ
ー状態のタスクが存在すれば、そのタスクが実行
され時分割処理は無効となるが、高い優先度のタ
スクがなくなれば有効となる。 このコマンド7が実行されると、まず、入力デ
ータのエラーが検査される(ステツプ〓〓)。エラ
ーが検出された場合は、コマンド/ステータス・
レジスタCNSTにエラーコードがセツトされ(ス
テツプ〓〓)メインルーチンに戻る。 エラーが検出されなければ、入力データが時分
割処理をキヤンセルする指定であるのかどうかを
判定する(ステツプ〓〓)。キヤンセルの場合は、
内部演算制御回路CONT内にある時分割制御用
レジスタSLICNTおよびSLIPRIを“0”クリア
する(ステツプ〓〓,〓)。入力データが新たに時
分割処理の設定を指定する場合は、その入力デー
タからタスクのCPU占有時間を制御用レジスタ
SLICNTに設定し(ステツプ〓)、時分割処理を
行なうタスクの優先度をもう一つの制御用レジス
タSLIPRIに設定する(ステツプ〓〓)。そして最後
にコマンド/ステータス・レジスタCNSTに正常
終了コードをセツトして(ステツプ〓)メインル
ーチンに戻る。 コマンド8(コマンド名:CSET,第15図フ
ローチヤート)は、マルチ・タスク制御用素子1
内に設けられた時計に時刻を設定するためのコマ
ンドである。マスタCPU2から本素子1内のコ
マンド・パラメータ・レジスタCPIOに、入力デ
ータとして時、分,秒データを書込みコマンドを
実行する。 入力データのエラーが検査されて(ステツプ
〓〓)、エラーが検出された場合はコマンド/ステ
ータス・レジスタCNSTにエラーコードがセツト
されて(ステツプ〓)、メインルーチンに戻る。 エラーがなければ、システム・クロツク領域
SCAに時,分,秒のデータが移される(ステツ
プ)。そしてコマンド/ステータス・レジスタ
CNSTに正常終了コードをセツトして(ステツプ
〓〓)メインルーチンに戻る。この時計は後述する
タイマ割込みルーチンにより刻々計時される。 コマンド9(コマンド名:CGET,第16図フ
ローチヤート)は、上記の時計から現在の時刻を
読出すためのコマンドである。 このコマンド9が実行されると、システム・ク
ロツク領域SCAから時,分,秒のデータが、マ
スタCPU2からアクセス可能なコマンド・パラ
メータ・レジスタCPIOに移される。移した後は
コマンド/ステータス・レジスタCNSTに正常終
了コードをセツトして(ステツプ〓〓)メインルー
チンに戻る。 コマンド10(コマンド名:MALC,第17図フ
ローチヤート)は、マルチ・タスク制御用素子1
が管理しているワーク・メモリ領域の中から、コ
マンドを実行したタスクに対して要求されたサイ
ズのワーク・メモリの使用を許可するコマンドで
ある。コマンド・パラメータ・レジスタCPIOに
要求するワーク・メモリ数(100H単位)を書込
みコマンドを実行する。 コマンド10が実行されると、入力データのエラ
ー検出が行なわれる(ステツプ〓)。エラーが検
出されれば、コマンド/ステータス・レジスタ
CNSTにエラーコードをセツトして(ステツプ
〓)メインルーチンに戻る。 エラーが検出されなければ、メモリ・マツプ
MEMMAPを調査し、要求されたワーク・メモ
リが空いているかどうかのチエツクを行なう(ス
テツプ〓〓)。空き領域がなければコマンド/ステ
ータス・レジスタCNSTにメモリ占有不可コード
をセツトして(ステツプ〓〓)、メインルーチンに
戻る。空き領域が見つかれば、コマンドを実行し
たタスクが要求したサイズだけメモリ・マツプ
MEMMAP上の対応したビツトに“1”をセツ
トする(ステツプ〓)。そして、コマンドを実行
したタスクのタスク制御ブロツクTCB内の占有
メモリ先頭アドレスおよび占有メモリ・サイズ
の領域(第3図参照)にそれぞれの値を設定し
(ステツプ〓〓)、次にコマンド・パラメータ・レジ
スタCPIOに占有メモリ・先頭アドレスを書込む。
書込まれば、コマンド/ステータス・レジスタ
CNSTに正常終了コードをセツトし(ステツプ
〓〓)メインルーチンに戻る。 コマンド11(コマンド名:MREL,第18図フ
ローチヤート)は、占有していたワーク・メモリ
領域を開放するためのコマンドである。 コマンド11を実行したタスクがワーク・メモリ
を占有していなければ(ステツプ〓〓)、コマン
ド/ステータス・レジスタCNSTにエラーコード
をセツトして(ステツプ〓〓)メインルーチンに戻
る。 既にワーク・メモリが占有されていれば、コマ
ンドを実行したタスクのタスク制御ブロツク
TCB内に登録されている占有メモリ先頭アドレ
スおよび占有メモリ・サイズの領域の値を参
照し、メモリ・マツプMEMMAP上の対応した
ビツトを“0”にリセツトする(ステツプ〓)。
そして、タスク制御ブロツクTCB内の占有メモ
リ先頭アドレス及び占有メモリ・サイズの領
域をクリアする(ステツプ〓)。最後にコマン
ド/ステータス・レジスタCNSTに正常終了コー
ドをセツトして(ステツプ〓〓)、メインルーチン
に戻る。 上述のようにタスクからメモリを要求する場合
には、マルチ・タスク制御用素子1に対してコマ
ンド10(メモリ占有コマンド,MALC)を実行す
る。また、タスクが使用していたメモリが不要に
なり解放したい場合には、コマンド11(メモリ解
放コマンド,MREL)を実行する。 このようにマルチ・タスク制御用素子1は、こ
れらコマンド10,11によつて、予じて登録された
64Kバイトまでのワーク用メモリ領域を100Hバ
イト単位で使用中か否かを判断し、タスクから要
求されたサイズの空き領域を探し出して、タスク
に割付ける機能を有する。 この機能は、限られたメモリ空間を複数のタス
クで有効に利用するのに効果を発揮し、またお互
いのタスク間で同一メモリ領域を重複して使用す
ることを防止するのに役立つ。なお、マルチ・タ
スク制御用素子1へのワーク・メモリ領域の設定
は、マルチ・タスク制御用素子1の初期設定時
(コマンドOの実行時)に行なわれる。 コマンド12(コマンド名:PPOST,第19図
フローチヤート)は、本マルチ・タスク制御用素
子1内に設けられたメイルボツクスMBXと呼ば
れるメモリ領域に、データを送るためのコマンド
である。メイルボツクスMBXはこのコマンド12
を実行したタスクと別タスク(次に説明するコマ
ンド13実行)とのメツセージ中継点となる。5個
のメイルボツクスMBX1〜MBX5中の1個を
指定できる。コマンド・パラメータ・レジスタ
CPIOに使用するメイル・ボツクスMBXの番号,
および指定したメイル・ボツクスMBXへ送るデ
ータを書込み、コマンドを実行する。 コマンド12が実行されると、入力データのエラ
ーを検査し(ステツプ〓)、エラーが検出されれ
ばコマンド/ステータス・レジスタCNSTにエラ
ーコードをセツトして(ステツプ〓)メインルー
チンに戻る。 エラーが検出されなければ、送信データを指定
された番号のメイル・ボツクスMBXに書込む
(ステツプ〓〓)。そして次に、既にコマンド13が実
行され、コマンド12の実行によつてデータが指定
のメイル・ボツクスMBXに送られてくるのを待
つてくるタスクがあるかどうかを調査する(ステ
ツプ〓)。これはすべてのタスクのタスク制御ブ
ロツクTCB内のタスク・ステータ中の
PENDWフラグおよびメイル・ボツクス番号と
を参照して行なわれる。もし送信待ちのタスクが
ない場合はステツプ〓〓へスキツプする。送信待ち
のタスクがある場合(本実施例では1個のみを許
している)は、送信待ちのタスクのタスク制御ブ
ロツクTCB内のPENDWフラグをリセツト,ま
たREADYフラグをセツトし、レデイーQを優先
度順に接続しなおす(ステツプ〓〓)。 そして送信待ちのタスクがある場合、ない場合
共に、コマンド/ステータス・レジスタCNSTに
正常終了コードをセツト(ステツプ〓〓)、さらに
TSKCHGフラグをセツトして(ステツプ〓〓)メ
インルーチンに戻る。 コマンド13(コマンド名:PEND,第20図フ
ローチヤート)は別タスクより、指定したメイ
ル・ボツクスMBXを介してデータを受け取るコ
マンドである。コマンド・パラメータ・レジスタ
CPIOにデータを受け取るメイル・ボツクス
MBXの番号を書込みコマンドを実行する。コマ
ンド13が実行されると、まず入力データのエラー
検査が行なわれ(ステツプ〓〓)、エラーがあれば
コマンド/ステータス・レジスタCNSTにエラー
コードをセツトして(ステツプ〓〓)、メインルー
チンに戻る。 エラーが検出されなければ、指定したメイル・
ボツクスMBXにデータが既に書込まれているか
どうかチエツクする(ステツプ〓〓)。もし書込ま
れていなければ、RUNフラグをリセツト,
PENDWフラグをセツトし(ステツプ〓)、また
TSKCHGフラグをセツトする(ステツプ〓〓)。
そして次に、コマンド/ステータス・レジスタ
CNSTにデータ未着コードをセツトし(ステツプ
〓〓)、メインルーチンに戻る。既にデータが書込
まれていれば、コマンド・パラメータ・レジスタ
CPIOに指定したメイル・ボツクスMBXに書込
まれているデータを転送し(ステツプ〓〓)、コマ
ンド/ステータス・レジスタCNSTに正常終了コ
ードをセツトして(ステツプ〓)、メインルーチ
ンに戻る。 コマンド14(コマンド名:PMOD,第21図フ
ローチヤート)は、ポート1とポート2のデータ
入出力方向を設定するコマンドである。コマン
ド・パラメータ・レジスタCPIOにポート1とポ
ート2との入出力方向を指定するためのコードを
設定してコマンドを実行する。 コマンド・パラメータ・レジスタCPIOに設定
されたコードに基づきポート1とポート2の入出
力方向を指定し(ステツプ〓)、コマンド/ステ
ータス・レジスタCNSTに正常終了コードをセツ
トして(ステツプ〓)、メインルーチンに戻る。 タスクから発行された上記任意のコマンド0〜
14の処理ルーチンを実行し、第6図のメインルー
チンに戻ると、まずコマンド/ステータス・レジ
スタCNSTにエラーコードがセツトされているか
どうかの判定を行なう(ステツプ〓〓)。エラーコ
ードがセツトされていればステツプ〓〓へスキツプ
し、もしエラーコードがセツトされていなけれ
ば、次にTSKCHGフラグがセツトされているか
どうか判定する(ステツプ〓〓)。TSKCHGフラ
グが“0”であればステツプ〓〓へスキツプし、
“1”であればタスク切換えルーチンを実行する
(ステツプ〓〓、タスク切換えルーチンは第22図
のフローチヤートに詳しく述べられる)。ステツ
プ〓〓またはステツプ〓〓からスキツプして、あるい
はタスク切換えルーチン(ステツプ〓〓)が実行さ
れてメインルーチンに戻ると、次のコマンド受け
入れ基準を行ない(ステツプ〓〓)、TSKCHGフ
ラグをリセツトする(ステツプ〓〓)。そして、ス
テツプに戻り、次のコマンド受け入れ待ち状態
となる。 上記したようにコマンド処理ルーチンで
TSKCHGフラグがセツト(“1”)されれば、タ
スク切換ルーチンを実行する。第22図のフロー
チヤートにおいて、タスク切換えルーチンに入る
と、まずコマンド1(初期設定終了および実行開
始)の実行時かどうかのチエツクを行なう(ステ
ツプ〓〓)。 コマンド1の実行時であればステツプ 100 へ
スキツプし、以降の処理により、先にコマンド0
(初期設定)で登録したタスクの中から、レデイ
ー状態にありかつ優先度の最も高いタスクを実行
させるべくマスタCPU2に割込み信号を発生す
る。まず、レデイーQの先頭に接続されているタ
スクのタスク制御ブロツクTCBをレデイーQか
ら切離し(ステツプ 100 )、このタスク制御ブロ
ツクTCB内のタスク・スタツク・ポインタ
(第3図参照)の値を新スタツク・ポインタ・レ
ジスタSPNに書込む(ステツプ 101 )。そして
タスク制御ブロツクTCB内のタスク・ステータ
スにRUNフラグをセツトして(ステツプ102)、
マスタCPU2に対して割込み信号を発生す
る(ステツプ 102 )。 マスタCPU2は、この割込み信号に基づ
くマスタCPU2側のタスク切換え割込みルーチ
ンにより新しいタスクのスタツク・ポインタの値
を読込み、割込みルーチンのリターンと同時に、
マスタCPU2の管理下においてそのタスクを実
行する。 コマンド1の実行時以外では、タスクが実行状
態かどうか検査される(ステツプ〓〓)実行状態で
ない場合、ステツプ〓〓へスキツプし、旧スタツ
ク・ポインタ・レジスタSPBのデータを、前ま
で実行状態にあつたタスクのタスク制御ブロツク
TCB内のタスク・スタツク・ポインタ領域に
書込み、保存する。この後、ステツプ 100 〜
103 の処理を通して別のタスクを実行するため、
マルチ・タスク制御用素子1からマスタCPU2
に割込み信号を発生する。 タスクが実行状態(RUN状態)であれば、時
分割処理のタイム・アツプ時間かどうか検査され
る(ステツプ〓〓)。時分割処理指定のタスクがタ
イムアツプした時にはステツプ〓〓へスキツプす
る。このスキツプルーチンは後に説明する第24
図フローチヤートのタイマ割込み処理中でしか通
らない。 タイム・アツプ時でなければ、レデイーQに接
続されているタスクがあるかどうかの検査を行な
う(ステツプ〓〓)。なければ、すなわち、現在実
行状態のタスク以外に実行待ち(レデイー)状態
のタスクがなければ、第6図のメインルーチンに
戻る。レデイーQに接続されているタスクがあれ
ば、次に、実行状態のタスクの優先度とレデイー
Qの先頭に接続されているタスクの優先度とを比
較する(ステツプ〓〓)。実行状態のタスクの優先
度の方が高ければ、同じく第6図のメインルーチ
ンに戻る。ステツプ〓〓,〓〓でメインルーチンに戻
れば、割込み信号が発生されず、現在実行
中のタスクがそのまま実行を続行するととなる。 レデイーQの先頭に接続されているタスクの優
先度の方が高ければ、実行中のタスクのタスク制
御ブロツクTCBをレデイーQに接続するととも
に、RUNフラグをリセツトする(ステツプ〓〓)。
そして、旧スタツク・ポインタ・レジスタSPB
のデータをタスク・制御ブロツクTCBのタス
ク・スタツク・ポインタ領域に保存し(ステツ
プ〓〓)、以降のステツプ 100 〜 103 の処理を通
して割込みを発生させる。なお、ステツプ 100
〜 103 において、新しく実行状態となる別のタ
スクは、前述したようにレデイーQの先頭に接続
されているタスクで、コマンド実行等により最も
優先度が高くなつたタスクである。割込み信号
INTを発生した後は第6図のメインルーチンに
戻り、次のコマンド受け入れ準備を行なう(第6
図ステツプ〓〓)。 第23図,第24図は第6図のメインルーチン
に対する割込み処理ルーチンのフローチヤートで
ある。 第23図はポート3への入力による割込み処理
で、コマンド5(タスクの停止,第12図フロー
チヤート)によつて停止状態にあるタスクを外部
イベント起動するものである。 ポート3に入力されている信号の遷移によつて
このルーチンが起動される。このルーチンでは、
コマンド5で外部イベント起動を設定しているタ
スクのタスク制御ブロツクTCBを優先順でレデ
イーQに接続し(ステツプ 104 )、そのタスク制
御ブロツクTCB内のSUSPENDフラグをリセツ
ト,READYフラグをセツトする(ステツプ 105
)。すなわち、これによつて停止状態のタスク
が再起動可能状態となるわけで、これが終れば割
込み処理ルーチンからリターンする。 第24図はタイマによる割込み処理で、第2図
のタイマTMからの信号を内部割込み信号とし
て、これが一定時間単位で発生するとタイマ割込
み処理ルーチンに入る。 タイマTMから内部割込み信号が発生すると、
まず、システム・クロツク領域SCAに登録され
ている時計の値(時,分,秒のデータ)を進める
(ステツプ 106 )。次にコマンド7(タスクの時分
割処理の設定,第7図フローチヤート)で設定さ
れたレジスタSLIPRIに登録されている優先度と、
現在実行状態のタスクの優先度とを比較する(ス
テツプ 107 )。時分割処理は指定した優先度より
高いレデイー状態のタスクが存在しない場合に限
り有効である。より高い優先度を持つレデイー状
態のタスクが存在すれば、そのタスクが実行され
時分割処理は無効となるが、高い優先度のタスク
がなくなれば有効となる。上記ステツプ 107 の
比較は、レジスタSLIPRIに登録されている優先
度のタスクが実行中であるかどうか検査すること
と同等であり、時分割処理タスクが実行状態にな
い場合は直ちに割込み処理ルーチンからリターン
する。 レジスタSLIPRIに登録されている優先度と現
在実行状態のタスクの優先度と一致、つまり、現
在実行状態のタスクが時分割処理指定のタスクで
あれば、レジスタSLICNTで登録されている時
間が経過したかどうかの判定を行なう(ステツプ
108 )。経過していなければ、この割込み処理
ルーチンからリターンする。すなわち、マルチ・
タスク制御用素子1はメインルーチンに戻り次の
コマンド受け入れ待ち状態となり、マスタCPU
2は時分割処理指定の現在実行状態にあるタスク
を続けて実行する。 登録された時間が経過したときは、実行状態の
タスクのタスク制御ブロツクTCBをレデイーQ
の末尾に接続するとともに、RUNフラグをリセ
ツト,READYフラグをセツトし(ステツプ 109
)、第22図のタスク切換えルーチンをコール
する(ステツプ 110 )。 第22図フローチヤートにおいて、時分割処理
指定のタスクがタイム・アツプした場合は、ステ
ツプ〓〓からステツプ〓〓へスキツプする。そしてス
テツプ〓〓〜 103 の処理を行なう。これらによつ
て、前まで実行状態にあつたタスクのタスク・ス
タツク・ポインタ領域に旧スタツク・ポイン
タ・レジスタSPBのデータを保存する(ステツ
プ〓〓)とともに、時分割処理に指定された同じ優
先度を持つタスクのタスク制御ブロツクTCBを
レデイーQから切離し(ステツプ 100 )、このタ
スク制御ブロツクTCB内のタスク・スタツク・
ポインタ・レジスタSPNに書込む(ステツプ
101 )。そして最後にタスク・ステータスに
RUNフラグをセツトする(ステツプ 102 )。こ
うしたタスク切換えルーチンを行なつたのち割込
みからリターンする。マスタCPU2では上述し
たマルチ・タスク制御用素子1の動作により、時
分割処理に指定した別のタスクを実行することと
なる。 上述のように本実施例のマルチ・タスク制御用
素子1は同時に最大8個までのタスクをサポート
することができる。8個を越えるタスクをサポー
トさせるには、必要に応じてコマンド2(タスク
の生成),コマンド3(タスクの消去)によりタス
クを生成,消去し、タスクの入れ換えを行なえば
よい。そして、マルチ・タスク制御用素子1によ
り各タスクは優先度順にマスタCPU2の占有権
を割当てられる。また、コマンド7(タスクの時
分割処理の設定)により、同一優先度の複数のタ
スクを時分割方式でスケージユリングすることも
可能である。なお、各タスクの優先度はタスク生
成時に設定されるが、コマンド6(タスクの優先
度変更)によりマスタCPU2のプログラム実行
中にも変更可能である。 時分割処理の開始時、タスクの実行順序はコマ
ンド0(初期設定)またはコマンド2(タスクの生
成)により生成したタスクの順序に従う。タスク
実行中でコマンド7(タスクの時分割処理の設定)
を実行すれば、実行したタスクの優先度と時分割
指定優先度とが等しい場合には、実行した時点か
ら時分割処理が有効となる。 コマンド12(メツセージの送信),コマンド13
(メツセージの受信)により、マルチ・タスク制
御用素子1のメイル・ボツクスMBXを利用し
て、タスク間のデータ(メツセージ)の受授が行
なえる。 コマンド12を実行した際、実行したタスクより
も高い優先度を持つタスクが既にコマンド13を実
行して待機状態にあれば、タスク切換えにより待
機していたタスクが実行を開始する。低い優先度
をもつタスクがコマンド13により待機中であれ
ば、そのタスクはレデイー状態になるだけで、本
コマンド12を実行したタスクがそのまま実行を継
続する。コマンド12を実行した際、コマンド13が
実行されていなければ、データ(メツセージ)は
メイル・ボツクスMBXに保存され、同様にその
ままタスクの実行が継続される。 コマンド13を実行した際、既に指定したメイ
ル・ボツクスMBXにデータ(メツセージ)が届
いている場合には、そのタスクがコマンド・パラ
メータ・レジスタCPIOより、直ちに届いている
データ(メツセージ)を読出すことができる。 また、コマンド13の待機機能を利用すれば、タ
スク間のデータ通信だけでなく、タスク間の同期
および相互排除を行なうことが可能である。な
お、タスク間の同期および相互排除において、メ
イル・ボツクスMBXに書込まれるデータはダミ
ーデータで、実際のタスク処理には使用しなくて
もよい。 2個のタスクが処理の都合上、実行順序を制御
しなければならない場合がある。例えば、一方の
タスクの処理が終了するまで他方のタスクの処理
を行なわず待たせる場合、コマンド12,コマンド
13を次のように利用してお互いの同期をとること
ができる。
【表】
【表】
【表】
上述のようにしてタスク間の同期および相互排
除を行なうこともできる。 なお、本実施例におけるマルチ・タスク制御用
素子1はハードウエアを1個のLSI上に集積化し
たものであるが、適宜回路要素を組合せ、装置と
するようにして何ら差支えない。 <発明の効果> 以上のように本発明によるデバイスは、マル
チ・タスク制御システムにおいて、本デバイスを
パラレル・データ入出力素子として使用できると
ともに、本デバイスで並行してマルチ・タスク制
御を行なうことができ、システムのスペース・フ
アクタが向上し、またマスタCPU側のソフトウ
エアの負担を軽減できる。さらに、本デバイス内
に用意された外部事象待ちのコマンド及び一部入
力ポートを用いることにより、外部割込みに対し
て、即応してタスクを起動可能状態とすることが
でき、外部割込みに対すオーバーヘツドを単縮す
ることができる。
除を行なうこともできる。 なお、本実施例におけるマルチ・タスク制御用
素子1はハードウエアを1個のLSI上に集積化し
たものであるが、適宜回路要素を組合せ、装置と
するようにして何ら差支えない。 <発明の効果> 以上のように本発明によるデバイスは、マル
チ・タスク制御システムにおいて、本デバイスを
パラレル・データ入出力素子として使用できると
ともに、本デバイスで並行してマルチ・タスク制
御を行なうことができ、システムのスペース・フ
アクタが向上し、またマスタCPU側のソフトウ
エアの負担を軽減できる。さらに、本デバイス内
に用意された外部事象待ちのコマンド及び一部入
力ポートを用いることにより、外部割込みに対し
て、即応してタスクを起動可能状態とすることが
でき、外部割込みに対すオーバーヘツドを単縮す
ることができる。
第1図は本発明のデバイスを使用したシステム
構成例を示す図、第2図は本発明の一実施例にお
けるデバイスの内部構成例を示すブロツク図、第
3図は第2図のタスク制御ブロツクTCB領域を
説明する図、第4図は第2図のメモリ・マツプ
MEMMAP領域を説明する図、第5図は本デバ
イスで使用されるコマンドと入力パラメータおよ
び出力パラメータを説明する図、第6図は本デバ
イスのメインルーチンの動作を説明するフローチ
ヤート、第7図〜第21図は各コマンドによる処
理ルーチンの動作を説明するフローチヤート、第
22図はタスク切換ルーチンの動作を説明するフ
ローチヤート、第23図はイベント入力による割
込み処理ルーチンの動作を説明するフローチヤー
ト、第24図はタイマ割込み処理ルーチンの動作
を説明するフローチヤートである。 1……マルチ・タスク制御用素子、2……マス
タCPU、3……プログラム・メモリ、4……デ
ータ・メモリ、INTC……割込み制御回路、
……割込み信号、TCB……タスク制御ブロツク、
CONT……内部演算制御回路、MIV……マスタ
割込み制御レジスタ、CPIO……コマンド・パラ
メータ・レジスタ、CNST……コマンド/ステー
タス・レジスタ、SPN……新スタツク・ポイン
タ・レジスタ、SPB……旧スタツク・ポイン
タ・レジスタ、P1D,P2D,P3D……入出
力ポート用データ・レジスタ。
構成例を示す図、第2図は本発明の一実施例にお
けるデバイスの内部構成例を示すブロツク図、第
3図は第2図のタスク制御ブロツクTCB領域を
説明する図、第4図は第2図のメモリ・マツプ
MEMMAP領域を説明する図、第5図は本デバ
イスで使用されるコマンドと入力パラメータおよ
び出力パラメータを説明する図、第6図は本デバ
イスのメインルーチンの動作を説明するフローチ
ヤート、第7図〜第21図は各コマンドによる処
理ルーチンの動作を説明するフローチヤート、第
22図はタスク切換ルーチンの動作を説明するフ
ローチヤート、第23図はイベント入力による割
込み処理ルーチンの動作を説明するフローチヤー
ト、第24図はタイマ割込み処理ルーチンの動作
を説明するフローチヤートである。 1……マルチ・タスク制御用素子、2……マス
タCPU、3……プログラム・メモリ、4……デ
ータ・メモリ、INTC……割込み制御回路、
……割込み信号、TCB……タスク制御ブロツク、
CONT……内部演算制御回路、MIV……マスタ
割込み制御レジスタ、CPIO……コマンド・パラ
メータ・レジスタ、CNST……コマンド/ステー
タス・レジスタ、SPN……新スタツク・ポイン
タ・レジスタ、SPB……旧スタツク・ポイン
タ・レジスタ、P1D,P2D,P3D……入出
力ポート用データ・レジスタ。
Claims (1)
- 1 単一のマスタCPUにより時分割実行される
複数のタスクの管理を上記マスタCPU以外で行
なうデバイスであり、上記マスタCPUにより実
行中のタスクからコマンドを受け入れ、該コマン
ドに従つて上記マスタCPUに対し割込みを発生
し上記タスクの実行を制御する手段と、上記コマ
ンドによるタスク制御機能と独立してデータの入
出力が可能なパラレル入出力ポート手段とを備え
てなることを特徴とするマルチ・タスク制御用デ
バイス。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP58228123A JPS60118939A (ja) | 1983-11-30 | 1983-11-30 | マルチ・タスク制御用デバイス |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP58228123A JPS60118939A (ja) | 1983-11-30 | 1983-11-30 | マルチ・タスク制御用デバイス |
Publications (2)
Publication Number | Publication Date |
---|---|
JPS60118939A JPS60118939A (ja) | 1985-06-26 |
JPH0348538B2 true JPH0348538B2 (ja) | 1991-07-24 |
Family
ID=16871568
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP58228123A Granted JPS60118939A (ja) | 1983-11-30 | 1983-11-30 | マルチ・タスク制御用デバイス |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPS60118939A (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7380406B2 (ja) * | 2020-04-28 | 2023-11-15 | 株式会社デンソー | リアルタイム演算処理装置 |
JP7338548B2 (ja) * | 2020-04-28 | 2023-09-05 | 株式会社デンソー | リアルタイム演算処理装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5716950U (ja) * | 1980-07-03 | 1982-01-28 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS57131580U (ja) * | 1981-02-06 | 1982-08-16 |
-
1983
- 1983-11-30 JP JP58228123A patent/JPS60118939A/ja active Granted
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5716950U (ja) * | 1980-07-03 | 1982-01-28 |
Also Published As
Publication number | Publication date |
---|---|
JPS60118939A (ja) | 1985-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5168566A (en) | Multi-task control device for central processor task execution control provided as a peripheral device and capable of prioritizing and timesharing the tasks | |
JP2002533807A (ja) | 割込み/ソフトウエア制御スレッド処理 | |
JPS6031648A (ja) | マルチ・タスク制御方法 | |
US6769121B1 (en) | Program execution device and process migrating method thereof and storage medium which stores process migration control program | |
JP3113841B2 (ja) | 並列トランザクション処理システム | |
JPH09311839A (ja) | データ共用方式 | |
CA1304513C (en) | Multiple i/o bus virtual broadcast of programmed i/o instructions | |
EP0240616B1 (en) | Method to test and set data in a record on disk in one atomic input/output operation | |
JP2821345B2 (ja) | 非同期i/o制御方式 | |
EP0285634B1 (en) | Method to execute two instruction sequences in an order determined in advance | |
JPH0376500B2 (ja) | ||
US6209001B1 (en) | Back-up system capable of performing back-up operation at optional time | |
JPH0348538B2 (ja) | ||
JPH0376499B2 (ja) | ||
JPH0376497B2 (ja) | ||
JPH0376498B2 (ja) | ||
JPS63305445A (ja) | 電源切断時のデ−タ書込み方式 | |
JPH0519179B2 (ja) | ||
JPS60163133A (ja) | マルチ・タスク制御素子 | |
JPS60114942A (ja) | マルチ・タスク制御用デバイス | |
JP2998721B2 (ja) | 並列処理プログラムとコプロセッサとの間の排他制御方法およびその排他制御機能を有する計算システム | |
JPS60215249A (ja) | マルチ・タスク制御素子を内蔵したコンピユ−タ周辺装置 | |
JPS5965306A (ja) | シ−ケンス制御装置 | |
JP2571260B2 (ja) | 論理時計による動作環境選択処理方式 | |
JPH07111711B2 (ja) | 処理終了割込制御システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |