JP3595028B2 - リアルタイムosの処理方法 - Google Patents
リアルタイムosの処理方法 Download PDFInfo
- Publication number
- JP3595028B2 JP3595028B2 JP15353795A JP15353795A JP3595028B2 JP 3595028 B2 JP3595028 B2 JP 3595028B2 JP 15353795 A JP15353795 A JP 15353795A JP 15353795 A JP15353795 A JP 15353795A JP 3595028 B2 JP3595028 B2 JP 3595028B2
- Authority
- JP
- Japan
- Prior art keywords
- window
- interrupt
- register
- processing
- windows
- 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
Links
Images
Description
【産業上の利用分野】
本発明はレジスタウィンドを備えたマイクロプロセッサにおけるリアルタイムOSの処理方法である。
【0002】
近年,多数のレジスタを一定数のグループに分割して,一つのウィンドウにおいて所定数のレジスタを使用し,ウィンドウを切替えると,前のウィンドウで使用した一部のレジスタを次のウィンドウのレジスタの一部として使用(オーバラップという)するレジスタウィンドウ方式が知られている。このレジスタウィンドウ方式では,一つのタスクによる動作中に関数の呼び出しによりウィンドウが順次切替えられ,復帰動作により逆方向に切替えられて一定個数のウィンドウを越えると,オーバフローやアンダーフローが生じて,それぞれ退避や復元の処理が行われる。またタスクが切替えられたり,割り込みが発生すると,全てのウィンドウレジスタを退避(保存)して新たなタスクまたは割り込み先のウィンドウレジスタとして使用可能にする。
【0003】
このようなレジスタウィンドウを備えたマイクロプロセッサを,交換機等のリアルタイム処理を必要とするシステムにおいて利用することができるが,レジスタの退避動作や復元動作に時間がかかるため効率が悪くその改善が望まれている。
【0004】
【従来の技術】
図12は従来のレジスタウィンドウのレジスタの構成例である。
レジスタウィンドウを用いたアーキテクチャでは,ウィンドウと呼ばれるレジスタグループのセットに分割されたレジスタファイルモデルを使っている。図12に示す構成例により説明すると,一つのウィンドウは,それぞれ8個のレジスタを1グループとして,レジスタ番号r0〜r7のグローバルレジスタ(GLOBALS),レジスタ番号r8〜r15のアウトレジスタ(OUTS),レジスタ番号r16〜r23のローカルレジスタ(LOCALS),レジスタ番号r24〜r31のインレジスタ(INS)の合計4グループで構成され,各ウィンドウに対し共通の汎用レジスタでありグローバルレジスタを除いた3つのグループは一つのウィンドウのレジスタセットを構成する。
【0005】
図13は各レジスタグループの説明図である。図に示すように,グローバルレジスタ(global:r0〜r7に対応) はg0〜g7で表す各レジスタで構成され,アウトレジスタ(out :r8〜r15 に対応)はo0〜o5,sp(スタックポインタ:o6),o7(temp)の各レジスタで構成され,ローカルレジスタ(local :r16 〜r23 に対応)はl0〜l7の各レジスタで構成され,インレジスタ(in:r24 〜r31)はi0〜i5,FP(フレームポインタ:i6),i7(return) の各レジスタで構成されている。
【0006】
このレジスタウィンドウ方式によれば,8個のウィンドウが設けられ,処理を行うウィンドウはカレントウィンドウ(CW)であり,プロセッサステータスレジスタ(PSR)の中の5ビットであるカレントウィンドウポインタ(CWP)を設定することにより選択される。一つのウィンドウに割り当てられたレジスタセットの中で,グローバルレジスタは各ウィンドウに対し共通の汎用レジスタであり,ローカルレジスタはそのウィンドウに固有であるが,他のアウトレジスタ及びインレジスタの一方は隣接する片方のウィンドウと共用(オーバラップで使用)される。各ウィンドウ内でレジスタr8〜r31の24個のレジスタは,プログラムによりレジスタ番号を用いてアクセスすることができる。
【0007】
すなわち,図12に示すように,カレントウィンドウポインタ(CWP)により指示される現在のウィンドウにおける処理において,プロシジャ呼び出し(関数呼ぶコール)が発生すると,セーブ命令が実行され,次のウィンドウ(Next Window)に移行し,カレントウィンドウポインタは(CWP−1)となる。この時,元のカレントウィンドウポインタ(CWP)のアウトレジスタは,次のウィンドウ(CWP−1)のインレジスタとなり,呼び出し元から呼び出し先へ渡すパラメータが格納される。なお,グローバルレジスタの内容も同様に呼び出し先へ渡される。上記の呼び出し元のアウトレジスタが呼び出し先のインレジスタとなることを,レジスタのオーバラップと称され,これによりプロシジャ呼び出し時のパラメータの受け渡しを効率的に行うことができる。
【0008】
逆に,呼び出されたプロシジャが呼出し元へリターンする場合,結果を呼び出し元へ返す準備ができると,それらの結果をインレジスタに移して,リターンが発生すると,リストア(Restore)命令が実行され, CWPが増大されCWP+1となり,前のウィンドウ(Previous Window)に戻り,呼び出されたプロシジャのレジスタウィンドウの中のインレジスタは,オーバラップにより呼び出し元のプロシジャではアウトレジスタとなり,ここからコールにより実行された結果を参照することができる。
【0009】
呼び出し元のプロシジャがアウトレジスタとグローバルレジスタの許容量以上のパラメータを渡さなければならない時は,追加パラメータはメモリ上のスタックを使って渡される。スタックの位置を表すスタックポインタ(SP)は,カレントウィンドウ内のアトウレジスタ(図13のレジスタr14)に保持される。
【0010】
このように,カレントウィンドウポインタを1オフセットずらすと,レジスタは16(16個のレジスタ分)だけアドレッシングされる。従って,レジスタグループの共用により,8つのウィンドウを使用する場合,16×8+8(グローバルレジスタ)=136のレジスタを使用する。
【0011】
図14に8個のウィンドウを使用する場合のウィンドウのシフトの概念図を示す。レジスタウィンドウを8個使用する時,0〜7の番号の各ウィンドウを使用することが可能である。この中の一つのウィンドウがカレントウィンドウポインタ(CWP)により指定され,動作中にプロシジャ呼び出し(CALL)が発生すると,SAVEが実行され上記図14に示すように時計方向にシフトし,更に順番にSAVE動作が行われる。このように多数のレジスタファイルが存在しても,レジスタファイルは概念的に円形ファイルであるため,スタックが回転して,先頭の古いウィンドウが上書きされる可能性があるが,これを防止するために,ウィンドウ無効(Invalid)マスク(WIM)レジスタを設けている。
【0012】
ウィンドウ管理は,カレントウィンドウポインタ(CWP)が,WIMレジスタでマークした値になると,オーバフロートラップを発生する。その場合,少なくとも最も古いウィンドウをメモリ退避(セーブ)する。退避したウィンドウは次の呼び出しにより使用される。なお,8個のウィンドウの内1つのウィンドウ(WIMで設定したウィンドウ7)はトラップ操作部(トラップハンドラ)により常時使用できるように空けられている。こうしてプログラムからは無限にウィンドウがあるように見える。また,逆にリターンによるリストア命令の動作が実行され,図14の各ウィンドウが反時計回りで順番に移行すると,WIMレジスタの値になった場合アンダーフローが発生し,この時はメモリに退避していたレジスタファイルをウィンドウに復元する。
【0013】
次に,オーバフローやアンダーフローによるトラップだけでなく,マルチタスク(またはマルチプロセス)のリアルタイムOSであるため,タスクを切替える時には,現在のタスクで使用している全てのレジスタウィンドウ(1乃至多数の各場合がある)を退避して,切替え先のタスクにより各ウィンドウを使用する。切替え先のタスクから元のタスクに戻る場合には,退避された全てのレジスタウィンドウの内容を復元(RESTORE)する必要がある。更に,割込みが発生した場合にも,タスク切替と同様に全てのレジスタウィンドウを退避して割込み処理を行い,割込み処理の終了により元の処理に復元する処理を行う必要がある。従来の方式では,レジスタウィンドウ内容の退避,復元処理に要する時間が問題になる。
【0014】
図15はシステムコールのソフトウェア構造である。
従来のシステムコールはアプリケーションがOSの機能を利用する手段として提供される。この場合,その実行に要する時間は可能な限り少ないことが要求される。基本OS上でプログラムが動作している状態でソフトウェアを階層分けすると,図15に示すように,アプリケーション90,UOS91(ユーザ側のプログラムとリンクされOS本体側とのインタフェースをとるOS),KOS92(OS本体側のモジュールであり,ユーザ側のUOS91からのシステムコールのインタフェースをとるOS),システムコール本体処理を行う本体93(カーネルとも呼ばれる)の4層からなっている。
【0015】
アプリケーション90は,システムコールを利用するもので,タスクや割込みハンドラに相当し,UOS91はユーザOSインタフェースであり,アプリケーションとKOS92の間にあり,異なったロードモジュールなので呼出し番地を知ることができないためにトラップで呼び出されるシステムコールを,アプリケーション90から関数形式で実行できる手段を提供する。これは,アプリケーション90にリンクしてその1部として利用される。KOS92は,OSでのシステムコール受付処理を行い,システムコールの種類を判定して実際に処理を行う本体(またはカーネル)93を呼び出す。本体93は,システムコールの実際の処理を行う部分である。
【0016】
図16は従来のシステムコールの処理の流れを示し,上記図15に示す構造により実行される。これによれば,アプリケーション90でシステムコールAが発生すると,UOS91のシステムコールA処理部が動作し,コンパイラによりSAVE命令が実行され,最初の(1) でレジスタウィンドウを1段進め,(2) でパラメータを設定し,(3) でシステムコール番号を設定し,(4)でトラップ(システムコール)が発生する。これによりKOS92のシステムコール受付部が動作し,(1) 〜(3) の処理が行われて, システムコールAが呼び出され,本体93のシステムコールA本体の処理が実行される。すなわち,(1) でレジスタウィンドウを1段進め,(2) でシステムコール処理を行い,(3)でリターンを行い,KOS92へ戻り,以下図16に示すようにKOS92,UOS91のそれぞれでリターンを行ってアプリケーション90へ戻る。
【0017】
この図16に示すシステムコールの処理方法では,レジスタウィンドウという環状のレジスタにより,関数呼び出しのパラメータの受け渡しを効率的に行うことができ,関数呼出しに要する時間を少なくすることができるが,タスク切替時に保存,復元する処理が増えてしまい,タスク切替に要する時間が長くなる。また,ウィンドウオーバフローも起き易くなる。
【0018】
次に上記の従来のレジスタウィンドウ方式では,割込みが発生した場合,その時の情報はカレントウィンドウのレジスタに格納されているが,その内容を保存したり,復帰する動作はソフトウェアにより処理していたが,割込みが繰り返されると,ソフトウェアへの負担が増大していた。
【0019】
図17は命令を書替えて走行する処理の従来例の説明図である。
図17には,リアルタイムOSの処理システムにおいて,命令を書替えて走行する場合のユーザプログラムとOSの処理が示されている。
【0020】
図17において,ユーザプログラムが命令1,命令2である時に,OSが命令2の退避と命令2をシステムコールBに書替える処理を行う(この時,命令1は関係ない)。これにより命令2はシステムコールBに書替えられているため,システムコールBがOSにより実行され,終了後,退避されていた命令2が復元される。この処理の過程において,命令2をシステムコールBに書き替えた後にシステムの障害等により,プログラムが正常に走行できない状態になると,元の命令を正常に実行できない可能性がある。
【0021】
【発明が解決しようとする課題】
(1) リアルタイム処理装置においては,OS(オペレーティングシステム)の処理速度が重要であるが,上記したレジスタウィンドウ方式を使用したマイクロプロセッサ上で動作する従来のリアルタイムOSでは,関数呼び出しや復帰動作によりオーバフローやアンダーフローが発生するとメモリへの退避,復元の処理が頻繁に行われるため,オーバヘッドが増大して,実行処理速度を低下させるという問題があった。同様に,割り込み発生やタスク切替え時には,レジスタウィンドウの使用数は特別に制限せず,割込み発生時またはタスク切替時には単純に,使用中の全レジスタウィンドウをメモリに退避していた。このため,割込みやタスク切替による退避や復元の処理でオーバヘッドが増大していた。
【0022】
(2) 従来のレジスタウィンドウ方式の割込みの処理では,割込み発生時の退避と復帰の処理が複雑な処理を要し,定期起動の割込み等によるレジスタウィンドウの使用により時間を要していた。
【0023】
(3) 次に上記従来のシステムコール処理方式(図15,図16参照)によれば,システムコールにより,UOSにおいてレジスタウィンドウを新たに使用し,更に本体の処理でもレジスタウィンドウが1段進められる。その場合,ウィンドウ切替による保存・復元するウィンドウ数が増えて,タスク切替の処理時間が長くなり,オーバフローが起き易くなるという問題があった。
【0024】
(4) また,従来の命令を書替えて走行するシステムの処理方法(図17参照)では,命令を書替えた後のシステム障害等に対し元のプログラムへの復元ができない可能性があるという問題があった。
【0025】
本発明は上記の従来の問題を解決するもので,交換機等のリアルタイム処理を必要とするシステムのレジスタウィンドウ方式を使用した処理装置において,レジスタウィンドウを効率良く使用して実行処理速度を向上することができるリアルタイム処理装置を提供することを目的とする。また,本発明は割込み発生時の復帰点や情報を退避したスタックの情報を効率的に管理することを目的とする。更に,アプリケーションからのシステムコール発生時の処理におけるレジスタウィンドウの切替数を削減して処理時間を短縮することを目的する。また,命令の書替え後に,前状態に戻す前に装置の異常等が発生しても命令を書替える必要性のある装置にプログラム復元を行うことができること等を目的とする。
【0026】
【課題を解決するための手段】
図1は本発明の第1の原理説明図,図2は本発明の第2の原理説明図である。図1にはマイクロプロセッサ等のリアルタイム処理を行うレジスタウィンドウ方式の処理装置における,本発明によるレジスタウィンドウの制御方式の原理が示され,図1において,1は環状のレジスタウィンドウを表し,この例では#0〜#7の合計8個のウィンドウで構成され,各ウィンドウは従来例と同様にインレジスタ,ローカルレジスタ,アウトレジスタの3つのグループで構成され,各グループのウィンドウレジスタは8個のレジスタで構成され,一つのウィンドウに対し24個のウィンドウレジスタが設けられ,インレジスタとアウトレジスタは,前,後のウィンドウに対しオーバラップする。また,グローバルレジスタは,全てのウィンドウにより共用される。
【0027】
2aはOS側で使用するレジスタウィンドウの範囲,2bはアプリケーションプログラム(以下,単にアプリケーションという)側で使用するレジスタウィンドウの範囲を表し,3aはOS側の境界を越えたウィンドウ位置(番号)が設定された第1ウィンドウ無効マスク(第1WIMで表示),3bはアプリケーション側の境界を越えたウィンドウ位置(番号)が設定された第2ウィンドウ無効マスク(第2WIMで表示),4は現在のウィンドウ位置を表すカレントウィンドウポインタ(CWPで表示)である。
【0028】
図2において,20は割込み制御ブロック(ICBで表示:Interrupt Control Block)であり,21〜27の各領域により構成され,21は次のICBの位置を表す次のICBへのポインタを表し,22はプロセッサ割込みレベルの情報,23はカレントウィンドウ(CW)のローカルレジスタの一部,24はカレントウィンドウのインレジスタの一部,25はカレントウィンドウのアウトレジスタの一部,26は外部割込み番号,27はシステムコール作業域である。
【0029】
本発明の第1の原理は環状のレジスタウィンドウを,アプリケーションプログラムが使用するウィンドウの範囲を制限するか,オペレーティングシステム(OS)が使用するウィンドウの範囲を制限するものである。また,アプリケーションプログラムまたはOSで使用するウィンドウの個数を一定にしてその範囲を固定化せずに,可変にするものである。また,本発明の第2の原理は割込み発生時に,割込み処理を起動する前に割込み復帰点や,スタックに関する情報を割込み処理により破壊されないように管理ブロックのキューを設けて高速なリアルタイム処理を行うものである。
【0030】
【作用】
図1において,最初にOS側で使用するレジスタウィンドウとアプリケーションプログラムで使用するレジスタウィンドウの位置をそれぞれ固定して制限する場合について説明する。
【0031】
OS側で使用するレジスタウィンドウを#0〜#3とし,アプリケーションプログラム側で使用するレジスタウィンドウの範囲は#4〜#7とする。そのため,第1ウィンドウ無効マスク3aに“0”を設定し,第2ウィンドウ無効マスク3bに“4”を設定する。なお,現在処理を行っているウィンドウの番号(ポインタ)は,カレントウィンドウポインタ4により示される。
【0032】
OS側のウィンドウは,OS内での処理により#3から#0へ順次,切替えられる。但し,#0は常に割込み処理(トラップック処理)のために残すため,カレントウィンドウポインタ4の値が第1ウィンドウ無効マスク3aに設定された値(0)になるとオーバフローとなり,逆に復帰(RETURN)命令により,カレントウィンドウポインタ4の番号が増大して第2ウィンドウ無効マスク3bに設定された値(4)と一致するとアンダーフロー割込みを発生する。
【0033】
アプリケーションプログラム側のウィンドウ2bについても,OS側と同様に,ウィンドウ#7〜#4の中の#7〜#5の3つのウィンドウを通常の動作で使用し,呼び出し(CALL)命令が順番に発生して#7,#6,#5とウィンドウが切替えられ,#4になるとオーバフローを生じ,逆に復帰(RETURN)命令が実行され,カレントウィンドウポインタ4の番号が増加して第1ウィンドウ無効マスク3aの値(=0)と一致するとアンダーフロー割込みを発生する。
【0034】
このような構成により,アプリケーション側では最大3つのウィンドウレジスタを使用(それ以上は,メモリに退避)することにより,オーバフロー発生時に退避するウィンドウ数を制限でき,OS側は常に一定数のウィンドウを確保することができる。
【0035】
次に,OS側で使用するレジスタウィンドウとアプリケーション側で使用するレジスタウィンドウの個数を一定とするが,その範囲を可変にする場合について説明する。すなわち,最初に,第1ウィンドウ無効マスク3a,第2ウィンドウ無効マスク3bに対し,上記の固定の場合と同様にそれぞれ数値“0”,“4”を設定する。この後,OS側でオーバフローが発生した場合には,第1及び第2のウィンドウ無効マスク3a,3bを1つづつずらして設定する。すなわち,1つづれると,第1,第2のウィンドウ無効マスク3a,3bを“7”,“3”に設定する。
【0036】
更に,OS側で使用するレジスタウィンドウとアプリケーション側で使用するレジスタウィンドウの中で,一方だけを制限して,他方は制限を加えないようにすることができる。OS側で使用するウィンドウに制限を加えない場合について説明する。この場合,アプリケーション側のウィンドウ数を3個として,第2ウィンドウ無効マスク3bに“4”を設定し,OS側のウィンドウを#3から使用を開始して,3つの関数を呼び出し(CALL)すると,オーバフロー(#0に達する)が発生する。この時,アプリケーションの1つのウィンドウ(#7)または,使用している全ウィンドウ(#7から#5までの範囲)をメモリ上のスタックへ退避する。このようにして,OS側のウィンドウ数に対しては制限を加えないようにする。同様の原理により,OS側のウィンドウ数を制限してアプリケーション側のウィンドウ数に制限を加えないようにすることができる。
【0037】
次に図2の構成において,図示されない割込み管理部で割込み動作が開始すると,発生した割込み毎に,割込み制御ブロック(ICB)20のポインタを得て,新たな割込み制御ブロックを得てそれをICBキューに登録し,実行中の割込みを管理する。割込みがネストした時には,新しい割込みのICBを先頭に追加し,以前の割込みのICBはその後に接続される。
【0038】
【実施例】
図3は本発明が実施される処理装置のブロック構成図である。
図3において,30はレジスタウィンドウ制御によりリアルタイム処理を行う交換機等の処理装置(CPU及びメモリ),31はオペレーティングシステム部(OS部),32はアプリケーション(ユーザ)プログラムを実行するアプリケーション部,33はカレントウィンドウポインタ(CWP)33a,第1ウィンドウ無効マスク(WIM)33b,第2ウィンドウ無効マスク33cを格納する各レジスタ,34は8個のウィンドウを構成するためのレジスタ群,35はICB(割込み制御ブロック),36はメモリでありオーバフロー,アンダーフロー,割込み動作等によりレジスタウィンドウの内容やパラメータが退避されるスタックを備えるメモリである。
【0039】
この構成において,OS側の処理において使用するウィンドウを上記図1に示すように,OS部とアプリケーション部により使用するウィンドウの領域を固定(第1WIM及び第2WIMを固定)する場合の動作を説明する。この場合,OS側で使用するウィンドウのオーバフローを生じさせる第1WIM33b(図3)に「0」,アプリケーション側で使用するウィンドウのオーバフローを生じさせる第2WIM33c(図3)に「4」を設定する。
【0040】
この場合,OS側の処理においてウィンドウを3,2,1と使用して,ウィンドウが0になると第1WIM33bの設定値と一致してオーバフロートラップが発生し,アプリケーション(ユーザ)側の処理において,ウィンドウを7,6,5と使用してウィンドウが第2WIM33cと一致してオーバフロートラップが発生する。
【0041】
図4は範囲固定時のオーバフロー発生の処理フローを示す図である。
使用ウィンドウの2つの範囲を固定した時にオーバフローが発生すると,走行プログラムがOS側かアプリケーション側かを判別し(図4のS1),OSのプログラムである場合はウィンドウ3,2,1をメモリのスタック36(図3)に保存して(図4のS2),CWP33a(図3)を「3」に戻し(図4のS3),元の処理に復帰する。また,アプリケーション(ユーザ)プログラムである場合は,ウィンドウ7,6,5を保存し(図4のS4),CWP33aを「7」に戻して(同S5),元のアプリケーションに復帰する。
【0042】
次にアンダーフローの場合は,処理フローは図示省略されているが基本的には図4に示すフローの逆となる。すなわち,アプリケーションプログラムの例で説明すると,アプリケーションプログラムが5,6,7と逆行(RETURN)して第2WIM33cの数値(0)と一致してアンダーフローが発生すると,ウィンドウ7,6,5をメモリのスタックから復元し,CWP33aを「5」に戻す処理を行う。OS側の場合にも同様の処理によりウィンドウ3,2,1をメモリのスタックから復元し,CWP33aを「1」に戻す。
【0043】
次にOS側の処理で使用するウィンドウの個数と,アプリケーション側の処理で使用するウィンドウの個数を一定とするが,使用するウィンドウの範囲を可変としてシフトする場合(第1WIM及び第2WIMを固定しない場合)について説明する。
【0044】
この場合も最初は上記図1と同様に,OS側で使用するウィンドウのオーバフローを生じさせる第1WIM33bに「0」,アプリケーション側で使用するウィンドウのオーバフローを生じさせる第2WIM33cに「4」を設定する。
【0045】
この状態でOS側の処理においてウィンドウを3,2,1と使用して,ウィンドウが0になると第1WIM33bの設定値と一致してオーバフロートラップが発生し,アプリケーション(ユーザ)側の処理において,ウィンドウを7,6,5と使用してウィンドウが第2WIM33cと一致してオーバフロートラップが発生する。
【0046】
図5は範囲可変時のオーバフロー発生の処理フローを示す図である。
OS側とアプリケーション側のそれぞれで使用するウィンドウの範囲を可変にしてシフトする場合にオーバフローが発生すると,走行プログラムがOS側かアプリケーション側かを判別し(図5のS1),OSのプログラムである場合はウィンドウ3をメモリに保存し(同S2),第2WIMの内容を「3」に設定し(同S3),ウィンドウ7〜5のうち,使用しているものを1つづつずらす(同S4)。ウィンドウ7〜5を全て使用していた場合,ウィンドウ7を6,ウィンドウ6を5,ウィンドウ5を4へそれぞれ内容を移す。続いて,第1WIMの内容を「7」に設定する(同S5)。これにより,OSのプログラムで使用可能なウィンドウが6〜4の範囲にシフトする。上記S1において,アプリケーションプログラムであることが判別されると,ウィンドウ7を保存し(図5のS6),第1WIM33bを「7」にする(同S7)。次にウィンドウ3〜1のうち,使用しているものを1つづつずらし(同S8),第2WIMを「3」に変更し(同S9),元のアプリケーションプログラムへ戻る。
【0047】
上記の,実施例ではアプリケーション側及びOS側の両方のウィンドウ数を一定に制限しているが,これらの一方のウィンドウ数だけを制限して,他方に制限を設けないように構成することができる。その場合,制限されない方が走行している時に,WIMの値と一致してウィンドウオーバフローになると,相手のウィンドウ内容をメモリに退避し,WIMの数を順次移動させていき,最終的に全ウィンドウを使用可能にする。この他に,制限されない方に切り替わった時点で,制限する方が使用していたウィンドウを全てセーブする方式がある。
【0048】
次に本発明による割込み管理を説明する。
図6は割込み制御ブロック(ICBで表示)の構成図であり,上記図2に対応する。この割込み制御ブロック(ICB)は,割込み処理を行う割込みハンドラを起動する前に,カレントウィンドウに設定されている割込み復帰点やスタックに関する情報をハンドラが破壊しないように保存するためにメモリに設けられる。また,割込みハンドラで関数呼び出しの階層が深い位置で割込みハンドラ終了(EXT−INH:Exit INtarrupt Handler,割込みハンドラの最後に置かれるシステムコール)を実行した時にも割込み点に関する情報を容易に得られるようにするために,割込み管理ブロックICBが用意される。
【0049】
図6において,21,22,24〜26は,それぞれ上記図2の同じ符号に対応し,図6の23a,23bは図2の23に対応し,図6の27a〜27cは図2の27に対応し,それぞれ4バイトが格納される。すなわち,21は割込み処理中に次の割込みが発生した時に設けられた次のICBへのポインタが格納され,割込みがネスト(割込み動作中に更に割込みが発生した時)した時にキュー構成でICBが順次設けられ,キュー最後の場合はこのポインタにNULLが設定される。22は割込み起動制御の先頭でのPSR(プログラムステータスレジスタ)を保存し,実際に必要なのはPIL(プロセッサ割込みレベル)である。
【0050】
次に図6の23aは,割込み起動制御の先頭でのカレントウィンドウのローカル1レジスタ(旧PC:元のプログラムカウンタ)の内容,23bは割込み起動制御の先頭でのカレントウィンドウのローカル2レジスタ(旧nPC:n のプログラムカウンタ)の内容,24は割込み起動制御の先頭でのカレントウィンドウのイン6レジスタ(フレームポインタ)の内容,25は割込み起動制御の先頭でのカレントウィンドウのアウト6レジスタ(スタッフポインタ)の内容,26は発生した外部割込み番号,27a〜27cはシステムコール実行時に使用する作業域で,それぞれイン7レジスタ(リターンアドレス),スタックポインタ(spまたはSP),フレームポインタ(fpまたはFP)が保存される。
【0051】
次に上記図6に示す割込み制御ブロック(ICB)を用いた割込み処理を説明する。図7は一般の割込み処理のフロー,図8は基本クロック割込み(または一定数以上のウィンドウを使っていない場合の割込み)処理のフローを示す。図7,図8のA.は割込みの処理,B.は割込みハンドラ終了(EXT−INH)の処理である。
【0052】
図7,図8のA.において,割込み処理がスタートすると,外部割込み番号を得て(各図のS1),ICBを確保して,ICBキューの先頭に入れる(同S2)。更に,カレントウィンドウのレジスタr17,r18,r30(fp),r14(sp)をICBに保存し(同S3),PSR(プログラムステータスレジスタ)をICBに設定する(同S4)。続いてICBキューに確保したICBを設定する(同S5)。この後,ソフトマスクがかかっていないか判別し(同S6),割込みのソフトマスクがかかっていると処理を終了するが,かかっていない場合(yesの場合),図7と図8で処理が異なる。
【0053】
一般の割込みの処理の図7の場合,使用中のレジスタウィンドウをスタックへ保存し(図7のS7),次に割込みのネスト(割込み処理中の新たな割込み)か判別し(同S8),ネストでない場合は割込み用スタックに切替える(同S9)。また割込みのネストである場合は,ハンドラを起動する(同S10)。
【0054】
図8の場合,一定周期で頻繁に発生する基本クロック割込みであるか,一定数以上のウィンドウを使ってないかを判別し(図8のS7),該当しない場合は使用中のレジスタウィンドウをスタックへ保存し(同S8)。基本クロック割込みであるか一定数以上のウィンドウを使っていない場合,次に割込みネストであるか判別する(図8のS9)。割込みのネストでない場合,割込み用スタックに切り替え(同S10),割込みのネストである場合はハンドラを起動する(同S11)。
【0055】
このようにして,一定周期で頻繁に発生する基本クロック割込み等に対しては,レジスタウィンドウを保存することなく,ユーザ定義のハンドラにより処理を行うことができる。
【0056】
図7,図8のB.に示す割込みハンドラ終了(EXT−INH)の処理は,同じ内容であり,カレントICBから上記の図7,図8のA.の処理で保存したカレントウィンドウのレジスタr17,r18,r30,r31,spを復元する(各図のS1)。次にカレントICBを開放し(同S2),待ちICBキューの先頭をはずして,カレントICBへ入れて(同S3),リターンを行う(同S4)。
【0057】
図9は本発明によるシステムコール処理の流れ図である。この処理は,上記従来のシステムコール処理(上記図16参照)において使用するレジスタウィンドウの数が多いことにより処理時間が長くなるという問題を解決するものである。
【0058】
図9において,60〜63は上記図15,図16(従来例)の90〜93に対応し,60はアプリケーション,61はUOS,62はKOS,63はシステムコール本体処理を行う本体(カーネルとも呼ばれる)であり,60a,61a,62a,62b,63aは60〜63の処理に対応するレジスタウィンドウの使用状態を表す。なお,図9のUOS61,KOS62は,上記図2では図示省略されている。
【0059】
a.アプリケーション60は,通常の関数を呼ぶのと同じ方法で,カレントウィンドウのアウトレジスタ(図12参照)へパラメータを設定してシステムコール(図9ではシステムコールAで示す)を呼ぶ。図9の例では,この時のアプリケーション60の動作時に,レジスタウィンドウの番号は60aに示すように「2」である。
【0060】
b.UOS61でのウィンドウ使用数の削減方法
UOS61でのウィンドウ使用数を削減するため,UOS61で新しいウィンドウを使用しないようにする。この場合,UOS61はアプリケーションとOSとのインタフェースをとることであり,具体的にはKOS62を呼び出すトラップを発生させる。そのため,ここではアプリケーション60からのパラメータをKOS62が参照できるようにカレントウィンドウのアウトレジスタ(図12のr8〜r15)に設定する。アプリケーション60はUOS61を呼び出す時にパラメータをアウトレジスタに設定しているので,ウィンドウを回転させないことでカレントウィンドウのアウトレジスタにパラメータが格納されたままになり,KOS62ではカレントウィンドウのインレジスタ(図12のr24〜r31)でパラメータを参照できる。
【0061】
具体的には,UOS61はシステムコール毎の命令が集合して出来ており,それらの関数では最初にシステムコール毎に割り当てられているシステムコール番号をグローバルレジスタ(図12のr0〜r7)へ設定する(図9のUOS61の(1) 参照) 。グローバルレジスタには,カレントウィンドウが変化しても同じレジスタを参照できるので,KOS62で同じ値を得ることができる。次に別のLM(ロードモジュール)であるKOS62へ実行を移すためにトラップを発生させる(図9のUOS61の(2) 参照) 。
【0062】
これにより,ウィンドウを回転させた時に行わなければならなかったインレジスタからアウトレジスタへパラメータをコピーする必要がなくなり,UOSの処理自体も少なく済むようになる。また,本発明ではKOS62からUOS61に戻り,アプリケーション60へ戻る手順ではなく,KOS62から直接アプリケーションに戻るようにする。
c.KOS62でのウィンドウ使用数の削減方法
本発明ではKOS62で使用するウィンドウを一時的に使用しないようにしてから,OS本体63(図9の例では含まれないパラメータチェック部を備える場合は,パラメータチェック部)を呼び出すことで見かけ上のウィンドウ使用数を削減する。
【0063】
具体的には,このKOS62では,全てのシステムコールに共通な処理を行っており,最初にカレントウィンドウのsp(スタックポインタ),fp(フレームポインタ),インレジスタi[7]の各レジスタをKOS62に設けられたTCB(タスク・コントロール・ブロック)に保存する。次にUOS61で設定したグローバルレジスタからシステムコール番号を得て(図9のKOS62の(1) ),これをインデックスにしてシステムコール本来の機能を実現する関数のテーブル(以下,関数テーブルという)から,関数のアドレスを得る。次に,レジスタウィンドウを一段戻す(図9のKOS62の(2) )。
【0064】
これにより,CWP(カレントウィンドウポインタ)は+1され,図9の例では,レジスタウィンドウ番号が「1」の状態62aからレジスタウィンドウ番号が「2」の状態62bとなる。この後,得られたアドレスの関数をコールする(図9のKOS62の(3) )。
【0065】
d.OS本体63
レジスタウィンドウを一段進める(CWP−1)。図9の例では,OS本体63の(1) の処理に対応し,レジスタウィンドウの番号「2」の状態62bから「1」の状態63aになる。次に関数(システムコール本来の処理)の実行を終了すると,KOS62へ復帰(リターン)する。このリターン時に,レジスタウィンドウ番号が1つ戻されて,状態62bとなる。
【0066】
OS本体63からのリターン動作により,KOS62では,上記のTCBに保存しておいた,sp,fpを復元する。さらに,TCBに保存したインレジスタのi[7]をカレントウィンドウのローカルレジスタに設定する。詳細にはi[7]をl[1]に,i[7]+4をl[2]に設定する。最後にKOS62の復帰(リターン)命令により,KOS62の処理を終わる(図9のKOS62の(4) )。このリターン命令により,UOS61を経由せずに直接アプリケーション60に戻る。
【0067】
このようにして,従来のシステムコール発行時の処理(上記図20参照)に比べて,使用するレジスタウィンドウの数を少なくなるため処理速度が向上する。次に,割込みの発生によりウィンドウ使用数が増大することによる処理速度が遅くなる。このような割込みが使用ウィンドウ数が多い場合には特に影響が大きくなる。これを改善する本発明の方法を図10により説明する。
【0068】
図10は割込み処理の制御を行う処理フローである。
図10のA.に示す割込み処理では,割込みが発生すると(図10のA.のS1),現在使用中のウィンドウ数を調べて,これが一定数以上か否かによりその割込み処理を保留可か否かの判定をする(同S2)。もし,ウィンドウ数が一定数に達していない場合は,通常の割込み処理を行うが,ウィンドウ数が一定以上の場合は,保留中フラグをセットする(同S3)。続いて,ウィンドウ無効マスク(WIM)をセットし(同S4),割込み処理を実行することなくリターンする。この場合,WIMとしては,使用ウィンドウ数が上記S2の保留可の判別を行う基準となる一定数以下の数に設定し(例えば,使用数「3」に設定し),その数になったらアンダーフローを発生させるためにセットされる。
【0069】
その後,使用中のウィンドウ数が一定以下になるとアンダーフローが発生すると,アンダーフロー処理を開始する(図10のB.のS1)。この場合,保留中フラグがセットされているか否か判定し(同S2),セットされていない場合は通常処理を行い,セットされている場合は,ウィンドウ無効マスク(WIM)をリカバリーする(同S3)。このリカバリーは,上記図10のA.のS2でセットする前状態に戻すことである。次に割込みハンドラを起動し(図10のB.のS4),割込み処理を行ってリターンする。
【0070】
このようにして,割込み処理に対し制限を加えて処理速度を向上することができる。
図11は命令書替えを行う場合のプログラム復元を保証する処理フローである。この処理フローは,従来の命令を書替えて走行するシステムにおける処理(上記図17参照)の問題を解決するものである。
【0071】
命令を書替えて走行するようなシステムでは,例えば,システムコールの戻り値がエラーの場合にユーザプログラムを通常の後続の命令ではなく,終了処理ルーチン等の例外処理を実行させたい場合に,OSにより命令の書替えを行う。
【0072】
この場合,図11のA.に示すようにOSは,命令2の1つ前の命令1と,命令2を図11のB.に示す退避エリアに退避する(図11のA.のS1)。この時,退避エリアには,「命令1」,「命令2」に続いて,「命令2の次命令へジャンプ」も格納される。次に,ユーザプログラムの命令1を「退避エリアジャンプ」の内容に書替え,更に命令2を「システムコールB」に書替える(図11のA.のS2)。この後,OSからの復帰によりユーザプログラムの命令2が実行されると,システムコールBが実行され,その復帰命令は復元される。
【0073】
このように,書替えを行うことにより,例えば,命令2をシステムコールBに書替えた後にシステムの障害等により,システム再開等が発生してしまった場合でも,退避エリアに格納されている通常ルートが走行可能となり,レジスタウィンドウ方式によるリアルタイムOSの処理において,命令を書替えて走行する場合,プログラム復元の信頼性を高めることができる。
【0074】
【発明の効果】
本発明によれば,以下に述べるような効果を奏することができる。
▲1▼レジスタウィンドウ方式のリアルタイムOSにおいて,レジスタウィンドウを効率良く使用して実行処理速度を向上することができる。
【0075】
▲2▼割込み発生時の復帰点や情報を退避したスタックの情報を効率的に管理することが可能となる。
▲3▼システムコール発生時の処理におけるレジスタウィンドウの切替数を削減して処理時間を短縮することが可能となる。
【0076】
▲4▼命令を書替えて実行するシステムにおいて,命令の書替え後に,前状態に戻す前に装置の異常等が発生しても命令を復元することを可能とし,信頼性を向上することができる。
【図面の簡単な説明】
【図1】本発明の第1の原理説明図である。
【図2】本発明の第2の原理説明図である。
【図3】本発明が実施される処理装置のブロック構成図である。
【図4】範囲固定時のオーバフロー発生の処理フローを示す図である。
【図5】範囲可変時のオーバフロー発生の処理フローを示す図である。
【図6】割込み制御ブロック(ICB)の構成図である。
【図7】一般の割込み処理のフローを示す図である。
【図8】基本クロック割込み処理のフローを示す図である。
【図9】本発明によるシステムコール処理の流れ図である。
【図10】割込み処理の制御を行う処理フローを示す図である。
【図11】命令書替えを行う場合のプログラム復元を保証する処理フローを示す図である。
【図12】従来のレジスタウィンドウのレジスタの構成例を示す図である。
【図13】各レジスタグループの説明図である。
【図14】8個のウィンドウを使用する場合のウィンドウのシフトの概念図である。
【図15】システムコールのソフトウェア構造を示す図である。
【図16】従来のシステムコールの処理の流れを示す図である。
【図17】命令を書替えて走行する処理の従来例の説明図である。
【符号の説明】
1 環状の8個のレジスタウィンドウ(#0〜#7)
2a OS側で使用するレジスタウィンドウの範囲
2b アプリケーション側で使用するレジスタウィンドウの範囲
3a 第1ウィンドウ無効マスク(第1WIM)
3b 第2ウィンドウ無効マスク(第2WIM)
4 カレントウィンドウポインタ(CWP)
Claims (5)
- それぞれ複数のレジスタグループにより構成されたレジスタウィンドウが予め設定された数の複数個が環状に設けられ,関数呼び出しにより順次隣接するウィンドウへ切替えられ,復帰動作により逆方向の隣接ウィンドウへ戻されるリアルタイムOSの処理方法において,
前記複数個の環状に設けられたレジスタウィンドウ全体をアプリケーション部で使用可能な一定個数のレジスタウィンドウとOS部で使用可能な一定個数のレジスタウィンドウの範囲に対応して,OS部側の境界を越えたウィンドウ番号が設定された第1ウィンドウマスクと,アプリケーション部側の境界を越えたウィンドウ番号が設定された第2ウィンドウマスクを設け,
関数呼び出しにより現在処理を行っているウィンドウ番号が更新されて,前記第1ウィンドウマスクまたは第2ウィンドウマスクの番号と一致すると,オーバフロー割り込みを発生し,
復帰動作により現在処理を行っているウィンドウ番号が更新されて,前記第1ウィンドウマスクまたは第2ウィンドウマスクの番号と一致すると,アンダーフロー割り込みを発生することを特徴とするリアルタイムOSの処理方法。 - 請求項1において,
前記第1ウィンドウマスクと第2ウィンドウマスクに設定されたウィンドウ番号は,前記のオーバフロー割り込みが発生すると,それぞれの使用可能な範囲が拡大するよう一つずつシフトさせることを特徴とするリアルタイムOSの処理方法。 - 請求項1において,
割込み発生時に割込み処理が起動する前に現在のウィンドウに設定されている割込み復帰点やスタックに関する情報を保存する割込み制御ブロックを設け,
前記割込み制御ブロックは,発生順にキューを構成することを特徴とするリアルタイムOSの処理方法。 - 請求項3において,
基本クロック割込み等の一定周期で頻繁に発生する割込みに対し,レジスタウィンドウの内容の退避をせず,割込み処理を行うことを特徴とするリアルタイムOSの処理方法。 - 請求項1において,
割込みの発生時に使用中のウィンドウ数を調べて一定数に達しない場合だけ割込み処理を行い,一定数以上の場合は割込みを保留し,
ウィンドウ数が一定数以下になるとアンダーフローを発生させて前記保留中の割込みの処理を起動することを特徴とするリアルタイムOSの処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP15353795A JP3595028B2 (ja) | 1995-06-20 | 1995-06-20 | リアルタイムosの処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP15353795A JP3595028B2 (ja) | 1995-06-20 | 1995-06-20 | リアルタイムosの処理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH096630A JPH096630A (ja) | 1997-01-10 |
JP3595028B2 true JP3595028B2 (ja) | 2004-12-02 |
Family
ID=15564690
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP15353795A Expired - Fee Related JP3595028B2 (ja) | 1995-06-20 | 1995-06-20 | リアルタイムosの処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3595028B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2044517A4 (en) * | 2006-07-10 | 2010-08-25 | Silverbrook Res Pty Ltd | SYSTEM FOR PROTECTING SENSITIVE DATA BEFORE USER CODE IN A REGISTER PANEL ARCHITECTURE |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10302389A (ja) * | 1997-04-22 | 1998-11-13 | Ricoh Co Ltd | データ処理回路 |
JP2006039874A (ja) * | 2004-07-26 | 2006-02-09 | Fujitsu Ltd | 情報処理装置 |
JP5028774B2 (ja) * | 2005-09-22 | 2012-09-19 | 富士通株式会社 | 演算処理装置,情報処理装置,及びレジスタファイルの制御方法 |
-
1995
- 1995-06-20 JP JP15353795A patent/JP3595028B2/ja not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2044517A4 (en) * | 2006-07-10 | 2010-08-25 | Silverbrook Res Pty Ltd | SYSTEM FOR PROTECTING SENSITIVE DATA BEFORE USER CODE IN A REGISTER PANEL ARCHITECTURE |
Also Published As
Publication number | Publication date |
---|---|
JPH096630A (ja) | 1997-01-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7178062B1 (en) | Methods and apparatus for executing code while avoiding interference | |
JP5680679B2 (ja) | 例外イベントを取り扱うための装置および方法 | |
US5701493A (en) | Exception handling method and apparatus in data processing systems | |
JPWO2009157178A1 (ja) | 仮想計算機制御装置、仮想計算機制御プログラム及び仮想計算機制御回路 | |
JPH0353328A (ja) | レジスタ退避回復方法ならびに処理装置 | |
JPH0450621B2 (ja) | ||
JP3595028B2 (ja) | リアルタイムosの処理方法 | |
JP2004157636A (ja) | データ処理装置 | |
JPH0638237B2 (ja) | マルチプログラミング・モードで動作するデータ処理システム | |
JPS6362039A (ja) | 計算機 | |
JP2001256062A (ja) | 割込処理方法およびその方法を用いた演算処理装置 | |
US20060168428A1 (en) | Method of providing microcontroller context management | |
JPH02148223A (ja) | レジスタ退避復活装置 | |
US5715439A (en) | Bi-directional co-processor interface | |
US7562207B2 (en) | Deterministic microcontroller with context manager | |
JPH01217635A (ja) | レジスタ退避方式 | |
JP3539984B2 (ja) | プロセッサ | |
CN1016905B (zh) | 在非微码数据处理***上提供扩展的处理环境的装置和方法 | |
JPH0668725B2 (ja) | データ処理システムにおける割込条件に応答する装置及び非同期割込条件に応答する方法 | |
JP2562838B2 (ja) | プロセッサ及びストアバッファ制御方法 | |
JPH03225535A (ja) | プログラムトレース方式 | |
JP2003505758A (ja) | プロセッサ・アーキテクチャ | |
WO1990005951A1 (en) | Method of handling unintended software interrupt exceptions | |
JP2509244B2 (ja) | 分岐命令処理装置 | |
JPH03204036A (ja) | 割込み処理後の動的再開機構を備えた計算機 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040127 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040329 |
|
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: 20040831 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040902 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080910 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080910 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090910 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090910 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100910 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100910 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110910 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120910 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120910 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130910 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |