補足説明
補足説明1:リアルタイムとは
「リアルタイム」という用語はコンピュータに関連する多くの文脈で使われますが、誤用もしばしば見られます。たとえば、処理速度の速いシステムを表現するために「リアルタイム」という言葉を使うケースがよくあります。しかし、外部のイベントにすばやく反応できることは、リアルタイムシステムの正確な描写ではありません。
また他のケースでは、イベント発生後にチェックを行ってイベントを検出するシステムに対して、イベント発生時にすぐ応答するシステムのことを「リアルタイム」と表現することもあります。一般的なインスタントメッセージングシステムは、本来そうではないのにリアルタイムと呼ばれているアプリケーションの一例です。このシステムの場合、長短さまざまなレイテンシによってメッセージに遅延が生じてもシステムの正確性には影響しないため、リアルタイムアプリケーションではありません。インスタントメッセージシステムでは、メッセージが最終的に配信されれば、期待どおりの動作が行われたことになります。
システムスループットの計測においても、リアルタイムという言葉の使い方にしばしば混乱が見られます。スループットは、ソフトウェアシステムが特定の時間内で処理できる要求、イベント、またはその他の操作の数を表します。スループットの高いシステムは、リアルタイム的な状況で利用されると非常にリアルタイムに近い感覚をユーザーに与えますが、本当の意味でリアルタイムなシステムあるとは限りません。
たとえば、毎秒数千件の要求に対応できるシステムでも、一部の要求の処理では1秒かかる場合があります。たとえ要求の大半を低レイテンシで処理できたとしても、このような高レイテンシの要求は異常値(許容可能な応答時間を超える値)をもたらします。このような異常値の強さや出現数は予測できないため、このような高スループットシステムはリアルタイムシステムではありません。
実際、高速コンピューティングとリアルタイムコンピューティングでは目指すところが異なります。高速コンピューティングの目的は特定のタスクセットの平均応答時間を最小化することですが、リアルタイムコンピューティングの目的は各タスクのタイムクリティカルな要件を個別に満たすことです。Giorgio C. Buttazzoの著書『Hard Real-Time Computing Systems』(Springer Science and Business Media, 2005)に書かれている「水深平均15cmの河で溺れた男」の逸話が参考になります。
リアルタイムシステムとは
リアルタイムシステムを特徴付けるのは、デッドライン(実行を完了しなければならない最長時間)の存在です。これとは対照的に、非リアルタイムシステムの場合、応答が速いことやパフォーマンスが高いことは歓迎されますが、デッドラインはありません。多くの場合、リアルタイムソフトウェアのニーズは、リアルタイムソフトウェアを開発するためのフレームワークとなるリアルタイムオペレーティングシステムや同期プログラミング言語のコンテキストで扱われます。
リアルタイムシステムは大きく2つに分けられます。1つは時間制限を超えた場合に不正確な結果や不確定な結果を返すもので、「ハードリアルタイム」または「即時リアルタイム」と呼ばれます。もう1つはそのような結果を返さないもので、「ソフトリアルタイム」と呼ばれます。ハードリアルタイムシステムでは、操作の正確性は操作の論理的な正確性だけでなく操作の実行時間にも依存します。「デッドラインが短いシステム=ハードリアルタイムシステム」という誤った認識もよく見られますが、デッドラインの長短はハードかソフトかの区別に関係ありません。「デッドラインを超えた場合にシステムが異常な状態になる」というのがハードリアルタイムの要件です。
ソフトリアルタイムシステムは、一般的に、同時アクセスが難しく、なおかつ絶えず変化する環境で複数の接続システムを最新の状態に保つ必要がある場合に利用されます。ソフトリアルタイムのシナリオでは、瞬間的なぶれは許容されますが、予測性は必要とされます。
簡単にまとめれば、ハードリアルタイムシステムではイベントへの制限時間内での応答が求められますが、ソフトリアルタイムシステムではデッドラインからの逸脱がある程度まで許容されます。
リアルタイムシステムの実現とは、大まかに言えば、現実の世界で起きるイベントに応答して、計測可能なデッドラインに達する前にタスクを実行するシステムを実現することです。デッドラインの計測単位がマイクロ秒であれ日であれ、デッドラインの前にタスクが完了しさえすれば、それはリアルタイムのシステムです。別の言い方をすれば、現実世界でのイベント発生時点(たとえば物体がセンサーの前を横切ったとき、市場データフィードティックが到着したときなど)からコードの処理完了時点までに時間制限を設けるということです。リアルタイムシステムに求められる確定性を実現するためには、このデッドラインを守る予測可能かつ確定的な機能が必要になります。
補足説明2:Java RTS仮想マシンとSolaris 10
Java RTSは、RTSJ準拠のJava仮想マシンです。以下の特徴があります。
- Java 5に100%準拠
- ハードとソフトの両方のリアルタイム要件を求めるアプリケーションに対応
- 真の高分解能タイマーを提供
- 真のスレッド優先順位(優先順の最も高いリアルタイムスレッドがシステム全体でも最も高い優先順位を持つ)を実装
- 既存のコードを不合理に変更することを強いない
- Java言語の構文を変更しない
- リアルタイムJavaアプリケーションの開発、デバッグ、および開発をサポートするツールを提供
現在、Java RTSはSolaris 10のみで動作します。これは、Solarisが真のリアルタイムオペレーティングシステムだからです。Solarisでは、ほとんど最初の段階から、特殊なカーネル機能によってリアルタイムのプロセスとスレッドがサポートされています。Solarisは以下のリアルタイム機能をサポートしています。
- 高分解能タイマー
- プリエンプティブなスケジューリング
- リアルタイムプロセッサのネイティブなサポート
- リアルタイムスレッド用の特殊なスレッド優先順位クラス
- リアルタイムスレッド専用のカーネルディスパッチキュー
- 実行時にブロックされるリアルタイムスレッド動作
- 確定的で有限かつ保証されたディスパッチレイテンシ
- 優先順位の継承
- プロセッサセット
- 割り込み遮断
最後の2つについては、詳しい説明が必要です。Solarisでは、プロセッシングコアのサブセットを1セットにグループ化したプロセッサセットを定義できます。たとえば、4コアシステムにおいて2つのコアを含むプロセッサセットを定義し、このセット上でJava RTSアプリケーションを実行することができます。以降、このプロセッサセット内の2つのコアは、指定したJava RTSアプリケーションだけを実行します。全システムの一部を特定のアプリケーションの専用にするようなものです。
さらに、割り込み遮断によって、プロセッサセット内のコアは割り込み処理から遮断されます。その結果、2つのコアはJava RTSアプリケーションの実行だけに集中し、低レベルのシステム割り込みを含め、他のシステムスレッドから割り込まれることはなくなります。
補足説明3:指値/逆指値注文取引
指値とは
指値とは、特定の価格以下で有価証券を買う(または特定の価格以上で売る)ための注文です。指値を使うと、顧客は取引が執行される価格をある程度制御できます。
買い指値は、指値と同額かそれ以下の価格でのみ執行されます。たとえば、投資家が株を買いたいが1株あたり20ドルより多くは払いたくない場合、この株を最高20ドルで買う指値注文を出します。成行き注文ではなく指値注文を出すことにより、株価が急騰した場合も30ドルで買ってしまう事態には陥りません。反対に、売り指値は、指値と同額かそれ以上の価格でのみ執行されます。
株価が指値に達しないと、指値注文は執行されません。手続きが複雑になるため、証券会社によっては指値注文の執行には成行き注文よりも高い手数料を課しています。
逆指値とは
逆指値(損切注文とも呼ばれる)は、有価証券の価格が指定した値段(逆指値)に達したときに買う、または売る注文です。指定した値段になると、逆指値注文は成行き注文として登録されます。逆指値は、投資家が市場の変動に直撃されるのを抑えるために利用されます。
売り逆指値は、価格が指値より安くなった後で、できるだけ有利な価格で売りたい場合に使用します。売り逆指値は、常に現在の株価を下回ります。たとえば、投資家が現在50ドルの値が付いている株を保有していて、株価の下落を懸念している場合、40ドルでの売り逆指値の注文を証券会社に出します。なんらかの理由で株価が40ドルまで下落すると、証券会社は次に付いた値で株を売却します。これで、投資家の損失は一定の限度で抑えられます(逆指値が購入時の価格以下の場合)。または、投資家の利益の少なくとも一部は確保されます(購入したときから逆指値注文を出したときまでの間に株価が上昇していた場合)。
買い逆指値は、一般に空売りの損失を一定の限度に抑えるため(またはそれまでの利益を守るため)に使用されます。買い逆指値は、常に現在の株価を上回ります。たとえば、投資家が株を空売り(株を借りて現在の株価ですぐに売ること)していて、借りた株をより安い価格で返して差額をポケットに入れようと株価の下落を期待している場合、株価が上がり過ぎたときに損失を出すのを避けるために買い逆指値を使うことがあります。
逆指値を使うと、顧客が株価の動きを積極的に監視する必要はありません。ただし、株価が逆指値に達すると注文が自動的に出されるため、株価の短期間の上下で逆指値が働いてしまう可能性があります。逆指値に達すると、逆指値注文は成行き注文になります。刻一刻と変化する市場では、取引が執行される価格が逆指値と大きく異なる場合があります。
証券取引所で売買される株や先物では、店頭取引(OTC)市場に比べてはるかに高い頻度で逆指値が使われます。