
第4回 リアルタイムプロセス(RTP) 前編
今回より2回に渡りVxWorks6.xよりあらたに導入されたリアリタイムプロセスについて、解説します。リアルタイムプロセス(RTP)はVxWorksで初めてユーザ空間でアプリケーションを実行することができるテクノロジーです。
1. リアルタイムプロセス(RTP)概要
図1は通常のタスク、割り込みサービスルーチン、カーネルとの関係を表したものです。RTPはカーネルプロセスや他のRTPとの間に保護境界を作り、直接アクセスができないのでデータやプログラム領域の破壊を防ぐことができます。他のRTPとは共有ライブラリ、共有データという共有リソースを排他制御をしながら利用することで通信することができます。また、従来のタスクやISRとはメッセージキューなどのオブジェクトをパブリック化することで通信をすることもできます。

プログラムを作るにはリアルタイムプロジェクトを作り、アプリケーションをインポートします。これはサンプルソースです。ご覧のとおり、RTPは必ずmain()で始まり、いままでのプログラムと同じようにタスクを作成することができます。

3. メモリマップとユーザ空間
従来のVxWorksはすべてカーネル空間で動作していました。RTPの導入によりユーザ空間でアプリケーションを実行できるようになりました。図2のようにRTPを使うとカーネルヒープの領域にRTPで作成したメモリーを動的にマッピングします。MMUを使えば保護領域を設定してテキストは読込専用にすることができるので、悪いプログラムによる破壊を防ぐことができます。RTPではMMUは必須ではありませんので、MMUをオフにすることでパフォーマンスが悪化しないようにすることもできます。

RTPを実行するには以下4つの方法があります。
- カーネルシェルからコマンドで起動
rtpSp “host:c:/install_dir /target/usr/root/PPC32diab/bin/myVxApp.vxe first second third” - Workbenchから起動
RTPファイルを選択後、サブメニューから実行またはデバッグ - ブート時に自動起動
usrRtpAppInit.cにrtpSpawn ()を追加して自動的に起動させる。 - アプリケーションやカーネルタスクからプログラミングで起動
rtpSpawn (args[0], args, NULL, 100, 0x10000, 0, VX_FP_TASK);
RTPはxxxx.vxeファイルというオブジェクトができますので、このファイルをvxWorks上のファイルシステムに置くことによってCMDモードのシェルでUnixのように起動することもできます。
[vxWorks]# /romfs/myVxApp.vxe first second
次回は、CMDモードのデバッグやRTPの活用方法などをご紹介いたします。
Technical Tips一覧 »ページの先頭へ戻る »

