Privacy Policy Cookie Policy Terms and Conditions リアルタイムオペレーティングシステム - Wikipedia

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

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

リアルタイムオペレーティングシステム(RTOSReal-time operating system)は、リアルタイムアプリケーションのために開発されたオペレーティングシステムである。

OSの本質である資源管理のうち、時間資源の保護および実行時間の予測可能性を提供することに特化したものを指す。 RTOSは、実行コンテキストを保持するオブジェクト(タスクもしくはスレッドと呼ばれる事が多い。以下タスクで統一する)と、タスク間の同期通信機構を提供する。 同期通信機構により特定のタスクに待ち状態が発生したときのスケジューリングを行うのも一般的なOSと同様RTOSの仕事であるが、このスケジューリング規則にRTOSの大きな特色がある。

RTOSに要求される一般的な要求指標の一例として以下のようなものが挙げられる。

  • ユーザアプリケーションから、待ちが発生しないサービスコールを呼出した場合に要する最悪値
  • ハードウェア割込みが発生してから、処理ルーチンを呼出すまでの最悪値
  • 高優先度のタスクが確実に実行されることを保証するスケジューリング規則

全ては、時間制約を守ることが最優先される。


目次

[編集] 設計上の特徴

RTOSの設計方針は以下の2種類に大別される。

タイムシェアリング型設計では必要以上に頻繁にタスクを切り替えるが、より予測しやすいマルチタスク環境を提供し、ユーザーがマシンを単独使用しているという幻想を抱かせ易い。古いCPUでは、タスク切り替えには時間がかかり、その間CPUは何も直接的に意味のある仕事ができなかった。そのため、初期のOSでは不要なタスク切り替えを可能な限り排除してCPU時間を無駄遣いしないようにしていた。最近のCPUのタスク切り替え時間は劇的に短縮されたため、RTOSも優先度駆動型のプリエンプティブスケジューリングだけでなく、ほぼ必ずタイムシェアリング型のスケジューリングを実装している。

[編集] スケジューリング

RTOSのスケジューリングはタスクの優先度に基づいて行われ、最高優先度の実行可能タスクを実行する。また一般に、汎用のOSのようにタスクの優先度をその実行時間によって自動的に変化させたりしない。また、現に実行中のタスクよりも高い優先度のタスクが実行可能となった場合、即座にタスク切り替えを行う。これを「プリエンプション」と呼び、カーネル動作中であってもクリティカルセクション以外ではプリエンプション可能である。このようなカーネルを「プリエンプティブ・カーネル」と呼ぶ。

典型的な設計では、タスクには「実行中」「実行可能」「ブロック」の3状態がある。ほとんどのタスクはブロック状態でいることが多い。CPUは1度に1つのタスクを実行できる(実行中状態となるタスクはCPU毎に最大1つ)。単純なシステムでは実行可能なタスクのリストも短く、せいぜい2個から3個のタスクが載っていることが多い。

スケジューラの設計は重要である。実行可能タスクのリストはスケジューラのクリティカルセクション(プリエンプションが禁止され、場合によっては全割り込みも不可となる)で消費する時間を最小にするよう設計される。ただし、データ構造の選択は実行可能リスト上の最大タスク数にも依存する。

実行可能リスト上のタスク数が少ないなら、単純な双方向線形リストが最適である。状況によって実行可能タスク数が増えるなら、優先度に従ってソートされたリストを使用し、最高優先度のタスクを探すためにリスト全体を検索する必要がないようにすべきである。そうすると、あるタスクを実行可能タスクのリストに追加する際にリスト全体を探索して、そのタスクより低い優先度のタスクを見つけ、その前の位置にタスクを追加(挿入)する必要が生じる。この探索期間中ずっとプリエンプションを禁止してはいけない。探索中の真にクリティカルな期間だけプリエンプションを禁止することで、例えば探索中に割り込みが発生してより高優先度のタスクが実行可能となったら、現に実行可能リストに挿入しようとしている低優先度タスクよりも先に実行可能リストに挿入して実行するようにしなければならない。

新たな実行可能タスクをキューに登録し、最高優先度タスクの状態をリストアするのにかかる時間が非常に重要な応答時間である(フライバック時間とも呼ばれる)。よく設計されたRTOSでは、新たなタスクの実行可能キューへの挿入には(キュー上のエントリ毎に)3~20命令かかり、最高優先度タスクのリストアには5~30命令かかる。20MHzのMC68000プロセッサでは、2個のタスクが実行可能な状態でのタスク切り替え時間は20マイクロ秒である。100MHzのARMプロセッサでは数マイクロ秒となる。

高度なリアルタイムシステムでは、リアルタイムのタスク以外に非リアルタイムタスクも共存するため、実行可能リストは非常に長くなる可能性がある。そのようなシステムでは、スケジューラの実行可能リストを単純な線形リストで実装するのでは不十分である。このため、優先度毎に実行可能リストを分割することで探索処理を不要にすることもある。

[編集] タスク間通信とリソース共有

マルチタスクシステムでは、複数のタスク間でデータやハードウェアリソースを共有するという問題に対処しなければならない。一般に2つのタスクが同時に同じデータや同じハードウェアリソースにアクセスすることは危険である(ここで「危険」と言うのは、タスクが複数のデータの集合体を更新中だった場合などに、結果の一貫性が保てず、予期しない結果を生じることを意味する。他のタスクがそのデータ集合体にアクセスするのは、更新が始まる前か更新を完了した後でなければならない)。これを解決する一般的方法として以下の3種類があげられる。

汎用OSではユーザープログラムが割り込みをマスクすることはできないのが一般的である。というのもCPUモードによってユーザーができることは限られているためである。最近のCPUは割り込みマスクのレジスタや命令をユーザーモードでアクセスできないようにしている。しかし、組み込みシステムやRTOSの多くはアプリケーションをカーネルモードで実行可能であり、システムコールを効率化したり、OSの介入なしで動作環境の制御ができるようになっている。

シングルプロセッサシステムでは、アプリケーションをカーネルモードで実行して割り込みマスクの制御も可能なら、共有リソースへの同時アクセスを防ぐ方法としてはそれが最も効率的(オーバヘッドが小さい)である。割り込みがマスクされていると、実行中タスクはCPUを独占することができ、他のタスクや割り込みが制御を奪うことはできない。そのためクリティカルセクションは効率的に保護される。タスクがクリティカルセクションを抜けたとき、割り込みマスクが解除され、保留されていた割り込みがあれば、その処理が実行される。割り込みマスクは、クリティカルセクションの期間が割り込み処理遅延時間の要求指標を守る範囲内でなければならない。一般にこの方法はクリティカルセクションがソースコードでほんの数行でループが含まれていない場合のみ適用される。ハードウェアのビットマップレジスタを複数のタスクが操作する場合、この方法による排他が理想的である。

クリティカルセクションがもっと長かったりループを含んでいる場合、セマフォやOS提供のプロセス間通信機能を使用しなければならない。そのような機能はシステムコールとして実装されているのが一般的で、完了時にOSのディスパッチ処理が実行される。そのため、割り込みマスクと比較すると非常に長時間を要する可能性がある。しかし、クリティカルセクションが長い場合、割り込み遅延時間の問題があるので選択の余地はない。

2値セマフォは、ロック状態かアンロック状態である。ロックされている場合、タスクはそのセマフォを待つためのキューに登録される。一般にタスクはセマフォの待ち時間のタイムアウト値を設定できる。セマフォに関する問題として、優先順位の逆転デッドロックがよく知られている。

「優先順位の逆転」では、高優先度タスクが低優先度タスクの持つセマフォを待つため、低優先度のタスクが先に処理される。一般的な解決策としては優先度継承優先度上限プロトコルがある。「デッドロック」は複数のセマフォを獲得しようとする複数のタスクが存在する場合に発生する。デッドロックはセマフォの獲得順を厳密に設計することで回避するのが一般的である。ただし、同種のリソースを2個同時に獲得しなければならない場合、それぞれのセマフォの獲得順を厳密に決定することは困難である。その場合、例えばセマフォを獲得できないときにビジーウェイトもブロックもしないでエラーを返すプリミティブを用意するなどの方式がある。

タスク間のリソース共有の別の方法として「メッセージ渡し」がある。この場合、あるリソースは直接的には特定の1つのタスクのみが管理し、他のタスクがそのリソースにアクセスしたい場合は、管理タスクにメッセージを送信する。この方式でも優先順位の逆転やデッドロックは発生する可能性がある。しかし、システムが単純であればデッドロックが発生しないように設計可能であるため、性能的にはセマフォよりも不利だが、動作を予測し易い。

[編集] 割り込みハンドラとスケジューラ

割り込みハンドラは最高優先度のタスクもブロックして動作する。また、RTOSはスレッド待ち時間を可能な限り最小化しなければならないので、割り込みハンドラの処理は可能な限り最小限にされている。割り込みハンドラは対応するハードウェアとのやりとりを可能な限り後回しにする。一般に必ず必要な処理として割り込みの受信確認(acknowledge)か割り込みのディセーブル(割り込みハンドラから戻るまでに再度割り込まれないようにする)がある。割り込みハンドラは低優先度ですべき処理をキューに入れる(デバイスドライバタスクを実行可能にする)。スケジューラには割り込みハンドラから任意のタスクを実行可能状態にする機能が備わっていることが多い。

[編集] メモリアロケーション

RTOSの動的メモリアロケーションは、汎用OSよりも要求される条件が厳しい。

第一にアロケーションの速度が重要である。一般にメモリアロケーション処理では不定長のフリーなメモリブロックのリストを探索して必要なサイズのメモリブロックを得るが、RTOSでは一定時間以内にメモリアロケーションを行う必要があるため、この方式は採用できない。

また、空き領域を分割して使用していくと、空き領域の断片化(フラグメンテーション)が発生する。これによって空きメモリ自体は十分あるのにメモリを確保できなくなってプログラムが停止してしまう可能性が出てくる。デスクトップ型コンピュータでは、それなりの頻度でリブートが行われるため、ある程度の断片化は許容される。しかし、組み込みシステムでは何年もリブートしないで動作することもあるため、断片化は許容できない。

固定サイズのメモリブロックを割り当てる方式が、単純な組み込みシステムでは非常にうまく機能する。

[編集] 応用分野

小規模な組み込みシステムなどに用いられることが多いが、デスクトップ分野やPDAなど比較的大規模な オペレーティングシステムのマイクロカーネルとして利用されるケースもある。 たとえば BTRON仕様OSである「超漢字」は、マイクロカーネルとしてμITRON仕様OSを利用している。

また RT-Mach や Linux のように、デスクトップ分野で使われるオペレーティングシステムに対して、 リアルタイムスケジューラを提供するケースもある。

[編集] APIから見た分類

RTOSが提供するAPIの系統はPOSIX仕様互換であるものと、独自のものに大きく分かれる。 独自のもののうち、日本国内ではITRON仕様に準拠するものが大きなシェアを持っている。

WindowsCEもバージョン3.0辺りからリアルタイム性を有しており、独自APIを持つOSに分類される。

[編集] リアルタイムオペレーティングシステムの例

[編集] 関連

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu