													TOPPERS Confidential
		TOPPERSプロジェクト 設計メモ
		HRP2カーネルとATK2における標準ROM/RAMリージョンの設定方法について

		作成者: 高田広章（名古屋大学）
		最終更新: 2013年2月12日

○メモの位置付け

このメモは，TOPPERS/HRPカーネルRelease 2（以下，HRP2カーネルと呼ぶ）と，
TOPPERS/ATK2（以下，ATK2と呼ぶ）における標準ROM/RAMリージョンの設定方法
の仕様変更およびその実装方法について検討するものである．まず，HRP2カー
ネルに関して主に記述し，それとの関係で，ATK2に関しても検討する．

○標準ROM/RAMリージョンの用途と現状の設定方法

ATT_MOD／ATA_MODによりオブジェクトモジュールを登録する際に，書込みアク
セスを行わない標準のセクション（text，rodata等）は標準ROMリージョン，書
込みアクセスを行う標準のセクション（data，bss等）は標準RAMリージョンに
配置される．標準ROMリージョンは，dataセクション（厳密には，TA_MEMINI属
性を設定したメモリオブジェクト）の初期化データを配置する先としても使わ
れる．

標準ROM/RAMリージョンの設定は，現状（HRP2カーネル Release 2.0.0）では，
ATT_REGによりメモリリージョンを登録する際に，メモリリージョン属性
（TA_STDROM，TA_STDRAM）を指定することにより行う．

マルチプロセッサ対応カーネルにおいては，クラス毎に標準ROM/RAMリージョン
を設定できる仕様となっている（未実装）．クラス毎の標準ROM/RAMリージョン
が設定されていない場合には，共通の標準ROM/RAMリージョンが使用される．た
だし，クラス毎の標準ROM/RAMリージョンに設定できるのは，クラス専用のメモ
リリージョン（クラスの囲みの中に記述したATT_REGにより登録したメモリリー
ジョン）のみである．

○現行仕様の問題点

前節の最後で述べた通り，現行のTOPPERS新世代カーネル仕様では，クラス専用
のメモリリージョンのみが，クラス毎の標準ROM/RAMリージョンに設定すること
ができる．つまり，複数のクラスに対して，同じ標準ROM/RAMリージョンを設定
することができないという制限がある．この制限により，設定の自由が制約さ
れているように思われる．

○提案する仕様変更案

上記の問題を解決するために，標準ROM/RAMリージョンを設定する静的APIを導
入することを提案する．

静的APIの具体的な仕様は次の通り．

　［標準メモリリージョンの定義］
	DEF_SRG("標準ROMリージョン名", "標準RAMリージョン名")
	※ SRGは"Standard Memory Region"を示す（より良い名前を募集中）

DEF_SRGをクラスの囲みの外側に記述すると，共通の標準ROM/RAMリージョンを
定義したことになり、クラスの囲みの内側に記述すると，そのクラスの標準
ROM/RAMリージョンを定義したことになる．クラスの標準ROM/RAMリージョンが
定義されていない場合には，共通の標準ROM/RAMリージョンが使われる．この仕
様変更により，クラス専用のメモリリージョン（ATT_REGをクラスの囲みの中に
記述する機能）は不要となる．

ATK2では，共通の標準ROM/RAMリージョンをシステム全体で1つ登録するための
コンテナと，コアの標準ROM/RAMリージョンをコア毎に登録するためのコンテナ
を用意する．

○dataセクションの初期化データの配置先

dataセクションの初期化データの配置先は，dataセクションの初期化をどのプ
ロセッサが行うかに依存する．

すべてのdataセクションの初期化をマスタプロセッサが行う場合には，初期化
データの配置先は，共通の標準ROMリージョンで良いと考えられる．まず最初の
段階では，このアプローチを採用する．

それに対して，dataセクションの初期化を，それが属するクラス（ATK2ではコ
ア．以下同じ）の初期割付けプロセッサで行う場合には，そのクラスの標準
ROMリージョンに配置すべきと考えられる．

○共有リード専有ライト領域の扱い

共有リード専有ライト領域の扱いは，クラスの標準ROM/RAMリージョンに配置せ
ず，共通の標準ROM/RAMリージョンに配置する．これは，クラスの標準ROM/RAM
リージョンに配置すると，異なるクラスの共有リード専有ライト領域の番地が
連続しなくなり，MPUのメモリ領域の使用数が多くなってしまうためである。

○ショートセクションの扱い

ショートセクションをどこに配置するかは，グローバルポインタ（GP）の扱い
と関連する．

現状では，標準ライブラリのことを考え，すべてのプログラムでGPは同じ値に
なっていることを想定している．そのため，ショートセクションは1箇所にまと
めて配置しなければならず，共通の標準RAMリージョンに配置するのが妥当であ
る．当面は，このアプローチを採用する．

異なる保護ドメイン間で変数を共有する状況は少ないと考えると，保護ドメイ
ン毎にショートセクションを1箇所にまとめ，保護ドメイン毎にGPを異なる値に
する方法も考えられる．この場合，異なる保護ドメイン間で共有する静的変数
（共有ライブラリが用いる静的変数を含む）は，ショートセクションに配置し
てはならない．この制限を守ることは，ユーザ責任とせざるをえないと考えら
れるため，採用するとしてもオプションとすべきであろう．

○標準ROM/RAMリージョンを同じメモリリージョンにできるか？

現状の仕様では，1つのメモリリージョンを，標準ROMリージョンと標準RAMリー
ジョンの両方に設定することはできない．この制約は，標準ROMリージョンは
TA_NOWRITE属性のあるメモリリージョン，標準RAMリージョンはTA_NOWRITE属性
のないメモリリージョンでなければならないとしていることから生じている．

一方，プログラムをRAMに展開してから実行するような場合には，TA_NOWRITE属
性がないメモリリージョンを標準のROMリージョンに指定したい場合も考えられ
る．そこで，標準ROMリージョンはTA_NOWRITE属性のあるメモリリージョンでな
ければならないという制約を外す手も考えられる．この制約を外しても現状の
コードが正しく動作するかについては，確認が必要である．

○ATT_MOD／ATA_MODの拡張

現行仕様では，ATT_MOD／ATA_MODは，標準のセクションを標準のROM/RAMリージョ
ンに配置することとしているが，配置先のメモリリージョンを，ATT_MOD／
ATA_MODのパラメータに追加する拡張も考えられる．ただし，現状ではニーズを
聞いていないため，当面はこの仕様を実装しないこととする．

以上
