2017-05-14 8 views
0

私は、オペレーティングシステムは、以下の方法で使用してスケジューリングを実装することを読みました:CPUは割り込みごとにX ミリ秒を発射ハードウェアタイマーを持っている必要がありますハードウェアタイマーを使用してプロセススケジューリングを実装する唯一の方法はありますか?

  • を。
  • は、タイマ割り込みが起動したら、タイマ割り込みハンドラは、CPUが(私が言う必要がありますね、または別のスレッド )別のプロセス の実行を開始するようになります 命令を実行します。

私の質問は次のとおりです:方法は、単にスケジューリングを実装する唯一の方法を記述していますか?

答えて

2

番基本的には、オペレーティング・システムでマルチスレッドを実現するための2つの基本的な方法があります。

1)Preemtiveマルチタスク

preemtiveマルチタスクでは、あなたのタスクスイッチをトリガするために、割り込みソースをUSWすることができます。ほとんどの場合、長時間実行されているタスクが実行され、他のハードウェアイベントが発生していない場合に、タイマーの内部でタスクが切り替わります。他のハードウェアイベントが発生した場合、ハードウェアイベントの処理を可能にするために優先順位の高いスレッドをブロックするタスクスイッチを行うこともできます。協調マルチタスクで

2)協調マルチタスク

システムコールが実行されるたびに、オペレーティングシステムは、スレッドを切り替えます。これは、アプリケーションが明示的にタスクスイッチ(Windows 3.11、古典的なMac OSなどの初期のマルチタスクシステムで使用されていた歩留まりなど)を明示的にトリガできる特別なシステムコールです。また、ユーザーモード内で完全に協調マルチタスキングを実装することもできます。

今日ほとんどのオペレーティングシステムは、ハイブリッドアプローチを取る - 彼らはハードウェアイベントに反応する(場合には、長時間実行スレッドがシステム・ルーチンを呼び出すことはありませんし、他のI/Oが、これはタイマーだろう起こりません)しかし、彼らはでタスクをも切り替えることができアプリケーションがシステムコールを実行したり、システムが提供するライブラリを呼び出すときには、協力的な方法です。

0

同じ優先度のスレッドまたはプロセス間のタイムスライスコンテキストスイッチには、タイマ割り込みが必要です。いくつかのマルチスレッドプリエンプティブ組み込みオペレーティングシステムの代替方法は、すべてのスレッドに異なる優先順位を付けることです。これにより、タイムスライシングやタイマ割り込みが不要になります。他のスレッドにシグナルを送るためにシステムコールを使用するスレッドに加えて、コンテキストスイッチをトリガするために割り込みを使用することはできますが、タイマ割り込みは必要ありません。

関連する問題