2017-04-07 4 views
0

Sparc V8アーキテクチャでは、N個のレジスタウィンドウがあります。一般に、コンテキスト切り替え中のRTOSはレジスタをプッシュしてポップします。これらのレジスタウィンドウのそれぞれをスレッドの1つとして使用することは可能ですか(または既に行われていますか)。これにより、レジスタウィンドウのシフトやPSRのプッシュ/ポップなど、次のスレッドに切り替えることができます!したがって、コンテキスト切り替え時間を節約し、より速いコンテキスト切り替え周波数を可能にする。Sparc V8 RTOSクエリ

+1

実装には3〜32個のレジスタウィンドウがありますが、これはこのアプローチを使用する可能性のあるタスクの数に制限があります。 V8 Archマニュアルでは、コンテキスト切り替えについて説明しています。実装にはそれに従うことが期待されます。 V9 Archのマニュアルでは、コンテキストスイッチをさらに高速化するための設計の改良について述べています。 – Clifford

+0

私はあなたのポイントを知っています。私の質問は、可能かどうかです。それが超高速コンテキスト切り替えを可能にするかどうかである。 – Prakhar

+0

隣接するレジスタウィンドウ間に重複があることを忘れないでください。 1つのウィンドウの出力レジスタは、次の入力レジスタになります。したがって、各タスクにレジスタウィンドウを割り当てても、各コンテキストスイッチに入力レジスタ(およびグローバル)を保存/復元する必要があります。 –

答えて

0

多分、スレッドの意味とスレッド数によって異なります。

レジスタウィンドウは、関数呼び出しと戻り値の考え方に基づいて構築されており、ハードウェアとソフトウェアのトラップで明確に定義された操作を実装しています。あなたのスレッドがラウンドロビンファッションなどで呼び出される関数であれば、あなたの "スレッド"から呼び出される他の関数と同様に、このように切り替えられます。つまり、レジスタウィンドウの数よりも多くの機能を持つと、レジスタファイルにページングされるようになります。

OSとユーザーコードの観点からは、おそらくファームウェアで理解しているように、トラップとして実装されているようにレジスタウィンドウに入るときと何かをするときに何が起こるのかを制御できません。あなたがSparcを動作させていないのは、それが何をしているのかという理由で、スペックに定義されているからです。

レジスタウィンドウ全体のポイントは常に高速コンテキスト切り替えですが、TLBなどのSparcハードウェアの他の側面は、アドレス空間がフラットなSparc MCUのコンテキスト...ええ、それは本当に速いでしょう。