リアルタイムOS

問題

制御系の組込みシステムで使用されるリアルタイムOSの特徴として,適切なものはどれか。

  • MMUによって仮想記憶制御を行い,データの仮想化を行わなくてはならない。
  • タスクの生成は主に静的に行う。
  • ファイルマネージャ及びメモリプロテクション機能は必須である。
  • ラウンドロビン方式のスケジューリングを用いてシステム全体のスループットの向上を図る。

答え

タスクの生成は主に静的に行う。

解説

リアルタイムオペレーティングシステム

リアルタイムオペレーティングシステム: Real-time operating system;RTOS)は、リアルタイムシステムのためのオペレーティングシステム (OS) である。組み込みオペレーティングシステムに多い。OSの主要な機能である資源管理において、時間資源の優先度に基づく配分と実行時間の予測可能性を提供することに特化している、ないし、そういった機能に力を入れている。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

制御系のリアルタイムOSは、一般的に、処理能力の低いハードウェア上でも高速に動作できるように、必要最低限の機能だけを搭載します。

スケジューリング

RTOSは通常マルチタスクOSで、スケジューリングはタスクの優先度に基づいて行われる。タスクの実行中(割り込みハンドラやOS自身などの実行中でないということ)は、常に、実行可能状態にあるタスクのうち最高優先度のものを実行しなければならない

出典: フリー百科事典『ウィキペディア(Wikipedia)』

ラウンドロビン方式ではなく、優先度に従ってタスクの処理が行われます。

メモリ管理ユニット

メモリ管理ユニット (Memory Management UnitMMU) は、コンピュータハードウェア部品のひとつであり、CPUの要求するメモリアクセスを処理する。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

ハードウェア部品であり、OSの機能ではないので、答えには該当しません。

動的と静的の速度の違い

リアルタイムOSとは少し異なるが、 Cythonを用いて、動的型付け言語のPythonをCに変換することで、どの程度速度が異なるかを検証してみます。

静的型付けでコードを高速化する

ipythonを使います。

In [1]: % load_ext Cython

In [2]: def f(x):
   ...:     return x**2 - x
   ...: 
   ...: def integrate_f(a, b, N):
   ...:     s = 0
   ...:     dx = (b - a)/ N
   ...:     for i in range(N):
   ...:         s += f(a + i * dx)
   ...:     return s * dx
   ...: 

In [3]: %timeit integrate_f(100.0, 100.0, 1000)
518 µs ± 7.41 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

通常の関数の実行は、
518 µs ± 7.41 µs per loop
となりました。

静的な型定義を行い実行してみます。

In [4]: %%cython
   ...: def f(double x):
   ...:     return x ** 2 - x
   ...: 
   ...: def integrate_f(double a, double b, int N):
   ...:     cdef int i
   ...:     cdef double s, dx
   ...:     s = 0
   ...:     dx = (b - a) / N
   ...:     for i in range(N):
   ...:         s += f(a + i * dx)
   ...:     return s * dx

In [5]: %timeit integrate_f(100.0, 100.0, 1000)
87.3 µs ± 373 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

静的な型定義を行うだけで、
87.3 µs ± 373 ns per loop
と、7倍弱速度が向上しています。