langEnglish
ホーム > INtime > システムコール
システムコール
Windows従来のWIN32APIを使用したWindowsアプリケーションはGUIアプリケーションとして利用します。INtimeを導入しますと、NTX-APIが加えて利用可能になります。
制御・計測処理はINtimeカーネル上で動作するINtimeアプリケーションとして開発を行い、GUIアプリケーションはNTX-APIによってデータ交換・イベント交換を要求できます。
OSEM
NTXアプリケーション   INtimeアプリケーション

INtime API
リアルタイム性能を100%発揮するために、INtimeアプリケーションはINtimeシステムコールをいつでもコールできます。
また、リアルタイム性を考慮のうえ再設計されている付属ANSI-Cライブラリがコールできます。
INtime API
C++ クラスライブラリ
INtimeアプリケーションの開発は、C++言語でも可能です。
付属しているC++クラスライブラリは、INtimeオブジェクトごとにクラス化されいるので、直感的にわかりやすいプログラミングを可能とします。
C++ クラスライブラリ

NTX API
WindowsアプリケーションにはWIN32システムコールに加えて、NTXシステムコールが実装されます。
NTXシステムコールによってWindowsアプリケーションはINtimeシステムコールの一部を自由にコールできるようになります。
NTXシステムコールを利用することで、INtimeアプリケーションとWindowsアプリケーションの間でデータ交換や、イベント交換、共有メモリアクセスなどが実現できます。
その後自由な描画処理を開発することができます。
NTX API
安定したシステムコールパフォーマンス
WindowsアプリケーションとINtimeアプリケーションをNTXによって接続したとき、データ交換/イベント交換に要する時間を確定的にできます。
下図はWindowsアプリケーションからINtimeアプリケーションに対するイベント送信~受信に要した時間(青色)と、INtimeアプリケーションからWindowsアプリケーションに対するイベント送信~受信に要した時間(桃色)を示しています。
スレッド優先度の関係で青色(一般的に制御処理への要求)は確定的(100マイクロ秒未満)、桃色(一般的に描画要求)は変動する(1ms未満)可能性があることを示しています。
システムコールパフォーマンス

INtime iWin32 API
1. iWin32についての概要
1-1. iWin32 APIとは
iWin32 APIとは 一般的に使用されているマイクロソフトWindows API (Win32 API)の新しいサブセットであり、INtimeリアルタイム拡張機能に対応しているAPIです。
INtime APIは、もともと独立したINtime環境での稼動中プロセスからINtime機能にアクセスするために設計されたものであり、意図的に32bit Windowsプログラミングで使用されるWin32 APIと類似するように作られてはいますが、同一ではありませんでした。
Windows環境に精通している開発者にとっては、INtime APIを使用するにあたり、1から学習しなくてはならないという手間がありました。
この手間を省き、従来の思想をそのままINtimeリアルタイムアプリケーションの開発に移行できるのが、このiWin32 APIです。
1-2. 含まれる関数について
Win32の完全なサブセットと、リアルタイムアプリケーションをWindowsプラットフォーム上で実行するために必要なリアルタイム拡張ファンクションコールが含まれています。
INtime には、独自のリアルタイム API 機能がありますが、この新しいiWin32 APIでは、次のような馴染みのある Microsoft Win32 構成 を提供しています(プロセス、スレッド、相互排除、クリティカルセクション、セマフォ、イベント、構造化例外処理(SEH)、ファイルと割込み処理、共用メモリ、およびタイマー)。
さらにiWin32 API は、INtime API と併用する事が可能であり、従来のINtime 思想を移行する事ができます。
1-3. iWin32 APIの種類について
次の表を参照して下さい。
iWin32 API
1-4. WindowsアプリケーションとiWin32プロセスの通信方法
Windowsアプリケーション(*.EXE)とiWin32プロセス(*.RTA)の通信方法は、従来のNTX APIに加え、iWin32x APIと呼ばれる関数を使用できます。
これらの関数はCまたはC++のプログラムからのみ使用でき、APIはiWin32 APIのサブセットを提供します。
1-5. iWin32x APIの種類について
次の表を参照して下さい。
iWin32x API

2. リアルタイム移行について
2-1. リアルタイムへ移植するためには
Windowsプロセスから、リアルタイムプロセスに移行する手順は次の通りです。
  1. リアルタイムコードの決定
    INtime環境に移行しなければならない処理箇所を定めます。主に時間的制約が要求される個所や、ダイレクトにI/Oする個所がリアルタイムコードになります。
  2. 通信の設計
    Windowsプロセス、INtimeプロセス間の通信を設計します。WindowsとINtimeは同じ物理メモリを使っていますが、アドレス空間は互いに保護されており、通常では参照できない仕組みになっているため、データの受け渡し方法が必要になってきます。INtimeにはデータ通信方法がいくつも用意されているため、処理に合った方式をとる事が望まれます。
  3. リアルタイムコードの移行
    リアルタイムにする機能をリアルタイムプロセスに移行する必要があります。 リアルタイムプロセスは例外を除き、新規に作成し移行します。Visual C++よりINtimeウィザードを使用して作成する方法が最も容易に骨格を作成する事ができます。
  4. INtime通信とWindows通信の確立
    リアルタイムプロセスにプロセス間通信手段を設計した手法で追加します。また、既存のWindowsプロセスにも同様に、このプロセス間通信手段を追加します。これで、WindowsプロセスとINtimeプロセスとの通信が確立されます。
  5. INtimeプロセスの開始と終了
    INtimeプロセスの開始方法、終了方法を追加します。通常、Windowsプロセスが起動すると共にINtimeプロセスが開始し、Windowsプロセスが終了する時にINtimeプロセスも終了するように設計します。
2-2. 既存のWindows単独システム構成からINtime リアルタイム構成へ移行する流れについて
要求する精度の問題から、既存のWindowsだけで構成されたシステムより、INtime リアルタイムへの移行をする場合、まずは構成されているシステムを2つに分ける必要があります。
INtimeは、厳密なリアルタイム性を持つがゆえに GUI を持っていないため、表示処理の部分はWindowsに残して、時間的な厳密さが要求される個所やハードウェアI/O処理等の制御処理をINtime へ移植します。
表示処理(Windows)側と制御処理(INtime)側で、データのやり取りが必要な場合には、共有メモリを確保、参照するなど処理を加える必要があります。
また、この共有メモリの書き込み、読み込みが排他的に行うように制御したい場合には、ミューテックス等を使用し、排他制御を加える必要があります。
※ GUI ・・・ Graphic User Interface。ユーザーとのやり取りする機構を指す
2-3. INtime リアルタイムを導入して、新規にシステムを構築する場合について
新規に構想する場合、 2.2 と同様に大きく分けて表示処理と制御処理を設計し、表示処理部分をWindows、制御処理部分をINtimeで作成します。
データ通信方法も 2.2と同様で 、共有メモリを使用し、排他制御・同期等をとるのであれば、ミューテックスやセマフォを用いて制御します。
INtimeコーディングについては、iWin32 APIを使用する事で従来の思想をそのまま活用できますので容易に行える事でしょう。
2-4. RTXよりINtimeへ移行する場合について
このiWin32 APIには、RTX APIと同じAPIが含まれています。
そのため、わざわざiWin32 APIに置き換えるという作業がなく、スムーズな移行が行えます。