JP2002229805A - 組み込み用リアルタイムオペレーティングシステムの再構築方式および記憶媒体 - Google Patents

組み込み用リアルタイムオペレーティングシステムの再構築方式および記憶媒体

Info

Publication number
JP2002229805A
JP2002229805A JP2001021795A JP2001021795A JP2002229805A JP 2002229805 A JP2002229805 A JP 2002229805A JP 2001021795 A JP2001021795 A JP 2001021795A JP 2001021795 A JP2001021795 A JP 2001021795A JP 2002229805 A JP2002229805 A JP 2002229805A
Authority
JP
Japan
Prior art keywords
stack
user
module
task
program code
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
JP2001021795A
Other languages
English (en)
Inventor
Shigeo Suzuki
茂夫 鈴木
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.)
Canon Inc
Original Assignee
Canon Inc
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 Canon Inc filed Critical Canon Inc
Priority to JP2001021795A priority Critical patent/JP2002229805A/ja
Publication of JP2002229805A publication Critical patent/JP2002229805A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】 一つの組み込み用リアルタイムOSを利用者
が再構築する際に、システムスタック方式またはユーザ
スタック方式のいずれを用いるかを選択可能にすること
によって、利用者が一つの組み込み用リアルタイムOS
を様々な機器開発に適用することができる組み込み用リ
アルタイムオペレーティングシステムの再構築方式を提
供する。 【解決手段】 組み込み用リアルタイムオペレーティン
グシステムの再構築の際には、システムコール処理の実
現方式として、各システムコール処理をシステムに確保
された1つのシステムスタックを使用して実行するシス
テムスタック方式302、各システムコール処理を呼び
出しタスクのユーザスタックを使用して実行するユーザ
スタック方式303の内のいずれを用いるかを選択可能
とする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、組み込み用リアル
タイムオペレーティングシステムの再構築方式および記
憶媒体に関する。
【0002】
【従来の技術】組み込み用リアルタイムオペレーティン
グシステム(組み込み用リアルタイムOS)のシステム
コールの実現方法としては、CPUのソフトウェア例外
(トラップ命令など)を利用する方法が一般的である。
このソフトウェア例外を用いた方式を実現するための方
法としては様々あるが、一般的と思われる一つの方法を
以下に述べる。
【0003】ユーザタスクがシステムコールを発行する
ためには、まずステップS1として、システムコールの
種類を特定する値を特定のレジスタに設定するとともに
トラップ命令を実行する。トラップ命令が実行される
と、ソフトウェア例外が発生し、カーネル内部のソフト
ウェア例外処理ルーチンが実行される。このソフトウェ
ア例外処理ルーチンにおいては、まずステップS2とし
て、例外発生以前のレジスタの内容を、トラップ命令を
発行したそれまで動作中だったユーザタスクのタスクコ
ントロールブロック(TCB)に待避する。汎用レジス
タだけでなくプログラムカウンタ(PC)やステータス
レジスタ(SR)やスタックポインタ(SP)など、タ
スクのコンテキストとして必要な情報を待避する。次に
ステップS3として、CPUのスタックポインタをそれ
までのユーザタスクのスタック(ユーザスタック:各タ
スク毎に存在する)からカーネル(組み込み用リアルタ
イムOSのコア部分)動作用のスタック(システムスタ
ック:システムに1つだけ存在する)に切り替える。次
にステップS4として、システムコールの種類を特定す
る値を元にカーネル内部の各種システムコール内部処理
のエントリ関数をコールする。
【0004】以上がシステムコールの開始処理である
が、CPU仕様やカーネルの実現方法によっては、さら
にいくつかのバリエーションが存在する。例えば、ステ
ップS1でシステムコールの種類を特定する値をレジス
タではなく、トラップ命令に付属するトラップ番号で指
定する方法、またはスタック中に設定する方法などがあ
る。また、ステップS2のコンテキストの待避もTCB
にではなくユーザスタックに待避し、そのポインタのみ
をTCBに待避する方法などもある。また、ステップS
2のレジスタの待避処理に関しても、一部をCPUがハ
ードウェアで実施するものもあれば、ソフトウェアです
べて行う方法もある。また、ステップS3のスタックポ
インタの切替もCPUがハードウェアで実施するものも
あれば、ソフトウェアで行う方法もある。また、ステッ
プS1でトラップ命令を実行すると、例外が発生すると
同時に割込み禁止状態となり、その状態のままシステム
コール処理が実行されるのが一般的である。
【0005】このようにいろいろなバリエーションのあ
るソフトウェア例外を用いた方式であるが、多くの場
合、カーネルのシステムコール処理がユーザスタックか
らシステムスタックに切り替えられた後、システムスタ
ックを利用して実行されるという特徴がある。この特徴
から上記のような方式をシステムスタック方式と呼ぶこ
とにする。
【0006】一方、上記システムスタック方式のように
ソフトウェア例外を用いるのではなく、システムコール
を通常の関数コールを用いて行う手法も存在する。この
方式の場合、一般的には、カーネルの各システムコール
処理はユーザスタックのまま実行される。各システムコ
ール処理では、まずは排他制御のためのロック処理を行
なったのちに実際のシステムコール処理を実行する。排
他制御のためのロック処理は一般的には割込みを禁止す
ることにより実施する。そして、システムコール処理の
終了時に、システムコールの実行により次に実行すべき
タスクが現在のタスクと異なることがスケジューラによ
り判断されると、タスクスイッチ(コンテキストスイッ
チ)処理が実行される。それまでの各レジスタ値が今ま
で動いていたタスクのTCBまたはユーザスタックに待
避され、次に動作させるべきタスクのTCBまたはユー
ザスタックから各レジスタ値をCPUに復帰する。仮
に、タスクスイッチが必要ないとスケジューラにより判
断された場合には、排他制御のためのロックを解除(ア
ンロック処理)した後にシステムコールを呼び出したユ
ーザプログラムにリターンする。このように関数コール
を用いた方式の場合、システムコール処理は、ユーザス
タックを引き継いで使用して実行されるのが一般的であ
る。この特徴からこのような方式をユーザスタック方式
と呼ぶことにする。
【0007】以上述べたように、システムコール処理に
は、大きく分けてシステムスタック方式とユーザスタッ
ク方式の2種類が存在する。それぞれの方式には、とも
に長所、短所が存在し、どちらか一方が優れているわけ
ではない。例えば、システムスタック方式の場合、シス
テムコール処理のためのスタック領域をRAM上に1つ
だけ用意しておけば良いため、小規模なRAMでも動作
できるという長所があるが、システムコール処理開始時
にソフトウェア例外処理、そしてコンテキストの待避処
理も実行されるため、オーバーヘッドが大きいという短
所がある。それに対して、ユーザスタック方式の場合、
システムコール開始時のオーバーヘッドは最小でかつ必
要な場合にのみコンテキストの待避処理が実行されるた
め、実行効率が良いという長所がある反面、複数存在す
る各ユーザスタック上にシステムコール処理のための領
域を余分に確保しておく必要があり、RAMを消費して
しまうという短所がある。従って、ある組み込み用リア
ルタイムOSではシステムスタック方式を採用し、また
別の組み込み用リアルタイムOSではユーザスタック方
式を採用しているというのが現状である。
【0008】
【発明が解決しようとする課題】しかしながら、従来の
組み込み用リアルタイムOSが、システムスタック方式
またはユーザスタック方式のいづれかで固定的に実現さ
れているため、組み込み機器開発者であるユーザは、開
発する組み込み機器毎にその特徴に応じて搭載する組み
込み用リアルタイムOSを変更する必要があった。ま
た、各組み込み用リアルタイムOSに関してはそれぞれ
細かい機能仕様が異なり、その結果システムコールの仕
様も異なっているため、ユーザは開発する組み込み機器
毎に異なるスタイルのプログラミングを強いられるとい
う問題があった。
【0009】本発明はかかる問題に鑑みてなされたもの
であり、一つの組み込み用リアルタイムOSを利用者が
再構築する際に、システムスタック方式またはユーザス
タック方式のいずれを用いるかを選択可能にすることに
よって、利用者が一つの組み込み用リアルタイムOSを
様々な機器開発に適用することができる組み込み用リア
ルタイムオペレーティングシステムの再構築方式および
記憶媒体を提供することを目的とする。
【0010】
【課題を解決するための手段】請求項1記載の発明は、
利用者が再構築可能な組み込み用リアルタイムオペレー
ティングシステムを再構築する方式において、前記組み
込み用リアルタイムオペレーティングシステムの再構築
の際に、システムコール処理の実現方式として、各シス
テムコール処理をシステムに確保された1つのシステム
スタックを使用して実行するシステムスタック方式、各
システムコール処理を呼び出しタスクのユーザスタック
を使用して実行するユーザスタック方式の内のいずれを
用いるかを選択可能とすることを特徴とする。
【0011】請求項2記載の発明は、請求項1記載の組
み込み用リアルタイムオペレーティングシステムの再構
築方式において、前記各システムコール処理の本体とな
る内部処理は、前記システムスタック方式、前記ユーザ
スタック方式の両方式で共有可能な同一のプログラムコ
ードで実現し、それぞれの方式で異なる処理を行う各シ
ステムコール処理の前処理/後処理のみを前記システム
スタック方式、前記ユーザスタック方式それぞれ専用の
プログラムコードで実現することを特徴とする。
【0012】請求項3記載の発明は、請求項2記載の組
み込み用リアルタイムオペレーティングシステムの再構
築方式において、前記システムスタック方式、前記ユー
ザスタック方式の両方式で共有可能な同一のプログラム
コード、前記システムスタック方式、前記ユーザスタッ
ク方式のそれぞれ専用のプログラムコードをコンパイラ
によりコンパイルすることにより、該コンパイルの結果
出力されるリロケータブルオブジェクトの形態でそれぞ
れのプログラムコードをモジュール化して前記利用者に
提供することを特徴とする。
【0013】請求項4記載の発明は、請求項2記載の組
み込み用リアルタイムオペレーティングシステムの再構
築方式において、前記システムスタック方式、前記ユー
ザスタック方式の両方式で共有可能な同一のプログラム
コード、前記システムスタック方式、前記ユーザスタッ
ク方式のそれぞれの専用のプログラムコードをコンパイ
ラによりコンパイルし、該コンパイルの結果出力される
リロケータブルオブジェクトをライブラリアンによりラ
イブラリ化することにより、該ライブラリ化した形態で
前記各プログラムコードをモジュール化して前記利用者
に提供することを特徴とする。
【0014】請求項5記載の発明は、請求項3記載の組
み込み用リアルタイムオペレーティングシステムの再構
築方式において、前記利用者が前記組み込み用リアルタ
イムオペレーティングシステムを再構築する際に、前記
システムスタック方式、前記ユーザスタック方式の両方
式で共有可能な同一のプログラムコードからなるモジュ
ールと、前記システムスタック方式専用のプログラムコ
ードからなるモジュールまたは前記ユーザスタック方式
専用のプログラムコードからなるモジュールとをリンカ
によりリンクすることによって、前記組み込み用リアル
タイムオペレーティングシステムを再構築することを特
徴とする。
【0015】請求項6記載の発明は、請求項4記載の組
み込み用リアルタイムオペレーティングシステムの再構
築方式において、前記利用者が前記組み込み用リアルタ
イムオペレーティングシステムを再構築する際に、前記
システムスタック方式、前記ユーザスタック方式の両方
式で共有可能な同一のプログラムコードからなるモジュ
ールと、前記システムスタック方式専用のプログラムコ
ードからなるモジュールまたは前記ユーザスタック方式
専用のプログラムコードからなるモジュールとをリンカ
によりリンクすることによって、前記組み込み用リアル
タイムオペレーティングシステムを再構築することを特
徴とする。
【0016】請求項7記載の発明は、請求項2記載の組
み込み用リアルタイムオペレーティングシステムの再構
築方式において、前記システムスタック方式、前記ユー
ザスタック方式の両方式で共有可能な同一のプログラム
コードからなるモジュールは、各システムコールに応じ
てそれぞれの内部処理を実行する各システムコール内部
処理実行モジュールと、前記各システムコール内部処理
実行モジュールからの要求を受けて前記組み込み用リア
ルタイムオペレーティングシステム内部で管理されるレ
ディキュー、ウェイトキューを操作することに応じてタ
スクスイッチ処理が必要な場合には、前記システムスタ
ック方式専用のプログラムコードからなるモジュールと
前記ユーザスタック方式専用のプログラムコードからな
るモジュールそれぞれで実現されるタスクスイッチ処理
を呼び出す処理を行なうスケジューリングモジュールと
を有することを特徴とする。
【0017】請求項8記載の発明は、請求項2記載の組
み込み用リアルタイムオペレーティングシステムの再構
築方式において、前記システムスタック方式専用のプロ
グラムコードからなるモジュールは、対応するシステム
コール番号を設定した後にトラップ命令などによりソフ
トウェア例外を発生することによってシステムコールを
発行するシステムコール発行モジュールと、ソフトウェ
ア例外処理においてまずシステムコールを発行したユー
ザタスクのコンテキスト情報を対応するタスクコントロ
ールブロックまたはユーザタスク毎に存在するユーザス
タック上に待避するコンテキスト待避モジュールと、C
PUが使用するスタックをそれまで使用していたユーザ
スタックからシステムに一つだけ確保したシステムスタ
ックに切り替えるシステムスタックへの切替モジュール
と、設定されたシステムコール番号から呼び出すべき前
記各システムコール毎の内部処理を検索し、その内部処
理を呼び出す各システムコール内部処理検索呼出モジュ
ールと、前記内部処理が終了した後に前記CPUが使用
するスタックを前記システムスタックから前記ユーザス
タックに戻すユーザスタックへの切替モジュールと、前
記ソフトウェア例外処理を終了し、前記ソフトウェア例
外発生以前のプログラムコードにリターン処理する例外
処理終了モジュールと、各システムコールのリターン値
を設定した後にシステムコールを呼び出したユーザプロ
グラムへリターンする第1のシステムコール終了モジュ
ールと、前記スケジューリングモジュールから呼び出さ
れ、次に実行すべきタスクのコンテキスト情報をそのタ
スクのタスクコントロールボックスまたはユーザスタッ
クより前記CPUに復帰することによってそのタスクの
実行を再開する第1のタスクスイッチモジュールとを有
することを特徴とする。
【0018】請求項9記載の発明は、請求項2記載の組
み込み用リアルタイムオペレーティングシステムの再構
築方式において、前記ユーザスタック方式専用のプログ
ラムコードからなるモジュールは、排他制御のためにロ
ック処理を行なう排他制御用ロックモジュールと、前記
各システムコール毎の内部処理を呼び出す各システムコ
ール内部処理呼出モジュールと、前記内部処理が終了し
た後に前記排他制御用ロックモジュールによるロックを
解除する排他制御用アンロックモジュールと、各システ
ムコールのリターン値を設定した後にシステムコールを
呼び出したユーザプログラムへリターンする第2のシス
テムコール終了モジュールと、前記スケジューリング手
段から呼び出され、現在のコンテキスト情報を対応する
タスクコントロールブロックまたはユーザタスク毎に存
在するユーザスタック上に待避し、次に実行すべきタス
クのコンテキスト情報をそのタスクのタスクコントロー
ルブロックまたはユーザスタックにより前記CPUに復
帰することによってタスクスイッチ処理を行う第2のタ
スクスイッチモジュールとを有することを特徴とする。
【0019】請求項10記載の発明は、利用者が再構築
可能な組み込み用リアルタイムオペレーティングシステ
ムを再構築するためのプログラムを格納した情報処理装
置読取り可能な記憶媒体において、前記プログラムは、
各システムコール処理をシステムに確保された1つのシ
ステムスタックを使用して実行するシステムスタック方
式の実行モジュールと、各システムコール処理を呼び出
しタスクのユーザスタックを使用して実行するユーザス
タック方式の実行モジュールと、前記組み込み用リアル
タイムオペレーティングシステムの再構築の際に、シス
テムコール処理の実現方式として、前記システムスタッ
ク方式、前記ユーザスタック方式の内のいずれを用いる
かを選択するための選択手段とを有することを特徴とす
る。
【0020】請求項11記載の発明は、請求項10記載
の記憶媒体において、前記各システムコール処理の本体
となる内部処理は、前記システムスタック方式、前記ユ
ーザスタック方式の両方式で共有可能な同一のプログラ
ムコードで実現し、それぞれの方式で異なる処理を行う
各システムコール処理の前処理/後処理のみを前記シス
テムスタック方式、前記ユーザスタック方式それぞれ専
用のプログラムコードで実現することを特徴とする。
【0021】請求項12記載の発明は、請求項11記載
の記憶媒体において、前記システムスタック方式、前記
ユーザスタック方式の両方式で共有可能な同一のプログ
ラムコード、前記システムスタック方式、前記ユーザス
タック方式のそれぞれ専用のプログラムコードは、コン
パイラによるコンパイルの結果出力されるリロケータブ
ルオブジェクトの形態でそれぞれモジュール化されてい
ることを特徴とする。
【0022】請求項13記載の発明は、請求項11記載
の記憶媒体において、前記システムスタック方式、前記
ユーザスタック方式の両方式で共有可能な同一のプログ
ラムコード、前記システムスタック方式、前記ユーザス
タック方式のそれぞれの専用のプログラムコードは、コ
ンパイラによりコンパイルし、該コンパイルの結果出力
されるリロケータブルオブジェクトをライブラリアンに
よりライブラリ化することにより、該ライブラリ化した
形態でモジュール化されていることを特徴とする。
【0023】請求項14記載の発明は、請求項12記載
の記憶媒体において、前記利用者が前記組み込み用リア
ルタイムオペレーティングシステムを再構築する際に、
前記システムスタック方式、前記ユーザスタック方式の
両方式で共有可能な同一のプログラムコードからなるモ
ジュールと、前記システムスタック方式専用のプログラ
ムコードからなるモジュールまたは前記ユーザスタック
方式専用のプログラムコードからなるモジュールとをリ
ンカによりリンクすることによって、前記組み込み用リ
アルタイムオペレーティングシステムを再構築すること
を特徴とする。
【0024】請求項15記載の発明は、請求項13記載
の記憶媒体において、前記利用者が前記組み込み用リア
ルタイムオペレーティングシステムを再構築する際に、
前記システムスタック方式、前記ユーザスタック方式の
両方式で共有可能な同一のプログラムコードからなるモ
ジュールと、前記システムスタック方式専用のプログラ
ムコードからなるモジュールまたは前記ユーザスタック
方式専用のプログラムコードからなるモジュールとをリ
ンカによりリンクすることによって、前記組み込み用リ
アルタイムオペレーティングシステムを再構築すること
を特徴とする。
【0025】請求項16記載の発明は、請求項11記載
の記憶媒体において、前記システムスタック方式、前記
ユーザスタック方式の両方式で共有可能な同一のプログ
ラムコードからなるモジュールは、各システムコールに
応じてそれぞれの内部処理を実行する各システムコール
内部処理実行モジュールと、前記各システムコール内部
処理実行モジュールからの要求を受けて前記組み込み用
リアルタイムオペレーティングシステム内部で管理され
るレディキュー、ウェイトキューを操作することに応じ
てタスクスイッチ処理が必要な場合には、前記システム
スタック方式専用のプログラムコードからなるモジュー
ルと前記ユーザスタック方式専用のプログラムコードか
らなるモジュールそれぞれで実現されるタスクスイッチ
処理を呼び出す処理を行なうスケジューリングモジュー
ルとを含むことを特徴とする。
【0026】請求項17記載の発明は、請求項11記載
の記憶媒体において、前記システムスタック方式専用の
プログラムコードからなるモジュールは、対応するシス
テムコール番号を設定した後にトラップ命令などにより
ソフトウェア例外を発生することによってシステムコー
ルを発行するシステムコール発行モジュールと、ソフト
ウェア例外処理においてまずシステムコールを発行した
ユーザタスクのコンテキスト情報を対応するタスクコン
トロールブロックまたはユーザタスク毎に存在するユー
ザスタック上に待避するコンテキスト待避モジュール
と、CPUが使用するスタックをそれまで使用していた
ユーザスタックからシステムに一つだけ確保したシステ
ムスタックに切り替えるシステムスタックへの切替モジ
ュールと、設定されたシステムコール番号から呼び出す
べき前記各システムコール毎の内部処理を検索し、その
内部処理を呼び出す各システムコール内部処理検索呼出
モジュールと、前記内部処理が終了した後に前記CPU
が使用するスタックを前記システムスタックから前記ユ
ーザスタックに戻すユーザスタックへの切替モジュール
と、前記ソフトウェア例外処理を終了し、前記ソフトウ
ェア例外発生以前のプログラムコードにリターン処理す
る例外処理終了モジュールと、各システムコールのリタ
ーン値を設定した後にシステムコールを呼び出したユー
ザプログラムへリターンする第1のシステムコール終了
モジュールと、前記スケジューリングモジュールから呼
び出され、次に実行すべきタスクのコンテキスト情報を
そのタスクのタスクコントロールボックスまたはユーザ
スタックより前記CPUに復帰することによってそのタ
スクの実行を再開する第1のタスクスイッチモジュール
とを含むことを特徴とする。
【0027】請求項18記載の発明は、請求項11記載
の記憶媒体において、前記ユーザスタック方式専用のプ
ログラムコードからなるモジュールは、排他制御のため
にロック処理を行なう排他制御用ロックモジュールと、
前記各システムコール毎の内部処理を呼び出す各システ
ムコール内部処理呼出モジュールと、前記内部処理が終
了した後に前記排他制御用ロックモジュールによるロッ
クを解除する排他制御用アンロックモジュールと、各シ
ステムコールのリターン値を設定した後にシステムコー
ルを呼び出したユーザプログラムへリターンする第2の
システムコール終了モジュールと、前記スケジューリン
グ手段から呼び出され、現在のコンテキスト情報を対応
するタスクコントロールブロックまたはユーザタスク毎
に存在するユーザスタック上に待避し、次に実行すべき
タスクのコンテキスト情報をそのタスクのタスクコント
ロールブロックまたはユーザスタックにより前記CPU
に復帰することによってタスクスイッチ処理を行う第2
のタスクスイッチモジュールとを有することを特徴とす
る。
【0028】
【発明の実施の形態】以下、本発明の実施の形態につい
て図面を参照しながら説明する。
【0029】図1および図2は本発明の実施の一形態に
係る組み込み用リアルタイムオペレーティングシステム
の再構築方式におけるシステムコール処理をシステムス
タック方式で実現した場合の処理手順を示すフローチャ
ート、図3は本発明の実施の一形態に係る組み込み用リ
アルタイムオペレーティングシステムの再構築方式にお
けるシステムコール処理をユーザスタック方式で実現し
た場合の処理手順を示すフローチャート、図4はユーザ
が再構築する組み込み用リアルタイムオペレーティング
システムのカーネルのモジュール構成図である。
【0030】本実施の形態では、ある一つのシステムコ
ールを例とし、その処理の流れを説明するが、もちろん
他のシステムコールの場合も同様の処理の流れとなる。
ここでは、同期機構であるセマフォに対して資源の返却
を行なうμITRON インタフェースのシステムコール sig
_sem を用いて説明する。
【0031】まずは、カーネル内部のモジュール構成を
意識しての処理の流れを、システムスタック方式、ユー
ザスタック方式の順で説明する。次に、どのようにして
それらを選択的にカーネルを再構築可能とするのかを説
明する。
【0032】システムコール処理をシステムスタック方
式で実現する場合の処理について図1および図2を参照
しながら説明する。
【0033】ユーザプログラム中でシステムコール sig
_sem を発行すると、図1に示すように、システムコー
ル発行処理P1としてステップS11で関数 sig_se
m() をコールする。これにより、関数 sig_sem() が処
理を開始する。ここで、関数 sig_sem() が行う処理を
P2とする。
【0034】この関数 sig_sem() の処理P2では、ま
ずステップS21でシステムコール番号を設定してから
トラップ命令を実行する。システムコール番号の具体的
な値については、ステップS33で後述する。システム
コール番号はある特定のレジスタに設定しても、またユ
ーザスタック中に設定しても、またCPUによってはト
ラップ命令の引数などで設定してもよい。これは、CP
Uの仕様によって、最も適した手法を用いて実現する。
【0035】上記ステップS21でトラップ命令を実行
すると、CPUの例外処理が開始され、一般的には、プ
ログラムカウンタ(PC)、ステータスレジスタ(S
R)などが自動的にスタックに待避され、割込み禁止の
状態になったあとでそれぞれの例外に対応した(ベクタ
に登録されている)例外処理ルーチンにジャンプする。
【0036】次に、トラップ命令によるソフトウェア例
外に対応した処理ルーチンにジャンプし、ソフトウェア
による例外処理が開始された時点からの処理の流れにつ
いて説明する。ソフトウェアによる例外処理P3におい
て、まずステップS31でユーザタスクのコンテキスト
となるレジスタ群の待避処理を行う。コンテキストの待
避は直接ユーザタスクのタスクコントロールブロック
(TCB)に待避しても、またユーザスタック上に待避
してスタックポインタ(SP)のみをTCBに待避して
もよい。CPUの仕様によって最も適した手法を用いて
実現する。次いで、ステップS32で、スタックポイン
タをユーザスタックからシステムスタックに切り替え
る。システムスタックはその領域を予めシステムに一つ
用意されており、その領域のサイズとしては、最もスタ
ックを消費するシステムコール処理の分だけ用意されて
いる。また、システムのリセット処理時に使用するスタ
ックや割込み処理で使用するスタックと共用してもよ
い。割込み処理と共用する場合には、割込み処理で使用
するスタックサイズ分余裕をもって確保しておく必要が
ある。また、CPUによっては、システムスタックへの
切替を例外発生時に自動的に行う仕様のものがあるが、
そうした機構を利用して実現してもよい。そして、ステ
ップS33において、設定されたシステムコール番号を
元に呼び出すべきカーネル内部関数(本例の場合 _sig
_sem() とする)を検索してコールする。システムコー
ル番号は、0や1から始まる連続した数値であっても、
また各システムコールに対応したカーネル内部関数のア
ドレス値(本例の場合 _sig_sem のアドレス値)であ
ってもよい。前者の場合は、予め用意された関数テーブ
ルを用いたテーブルジャンプとなり、後者の場合には、
システムコール番号が示すアドレス値を直接コールすれ
ばよい。
【0037】カーネル内部関数 _sig_sem() がコール
されると、図2に示すカーネル内部関数 _sig_sem()
の処理P4が開始される。処理P4では、一般的なセマ
フォ資源返却処理を実行する。他のシステムコールの場
合も同様である。例えばセマフォ資源の獲得を行なうμ
ITRON のシステムコール wai_sem の場合には、カーネ
ル内部関数 _wai_sem() がコールされ、一般的なセマ
フォ資源の獲得処理が実行される。処理P4では、まず
ステップS41において対象セマフォに対して資源の獲
得を待っているタスクがあれば、待ち行列(Wait キュ
ー)の先頭のタスクを待ち解除するためにステップS4
2においてスケジューラをコールし、待っているタスク
がない場合には、ステップS43において対象セマフォ
の資源数に1を加える。
【0038】上記ステップS42でスケジューラがコー
ルされると、スケジューラの処理P5が開始される。ま
ずステップS51で要求されたキュー操作を実行する。
本例の場合には、指定された Wait キューの先頭のTC
Bをキューから外し、それをスケジューリングポリシに
基づいて Ready キューの適切な場所にリンクする。ま
た、例えば wai_sem の場合には、現在動作中の自タス
クのTCBを Readyキューから外し、それを指定された
Wait キューの適切な位置にリンクする処理を行う。次
いでステップS52に進み、Ready キューの先頭のTC
Bを調べ、それが現在動作中のタスク(自タスク)のT
CBと異なっている場合すなわちタスクスイッチが必要
な場合には、ステップS53に進み、一致している場合
すなわちタスクスイッチが必要ない場合には、ステップ
S54に進む。
【0039】ステップS54に進むと、単に呼び出し関
数にリターン処理を行っていきステップS44、ステッ
プS34へと進む。ステップS34では、スタックをユ
ーザスタックに戻し、続くステップS35で例外処理か
らのリターン処理を行う。例外処理からのリターン処理
は、一般的にはCPUに用意されている例外処理からの
リターン命令を実行することによって行い、これにより
処理が関数 sig_sem()の処理P2中のステップS22
に戻り、同時に割込み禁止状態も解除される。
【0040】ステップS53に進んだ場合には、次に実
行すべきタスクのコンテキストをそのタスクのTCBま
たはそのタスクのユーザスタックから復帰する処理、つ
まり待避されているレジスタ群をCPUにロードする処
理を行うことによってそのタスクにタスクスイッチす
る。このタスクスイッチ後は、元のタスクは実行が中断
されたことになり、次に再開するときは、上記ステップ
S31で待避したコンテキストが復帰されたときであ
り、そのときは上記ステップS21でトラップ命令を実
行した後の位置、すなわちステップS22から処理を再
開することになる。この場合、待避されたコンテキスト
の一部であるスタックポインタ(SP)も復帰されるの
で、使用するスタックが対象タスクのユーザスタックに
自動的に切り替わり、また割込み禁止状態も解除される
ことになる。
【0041】ステップS22は、システムコール sig_
sem() の最後の処理であり、リターン値を設定してシス
テムコールを発行したユーザプログラム、つまり関数 s
ig_sem() を呼び出したところにリターン値をもってリ
ターンする。システムコールのリターン値に関しては、
対応するタスクのTCB中にその格納領域を用意してお
き、リターン値が決定したときにその格納領域に格納
し、最後にステップS22でその格納領域から取出して
関数のリターン値として返す方式でもよい。
【0042】次に、システムコール処理をユーザスタッ
ク方式で実現した場合の処理について図3を参照しなが
ら説明する。
【0043】ユーザプログラム中でシステムコール sig
_sem を発行する場合、図3に示すように、システムコ
ール発行処理P6としてステップS61で関数 sig_se
m()をコールする。このコールに応答して関数 sig_sem
() が処理を開始する。
【0044】ここで、関数sig_sem() が行う処理をP
7とすると、関数 sig_sem() の処理P7では、まずス
テップS71で排他制御用のロック処理を実行する。一
般的には、CPUを割込み禁止にする。次にカーネル内
部関数 _sig_sem() をコールする。他のシステムコー
ルの場合、例えば wai_sem の場合にはカーネル内部関
数 _wai_sem() をコールする。カーネル内部関数 _s
ig_sem() がコールされると、カーネル内部関数 _sig
_sem() の処理P8が開始される。処理P8では、上述
の処理P4と全く同じ処理、一般的なセマフォ資源返却
処理を実行する。他のシステムコールの場合も同様であ
る。処理P8では、まずステップS81で対象セマフォ
に対して資源の獲得を待っているタスクがあれば、待ち
行列(Wait キュー)の先頭のタスクを待ち解除するた
めにステップS82においてスケジューラをコールし、
待っているタスクがない場合には、ステップS83で対
象セマフォの資源数に1を加える。
【0045】上記ステップS82でスケジューラがコー
ルされると、スケジューラの処理P9が開始される。こ
のスケジューラの処理P9では、まずステップS91で
要求されたキュー操作を実行する。本例の場合には、指
定された Wait キューの先頭のTCBをキューから外
し、それをスケジューリングポリシに基づいて Readyキ
ューの適切な場所にリンクする。また、例えば wai_se
m の場合には、現在動作中の自タスクのTCBを Ready
キューから外し、それを指定された Wait キューの適
切な位置にリンクする処理を行なう。次にステップS9
2で、Ready キューの先頭のTCBを調べ、それが現在
動作中のタスク(自タスク)のTCBと異なっている場
合すなわちタスクスイッチが必要な場合には、ステップ
S93に進み、一致している場合すなわちタスクスイッ
チが必要ない場合には、ステップS95に進む。
【0046】ステップS95に進んだ場合には、単に呼
び出し関数にリターン処理を行っていきステップS8
4、ステップS73へと進む。ステップS73では、ス
テップS72でのロックを解除する。一般的には割込み
禁止状態を解除する。そして、ステップS74へ進む。
ステップS93に進んだ場合には、自タスクから次に実
行すべきタスクへのタスクスイッチ処理を行う。まずス
テップS93で、自タスクのコンテキストの待避処理を
行ない、続くステップS94で、次に実行すべきタスク
のコンテキストを復帰する処理すなわち待避されている
レジスタ群をCPUにロードする処理を行うことによっ
てそのタスクにタスクスイッチする。このタスクスイッ
チ後は、元のタスクは実行が中断されたことになり、次
に再開するときは、上記ステップS93で待避したコン
テキストが復帰されたときであり、そのときはステップ
S95から処理を再開することになる。
【0047】ステップS74は、ステップS22と同様
にシステムコール sig_sem の最後の処理であり、リタ
ーン値を設定してシステムコールを発行したユーザプロ
グラムすなわち関数 sig_sem() を呼び出したところに
リターン値をもってリターンする。
【0048】次に、どのようにしてシステムスタック方
式、ユーザスタック方式を選択的にカーネルを再構築可
能とするのかについて図4を参照しながら説明する。
【0049】図1および図2と図3を比較して分かるよ
うに、システムコール発行処理P1とP6は同じ処理で
ある。これはすなわちユーザプログラムは、システムス
タック方式、ユーザスタック方式どちらのカーネルを利
用したとしても全く同じプログラムコードでよいことを
意味している。
【0050】次に、カーネルの処理P2,P3,P4,
P5,P7,P8,P9についてみてみると、これらの
処理の内、セマフォ資源返却処理を行なう処理P4とP
8、すなわちシステムコール処理の本体にあたる処理は
どちらも全く同じ処理となるため、全く同じプログラム
コードを流用可能である。また、スケジューリング処理
を行なう処理P5,P9についても、処理P9にステッ
プS93の処理が多いだけで、その他は同一の処理とな
っている。そこで、ステップS53そしてステップS9
3とステップS94からなるタスクスイッチ処理を独立
した別の関数で実現し、スケジューラの処理P5、P9
から分離すれば、スケジューラの処理P5,P9を全く
同一のプログラムコードで実現することが可能となる。
具体的には、以下のようなカーネル内部関数インタフェ
ースでタスクスイッチ処理を実現し、スケジューラは単
にこの関数を呼び出すだけにすればよいことになる。
【0051】void _task_switch(context_t *p_ol
d, context_t *p_new); 第1引数 p_old : タスクスイッチ元タスクのコンテ
キスト待避場所 第2引数 p_new : タスクスイッチ先タスクのコンテ
キスト待避場所 そして、システムスタック方式の場合には、カーネル内
部関数 _task_switch() を、第1引数を無視してステ
ップS53の処理だけを行うように実現し、ユーザスタ
ック方式の場合には、2つの引数を使ってステップS9
3とステップS94の処理を行うように実現しておく。
このように実現することで、処理P4とP8、そして処
理P5とP9は同一のプログラムコードで実現可能とな
る。
【0052】こうした共有可能なプログラムコードを共
有モジュールと呼ぶことにする。この共有モジュール
は、ライブラリアンなどを用いて一つのライブラリ形式
で実現しても、また単にリロケータブルオブジェクト形
式で実現してもかまわない。
【0053】上記以外の処理すなわちシステムコールの
前処理/後処理にあたる処理P2,P3と処理P7は二
つの方式でまったく異なる処理を行っている。これらの
処理を行うプログラムコードおよび上述のカーネル内部
関数 _task_switch() のプログラムコードを専用モジ
ュールと呼び、それぞれの方式毎にシステムスタック方
式専用モジュール、ユーザスタック方式専用モジュール
と呼ぶことにする。これら専用モジュールは、ライブラ
リアンなどを用いて一つのライブラリ形式で実現して
も、また単にリロケータブルオブジェクト形式で実現し
てもかまわない。
【0054】以上述べたようにカーネルをモジュール構
成することで、各システムコール処理の内ほとんどのプ
ログラムコード部分を共有モジュールとすることがで
き、二方式専用のモジュールは各システムコールの前処
理/後処理およびタスクスイッチ処理だけとなる。従っ
て、本カーネルの利用者は、システムスタック方式のカ
ーネルを利用したい場合には、図4(a)に示す構成で
カーネルを再構築すればよく、ユーザスタック方式のカ
ーネルを利用したい場合には、図4(b)に示す構成で
カーネルを再構築すればよい。再構築作業は、各モジュ
ールをリンカでリンクするだけで可能となる。
【0055】図4(a)に示す構成においては、ユーザが
記述するユーザプログラム(アプリケーションプログラ
ム)であるユーザモジュール301と、システムスタッ
ク方式で再構築したシステムスタック方式カーネル30
2とがあり、システムスタック方式カーネル302に
は、上記の共有モジュール304と、上記のシステムス
タック方式専用モジュール305とが含まれている。こ
れに対して、図4(b)に示す構成においては、ユーザモ
ジュール301と、ユーザスタック方式で再構築したユ
ーザスタック方式カーネル303とがあり、ユーザスタ
ック方式カーネル303には、上記の共有モジュール3
04と、上記のユーザスタック方式専用モジュール30
6とが含まれている。すなわち、ユーザは、リンクする
モジュールをシステムスタック方式専用モジュール30
5にするかまたはユーザスタック方式専用モジュール3
06にするかを選択することによって、二方式のどちら
か必要な方式のカーネルを簡単に再構築し、利用するこ
とが可能となる。
【0056】また、本発明は、前述した実施形態の機能
を実現するソフトウェアのプログラムコードを記録した
記憶媒体を、システムあるいは装置に供給し、そのシス
テムあるいは装置のコンピュータ(CPUやMPU)が
記憶媒体に格納されたプログラムコードを読み出し実行
することによっても達成され得る。
【0057】この場合、記憶媒体から読み出されたプロ
グラムコード自体が前述した実施形態の機能を実現する
ことになり、そのプログラムコードを記憶した記憶媒体
は本発明を構成することになる。
【0058】プログラムコードを供給するための記憶媒
体としては、例えば、フロッピディスク、ハードディス
ク、光ディスク、光磁気ディスク、CD−ROM、CD
−R、DVD−ROM、磁気テープ、不揮発性のメモリ
カード、ROMなどを用いることができる。
【0059】
【発明の効果】以上説明したように、本発明によれば、
組み込み用リアルタイムOSの再構築がユーザの手(各
モジュールを選択してリンクする)により可能となり、
その再構築において、システムスタック方式またはユー
ザスタック方式のいづれを用いるかを選択可能になり、
ユーザが一つの組み込み用リアルタイムOSを様々な機
器開発に適用することができる。
【図面の簡単な説明】
【図1】本発明の実施の一形態に係る組み込み用リアル
タイムオペレーティングシステムの再構築方式における
システムコール処理をシステムスタック方式で実現した
場合の処理手順を示すフローチャートである。
【図2】本発明の実施の一形態に係る組み込み用リアル
タイムオペレーティングシステムの再構築方式における
システムコール処理をシステムスタック方式で実現した
場合の処理手順を示すフローチャートである。
【図3】本発明の実施の一形態に係る組み込み用リアル
タイムオペレーティングシステムの再構築方式における
システムコール処理をユーザスタック方式で実現した場
合の処理手順を示すフローチャートである。
【図4】ユーザが再構築する組み込み用リアルタイムオ
ペレーティングシステムのカーネルのモジュール構成図
である。
【符号の説明】
301 ユーザモジュール 302 システムスタック方式カーネル 303 ユーザスタック方式カーネル 304 共有モジュール 305 システムスタック方式専用モジュール 306 ユーザスタック方式専用モジュール

Claims (18)

    【特許請求の範囲】
  1. 【請求項1】 利用者が再構築可能な組み込み用リアル
    タイムオペレーティングシステムを再構築する方式にお
    いて、前記組み込み用リアルタイムオペレーティングシ
    ステムの再構築の際に、システムコール処理の実現方式
    として、各システムコール処理をシステムに確保された
    1つのシステムスタックを使用して実行するシステムス
    タック方式、各システムコール処理を呼び出しタスクの
    ユーザスタックを使用して実行するユーザスタック方式
    の内のいずれを用いるかを選択可能とすることを特徴と
    する組み込み用リアルタイムオペレーティングシステム
    の再構築方式。
  2. 【請求項2】 前記各システムコール処理の本体となる
    内部処理は、前記システムスタック方式、前記ユーザス
    タック方式の両方式で共有可能な同一のプログラムコー
    ドで実現し、それぞれの方式で異なる処理を行う各シス
    テムコール処理の前処理/後処理のみを前記システムス
    タック方式、前記ユーザスタック方式それぞれ専用のプ
    ログラムコードで実現することを特徴とする請求項1記
    載の組み込み用リアルタイムオペレーティングシステム
    の再構築方式。
  3. 【請求項3】 前記システムスタック方式、前記ユーザ
    スタック方式の両方式で共有可能な同一のプログラムコ
    ード、前記システムスタック方式、前記ユーザスタック
    方式のそれぞれ専用のプログラムコードをコンパイラに
    よりコンパイルすることにより、該コンパイルの結果出
    力されるリロケータブルオブジェクトの形態でそれぞれ
    のプログラムコードをモジュール化して前記利用者に提
    供することを特徴とする請求項2記載の組み込み用リア
    ルタイムオペレーティングシステムの再構築方式。
  4. 【請求項4】 前記システムスタック方式、前記ユーザ
    スタック方式の両方式で共有可能な同一のプログラムコ
    ード、前記システムスタック方式、前記ユーザスタック
    方式のそれぞれの専用のプログラムコードをコンパイラ
    によりコンパイルし、該コンパイルの結果出力されるリ
    ロケータブルオブジェクトをライブラリアンによりライ
    ブラリ化することにより、該ライブラリ化した形態で前
    記各プログラムコードをモジュール化して前記利用者に
    提供することを特徴とする請求項2記載の組み込み用リ
    アルタイムオペレーティングシステムの再構築方式。
  5. 【請求項5】 前記利用者が前記組み込み用リアルタイ
    ムオペレーティングシステムを再構築する際に、前記シ
    ステムスタック方式、前記ユーザスタック方式の両方式
    で共有可能な同一のプログラムコードからなるモジュー
    ルと、前記システムスタック方式専用のプログラムコー
    ドからなるモジュールまたは前記ユーザスタック方式専
    用のプログラムコードからなるモジュールとをリンカに
    よりリンクすることによって、前記組み込み用リアルタ
    イムオペレーティングシステムを再構築することを特徴
    とする請求項3記載の組み込み用リアルタイムオペレー
    ティングシステムの再構築方式。
  6. 【請求項6】 前記利用者が前記組み込み用リアルタイ
    ムオペレーティングシステムを再構築する際に、前記シ
    ステムスタック方式、前記ユーザスタック方式の両方式
    で共有可能な同一のプログラムコードからなるモジュー
    ルと、前記システムスタック方式専用のプログラムコー
    ドからなるモジュールまたは前記ユーザスタック方式専
    用のプログラムコードからなるモジュールとをリンカに
    よりリンクすることによって、前記組み込み用リアルタ
    イムオペレーティングシステムを再構築することを特徴
    とする請求項4記載の組み込み用リアルタイムオペレー
    ティングシステムの再構築方式。
  7. 【請求項7】 前記システムスタック方式、前記ユーザ
    スタック方式の両方式で共有可能な同一のプログラムコ
    ードからなるモジュールは、各システムコールに応じて
    それぞれの内部処理を実行する各システムコール内部処
    理実行モジュールと、前記各システムコール内部処理実
    行モジュールからの要求を受けて前記組み込み用リアル
    タイムオペレーティングシステム内部で管理されるレデ
    ィキュー、ウェイトキューを操作することに応じてタス
    クスイッチ処理が必要な場合には、前記システムスタッ
    ク方式専用のプログラムコードからなるモジュールと前
    記ユーザスタック方式専用のプログラムコードからなる
    モジュールそれぞれで実現されるタスクスイッチ処理を
    呼び出す処理を行なうスケジューリングモジュールとを
    有することを特徴とする請求項2記載の組み込み用リア
    ルタイムオペレーティングシステムの再構築方式。
  8. 【請求項8】 前記システムスタック方式専用のプログ
    ラムコードからなるモジュールは、対応するシステムコ
    ール番号を設定した後にトラップ命令などによりソフト
    ウェア例外を発生することによってシステムコールを発
    行するシステムコール発行モジュールと、ソフトウェア
    例外処理においてまずシステムコールを発行したユーザ
    タスクのコンテキスト情報を対応するタスクコントロー
    ルブロックまたはユーザタスク毎に存在するユーザスタ
    ック上に待避するコンテキスト待避モジュールと、CP
    Uが使用するスタックをそれまで使用していたユーザス
    タックからシステムに一つだけ確保したシステムスタッ
    クに切り替えるシステムスタックへの切替モジュール
    と、設定されたシステムコール番号から呼び出すべき前
    記各システムコール毎の内部処理を検索し、その内部処
    理を呼び出す各システムコール内部処理検索呼出モジュ
    ールと、前記内部処理が終了した後に前記CPUが使用
    するスタックを前記システムスタックから前記ユーザス
    タックに戻すユーザスタックへの切替モジュールと、前
    記ソフトウェア例外処理を終了し、前記ソフトウェア例
    外発生以前のプログラムコードにリターン処理する例外
    処理終了モジュールと、各システムコールのリターン値
    を設定した後にシステムコールを呼び出したユーザプロ
    グラムへリターンする第1のシステムコール終了モジュ
    ールと、前記スケジューリングモジュールから呼び出さ
    れ、次に実行すべきタスクのコンテキスト情報をそのタ
    スクのタスクコントロールボックスまたはユーザスタッ
    クより前記CPUに復帰することによってそのタスクの
    実行を再開する第1のタスクスイッチモジュールとを有
    することを特徴とする請求項2記載の組み込み用リアル
    タイムオペレーティングシステムの再構築方式。
  9. 【請求項9】 前記ユーザスタック方式専用のプログラ
    ムコードからなるモジュールは、排他制御のためにロッ
    ク処理を行なう排他制御用ロックモジュールと、前記各
    システムコール毎の内部処理を呼び出す各システムコー
    ル内部処理呼出モジュールと、前記内部処理が終了した
    後に前記排他制御用ロックモジュールによるロックを解
    除する排他制御用アンロックモジュールと、各システム
    コールのリターン値を設定した後にシステムコールを呼
    び出したユーザプログラムへリターンする第2のシステ
    ムコール終了モジュールと、前記スケジューリング手段
    から呼び出され、現在のコンテキスト情報を対応するタ
    スクコントロールブロックまたはユーザタスク毎に存在
    するユーザスタック上に待避し、次に実行すべきタスク
    のコンテキスト情報をそのタスクのタスクコントロール
    ブロックまたはユーザスタックにより前記CPUに復帰
    することによってタスクスイッチ処理を行う第2のタス
    クスイッチモジュールとを有することを特徴とする請求
    項2記載の組み込み用リアルタイムオペレーティングシ
    ステムの再構築方式。
  10. 【請求項10】 利用者が再構築可能な組み込み用リア
    ルタイムオペレーティングシステムを再構築するための
    プログラムを格納した情報処理装置読取り可能な記憶媒
    体において、前記プログラムは、各システムコール処理
    をシステムに確保された1つのシステムスタックを使用
    して実行するシステムスタック方式の実行モジュール
    と、各システムコール処理を呼び出しタスクのユーザス
    タックを使用して実行するユーザスタック方式の実行モ
    ジュールと、前記組み込み用リアルタイムオペレーティ
    ングシステムの再構築の際に、システムコール処理の実
    現方式として、前記システムスタック方式、前記ユーザ
    スタック方式の内のいずれを用いるかを選択するための
    選択手段とを有することを特徴とする記憶媒体。
  11. 【請求項11】 前記各システムコール処理の本体とな
    る内部処理は、前記システムスタック方式、前記ユーザ
    スタック方式の両方式で共有可能な同一のプログラムコ
    ードで実現し、それぞれの方式で異なる処理を行う各シ
    ステムコール処理の前処理/後処理のみを前記システム
    スタック方式、前記ユーザスタック方式それぞれ専用の
    プログラムコードで実現することを特徴とする請求項1
    0記載の記憶媒体。
  12. 【請求項12】 前記システムスタック方式、前記ユー
    ザスタック方式の両方式で共有可能な同一のプログラム
    コード、前記システムスタック方式、前記ユーザスタッ
    ク方式のそれぞれ専用のプログラムコードは、コンパイ
    ラによるコンパイルの結果出力されるリロケータブルオ
    ブジェクトの形態でそれぞれモジュール化されているこ
    とを特徴とする請求項11記載の記憶媒体。
  13. 【請求項13】 前記システムスタック方式、前記ユー
    ザスタック方式の両方式で共有可能な同一のプログラム
    コード、前記システムスタック方式、前記ユーザスタッ
    ク方式のそれぞれの専用のプログラムコードは、コンパ
    イラによりコンパイルし、該コンパイルの結果出力され
    るリロケータブルオブジェクトをライブラリアンにより
    ライブラリ化することにより、該ライブラリ化した形態
    でモジュール化されていることを特徴とする請求項11
    記載の記憶媒体。
  14. 【請求項14】 前記利用者が前記組み込み用リアルタ
    イムオペレーティングシステムを再構築する際に、前記
    システムスタック方式、前記ユーザスタック方式の両方
    式で共有可能な同一のプログラムコードからなるモジュ
    ールと、前記システムスタック方式専用のプログラムコ
    ードからなるモジュールまたは前記ユーザスタック方式
    専用のプログラムコードからなるモジュールとをリンカ
    によりリンクすることによって、前記組み込み用リアル
    タイムオペレーティングシステムを再構築することを特
    徴とする請求項12記載の記憶媒体。
  15. 【請求項15】 前記利用者が前記組み込み用リアルタ
    イムオペレーティングシステムを再構築する際に、前記
    システムスタック方式、前記ユーザスタック方式の両方
    式で共有可能な同一のプログラムコードからなるモジュ
    ールと、前記システムスタック方式専用のプログラムコ
    ードからなるモジュールまたは前記ユーザスタック方式
    専用のプログラムコードからなるモジュールとをリンカ
    によりリンクすることによって、前記組み込み用リアル
    タイムオペレーティングシステムを再構築することを特
    徴とする請求項13記載の記憶媒体。
  16. 【請求項16】 前記システムスタック方式、前記ユー
    ザスタック方式の両方式で共有可能な同一のプログラム
    コードからなるモジュールは、各システムコールに応じ
    てそれぞれの内部処理を実行する各システムコール内部
    処理実行モジュールと、前記各システムコール内部処理
    実行モジュールからの要求を受けて前記組み込み用リア
    ルタイムオペレーティングシステム内部で管理されるレ
    ディキュー、ウェイトキューを操作することに応じてタ
    スクスイッチ処理が必要な場合には、前記システムスタ
    ック方式専用のプログラムコードからなるモジュールと
    前記ユーザスタック方式専用のプログラムコードからな
    るモジュールそれぞれで実現されるタスクスイッチ処理
    を呼び出す処理を行なうスケジューリングモジュールと
    を含むことを特徴とする請求項11記載の記憶媒体。
  17. 【請求項17】 前記システムスタック方式専用のプロ
    グラムコードからなるモジュールは、対応するシステム
    コール番号を設定した後にトラップ命令などによりソフ
    トウェア例外を発生することによってシステムコールを
    発行するシステムコール発行モジュールと、ソフトウェ
    ア例外処理においてまずシステムコールを発行したユー
    ザタスクのコンテキスト情報を対応するタスクコントロ
    ールブロックまたはユーザタスク毎に存在するユーザス
    タック上に待避するコンテキスト待避モジュールと、C
    PUが使用するスタックをそれまで使用していたユーザ
    スタックからシステムに一つだけ確保したシステムスタ
    ックに切り替えるシステムスタックへの切替モジュール
    と、設定されたシステムコール番号から呼び出すべき前
    記各システムコール毎の内部処理を検索し、その内部処
    理を呼び出す各システムコール内部処理検索呼出モジュ
    ールと、前記内部処理が終了した後に前記CPUが使用
    するスタックを前記システムスタックから前記ユーザス
    タックに戻すユーザスタックへの切替モジュールと、前
    記ソフトウェア例外処理を終了し、前記ソフトウェア例
    外発生以前のプログラムコードにリターン処理する例外
    処理終了モジュールと、各システムコールのリターン値
    を設定した後にシステムコールを呼び出したユーザプロ
    グラムへリターンする第1のシステムコール終了モジュ
    ールと、前記スケジューリングモジュールから呼び出さ
    れ、次に実行すべきタスクのコンテキスト情報をそのタ
    スクのタスクコントロールボックスまたはユーザスタッ
    クより前記CPUに復帰することによってそのタスクの
    実行を再開する第1のタスクスイッチモジュールとを含
    むことを特徴とする請求項11記載の記憶媒体。
  18. 【請求項18】 前記ユーザスタック方式専用のプログ
    ラムコードからなるモジュールは、排他制御のためにロ
    ック処理を行なう排他制御用ロックモジュールと、前記
    各システムコール毎の内部処理を呼び出す各システムコ
    ール内部処理呼出モジュールと、前記内部処理が終了し
    た後に前記排他制御用ロックモジュールによるロックを
    解除する排他制御用アンロックモジュールと、各システ
    ムコールのリターン値を設定した後にシステムコールを
    呼び出したユーザプログラムへリターンする第2のシス
    テムコール終了モジュールと、前記スケジューリング手
    段から呼び出され、現在のコンテキスト情報を対応する
    タスクコントロールブロックまたはユーザタスク毎に存
    在するユーザスタック上に待避し、次に実行すべきタス
    クのコンテキスト情報をそのタスクのタスクコントロー
    ルブロックまたはユーザスタックにより前記CPUに復
    帰することによってタスクスイッチ処理を行う第2のタ
    スクスイッチモジュールとを有することを特徴とする請
    求項11記載の記憶媒体。
JP2001021795A 2001-01-30 2001-01-30 組み込み用リアルタイムオペレーティングシステムの再構築方式および記憶媒体 Pending JP2002229805A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2001021795A JP2002229805A (ja) 2001-01-30 2001-01-30 組み込み用リアルタイムオペレーティングシステムの再構築方式および記憶媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001021795A JP2002229805A (ja) 2001-01-30 2001-01-30 組み込み用リアルタイムオペレーティングシステムの再構築方式および記憶媒体

Publications (1)

Publication Number Publication Date
JP2002229805A true JP2002229805A (ja) 2002-08-16

Family

ID=18887296

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001021795A Pending JP2002229805A (ja) 2001-01-30 2001-01-30 組み込み用リアルタイムオペレーティングシステムの再構築方式および記憶媒体

Country Status (1)

Country Link
JP (1) JP2002229805A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006285718A (ja) * 2005-04-01 2006-10-19 Seiko Epson Corp プロセッサおよびディスパッチ制御方法
JP2007257257A (ja) * 2006-03-23 2007-10-04 Matsushita Electric Ind Co Ltd マルチタスクシステムにおけるタスク実行環境切替え方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006285718A (ja) * 2005-04-01 2006-10-19 Seiko Epson Corp プロセッサおよびディスパッチ制御方法
JP2007257257A (ja) * 2006-03-23 2007-10-04 Matsushita Electric Ind Co Ltd マルチタスクシステムにおけるタスク実行環境切替え方法

Similar Documents

Publication Publication Date Title
JP2692609B2 (ja) マルチタスクのプログラムデバッグ方法とその装置
JP2520543B2 (ja) プログラムの実行を管理する方法及びシステム
US6634023B1 (en) Compile method, exception handling method and computer
US20040199927A1 (en) Enhanced runtime hosting
US20050216701A1 (en) Automatic configuration of a microprocessor
JPH0638234B2 (ja) 変換されたプログラムコードのソース命令不可分性を保持するためのシステムおよび方法
JP2004164554A (ja) プログラム実行監視装置および方法
JP2001202253A (ja) データ処理方法およびデータ処理装置
JP5401561B2 (ja) クラスファイル内にネイティブコードを埋め込むことによる仮想メカニズム内でのプラットフォーム依存ルーチンの適用
JP2007035066A (ja) マルチos構成方法
JPH09114693A (ja) プログラム開発支援装置及びプログラム実行装置
JP2002229805A (ja) 組み込み用リアルタイムオペレーティングシステムの再構築方式および記憶媒体
JP2005521937A (ja) コンピュータオペレーティングシステムにおけるコンテキスト切り替え方法及び装置
US8707306B1 (en) Implementing user-selectable concurrent access protection mechanism in a multi-tasking modeling environment
Gotsman et al. Modular verification of preemptive OS kernels
JP4755371B2 (ja) 計算機システム
JPH0659908A (ja) プログラム実行装置
RU2718235C1 (ru) Архитектура операционной системы для обеспечения поддержки поколений микроядер
JP2004287618A (ja) オペレーティングシステム起動制御方法、およびその方法をコンピュータに実行させるプログラム、ならびにオペレーティングシステム起動制御装置
US20020129229A1 (en) Microinstruction sequencer stack
Haines An open implementation analysis and design for lightweight threads
Djordjević et al. An operating system accelerator
Nácul et al. Phantom: a serializing compiler for multitasking embedded software
JP2003241984A (ja) 複数osローディング方法および複数osローディングプログラム
Rosendahl Green threads in rust

Legal Events

Date Code Title Description
RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20060411

RD05 Notification of revocation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7425

Effective date: 20070626