
		TOPPERS/FMP3カーネルの仕様概要

		対応バージョン: Release 3.3
		最終更新: 2023年4月14日

このドキュメントは，TOPPERS/FMP3カーネル（TOPPERS/FMPカーネル Release 
3.X）の仕様概要について説明したものである．TOPPERS/ASP3カーネルに対す
る拡張および変更箇所を中心に説明する．

なお，TOPPERS/FMP3カーネルの詳細な仕様については，「TOPPERS第3世代カー
ネル（ITRON系）統合仕様書」を参照すること．

----------------------------------------------------------------------
 TOPPERS/FMP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Flexible MultiProcessor Kernel

 Copyright (C) 2005-2023 by Embedded and Real-Time Systems Laboratory
             Graduate School of Information Science, Nagoya Univ., JAPAN
 
 上記著作権者は，以下の(1)〜(4)の条件を満たす場合に限り，本ソフトウェ
 ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
 変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
 (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
     権表示，この利用条件および下記の無保証規定が，そのままの形でソー
     スコード中に含まれていること．
 (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
     用できる形で再配布する場合には，再配布に伴うドキュメント（利用
     者マニュアルなど）に，上記の著作権表示，この利用条件および下記
     の無保証規定を掲載すること．
 (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
     用できない形で再配布する場合には，次のいずれかの条件を満たすこ
     と．
   (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
       作権表示，この利用条件および下記の無保証規定を掲載すること．
   (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
       報告すること．
 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
     また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
     免責すること．
 
 本ソフトウェアは，無保証で提供されているものである．上記著作権者お
 よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
 に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
 アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
 の責任を負わない．
 
 $Id: fmp_spec.txt 335 2023-04-18 10:50:40Z ertl-honda $
----------------------------------------------------------------------

○目次

・参考文献
・ドキュメントの位置付け
・FMP3カーネル仕様の概略
・複数のプロセッサのサポート．
・クラスの導入．
・タスクマイグレーション機能の導入．
・タイムイベントハンドラマイグレーション機能の導入．
・スピンロック機能の導入．
・サブ優先度機能の導入．
・その他マルチプロセッサ向けの機能の導入
・一部機能の仕様変更
・TOPPERS組込みコンポーネントシステム（TECS）の扱い

○参考文献

[1] トロン協会: μITRON4.0仕様，Ver.4.02.00，2004年．

[2] トロン協会: μITRON4.0仕様 保護機能拡張（μITRON4.0/PX仕様）,
	Ver.1.00.00，2002年．

[3] TOPPERSプロジェクト: TOPPERS/JSPカーネル ユーザズマニュアル
	Release 1.4.3対応，最終更新: 2007年4月23日．

[4] TOPPERSプロジェクト: TOPPERS新世代カーネル統合仕様書，Release
	1.7.2，最終更新: 2016年2月13日．

[5] TOPPERSプロジェクト: TOPPERS/ASPカーネル ユーザーズマニュアル，
	Release 1.9.3，最終更新: 2017年4月29日．

[6] TOPPERSプロジェクト: TOPPERS第3世代カーネル（ITRON系）統合仕様書，
	Release 3.6.0，最終更新: 2023年3月11日

[7] TOPPERSプロジェクト: TOPPERS/FMPカーネル ユーザーズマニュアル，
	Release 1.4.0，最終更新: 2017年2月20日．

○ドキュメントの位置付け

このドキュメントでは，TOPPERS/FMP3カーネル（TOPPERS/FMPカーネルRelease 
3.X．以下，FMP3カーネル）の仕様の概要について，ASP3カーネルに対してど
のような拡張および変更を行ったかという観点から記述する．

○FMP3カーネル仕様の概略

TOPPERS/FMPカーネルの仕様は，TOPPERS/ASPカーネルに対して以下のマルチプ
ロセッサシステム用の拡張機能を加えたものである．

・複数のプロセッサのサポート．
・クラスの導入．
・タスクマイグレーション機能の導入．
・タイムイベントハンドラマイグレーション機能の導入．
・スピンロック機能の導入．
・サブ優先度機能の導入．
・その他マルチプロセッサ向けの機能の導入
・一部機能の仕様変更

○複数プロセッサのサポート

FMPカーネルは複数のプロセッサで構成されているシステムをサポートする．
サポートするプロセッサ数に上限は設けない．

(1)プロセッサID

プロセッサIDは，1から連続した番号プロセッサに割り付けたものであり，プ
ロセッサを指定する必要があるシステムコールで用いる．例えばマイグレーシ
ョンAPIでのプロセッサ指定には，この番号を用いる．各プロセッサのプロセ
ッサIDは，プロセッサINDEX + 1 の値となる．共通部では，プロセッサINDEX
からプロセッサIDを取得するマクロを提供する．

(2)マスタプロセッサ

システム中の特定の1個のプロセッサを示し，起動時と終了時に他のプロセッ
サと区別して扱われる．どのプロセッサをマスタプロセッサとするかは，ター
ゲット依存で決定される．マスタプロセッサ以外のプロセッサをスレーブプロ
セッサと呼ぶ．

(3) システム状態

マルチプロセッサ対応カーネルでは，システム状態の多くをプロセッサ毎に持
つことになる．具体的には，スタンダードプロファイルにおいてプロセッサ毎
に持つ状態は，以下の通りである．

  ・実行状態のタスク
  ・カーネル動作状態と非動作状態
  ・全割込みロック状態と全割込みロック解除状態
  ・CPUロック状態とCPUロック解除状態
  ・割込み優先度マスク
  ・ディスパッチ禁止状態とディスパッチ許可状態
  ・ディスパッチ保留状態
  ・スピンロック取得状態

(4) タイムイベント処理とそれに依存して行う処理

タイムイベント処理は，1つないし複数のプロセッサで実施可能である．タイ
ムイベント処理を実施するプロセッサをタイムイベント処理プロセッサと呼ぶ
．

システム中の1つのプロセッサはタイムマスタプロセッサとなり，タイムイベ
ント処理プロセッサでないプロセッサに割り付けられているタスクが時間待ち
となった場合は，タイムマスタプロセッサが管理する．

(5) CPU例外ハンドラ

CPU例外ハンドラは，プロセッサ毎に設定する．コンフィギュレーションファ
イルにおけるCPU例外ハンドラの定義(DEF_EXC)の記述は，後述するいずれかの
クラスに属するように記述する必要がある．

(6) 割込みハンドラ/割込サービスルーチン

割込みハンドラ/割込みサービスルーチン基本的には，いずれかのプロセッサ
で受け付けるように静的に設定する．

(7) タスクスケジューリング

タスクは，いずれかのプロセッサに割り付けられている．そして，プロセッサ
毎に，そのプロセッサに割付けられたタスクに対して，優先度ベーススケジュ
ーリングを行う．

(8)プロセッサを跨いだシステムコールのサポート

オブジェクトを対象としたシステムコールは，一部を除いて，システム中の全
てのオブジェクトを対象として実行できる．

○クラスの導入

(1) クラス

マルチプロセッサに対応するために用いるカーネルオブジェクトの集合を，ク
ラス（class）と呼ぶ．

クラスは，共通の性質を持ったカーネルオブジェクトの集合であり，システム
には複数のクラスが定義されている（プロセッサ = クラスではない）．カー
ネルオブジェクトは，いずれか1つのクラスに属する．カーネルオブジェクト
は属するクラスを動的に変更することはできない．

クラスは次の属性を持ち，ターゲット依存部において，クラス毎に定義されて
いる．

  1.処理単位の初期割付けプロセッサ
    ・プロセッサIDを指定する．
  2.処理単位の割付け可能プロセッサ
    ・プロセッサIDのビットパターンを指定する
      （プロセッサIDが1のプロセッサをLSBに対応させる)
  3.その他の管理情報

クラスは，1から連続する正の番号で識別する．TCLS_SELF（＝0）により，呼
び出した処理単位が所属するのと同じクラスを指定することができる．

(2) オブジェクトのクラス指定

マルチプロセッサ対応カーネルでは，オブジェクトを登録する静的APIを，そ
のオブジェクトが属するクラスの囲みの中に記述する．

  CLASS(1){
    CRE_TSK(TASK1, { TA_NULL....});
    ...
  }

○ タスクマイグレーション機能

タスクは，タスクマイグレーションAPIを呼び出すことにより，プロセッサへ
の割付けを動的に変更することが可能であり，これをマイグレーションと呼ぶ．

(1) タスクマイグレーションAPI

	mig_tsk			タスクのマイグレーション
	mact_tsk		タスクのマイグレーションと起動

mig_tsk の対象タスクは，自タスクが割付けられたプロセッサと同一のプロセ
ッサに割り付けられたタスクに制限されている．

(2) 割付け可能プロセッサ

クラスの割付け可能プロセッサの設定により，処理単位がマイグレーションす
ることが可能なプロセッサ（割付け可能なプロセッサ）を限定することが可能
である．

○ タイムイベントハンドラマイグレーション機能

ローカルタイマ方式の場合，タイムイベントハンドラ（周期ハンドラ，アラー
ムハンドラ）のマイグレーションをサポートする．

(1) タイムイベントハンドラマイグレーションAPI

	msta_cyc		周期ハンドラのマイグレーション
	msta_alm		アラームハンドラのマイグレーション

いずれのAPIもマイグレショーンのさい，タイムアウト時刻をリセットする．

○スピンロック機能

プロセッサ間の排他制御機能としてスピンロック機能を導入した．スピンロッ
クはネストして取得することはできない．

(1) スピンロックAPI

	loc_spn			スピンロックの取得
	unl_spn			スピンロックの返却
	iunl_spn		スピンロックの返却（非タスクコンテキスト）
	try_spn			スピンロックの取得（ポーリング）
	ref_spn			スピンロックの状態参照

(2) スピンロック取得状態

スピンロックを取得すると，スピンロック取得状態となる．スピンロック取得
状態中は，そのプロセッサに対する外部割込み、及びタスク切り替えを禁止と
する。

○サブ優先度機能の導入

ASP3カーネルでは拡張パッケージとして提供されていた，サブ優先度機能が標
準で導入した．

(1) サブ優先度API

	chg_spr			タスクのサブ優先度の変更

○ その他のマルチプロセッサ向けの機能

マルチプロセッサ向けの機能として以下の機能が導入された．

(1) システム状態管理機能

	get_pid			プロセッサIDの取得
	mrot_rdq		タスクの優先順位の回転（他プロセッサ）
	mget_lod		対象指定での実行できるタスクの数の参照
	mget_nth		対象指定での指定した優先順位のタスクIDの参照

(2) システム構成管理機能

初期化ルーチンと終了処理ルーチンをそれぞれクラスに所属しないグローバル
なルーチンとクラスに所属しないローカルなルーチンに分ける．

初期化ルーチンの場合，まずマスタプロセッサでグローバル初期化ルーチンが，
実行された後，ローカル初期化ルーチンが各プロセッサで実行される．

終了処理ルーチンの場合，まずローカル終了処理ルーチンが各プロセッサで実
行された後，グローバル終了処理ルーチンがマスタプロセッサで実行される．


○一部機能の仕様変更

(1) ter_tsk

対象タスクは，自タスクと同じプロセッサに割り付けられているタスクに限ら
れる．対象タスクが自タスクと異なるプロセッサに割り付けられている場合に
は，E_OBJエラーとなる．

また，システムコールの処理時間の上限が定まらないため，使用にあたっては，
注意が必要である．

(2) ref_tsk

prcidに，対象タスクの割付けプロセッサのID番号が返される．

(3) CRE_CYC

グローバルタイマ方式を用いている場合で，生成する周期ハンドラの所属する
クラスの割付け可能プロセッサが，システム時刻管理プロセッサのみでない場
合には，E_RSATRエラーとなる．

(4) CRE_ALM

グローバルタイマ方式を用いている場合で，生成するアラームハンドラの属す
るクラスの割付け可能プロセッサが，システム時刻管理プロセッサのみでない
場合には，E_RSATRエラーとなる．

(5) cfg_int

CFG_INTの記述が，対象割込み要求ラインに対して登録された割込みサービス
ルーチン（または対象割込み番号に対応する割込みハンドラ番号に対して登録
された割込みハンドラ）と異なるクラスの囲み中にある場合には，E_RSATRエ
ラーとなる．

(6) def_inh

登録する割込みハンドラの属するクラスの初期割付けプロセッサが，その割込
みが要求されるプロセッサでない場合には，E_RSATRエラーとなる．

(7) def_exc

登録するCPU例外ハンドラの属するクラスの初期割付けプロセッサが，そのCPU
例外が発生するプロセッサでない場合には，E_RSATRエラーとなる．

(8) DEF_ICS

非タスクコンテキスト用スタック領域はプロセッサ毎に確保する必要がある．
DEF_ICSにより設定する非タスクコンテキスト用スタック領域は，非タスクコ
ンテキスト用スタック領域が属するクラスの初期割付けプロセッサが使用する．
そのプロセッサに対してすでに非タスクコンテキスト用スタック領域が設定さ
れている場合には，E_OBJエラーとなる．

(9) ATT_INI

クラスに属さないグローバル初期化ルーチンはマスタプロセッサで実行され，
クラスに属するローカル初期化ルーチンはそのクラスの初期割付けプロセッサ
により実行される．

(10) ATT_TER

クラスに属さないグローバル終了処理ルーチンはマスタプロセッサで実行され，
クラスに属するローカル終了処理ルーチンはそのクラスの初期割付けプロセッ
サにより実行される．

○ オブジェクトの配置場所指定

以下に示すカーネル内のデータ構造の配置場所を指定することが可能である．
指定は，ターゲット依存部のコンフィギュレータテンプレートファイルで行う．

・タスクスタック
・データキューのバッファ
・優先度データキューのバッファ
・固定長メモリープールのメモリ領域
・固定長メモリープールの管理ブロック
・非タスクコンテキスト用スタック
・アイドル処理用スタック
・タイムイベントヒープ

○TOPPERS組込みコンポーネントシステム（TECS）の扱い

ASP3カーネルにおいては，デバイスドライバやシステムログ機能などのシステ
ムサービスを，TOPPERS組込みコンポーネントシステム（TECS）を用いて実装
している．一方，FMP3カーネルにおいては，現状はTECSをサポートしていない
．

以上
