0

複数のスレッドで構成されるシステムがあります。たとえば、プロセス A、B、および C であり、これらのプロセスは完全に SDL で記述されており、コンパイル後に最終的に C 言語に変換されます。

同じプロセスを持つ同等のシミュレーション環境もあり、1 つのスレッドのみで実行されますが、これらの各プロセスをシミュレートします。基本的に、プロセス A、B、C のそれぞれが異なるオプション セットで再コンパイルされ、どういうわけかすべてが 1 つのプロセスとして機能します (IBM-SDL シミュレーションの典型)。これは理論的には、実際のプロセスの軽量化されたシステムを表し、すべてが 1 つのプロセスとして機能します。このシミュレーション環境では、次の 3 つのファイルが生成されます。たとえば、Ac Bc と Cc です。明らかに、このシミュレーションでは、プロセスをプリエンプションする余地はありません。メッセージ X がプロセス A に到達すると、A はこのシグナルを完全に処理してから次の状態遷移に進み、次のシグナルがシステムに着信したときにのみ次のプロセスが実行されます。

スレッドなしでこのシミュレーション システムにプリエンプションを実装しようとしています。結局のところ、シミュレーションでは、これらのファイルのそれぞれを (いくつかのスクリプトを介して) 編集することができ、特定の信号セットを次々と実行する過程で可能なプリエンプション ポイントを正確に把握しています。

私の質問は次のとおりです:- 条件付きの goto / break ステートメントを挿入し (各 Ac、Bc、および Cc のすべての行を想定した後)、コードの実行中にあるファイルから別のファイルにジャンプする場合、シミュレートされたスレッド環境を実装しますか?

または、ここで何か不足していますか?

私はそれが非常に幅広い質問であることを知っています.OSの知識はあまりありません. また、そのようなシナリオが機能するには多くの条件が考えられることも知っています。しかし、これらの問題を解決する方法を見つけたとしましょう。私の質問はこれに要約されます:-「スマートな」gotoをシングルスレッド環境の複数のスレッドの代わりとして同等に使用できる場合?? 私はシミュレートされた時間で作業しているので、タイミングは私にとって問題ではありません。システム負荷などは関係ありません。これらの各ファイル Ac、Bc、および Cc の各ステップの後に制御関数呼び出しを追加することを考えていました。この制御関数では、戻るか、他の場所にジャンプして別のファイルから実行を継続するかを確認できます。このようなアプローチでは、どのような実装上の問題に直面するでしょうか?

4

1 に答える 1

1

協調的マルチタスクについて話しているように聞こえますが、これは Windows の最初のバージョンがどのように機能したかです。プロセスは、必要なだけ実行されるだけでなく、OS によってプリエンプトされます。それらは一定期間実行された後、OS に制御を「委譲」し、OS は別のアプリケーションの実行をスケジュールします。

この種のことは、単一のスレッドのコンテキスト内でも機能します。それはファイバーと呼ばれます。繊維は軽量の糸のようなものです。これらは、OS に依存してタスク スイッチを実行するのではなく、協力して別のファイバーに実行を委譲することによって機能します。利点は、タスクの切り替えで通常発生するオーバーヘッドが削減されることです。

于 2012-10-11T04:44:15.277 に答える