6

私が理解できるように、すべてのOSには、いくつかのタスクを実行し、他のタスクを一時停止する必要があるかどうかを定期的にチェックするためのメカニズムが必要です。

1つの方法は、ある種のタイマーであり、その有効期限が切れると、OSはタスクを実行/一時停止する必要があるかどうかをチェックします。

一般的に、おそらくある種のISRであるARMシステムについて言います。

私の本当の質問は、これを視覚化することしかできず、どこかでそれを見ることができなかったということです。プリエンプション/スケジューリングを処理するコードを実際に見ることができる、無料/オープンのRTOSコードを指すことができますか?

4

3 に答える 3

4

freertos.org。OS全体がオープンソースであり、すぐそこに表示されます。そして、比較対照するための数十の異なるポートがあります。コンテキストスイッチコードについては、portsディレクトリ、port.c、port.asmなどと呼ばれる多くのファイルのいずれかを調べる必要があります。そうです、freertosの場合、すべてのコンテキストスイッチは割り込みで実行されます(ティックタイマーISR、またはその他のSysCall割り込み)。

保存するレジスタのリストとそれらを保存するアセンブリコードはプロセッサフ​​ァミリ間で、場合によっては特定のファミリ内で異なるため、コンテキストスイッチはプロセッサ固有のものです。その結果、各ポートにはこのコード用の個別のファイルがあります。

一方、スケジューリング(実行する次のタスクの選択)は、tasks.cというファイルで実行されます。このファイルは、すべてのポートに共通であり、ポート固有のコードを参照します。

于 2012-07-15T01:08:22.450 に答える
3

RTOSが単に定期的にコンテキストスイッチを実行する場合よりもそうではありません。これがほとんどのGPOSの動作方法です。RTOSでは、スケジューラは任意のスケジューリングイベントで実行されます。これらには、システムティックが含まれますが、メッセージポスト、イベントトリガー、セマフォギブ、ミューテックスロック解除なども含まれます。

ARM Cortex-Mでは、CMSIS3.xにRTOSAPI (完全なRTOS自体ではなく、主にRTOS開発者を対象としています)が含まれています。このソースには、コンテキスト切り替えメカニズムが含まれます。

単純なRTOSの詳細な説明が必要な場合は、µC / OS-II:リアルタイムカーネルまたはもう少し洗練されたµC / OS-III:リアルタイムカーネルを読むことを検討してください。

FreeRTOSはますます人気が高まっていますが、おそらくアーキテクチャ的には少し型破りです。より完全で(スケジューリングカーネルだけでなく、より完全なOSであるという点で)、非常に強力なオプションはeCosです。

于 2012-07-15T08:09:55.477 に答える
1

xv6をご覧ください。
これは RTOS ではなく、学術目的を目的とした単なるスケルトン OS (V6 unix ベース) です。
XV6 のでは、第 4 章を見てください。xv6 のような小さな OS でスケジューリングがどのように行われるかについて、コードとともに説明があります。プロセスを切り替えるために、100msecごとにタイマー割り込みもあります。
コンテキストの切り替えがどのように行われるか、どの情報が保存されるか (プロセスのコンテキスト フレーム)、スケジューラを実行する必要があるときにユーザー モードからカーネル モードへの切り替えがどのように行われるかについてのコードの説明もあります。
最良の部分は、これらの概念を理解するために必要な読書量が、OS の参考書とは異なり、非常に少ないことです:) コードは比較的小さく、実際には、qemu で XV6 を実行して、 sched 、 swtch 、および(このリンクで xv6 を実行する方法)
章を理解するために前の章を読む必要はありません。あまり依存関係はありません。xv6 は struct proc を使用してプロセスを識別し、システム内で現在実行中のすべてのプロセスの ptable を識別します。proc->conext - プロセスの状態 (レジスタ値など) を参照します。これはスケジューラによって保存されます。 . 乾杯 :)

于 2012-07-14T14:29:46.650 に答える