SOLIDSOLIDソリューション ターゲット依存の設定や、OS・ツール の環境設定は自動化してほしい
RTOS環境でも、Linuxのようなファイル分割やメモリプロテクション機能を利用したいという声は多く寄せられています。SOLIDでは、プロセッサが持つMMUを活用し、広い仮想メモリ空間にメモリ資源を分散配置することで、実行ファイルを分割したローダー機能や実行時メモリプロテクション機能を実現しました。
しかし、MMUを組み込み環境で使おうとすると、MMUの設定にはある程度の専門知識が必要となる事、MMU設定プログラムはデバッグが難しい(プロセッサが命令をフェッチできない状態に陥るなど)という点から、SOLIDではMMUの設定プログラムを自動生成する仕組みを設けています。
SOLID-OSでは、「コアサービス」と名付けた一連のランタイムがIDEと密接に連携することで、多くの便利な機能を実現しています。MMUによるメモリ管理機能は、コアサービスの大きな特徴のひとつです。
SOLIDでは、プロジェクト全体をモジュール単位に分割・分散配置した管理が簡単に実施できます。
Linuxであれば、仮想アドレスで空間を多重化し、なおかつデマンドページングによって動的にメモリ割り当てを行うといった機能がありますが、RTOSの場合はリアルタイム性(再現性)を重視するので、空間の多重化は使用しません。SOLIDのアプローチとしては、単一の大きな仮想アドレス空間にプログラムを分散配置するのにMMUを利用しています。
SOLID-IDEでは、メモリマップデザイナというエディタを使用して、簡単にメモリ空間の設定・確認ができます。メモリマップデザイナが扱う専用ファイルから、設定プログラムがビルド時に自動生成され組込まれるので、ユーザはプログラムを記述する必要はありません。
また、物理空間のメモリ配置をIDE上で表示することで、何か問題が起きた時でもプログラムがどうなっているかをユーザーに分かりやすく伝える工夫もしています。
メモリマップデザイナでメモリ空間のレイアウトを設定した後は、それぞれのメモリ空間内でのメモリ領域属性を設定します。ここでもSOLIDは簡単な設定だけで属性の指定が出来ます。まず、生成されたプログラムについては、自動的にセクションに応じたプロテクションを設定します。
さらにSOLID では、よりわかりやすく整理された 関数(API) を使用することで、書き込み不可属性や実行可能属性など、メモリ領域の属性の詳細設定が可能です。メモリ属性の設定の他にも、仮想アドレス空間内にメモリ領域を割り当てる関数や、メモリ領域を解放する関数、メモリマップデザイナで設定したメモリ空間の名前を用いて仮想アドレスとサイズを取得する関数など、メモリ管理用の関数も用意しています。
SOLIDでは「コアサービス」と名付けた一連のランタイムがターゲットシステムの一部に常駐し、主としてターゲットのリソースメモリ/MMU、割り込み、タイマ等)の管理と、ユーザーへの補助(ローダー、デバッグ)機能をつかさどっています。
コアサービスは言わば「BIOSのようなもの」であり、シンプルなAPI群を使ってリソースを操作することでユーザーにとって面倒な処理を一手に引き受けています。コアサービスでは、上位レイヤのAPIを規定しており、様々な機能が提供されます(例:MMU対応のメモリ管理系API)。また、実装するための下位レイヤの要求仕様も明確になっているので、新しいH/W環境においてRTOSプラットフォームを短時間に立ち上げる事が可能です。
※ コアサービスは京都マイクロコンピュータの造語です。