リアルタイムオペレーティングシステム
RTOSは通常マルチタスクOSで、スケジューリングはタスクの優先度に基づいて行われる。タスクの実行中(割り込みハンドラやOS自身などの実行中でないということ)は、常に、実行可能状態にあるタスクのうち最高優先度のものを実行しなければならない。実行中のタスクよりも優先度が高いタスクが実行可能状態になった場合は、即座にタスク切り替えを行う。すなわち、RTOSはいわゆる「プリエンプティブ・マルチタスク」(プリエンプションを参照)でなければならない。さらにRTOSの場合は、カーネルが優先度の低いタスクによるシステムコールを実行中の場合でクリティカルセクションでなければ、優先度の高いタスクを実行する「プリエンプティブ・カーネル」でなければならない。
汎用OSのように、タスクの消費時間により優先度を変化させることは通常おこなわない。ただし、時間制約のない低優先度のタスクを複数同居させる場合など、それらのタスクでは優先度を共通とし、自発的にCPUを手放す協調的マルチタスクや、タイマ割込みにより順番に切り替えるタイムシェアリング的なスケジューリングを同居させることもある。
典型的な設計では、タスクには「実行中」「実行可能」「ブロック」の3状態がある。
ほとんどのタスクはブロック状態でいることが多い。CPUは1度に1つのタスクを実行できる(実行中状態となるタスクはCPU毎に最大1つ)。単純なシステムでは実行可能なタスクのリストも短く、せいぜい2個から3個のタスクが載っていることが多い。
スケジューラの設計は重要である。実行可能タスクのリストはスケジューラのクリティカルセクション(プリエンプションが禁止され、場合によっては全割り込みも不可となる)で消費する時間を最小にするよう設計される。ただし、データ構造の選択は実行可能リスト上の最大タスク数にも依存する。
実行可能リスト上のタスク数が少ないなら、単純な双方向線形リストが最適である。状況によって実行可能タスク数が増えるなら、優先度に従ってソートされたリストを使用し、最高優先度のタスクを探すためにリスト全体を検索する必要がないようにすべきである。そうすると、あるタスクを実行可能タスクのリストに追加する際にリスト全体を探索して、そのタスクより低い優先度のタスクを見つけ、その前の位置にタスクを追加(挿入)する必要が生じる。この探索期間中ずっとプリエンプションを禁止してはいけない。
小規模な組み込みシステムなどに用いられることが多いが、デスクトップ分野やPDAなどの比較的大規模なものから、果てはミッションクリティカルなサーバーや人工衛星にまで使われている。
特にマルチコアや汎用ハードウェアに対応したLinuxのリアルタイムカーネルはニッチな市場の業界で多く使われている。たとえばマルチコアMIPSと共に通信業界で使われたMontavista Linux CGEや、リアルタイム・オーディオ処理のためのデスクトップ環境のUbuntu Studio、金融業界においては金融取引システムや高頻度取引にまで使われている。