3

知られているように、実行中のスレッドがプロセッサ コアの数よりも多い場合、スレッドは特定のタイム スロット (量子) でスレッド間で切り替えられます。これは、Win/*nix に当てはまります。しかし、スレッドの切り替えのために実装されているメカニズムは、特定のタイムスロットで起動しているハードウェア割り込みですよね?

この割り込み(IRQ)の数、この時間(タイムスロット)の値を変更/設定できますか、また、コードのパフォーマンス(リアルタイム)にとって重要な部分のために、短時間でこの割り込みをオフにするにはどうすればよいですか( WINAPI/Posix を使用して)?

4

3 に答える 3

4

簡単な答え: 通常はできません。

より長い答え: 重要なタスクがある場合は、そのスレッドの優先度を上げることを試みることができますが、最新の (非リアルタイム) OS ではスレッドが「すべての CPU を使用する」ことを許可していないため、無期限には役に立ちません。機械"。

さらに、任意の割り込みにより、タスクがスケジュールされる可能性があります。タイマーは時間量に基づいてそれを行うものですが、たとえば、別のタスクがネットワーク パケットを待機している場合、そのようなパケットが着信するとそのタスクは実行可能なキューに配置されるため、スケジューラはその時点で実行されます。ポイントし、別のスレッドを実行する時が来たかどうかを判断します(技術的には、スレッドでもネットワークパケット待機スレッドでもない可能性があります)。同様に、スレッドがディスクにスワップアウトされたメモリにアクセスした場合、データがディスクから読み戻されるまで処理を続行できないことは明らかです。そのため、ブロックされたキューに「パーク」され、ランナブルから他のスレッドが保留されます。列。ブロックがディスクから読み取られると、OS は再びスケジュールを変更します。

これを回避する (簡単な) 方法は本当にありません。簡単ではない方法は、ドライバーをいじったり、独自の OS をほとんど作成したりする必要があります。

于 2013-08-29T10:37:25.530 に答える